diff --git a/.cloudbuild.yaml b/.cloudbuild.yaml index ba1df16eaf..fa73a51a14 100644 --- a/.cloudbuild.yaml +++ b/.cloudbuild.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -180,7 +180,7 @@ steps: # * manifests/kustomize/base/metadata/base/metadata-grpc-deployment.yaml # * test/tag_for_hosted.sh - name: 'gcr.io/cloud-builders/docker' - args: ['pull', 'gcr.io/tfx-oss-public/ml_metadata_store_server:0.25.1'] + args: ['pull', 'gcr.io/tfx-oss-public/ml_metadata_store_server:1.0.0'] id: 'pullMetadataServer' - name: 'gcr.io/cloud-builders/docker' args: ['pull', 'gcr.io/ml-pipeline/minio:RELEASE.2019-08-14T20-37-41Z-license-compliance'] @@ -192,10 +192,10 @@ steps: args: ['pull', 'gcr.io/cloudsql-docker/gce-proxy:1.14'] id: 'pullCloudsqlProxy' - name: 'gcr.io/cloud-builders/docker' - args: ['pull', 'gcr.io/ml-pipeline/argoexec:v2.12.9-license-compliance'] + args: ['pull', 'gcr.io/ml-pipeline/argoexec:v3.1.6-patch-license-compliance'] id: 'pullArgoExecutor' - name: 'gcr.io/cloud-builders/docker' - args: ['pull', 'gcr.io/ml-pipeline/workflow-controller:v2.12.9-license-compliance'] + args: ['pull', 'gcr.io/ml-pipeline/workflow-controller:v3.1.6-patch-license-compliance'] id: 'pullArgoWorkflowController' # Tag for Hosted - SemVersion to Major.Minor parsing @@ -246,9 +246,6 @@ images: - 'gcr.io/$PROJECT_ID/ml-pipeline-kubeflow-tf-trainer-gpu:$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/ml-pipeline-kubeflow-tfjob:$COMMIT_SHA' -# Images for the GCP generic pipeline components -- 'gcr.io/$PROJECT_ID/ml-pipeline-gcp:$COMMIT_SHA' - # Images for the local components - 'gcr.io/$PROJECT_ID/ml-pipeline-local-confusion-matrix:$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/ml-pipeline-local-roc:$COMMIT_SHA' diff --git a/.dockerignore b/.dockerignore index 4c078637c8..f1301cf1ef 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,6 @@ .git bower_components dist -node_modules +**/node_modules +backend/build +v2/build diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 26e14d76b9..0ccf4f0f9c 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -23,9 +23,3 @@ Resolves # * `test: fix CI failure. Part of #1234` Use `part of` to indicate that a PR is working on an issue, but shouldn't close the issue when merged. --> -- [ ] Do you want this pull request (PR) cherry-picked into the current release branch? - - [Learn more about cherry-picking updates into the release branch](https://github.com/kubeflow/pipelines/blob/master/RELEASE.md#cherry-picking-pull-requests-to-release-branch). - diff --git a/.github/semantic.yml b/.github/semantic.yml new file mode 100644 index 0000000000..5db40d64c1 --- /dev/null +++ b/.github/semantic.yml @@ -0,0 +1,27 @@ +# Configuration for https://github.com/zeke/semantic-pull-requests +# +# Kubeflow Pipelines PR title convention is documented in +# https://github.com/kubeflow/pipelines/blob/master/CONTRIBUTING.md#pull-request-title-convention + +# Always validate the PR title, and ignore the commits. +titleOnly: true + +# TODO: define a list of valid scopes. +# scopes: +# - scope1 +# - scope2 +# ... + +# By default types specified in commitizen/conventional-commit-types is used. +# See: https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json +types: + - feat + - fix + - docs + - style + - refactor + - perf + - test + - build + - chore + - revert diff --git a/.gitignore b/.gitignore index bc24f46a31..91a722c9ce 100644 --- a/.gitignore +++ b/.gitignore @@ -104,3 +104,6 @@ docs/_build # python sdk package *.tar.gz + +# Copy from kubeflow/frontend +coverage/ diff --git a/.readthedocs.yml b/.readthedocs.yml index 4fe9c7e445..f69ccd0c66 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -5,4 +5,4 @@ sphinx: python: version: 3.7 install: - - requirements: sdk/python/requirements.txt \ No newline at end of file + - requirements: sdk/python/requirements.txt diff --git a/.release.cloudbuild.yaml b/.release.cloudbuild.yaml index 33f8fe9bc5..7bf282cc18 100644 --- a/.release.cloudbuild.yaml +++ b/.release.cloudbuild.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -40,7 +40,6 @@ steps: "ml-pipeline-kubeflow-tfjob" "ml-pipeline-local-confusion-matrix" "ml-pipeline-local-roc" - "ml-pipeline-gcp" ) for image in "${images[@]}" do @@ -260,14 +259,14 @@ steps: # * manifests/kustomize/base/metadata/base/metadata-grpc-deployment.yaml # * test/tag_for_hosted.sh - name: 'gcr.io/cloud-builders/docker' - args: ['pull', 'gcr.io/tfx-oss-public/ml_metadata_store_server:0.25.1'] + args: ['pull', 'gcr.io/tfx-oss-public/ml_metadata_store_server:1.0.0'] id: 'pullMetadataServer' - name: 'gcr.io/cloud-builders/docker' - args: ['tag', 'gcr.io/tfx-oss-public/ml_metadata_store_server:0.25.1', 'gcr.io/ml-pipeline/google/pipelines/metadataserver:$TAG_NAME'] + args: ['tag', 'gcr.io/tfx-oss-public/ml_metadata_store_server:1.0.0', 'gcr.io/ml-pipeline/google/pipelines/metadataserver:$TAG_NAME'] id: 'tagMetadataServerForMarketplace' waitFor: ['pullMetadataServer'] - name: 'gcr.io/cloud-builders/docker' - args: ['tag', 'gcr.io/tfx-oss-public/ml_metadata_store_server:0.25.1', 'gcr.io/ml-pipeline/google/pipelines-test/metadataserver:$TAG_NAME'] + args: ['tag', 'gcr.io/tfx-oss-public/ml_metadata_store_server:1.0.0', 'gcr.io/ml-pipeline/google/pipelines-test/metadataserver:$TAG_NAME'] id: 'tagMetadataServerForMarketplaceTest' waitFor: ['pullMetadataServer'] - id: 'tagMetadataServerForMarketplaceMajorMinor' @@ -277,8 +276,8 @@ steps: args: - -ceux - | - docker tag gcr.io/tfx-oss-public/ml_metadata_store_server:0.25.1 gcr.io/ml-pipeline/google/pipelines/metadataserver:$(cat /workspace/mm.ver) - docker tag gcr.io/tfx-oss-public/ml_metadata_store_server:0.25.1 gcr.io/ml-pipeline/google/pipelines-test/metadataserver:$(cat /workspace/mm.ver) + docker tag gcr.io/tfx-oss-public/ml_metadata_store_server:1.0.0 gcr.io/ml-pipeline/google/pipelines/metadataserver:$(cat /workspace/mm.ver) + docker tag gcr.io/tfx-oss-public/ml_metadata_store_server:1.0.0 gcr.io/ml-pipeline/google/pipelines-test/metadataserver:$(cat /workspace/mm.ver) docker push gcr.io/ml-pipeline/google/pipelines/metadataserver:$(cat /workspace/mm.ver) docker push gcr.io/ml-pipeline/google/pipelines-test/metadataserver:$(cat /workspace/mm.ver) @@ -479,14 +478,14 @@ steps: docker push gcr.io/ml-pipeline/google/pipelines-test/cloudsqlproxy:$(cat /workspace/mm.ver) - name: 'gcr.io/cloud-builders/docker' - args: ['pull', 'gcr.io/ml-pipeline/argoexec:v2.12.9-license-compliance'] + args: ['pull', 'gcr.io/ml-pipeline/argoexec:v3.1.6-patch-license-compliance'] id: 'pullArgoExecutor' - name: 'gcr.io/cloud-builders/docker' - args: ['tag', 'gcr.io/ml-pipeline/argoexec:v2.12.9-license-compliance', 'gcr.io/ml-pipeline/google/pipelines/argoexecutor:$TAG_NAME'] + args: ['tag', 'gcr.io/ml-pipeline/argoexec:v3.1.6-patch-license-compliance', 'gcr.io/ml-pipeline/google/pipelines/argoexecutor:$TAG_NAME'] id: 'tagArgoExecutorForMarketplace' waitFor: ['pullArgoExecutor'] - name: 'gcr.io/cloud-builders/docker' - args: ['tag', 'gcr.io/ml-pipeline/argoexec:v2.12.9-license-compliance', 'gcr.io/ml-pipeline/google/pipelines-test/argoexecutor:$TAG_NAME'] + args: ['tag', 'gcr.io/ml-pipeline/argoexec:v3.1.6-patch-license-compliance', 'gcr.io/ml-pipeline/google/pipelines-test/argoexecutor:$TAG_NAME'] id: 'tagArgoExecutorForMarketplaceTest' waitFor: ['pullArgoExecutor'] - id: 'tagArgoExecutorForMarketplaceMajorMinor' @@ -496,20 +495,20 @@ steps: args: - -ceux - | - docker tag gcr.io/ml-pipeline/argoexec:v2.12.9-license-compliance gcr.io/ml-pipeline/google/pipelines/argoexecutor:$(cat /workspace/mm.ver) - docker tag gcr.io/ml-pipeline/argoexec:v2.12.9-license-compliance gcr.io/ml-pipeline/google/pipelines-test/argoexecutor:$(cat /workspace/mm.ver) + docker tag gcr.io/ml-pipeline/argoexec:v3.1.6-patch-license-compliance gcr.io/ml-pipeline/google/pipelines/argoexecutor:$(cat /workspace/mm.ver) + docker tag gcr.io/ml-pipeline/argoexec:v3.1.6-patch-license-compliance gcr.io/ml-pipeline/google/pipelines-test/argoexecutor:$(cat /workspace/mm.ver) docker push gcr.io/ml-pipeline/google/pipelines/argoexecutor:$(cat /workspace/mm.ver) docker push gcr.io/ml-pipeline/google/pipelines-test/argoexecutor:$(cat /workspace/mm.ver) - name: 'gcr.io/cloud-builders/docker' - args: ['pull', 'gcr.io/ml-pipeline/workflow-controller:v2.12.9-license-compliance'] + args: ['pull', 'gcr.io/ml-pipeline/workflow-controller:v3.1.6-patch-license-compliance'] id: 'pullArgoWorkflowController' - name: 'gcr.io/cloud-builders/docker' - args: ['tag', 'gcr.io/ml-pipeline/workflow-controller:v2.12.9-license-compliance', 'gcr.io/ml-pipeline/google/pipelines/argoworkflowcontroller:$TAG_NAME'] + args: ['tag', 'gcr.io/ml-pipeline/workflow-controller:v3.1.6-patch-license-compliance', 'gcr.io/ml-pipeline/google/pipelines/argoworkflowcontroller:$TAG_NAME'] id: 'tagArgoWorkflowControllerForMarketplace' waitFor: ['pullArgoWorkflowController'] - name: 'gcr.io/cloud-builders/docker' - args: ['tag', 'gcr.io/ml-pipeline/workflow-controller:v2.12.9-license-compliance', 'gcr.io/ml-pipeline/google/pipelines-test/argoworkflowcontroller:$TAG_NAME'] + args: ['tag', 'gcr.io/ml-pipeline/workflow-controller:v3.1.6-patch-license-compliance', 'gcr.io/ml-pipeline/google/pipelines-test/argoworkflowcontroller:$TAG_NAME'] id: 'tagArgoWorkflowControllerForMarketplaceTest' waitFor: ['pullArgoWorkflowController'] - id: 'tagArgoWorkflowControllerForMarketplaceMajorMinor' @@ -519,8 +518,8 @@ steps: args: - -ceux - | - docker tag gcr.io/ml-pipeline/workflow-controller:v2.12.9-license-compliance gcr.io/ml-pipeline/google/pipelines/argoworkflowcontroller:$(cat /workspace/mm.ver) - docker tag gcr.io/ml-pipeline/workflow-controller:v2.12.9-license-compliance gcr.io/ml-pipeline/google/pipelines-test/argoworkflowcontroller:$(cat /workspace/mm.ver) + docker tag gcr.io/ml-pipeline/workflow-controller:v3.1.6-patch-license-compliance gcr.io/ml-pipeline/google/pipelines/argoworkflowcontroller:$(cat /workspace/mm.ver) + docker tag gcr.io/ml-pipeline/workflow-controller:v3.1.6-patch-license-compliance gcr.io/ml-pipeline/google/pipelines-test/argoworkflowcontroller:$(cat /workspace/mm.ver) docker push gcr.io/ml-pipeline/google/pipelines/argoworkflowcontroller:$(cat /workspace/mm.ver) docker push gcr.io/ml-pipeline/google/pipelines-test/argoworkflowcontroller:$(cat /workspace/mm.ver) @@ -648,6 +647,6 @@ images: - 'gcr.io/ml-pipeline/google/pipelines-test/cachedeployer:$TAG_NAME' - 'gcr.io/ml-pipeline/google/pipelines-test/deployer:$TAG_NAME' - 'gcr.io/ml-pipeline/google/pipelines-test:$TAG_NAME' -timeout: '1200s' +timeout: '2000s' tags: - release-on-tag diff --git a/README.md b/README.md index e679f487fb..a38084ea39 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ for demos. ## Architecture -We are currently using [Kubeflow Pipelines 1.5.0](https://github.com/kubeflow/pipelines/releases/tag/1.5.0) and +We are currently using [Kubeflow Pipelines 1.7.0](https://github.com/kubeflow/pipelines/releases/tag/1.7.0) and [Tekton >= 0.27.0](https://github.com/tektoncd/pipeline/releases/tag/v0.27.0) for this project. diff --git a/api/.gitignore b/api/.gitignore new file mode 100644 index 0000000000..83f5058fcb --- /dev/null +++ b/api/.gitignore @@ -0,0 +1,2 @@ +# Dependencies need to download via Makefile. +v2alpha1/google diff --git a/api/Makefile b/api/Makefile index 2bc27b4f94..057816809c 100644 --- a/api/Makefile +++ b/api/Makefile @@ -1,7 +1,84 @@ -PROTO_PATH=/usr/local/include/ +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. -gen_proto: v2alpha1/pipeline_spec.proto - cd v2alpha1 && protoc -I=$(PROTO_PATH) -I=. \ - --go_out=go \ +# Contact one of Bobgy, capri-xiyue or zijianjoy if this remote image needs an update. +PREBUILT_REMOTE_IMAGE=gcr.io/ml-pipeline-test/api-generator:latest + +.PHONY: all +all: golang python + +.PHONY: clean +clean: clean-go clean-python + +# Generate proto packages using a pre-built api-generator image. +.PHONY: golang +golang: v2alpha1/*.proto + docker run --interactive --rm \ + --user $$(id -u):$$(id -g) \ + --mount type=bind,source="$$(pwd)/..",target=/go/src/github.com/kubeflow/pipelines \ + $(PREBUILT_REMOTE_IMAGE) \ + sh -c 'cd /go/src/github.com/kubeflow/pipelines/api && make generate' + +# Delete all generated proto go packages. +.PHONY: clean-go +clean-go: + rm -rf v2alpha1/go + rm -f v2alpha1/google/rpc/status.proto + +# Generate Python package. +.PHONY: python +python: v2alpha1/pipeline_spec.proto v2alpha1/google/rpc/status.proto + cd v2alpha1/python && python3 setup.py bdist_wheel + +# Delete all generated Python packages +.PHONY: clean-python +clean-python: + rm -rf v2alpha1/python/build + rm -rf v2alpha1/python/dist + rm -f v2alpha1/python/kfp/pipeline_spec/pipeline_spec_pb2.py + rm -f v2alpha1/google/rpc/status.proto + +########################## +# The following are IMPLEMENTATION DETAILS. +########################## + +# Generates proto packages locally, this should only be called: +# * during development +# * inside the prebuilt docker container +.PHONY: generate +generate: go_pipelinespec go_cachekey + +go_pipelinespec: v2alpha1/pipeline_spec.proto v2alpha1/google/rpc/status.proto + mkdir -p v2alpha1/go/pipelinespec + cd v2alpha1 && protoc -I=. \ + --go_out=go/pipelinespec \ --go_opt=paths=source_relative \ pipeline_spec.proto + +go_cachekey: v2alpha1/pipeline_spec.proto v2alpha1/cache_key.proto + mkdir -p v2alpha1/go/cachekey + cd v2alpha1 && protoc -I=. \ + --go_out=go/cachekey \ + --go_opt=paths=source_relative \ + cache_key.proto + +# Fetch dependency proto +v2alpha1/google/rpc/status.proto: + mkdir -p v2alpha1/google/rpc + wget -O v2alpha1/google/rpc/status.proto https://raw.githubusercontent.com/googleapis/googleapis/047d3a8ac7f75383855df0166144f891d7af08d9/google/rpc/status.proto + +# protoc-gen-go is already installed in api-generator image +.PHONY: protoc-gen-go +protoc-gen-go: + go install google.golang.org/protobuf/cmd/protoc-gen-go diff --git a/api/README.md b/api/README.md index 34213de22c..722619bbc7 100644 --- a/api/README.md +++ b/api/README.md @@ -2,18 +2,30 @@ ## Generate golang proto code -Documentation: +Generate golang proto code: + +```bash +make clean-go golang +``` + +## Generate Python proto package -Download `protoc` compiler binary from: . +Generate kfp-pipeline-spec: -Install proto code generator: +Update `VERSION` in [v2alpha1/python/setup.py](https://github.com/kubeflow/pipelines/blob/master/api/v2alpha1/python/setup.py) if applicable. ```bash -go install google.golang.org/protobuf/cmd/protoc-gen-go +make clean-python python ``` -Generate golang proto code: +## Generate both Python and golang proto code + +Generate both Python and golang proto: ```bash -make gen_proto +make clean all ``` + +Note, there are no prerequisites, because the generation uses a prebuilt docker image with all the tools necessary. + +Documentation: diff --git a/api/go.mod b/api/go.mod new file mode 100644 index 0000000000..ae6924db04 --- /dev/null +++ b/api/go.mod @@ -0,0 +1,5 @@ +module github.com/kubeflow/pipelines/api + +go 1.16 + +require google.golang.org/protobuf v1.27.1 diff --git a/api/go.sum b/api/go.sum new file mode 100644 index 0000000000..03b1917b5a --- /dev/null +++ b/api/go.sum @@ -0,0 +1,8 @@ +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= diff --git a/api/v2alpha1/cache_key.proto b/api/v2alpha1/cache_key.proto new file mode 100644 index 0000000000..396828138d --- /dev/null +++ b/api/v2alpha1/cache_key.proto @@ -0,0 +1,38 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +option go_package = "github.com/kubeflow/pipelines/api/v2alpha1/go/cachekey"; +package ml_pipelines; + +import "google/protobuf/any.proto"; +import "pipeline_spec.proto"; + +message CacheKey { + map inputArtifactNames = 1; + map inputParameters = 2; + map outputArtifactsSpec = 3; + map outputParametersSpec=4; + ContainerSpec containerSpec=5; +} + +message ContainerSpec { + string image = 1; + repeated string cmdArgs = 2; +} + +message ArtifactNameList { + repeated string artifactNames = 1; +} diff --git a/api/v2alpha1/go/cachekey/cache_key.pb.go b/api/v2alpha1/go/cachekey/cache_key.pb.go new file mode 100644 index 0000000000..cd32c176c0 --- /dev/null +++ b/api/v2alpha1/go/cachekey/cache_key.pb.go @@ -0,0 +1,395 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: cache_key.proto + +package cachekey + +import ( + pipelinespec "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + _ "google.golang.org/protobuf/types/known/anypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type CacheKey struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + InputArtifactNames map[string]*ArtifactNameList `protobuf:"bytes,1,rep,name=inputArtifactNames,proto3" json:"inputArtifactNames,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + InputParameters map[string]*pipelinespec.Value `protobuf:"bytes,2,rep,name=inputParameters,proto3" json:"inputParameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + OutputArtifactsSpec map[string]*pipelinespec.RuntimeArtifact `protobuf:"bytes,3,rep,name=outputArtifactsSpec,proto3" json:"outputArtifactsSpec,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + OutputParametersSpec map[string]string `protobuf:"bytes,4,rep,name=outputParametersSpec,proto3" json:"outputParametersSpec,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + ContainerSpec *ContainerSpec `protobuf:"bytes,5,opt,name=containerSpec,proto3" json:"containerSpec,omitempty"` +} + +func (x *CacheKey) Reset() { + *x = CacheKey{} + if protoimpl.UnsafeEnabled { + mi := &file_cache_key_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CacheKey) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CacheKey) ProtoMessage() {} + +func (x *CacheKey) ProtoReflect() protoreflect.Message { + mi := &file_cache_key_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CacheKey.ProtoReflect.Descriptor instead. +func (*CacheKey) Descriptor() ([]byte, []int) { + return file_cache_key_proto_rawDescGZIP(), []int{0} +} + +func (x *CacheKey) GetInputArtifactNames() map[string]*ArtifactNameList { + if x != nil { + return x.InputArtifactNames + } + return nil +} + +func (x *CacheKey) GetInputParameters() map[string]*pipelinespec.Value { + if x != nil { + return x.InputParameters + } + return nil +} + +func (x *CacheKey) GetOutputArtifactsSpec() map[string]*pipelinespec.RuntimeArtifact { + if x != nil { + return x.OutputArtifactsSpec + } + return nil +} + +func (x *CacheKey) GetOutputParametersSpec() map[string]string { + if x != nil { + return x.OutputParametersSpec + } + return nil +} + +func (x *CacheKey) GetContainerSpec() *ContainerSpec { + if x != nil { + return x.ContainerSpec + } + return nil +} + +type ContainerSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Image string `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` + CmdArgs []string `protobuf:"bytes,2,rep,name=cmdArgs,proto3" json:"cmdArgs,omitempty"` +} + +func (x *ContainerSpec) Reset() { + *x = ContainerSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_cache_key_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ContainerSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContainerSpec) ProtoMessage() {} + +func (x *ContainerSpec) ProtoReflect() protoreflect.Message { + mi := &file_cache_key_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContainerSpec.ProtoReflect.Descriptor instead. +func (*ContainerSpec) Descriptor() ([]byte, []int) { + return file_cache_key_proto_rawDescGZIP(), []int{1} +} + +func (x *ContainerSpec) GetImage() string { + if x != nil { + return x.Image + } + return "" +} + +func (x *ContainerSpec) GetCmdArgs() []string { + if x != nil { + return x.CmdArgs + } + return nil +} + +type ArtifactNameList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ArtifactNames []string `protobuf:"bytes,1,rep,name=artifactNames,proto3" json:"artifactNames,omitempty"` +} + +func (x *ArtifactNameList) Reset() { + *x = ArtifactNameList{} + if protoimpl.UnsafeEnabled { + mi := &file_cache_key_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ArtifactNameList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ArtifactNameList) ProtoMessage() {} + +func (x *ArtifactNameList) ProtoReflect() protoreflect.Message { + mi := &file_cache_key_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ArtifactNameList.ProtoReflect.Descriptor instead. +func (*ArtifactNameList) Descriptor() ([]byte, []int) { + return file_cache_key_proto_rawDescGZIP(), []int{2} +} + +func (x *ArtifactNameList) GetArtifactNames() []string { + if x != nil { + return x.ArtifactNames + } + return nil +} + +var File_cache_key_proto protoreflect.FileDescriptor + +var file_cache_key_proto_rawDesc = []byte{ + 0x0a, 0x0f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x0c, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x1a, + 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x70, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0xbd, 0x06, 0x0a, 0x08, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x5e, 0x0a, 0x12, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4b, 0x65, 0x79, + 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x55, 0x0a, 0x0f, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4b, 0x65, 0x79, 0x2e, 0x49, 0x6e, + 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x61, 0x0a, 0x13, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, + 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x4b, 0x65, 0x79, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x13, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, + 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x64, 0x0a, 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x53, 0x70, 0x65, 0x63, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4b, 0x65, 0x79, 0x2e, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x53, 0x70, 0x65, + 0x63, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x41, 0x0a, 0x0d, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, + 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x1a, + 0x65, 0x0a, 0x17, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x34, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x6c, + 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x57, 0x0a, 0x14, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x65, 0x0a, 0x18, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, + 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, + 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x52, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x47, 0x0a, 0x19, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x53, 0x70, 0x65, 0x63, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x3f, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, + 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6d, 0x64, 0x41, 0x72, 0x67, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6d, 0x64, 0x41, 0x72, 0x67, 0x73, + 0x22, 0x38, 0x0a, 0x10, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x72, 0x74, + 0x69, 0x66, 0x61, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x38, 0x5a, 0x36, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, + 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x32, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x61, 0x63, 0x68, + 0x65, 0x6b, 0x65, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_cache_key_proto_rawDescOnce sync.Once + file_cache_key_proto_rawDescData = file_cache_key_proto_rawDesc +) + +func file_cache_key_proto_rawDescGZIP() []byte { + file_cache_key_proto_rawDescOnce.Do(func() { + file_cache_key_proto_rawDescData = protoimpl.X.CompressGZIP(file_cache_key_proto_rawDescData) + }) + return file_cache_key_proto_rawDescData +} + +var file_cache_key_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_cache_key_proto_goTypes = []interface{}{ + (*CacheKey)(nil), // 0: ml_pipelines.CacheKey + (*ContainerSpec)(nil), // 1: ml_pipelines.ContainerSpec + (*ArtifactNameList)(nil), // 2: ml_pipelines.ArtifactNameList + nil, // 3: ml_pipelines.CacheKey.InputArtifactNamesEntry + nil, // 4: ml_pipelines.CacheKey.InputParametersEntry + nil, // 5: ml_pipelines.CacheKey.OutputArtifactsSpecEntry + nil, // 6: ml_pipelines.CacheKey.OutputParametersSpecEntry + (*pipelinespec.Value)(nil), // 7: ml_pipelines.Value + (*pipelinespec.RuntimeArtifact)(nil), // 8: ml_pipelines.RuntimeArtifact +} +var file_cache_key_proto_depIdxs = []int32{ + 3, // 0: ml_pipelines.CacheKey.inputArtifactNames:type_name -> ml_pipelines.CacheKey.InputArtifactNamesEntry + 4, // 1: ml_pipelines.CacheKey.inputParameters:type_name -> ml_pipelines.CacheKey.InputParametersEntry + 5, // 2: ml_pipelines.CacheKey.outputArtifactsSpec:type_name -> ml_pipelines.CacheKey.OutputArtifactsSpecEntry + 6, // 3: ml_pipelines.CacheKey.outputParametersSpec:type_name -> ml_pipelines.CacheKey.OutputParametersSpecEntry + 1, // 4: ml_pipelines.CacheKey.containerSpec:type_name -> ml_pipelines.ContainerSpec + 2, // 5: ml_pipelines.CacheKey.InputArtifactNamesEntry.value:type_name -> ml_pipelines.ArtifactNameList + 7, // 6: ml_pipelines.CacheKey.InputParametersEntry.value:type_name -> ml_pipelines.Value + 8, // 7: ml_pipelines.CacheKey.OutputArtifactsSpecEntry.value:type_name -> ml_pipelines.RuntimeArtifact + 8, // [8:8] is the sub-list for method output_type + 8, // [8:8] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name +} + +func init() { file_cache_key_proto_init() } +func file_cache_key_proto_init() { + if File_cache_key_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_cache_key_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CacheKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cache_key_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ContainerSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cache_key_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ArtifactNameList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_cache_key_proto_rawDesc, + NumEnums: 0, + NumMessages: 7, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_cache_key_proto_goTypes, + DependencyIndexes: file_cache_key_proto_depIdxs, + MessageInfos: file_cache_key_proto_msgTypes, + }.Build() + File_cache_key_proto = out.File + file_cache_key_proto_rawDesc = nil + file_cache_key_proto_goTypes = nil + file_cache_key_proto_depIdxs = nil +} diff --git a/api/v2alpha1/go/pipeline_spec.pb.go b/api/v2alpha1/go/pipeline_spec.pb.go deleted file mode 100644 index 3cd3b54934..0000000000 --- a/api/v2alpha1/go/pipeline_spec.pb.go +++ /dev/null @@ -1,5418 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.23.0 -// protoc v3.11.3 -// source: pipeline_spec.proto - -package _go - -import ( - proto "github.com/golang/protobuf/proto" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - anypb "google.golang.org/protobuf/types/known/anypb" - structpb "google.golang.org/protobuf/types/known/structpb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -// The primitive types. -type PrimitiveType_PrimitiveTypeEnum int32 - -const ( - PrimitiveType_PRIMITIVE_TYPE_UNSPECIFIED PrimitiveType_PrimitiveTypeEnum = 0 - PrimitiveType_INT PrimitiveType_PrimitiveTypeEnum = 1 - PrimitiveType_DOUBLE PrimitiveType_PrimitiveTypeEnum = 2 - PrimitiveType_STRING PrimitiveType_PrimitiveTypeEnum = 3 -) - -// Enum value maps for PrimitiveType_PrimitiveTypeEnum. -var ( - PrimitiveType_PrimitiveTypeEnum_name = map[int32]string{ - 0: "PRIMITIVE_TYPE_UNSPECIFIED", - 1: "INT", - 2: "DOUBLE", - 3: "STRING", - } - PrimitiveType_PrimitiveTypeEnum_value = map[string]int32{ - "PRIMITIVE_TYPE_UNSPECIFIED": 0, - "INT": 1, - "DOUBLE": 2, - "STRING": 3, - } -) - -func (x PrimitiveType_PrimitiveTypeEnum) Enum() *PrimitiveType_PrimitiveTypeEnum { - p := new(PrimitiveType_PrimitiveTypeEnum) - *p = x - return p -} - -func (x PrimitiveType_PrimitiveTypeEnum) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (PrimitiveType_PrimitiveTypeEnum) Descriptor() protoreflect.EnumDescriptor { - return file_pipeline_spec_proto_enumTypes[0].Descriptor() -} - -func (PrimitiveType_PrimitiveTypeEnum) Type() protoreflect.EnumType { - return &file_pipeline_spec_proto_enumTypes[0] -} - -func (x PrimitiveType_PrimitiveTypeEnum) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use PrimitiveType_PrimitiveTypeEnum.Descriptor instead. -func (PrimitiveType_PrimitiveTypeEnum) EnumDescriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{9, 0} -} - -// The spec of a pipeline job. -type PipelineJob struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Name of the job. - // User friendly display name - DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` - // Definition of the pipeline that is being executed. - PipelineSpec *structpb.Struct `protobuf:"bytes,7,opt,name=pipeline_spec,json=pipelineSpec,proto3" json:"pipeline_spec,omitempty"` - // The labels with user-defined metadata to organize PipelineJob. - Labels map[string]string `protobuf:"bytes,11,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Runtime config of the pipeline. - RuntimeConfig *PipelineJob_RuntimeConfig `protobuf:"bytes,12,opt,name=runtime_config,json=runtimeConfig,proto3" json:"runtime_config,omitempty"` -} - -func (x *PipelineJob) Reset() { - *x = PipelineJob{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineJob) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineJob) ProtoMessage() {} - -func (x *PipelineJob) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineJob.ProtoReflect.Descriptor instead. -func (*PipelineJob) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{0} -} - -func (x *PipelineJob) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *PipelineJob) GetDisplayName() string { - if x != nil { - return x.DisplayName - } - return "" -} - -func (x *PipelineJob) GetPipelineSpec() *structpb.Struct { - if x != nil { - return x.PipelineSpec - } - return nil -} - -func (x *PipelineJob) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -func (x *PipelineJob) GetRuntimeConfig() *PipelineJob_RuntimeConfig { - if x != nil { - return x.RuntimeConfig - } - return nil -} - -// The spec of a pipeline. -type PipelineSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The metadata of the pipeline. - PipelineInfo *PipelineInfo `protobuf:"bytes,1,opt,name=pipeline_info,json=pipelineInfo,proto3" json:"pipeline_info,omitempty"` - // A list of pipeline tasks, which form a DAG. - // Deprecated, use [PipelineSpec.root][] instead. - // - // Deprecated: Do not use. - Tasks []*PipelineTaskSpec `protobuf:"bytes,2,rep,name=tasks,proto3" json:"tasks,omitempty"` - // The deployment config of the pipeline. - // The deployment config can be extended to provide platform specific configs. - // The supported config is [PipelineDeploymentConifg](). - // Deprecated in favor of deployment_spec. - // - // Deprecated: Do not use. - DeploymentConfig *anypb.Any `protobuf:"bytes,3,opt,name=deployment_config,json=deploymentConfig,proto3" json:"deployment_config,omitempty"` - // The deployment config of the pipeline. - // The deployment config can be extended to provide platform specific configs. - DeploymentSpec *structpb.Struct `protobuf:"bytes,7,opt,name=deployment_spec,json=deploymentSpec,proto3" json:"deployment_spec,omitempty"` - // The version of the sdk, which compiles the spec. - SdkVersion string `protobuf:"bytes,4,opt,name=sdk_version,json=sdkVersion,proto3" json:"sdk_version,omitempty"` - // The version of the schema. - SchemaVersion string `protobuf:"bytes,5,opt,name=schema_version,json=schemaVersion,proto3" json:"schema_version,omitempty"` - // The runtime parameters of the pipeline. Keyed by parameter name. - // Deprecated, instead of defining the runtime_parameters, user can define - // [ComponentSpec.input_definitions][] field of the [PipelineSpec.root][] to - // define the pipeline parameters. - // - // Deprecated: Do not use. - RuntimeParameters map[string]*PipelineSpec_RuntimeParameter `protobuf:"bytes,6,rep,name=runtime_parameters,json=runtimeParameters,proto3" json:"runtime_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The map of name to definition of all components used in this pipeline. - Components map[string]*ComponentSpec `protobuf:"bytes,8,rep,name=components,proto3" json:"components,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The definition of the main pipeline. Execution of the pipeline is - // completed upon the completion of this component. - Root *ComponentSpec `protobuf:"bytes,9,opt,name=root,proto3" json:"root,omitempty"` -} - -func (x *PipelineSpec) Reset() { - *x = PipelineSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineSpec) ProtoMessage() {} - -func (x *PipelineSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineSpec.ProtoReflect.Descriptor instead. -func (*PipelineSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{1} -} - -func (x *PipelineSpec) GetPipelineInfo() *PipelineInfo { - if x != nil { - return x.PipelineInfo - } - return nil -} - -// Deprecated: Do not use. -func (x *PipelineSpec) GetTasks() []*PipelineTaskSpec { - if x != nil { - return x.Tasks - } - return nil -} - -// Deprecated: Do not use. -func (x *PipelineSpec) GetDeploymentConfig() *anypb.Any { - if x != nil { - return x.DeploymentConfig - } - return nil -} - -func (x *PipelineSpec) GetDeploymentSpec() *structpb.Struct { - if x != nil { - return x.DeploymentSpec - } - return nil -} - -func (x *PipelineSpec) GetSdkVersion() string { - if x != nil { - return x.SdkVersion - } - return "" -} - -func (x *PipelineSpec) GetSchemaVersion() string { - if x != nil { - return x.SchemaVersion - } - return "" -} - -// Deprecated: Do not use. -func (x *PipelineSpec) GetRuntimeParameters() map[string]*PipelineSpec_RuntimeParameter { - if x != nil { - return x.RuntimeParameters - } - return nil -} - -func (x *PipelineSpec) GetComponents() map[string]*ComponentSpec { - if x != nil { - return x.Components - } - return nil -} - -func (x *PipelineSpec) GetRoot() *ComponentSpec { - if x != nil { - return x.Root - } - return nil -} - -// Definition of a component. -type ComponentSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Definition of the input parameters and artifacts of the component. - InputDefinitions *ComponentInputsSpec `protobuf:"bytes,1,opt,name=input_definitions,json=inputDefinitions,proto3" json:"input_definitions,omitempty"` - // Definition of the output parameters and artifacts of the component. - OutputDefinitions *ComponentOutputsSpec `protobuf:"bytes,2,opt,name=output_definitions,json=outputDefinitions,proto3" json:"output_definitions,omitempty"` - // Either a DAG or a single execution. - // - // Types that are assignable to Implementation: - // *ComponentSpec_Dag - // *ComponentSpec_ExecutorLabel - Implementation isComponentSpec_Implementation `protobuf_oneof:"implementation"` -} - -func (x *ComponentSpec) Reset() { - *x = ComponentSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComponentSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComponentSpec) ProtoMessage() {} - -func (x *ComponentSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComponentSpec.ProtoReflect.Descriptor instead. -func (*ComponentSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{2} -} - -func (x *ComponentSpec) GetInputDefinitions() *ComponentInputsSpec { - if x != nil { - return x.InputDefinitions - } - return nil -} - -func (x *ComponentSpec) GetOutputDefinitions() *ComponentOutputsSpec { - if x != nil { - return x.OutputDefinitions - } - return nil -} - -func (m *ComponentSpec) GetImplementation() isComponentSpec_Implementation { - if m != nil { - return m.Implementation - } - return nil -} - -func (x *ComponentSpec) GetDag() *DagSpec { - if x, ok := x.GetImplementation().(*ComponentSpec_Dag); ok { - return x.Dag - } - return nil -} - -func (x *ComponentSpec) GetExecutorLabel() string { - if x, ok := x.GetImplementation().(*ComponentSpec_ExecutorLabel); ok { - return x.ExecutorLabel - } - return "" -} - -type isComponentSpec_Implementation interface { - isComponentSpec_Implementation() -} - -type ComponentSpec_Dag struct { - Dag *DagSpec `protobuf:"bytes,3,opt,name=dag,proto3,oneof"` -} - -type ComponentSpec_ExecutorLabel struct { - ExecutorLabel string `protobuf:"bytes,4,opt,name=executor_label,json=executorLabel,proto3,oneof"` -} - -func (*ComponentSpec_Dag) isComponentSpec_Implementation() {} - -func (*ComponentSpec_ExecutorLabel) isComponentSpec_Implementation() {} - -// A DAG contains multiple tasks. -type DagSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The tasks inside the dag. - Tasks map[string]*PipelineTaskSpec `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Defines how the outputs of the dag are linked to the sub tasks. - Outputs *DagOutputsSpec `protobuf:"bytes,2,opt,name=outputs,proto3" json:"outputs,omitempty"` -} - -func (x *DagSpec) Reset() { - *x = DagSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DagSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DagSpec) ProtoMessage() {} - -func (x *DagSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DagSpec.ProtoReflect.Descriptor instead. -func (*DagSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{3} -} - -func (x *DagSpec) GetTasks() map[string]*PipelineTaskSpec { - if x != nil { - return x.Tasks - } - return nil -} - -func (x *DagSpec) GetOutputs() *DagOutputsSpec { - if x != nil { - return x.Outputs - } - return nil -} - -// Definition of the output artifacts and parameters of the DAG component. -type DagOutputsSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name to the output artifact channel of the DAG. - Artifacts map[string]*DagOutputsSpec_DagOutputArtifactSpec `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The name to the output parameter. - Parameters map[string]*DagOutputsSpec_DagOutputParameterSpec `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *DagOutputsSpec) Reset() { - *x = DagOutputsSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DagOutputsSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DagOutputsSpec) ProtoMessage() {} - -func (x *DagOutputsSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DagOutputsSpec.ProtoReflect.Descriptor instead. -func (*DagOutputsSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{4} -} - -func (x *DagOutputsSpec) GetArtifacts() map[string]*DagOutputsSpec_DagOutputArtifactSpec { - if x != nil { - return x.Artifacts - } - return nil -} - -func (x *DagOutputsSpec) GetParameters() map[string]*DagOutputsSpec_DagOutputParameterSpec { - if x != nil { - return x.Parameters - } - return nil -} - -// Definition specification of the component input parameters and artifacts. -type ComponentInputsSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name to artifact input. - Artifacts map[string]*ComponentInputsSpec_ArtifactSpec `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Name to parameter input. - Parameters map[string]*ComponentInputsSpec_ParameterSpec `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *ComponentInputsSpec) Reset() { - *x = ComponentInputsSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComponentInputsSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComponentInputsSpec) ProtoMessage() {} - -func (x *ComponentInputsSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComponentInputsSpec.ProtoReflect.Descriptor instead. -func (*ComponentInputsSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{5} -} - -func (x *ComponentInputsSpec) GetArtifacts() map[string]*ComponentInputsSpec_ArtifactSpec { - if x != nil { - return x.Artifacts - } - return nil -} - -func (x *ComponentInputsSpec) GetParameters() map[string]*ComponentInputsSpec_ParameterSpec { - if x != nil { - return x.Parameters - } - return nil -} - -// Definition specification of the component output parameters and artifacts. -type ComponentOutputsSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name to artifact output. - Artifacts map[string]*ComponentOutputsSpec_ArtifactSpec `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Name to parameter output. - Parameters map[string]*ComponentOutputsSpec_ParameterSpec `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *ComponentOutputsSpec) Reset() { - *x = ComponentOutputsSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComponentOutputsSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComponentOutputsSpec) ProtoMessage() {} - -func (x *ComponentOutputsSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComponentOutputsSpec.ProtoReflect.Descriptor instead. -func (*ComponentOutputsSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{6} -} - -func (x *ComponentOutputsSpec) GetArtifacts() map[string]*ComponentOutputsSpec_ArtifactSpec { - if x != nil { - return x.Artifacts - } - return nil -} - -func (x *ComponentOutputsSpec) GetParameters() map[string]*ComponentOutputsSpec_ParameterSpec { - if x != nil { - return x.Parameters - } - return nil -} - -// The spec of task inputs. -type TaskInputsSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A map of input parameters which are small values, stored by the system and - // can be queriable. - Parameters map[string]*TaskInputsSpec_InputParameterSpec `protobuf:"bytes,1,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // A map of input artifacts. - Artifacts map[string]*TaskInputsSpec_InputArtifactSpec `protobuf:"bytes,2,rep,name=artifacts,proto3" json:"artifacts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *TaskInputsSpec) Reset() { - *x = TaskInputsSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TaskInputsSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TaskInputsSpec) ProtoMessage() {} - -func (x *TaskInputsSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TaskInputsSpec.ProtoReflect.Descriptor instead. -func (*TaskInputsSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{7} -} - -func (x *TaskInputsSpec) GetParameters() map[string]*TaskInputsSpec_InputParameterSpec { - if x != nil { - return x.Parameters - } - return nil -} - -func (x *TaskInputsSpec) GetArtifacts() map[string]*TaskInputsSpec_InputArtifactSpec { - if x != nil { - return x.Artifacts - } - return nil -} - -// The spec of task outputs. -type TaskOutputsSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A map of output parameters which are small values, stored by the system and - // can be queriable. The output key is used - // by [TaskInputsSpec.InputParameterSpec][] of the downstream task to specify - // the data dependency. The same key will also be used by - // [ExecutorInput.Inputs][] to reference the output parameter. - Parameters map[string]*TaskOutputsSpec_OutputParameterSpec `protobuf:"bytes,1,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // A map of output artifacts. Keyed by output key. The output key is used - // by [TaskInputsSpec.InputArtifactSpec][] of the downstream task to specify - // the data dependency. The same key will also be used by - // [ExecutorInput.Inputs][] to reference the output artifact. - Artifacts map[string]*TaskOutputsSpec_OutputArtifactSpec `protobuf:"bytes,2,rep,name=artifacts,proto3" json:"artifacts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *TaskOutputsSpec) Reset() { - *x = TaskOutputsSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TaskOutputsSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TaskOutputsSpec) ProtoMessage() {} - -func (x *TaskOutputsSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TaskOutputsSpec.ProtoReflect.Descriptor instead. -func (*TaskOutputsSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{8} -} - -func (x *TaskOutputsSpec) GetParameters() map[string]*TaskOutputsSpec_OutputParameterSpec { - if x != nil { - return x.Parameters - } - return nil -} - -func (x *TaskOutputsSpec) GetArtifacts() map[string]*TaskOutputsSpec_OutputArtifactSpec { - if x != nil { - return x.Artifacts - } - return nil -} - -// Represent primitive types. The wrapper is needed to give a namespace of -// enum value so we don't need add `PRIMITIVE_TYPE_` prefix of each enum value. -type PrimitiveType struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *PrimitiveType) Reset() { - *x = PrimitiveType{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrimitiveType) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrimitiveType) ProtoMessage() {} - -func (x *PrimitiveType) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PrimitiveType.ProtoReflect.Descriptor instead. -func (*PrimitiveType) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{9} -} - -// The spec of a pipeline task. -type PipelineTaskSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Basic info of a pipeline task. - TaskInfo *PipelineTaskInfo `protobuf:"bytes,1,opt,name=task_info,json=taskInfo,proto3" json:"task_info,omitempty"` - // Specification for task inputs which contains parameters and artifacts. - Inputs *TaskInputsSpec `protobuf:"bytes,2,opt,name=inputs,proto3" json:"inputs,omitempty"` - // Specification for task outputs. - // Deprecated, the output definition is moved to [ComponentSpec.outputs][]. - // - // Deprecated: Do not use. - Outputs *TaskOutputsSpec `protobuf:"bytes,3,opt,name=outputs,proto3" json:"outputs,omitempty"` - // Label for the executor of the task. - // The specification will be specified in the deployment config. - // For example: - // ``` - // tasks: - // - task_info: - // name: trainer - // executor_label: trainer - // deployment_config: - // @type: cloud.ml.pipelines.v1alpha3.proto.PipelineDeploymentConfig - // executors: - // trainer: - // container: - // image: gcr.io/tfx:latest - // args: [] - // ``` - // Deprecated, the executor_label is moved to - // [ComponentSpec.executor_label][]. - // - // Deprecated: Do not use. - ExecutorLabel string `protobuf:"bytes,4,opt,name=executor_label,json=executorLabel,proto3" json:"executor_label,omitempty"` - // A list of names of upstream tasks that do not provide input - // artifacts for this task, but nonetheless whose completion this task depends - // on. - DependentTasks []string `protobuf:"bytes,5,rep,name=dependent_tasks,json=dependentTasks,proto3" json:"dependent_tasks,omitempty"` - CachingOptions *PipelineTaskSpec_CachingOptions `protobuf:"bytes,6,opt,name=caching_options,json=cachingOptions,proto3" json:"caching_options,omitempty"` - // Reference to a component. Use this field to define either a DAG or an - // executor. - ComponentRef *ComponentRef `protobuf:"bytes,7,opt,name=component_ref,json=componentRef,proto3" json:"component_ref,omitempty"` -} - -func (x *PipelineTaskSpec) Reset() { - *x = PipelineTaskSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineTaskSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineTaskSpec) ProtoMessage() {} - -func (x *PipelineTaskSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineTaskSpec.ProtoReflect.Descriptor instead. -func (*PipelineTaskSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{10} -} - -func (x *PipelineTaskSpec) GetTaskInfo() *PipelineTaskInfo { - if x != nil { - return x.TaskInfo - } - return nil -} - -func (x *PipelineTaskSpec) GetInputs() *TaskInputsSpec { - if x != nil { - return x.Inputs - } - return nil -} - -// Deprecated: Do not use. -func (x *PipelineTaskSpec) GetOutputs() *TaskOutputsSpec { - if x != nil { - return x.Outputs - } - return nil -} - -// Deprecated: Do not use. -func (x *PipelineTaskSpec) GetExecutorLabel() string { - if x != nil { - return x.ExecutorLabel - } - return "" -} - -func (x *PipelineTaskSpec) GetDependentTasks() []string { - if x != nil { - return x.DependentTasks - } - return nil -} - -func (x *PipelineTaskSpec) GetCachingOptions() *PipelineTaskSpec_CachingOptions { - if x != nil { - return x.CachingOptions - } - return nil -} - -func (x *PipelineTaskSpec) GetComponentRef() *ComponentRef { - if x != nil { - return x.ComponentRef - } - return nil -} - -type ComponentRef struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of a component. Refer to the key of the - // [PipelineSpec.components][] map. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *ComponentRef) Reset() { - *x = ComponentRef{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComponentRef) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComponentRef) ProtoMessage() {} - -func (x *ComponentRef) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComponentRef.ProtoReflect.Descriptor instead. -func (*ComponentRef) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{11} -} - -func (x *ComponentRef) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// Basic info of a pipeline. -type PipelineInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required field. The name of the pipeline. - // The name will be used to create or find pipeline context in MLMD. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *PipelineInfo) Reset() { - *x = PipelineInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineInfo) ProtoMessage() {} - -func (x *PipelineInfo) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineInfo.ProtoReflect.Descriptor instead. -func (*PipelineInfo) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{12} -} - -func (x *PipelineInfo) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// The definition of a artifact type in MLMD. -type ArtifactTypeSchema struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Kind: - // *ArtifactTypeSchema_SchemaTitle - // *ArtifactTypeSchema_SchemaUri - // *ArtifactTypeSchema_InstanceSchema - Kind isArtifactTypeSchema_Kind `protobuf_oneof:"kind"` -} - -func (x *ArtifactTypeSchema) Reset() { - *x = ArtifactTypeSchema{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ArtifactTypeSchema) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ArtifactTypeSchema) ProtoMessage() {} - -func (x *ArtifactTypeSchema) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ArtifactTypeSchema.ProtoReflect.Descriptor instead. -func (*ArtifactTypeSchema) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{13} -} - -func (m *ArtifactTypeSchema) GetKind() isArtifactTypeSchema_Kind { - if m != nil { - return m.Kind - } - return nil -} - -func (x *ArtifactTypeSchema) GetSchemaTitle() string { - if x, ok := x.GetKind().(*ArtifactTypeSchema_SchemaTitle); ok { - return x.SchemaTitle - } - return "" -} - -func (x *ArtifactTypeSchema) GetSchemaUri() string { - if x, ok := x.GetKind().(*ArtifactTypeSchema_SchemaUri); ok { - return x.SchemaUri - } - return "" -} - -func (x *ArtifactTypeSchema) GetInstanceSchema() string { - if x, ok := x.GetKind().(*ArtifactTypeSchema_InstanceSchema); ok { - return x.InstanceSchema - } - return "" -} - -type isArtifactTypeSchema_Kind interface { - isArtifactTypeSchema_Kind() -} - -type ArtifactTypeSchema_SchemaTitle struct { - // The name of the type. The format of the title must be: - // `..<version>`. - // Examples: - // - `aiplatform.Model.v1` - // - `acme.CustomModel.v2` - // When this field is set, the type must be pre-registered in the MLMD - // store. - SchemaTitle string `protobuf:"bytes,1,opt,name=schema_title,json=schemaTitle,proto3,oneof"` -} - -type ArtifactTypeSchema_SchemaUri struct { - // Points to a YAML file stored on Google Cloud Storage describing the - // format. - SchemaUri string `protobuf:"bytes,2,opt,name=schema_uri,json=schemaUri,proto3,oneof"` -} - -type ArtifactTypeSchema_InstanceSchema struct { - // Contains a raw YAML string, describing the format of - // the properties of the type. - InstanceSchema string `protobuf:"bytes,3,opt,name=instance_schema,json=instanceSchema,proto3,oneof"` -} - -func (*ArtifactTypeSchema_SchemaTitle) isArtifactTypeSchema_Kind() {} - -func (*ArtifactTypeSchema_SchemaUri) isArtifactTypeSchema_Kind() {} - -func (*ArtifactTypeSchema_InstanceSchema) isArtifactTypeSchema_Kind() {} - -// The basic info of a task. -type PipelineTaskInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The unique name of the task within the pipeline definition. This name - // will be used in downstream tasks to indicate task and data dependencies. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *PipelineTaskInfo) Reset() { - *x = PipelineTaskInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineTaskInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineTaskInfo) ProtoMessage() {} - -func (x *PipelineTaskInfo) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineTaskInfo.ProtoReflect.Descriptor instead. -func (*PipelineTaskInfo) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{14} -} - -func (x *PipelineTaskInfo) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// Definition for a value or reference to a runtime parameter. A -// ValueOrRuntimeParameter instance can be either a field value that is -// determined during compilation time, or a runtime parameter which will be -// determined during runtime. -type ValueOrRuntimeParameter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Value: - // *ValueOrRuntimeParameter_ConstantValue - // *ValueOrRuntimeParameter_RuntimeParameter - Value isValueOrRuntimeParameter_Value `protobuf_oneof:"value"` -} - -func (x *ValueOrRuntimeParameter) Reset() { - *x = ValueOrRuntimeParameter{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ValueOrRuntimeParameter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ValueOrRuntimeParameter) ProtoMessage() {} - -func (x *ValueOrRuntimeParameter) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ValueOrRuntimeParameter.ProtoReflect.Descriptor instead. -func (*ValueOrRuntimeParameter) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{15} -} - -func (m *ValueOrRuntimeParameter) GetValue() isValueOrRuntimeParameter_Value { - if m != nil { - return m.Value - } - return nil -} - -func (x *ValueOrRuntimeParameter) GetConstantValue() *Value { - if x, ok := x.GetValue().(*ValueOrRuntimeParameter_ConstantValue); ok { - return x.ConstantValue - } - return nil -} - -func (x *ValueOrRuntimeParameter) GetRuntimeParameter() string { - if x, ok := x.GetValue().(*ValueOrRuntimeParameter_RuntimeParameter); ok { - return x.RuntimeParameter - } - return "" -} - -type isValueOrRuntimeParameter_Value interface { - isValueOrRuntimeParameter_Value() -} - -type ValueOrRuntimeParameter_ConstantValue struct { - // Constant value which is determined in compile time. - ConstantValue *Value `protobuf:"bytes,1,opt,name=constant_value,json=constantValue,proto3,oneof"` -} - -type ValueOrRuntimeParameter_RuntimeParameter struct { - // Name of the runtime parameter. - RuntimeParameter string `protobuf:"bytes,2,opt,name=runtime_parameter,json=runtimeParameter,proto3,oneof"` -} - -func (*ValueOrRuntimeParameter_ConstantValue) isValueOrRuntimeParameter_Value() {} - -func (*ValueOrRuntimeParameter_RuntimeParameter) isValueOrRuntimeParameter_Value() {} - -// The definition of the deployment config of the pipeline. It contains the -// the platform specific executor configs for KFP OSS. -type PipelineDeploymentConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Map from executor label to executor spec. - Executors map[string]*PipelineDeploymentConfig_ExecutorSpec `protobuf:"bytes,1,rep,name=executors,proto3" json:"executors,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *PipelineDeploymentConfig) Reset() { - *x = PipelineDeploymentConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineDeploymentConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineDeploymentConfig) ProtoMessage() {} - -func (x *PipelineDeploymentConfig) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineDeploymentConfig.ProtoReflect.Descriptor instead. -func (*PipelineDeploymentConfig) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{16} -} - -func (x *PipelineDeploymentConfig) GetExecutors() map[string]*PipelineDeploymentConfig_ExecutorSpec { - if x != nil { - return x.Executors - } - return nil -} - -// Value is the value of the field. -type Value struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Value: - // *Value_IntValue - // *Value_DoubleValue - // *Value_StringValue - Value isValue_Value `protobuf_oneof:"value"` -} - -func (x *Value) Reset() { - *x = Value{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Value) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Value) ProtoMessage() {} - -func (x *Value) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Value.ProtoReflect.Descriptor instead. -func (*Value) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{17} -} - -func (m *Value) GetValue() isValue_Value { - if m != nil { - return m.Value - } - return nil -} - -func (x *Value) GetIntValue() int64 { - if x, ok := x.GetValue().(*Value_IntValue); ok { - return x.IntValue - } - return 0 -} - -func (x *Value) GetDoubleValue() float64 { - if x, ok := x.GetValue().(*Value_DoubleValue); ok { - return x.DoubleValue - } - return 0 -} - -func (x *Value) GetStringValue() string { - if x, ok := x.GetValue().(*Value_StringValue); ok { - return x.StringValue - } - return "" -} - -type isValue_Value interface { - isValue_Value() -} - -type Value_IntValue struct { - // An integer value - IntValue int64 `protobuf:"varint,1,opt,name=int_value,json=intValue,proto3,oneof"` -} - -type Value_DoubleValue struct { - // A double value - DoubleValue float64 `protobuf:"fixed64,2,opt,name=double_value,json=doubleValue,proto3,oneof"` -} - -type Value_StringValue struct { - // A string value - StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,proto3,oneof"` -} - -func (*Value_IntValue) isValue_Value() {} - -func (*Value_DoubleValue) isValue_Value() {} - -func (*Value_StringValue) isValue_Value() {} - -// The definition of a runtime artifact. -type RuntimeArtifact struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of an artifact. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // The type of the artifact. - Type *ArtifactTypeSchema `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - // The URI of the artifact. - Uri string `protobuf:"bytes,3,opt,name=uri,proto3" json:"uri,omitempty"` - // The properties of the artifact. - Properties map[string]*Value `protobuf:"bytes,4,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The custom properties of the artifact. - CustomProperties map[string]*Value `protobuf:"bytes,5,rep,name=custom_properties,json=customProperties,proto3" json:"custom_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *RuntimeArtifact) Reset() { - *x = RuntimeArtifact{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RuntimeArtifact) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RuntimeArtifact) ProtoMessage() {} - -func (x *RuntimeArtifact) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RuntimeArtifact.ProtoReflect.Descriptor instead. -func (*RuntimeArtifact) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{18} -} - -func (x *RuntimeArtifact) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *RuntimeArtifact) GetType() *ArtifactTypeSchema { - if x != nil { - return x.Type - } - return nil -} - -func (x *RuntimeArtifact) GetUri() string { - if x != nil { - return x.Uri - } - return "" -} - -func (x *RuntimeArtifact) GetProperties() map[string]*Value { - if x != nil { - return x.Properties - } - return nil -} - -func (x *RuntimeArtifact) GetCustomProperties() map[string]*Value { - if x != nil { - return x.CustomProperties - } - return nil -} - -// Message that represents a list of artifacts. -type ArtifactList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A list of artifacts. - Artifacts []*RuntimeArtifact `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty"` -} - -func (x *ArtifactList) Reset() { - *x = ArtifactList{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ArtifactList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ArtifactList) ProtoMessage() {} - -func (x *ArtifactList) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ArtifactList.ProtoReflect.Descriptor instead. -func (*ArtifactList) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{19} -} - -func (x *ArtifactList) GetArtifacts() []*RuntimeArtifact { - if x != nil { - return x.Artifacts - } - return nil -} - -// The input of an executor, which includes all the data that -// can be passed into the executor spec by a string based placeholder. -// -// The string based placeholder uses a JSON path to reference to the data -// in the [ExecutionInput](). -// -// `{{$}}`: prints the full [ExecutorInput]() as a JSON string. -// `{{$.inputs.artifacts['<name>'].uri}}`: prints the URI of an input -// artifact. -// `{{$.inputs.artifacts['<name>'].properties['<property name>']}}`: prints -// the -// property of an input artifact. -// `{{$.inputs.parameters['<name>']}}`: prints the value of an input -// parameter. -// `{{$.outputs.artifacts['<name>'].uri}}: prints the URI of an output artifact. -// `{{$.outputs.artifacts['<name>'].properties['<property name>']}}`: prints the -// property of an output artifact. -// `{{$.outputs.parameters['<name>'].output_file}}`: prints a file path which -// points to a file and container can write to it to return the value of the -// parameter.. -// `{{$.outputs.output_file}}`: prints a file path of the output metadata file -// which is used to send output metadata from executor to orchestrator. The -// contract of the output metadata is [ExecutorOutput](). When both parameter -// output file and executor output metadata files are set by the container, the -// output metadata file will have higher precedence to set output parameters. -type ExecutorInput struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The runtime input artifacts of the task invocation. - Inputs *ExecutorInput_Inputs `protobuf:"bytes,1,opt,name=inputs,proto3" json:"inputs,omitempty"` - // The runtime output artifacts of the task invocation. - Outputs *ExecutorInput_Outputs `protobuf:"bytes,2,opt,name=outputs,proto3" json:"outputs,omitempty"` -} - -func (x *ExecutorInput) Reset() { - *x = ExecutorInput{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExecutorInput) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExecutorInput) ProtoMessage() {} - -func (x *ExecutorInput) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExecutorInput.ProtoReflect.Descriptor instead. -func (*ExecutorInput) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{20} -} - -func (x *ExecutorInput) GetInputs() *ExecutorInput_Inputs { - if x != nil { - return x.Inputs - } - return nil -} - -func (x *ExecutorInput) GetOutputs() *ExecutorInput_Outputs { - if x != nil { - return x.Outputs - } - return nil -} - -// The schema of the output metadata of an execution. It will be used to parse -// the output metadata file. -type ExecutorOutput struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The values for output parameters. - Parameters map[string]*Value `protobuf:"bytes,1,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The updated metadata for output artifact. - Artifacts map[string]*ArtifactList `protobuf:"bytes,2,rep,name=artifacts,proto3" json:"artifacts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *ExecutorOutput) Reset() { - *x = ExecutorOutput{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExecutorOutput) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExecutorOutput) ProtoMessage() {} - -func (x *ExecutorOutput) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExecutorOutput.ProtoReflect.Descriptor instead. -func (*ExecutorOutput) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{21} -} - -func (x *ExecutorOutput) GetParameters() map[string]*Value { - if x != nil { - return x.Parameters - } - return nil -} - -func (x *ExecutorOutput) GetArtifacts() map[string]*ArtifactList { - if x != nil { - return x.Artifacts - } - return nil -} - -// The runtime config of a PipelineJob. -type PipelineJob_RuntimeConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The runtime parameters of the PipelineJob. The parameters will be - // passed into [PipelineJob.pipeline_spec][] to replace the placeholders - // at runtime. - Parameters map[string]*Value `protobuf:"bytes,1,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // A path in a Cloud Storage bucket which will be treated as the root - // output directory of the pipeline. It is used by the system to - // generate the paths of output artifacts. - // This is a GCP-specific optimization. - GcsOutputDirectory string `protobuf:"bytes,2,opt,name=gcs_output_directory,json=gcsOutputDirectory,proto3" json:"gcs_output_directory,omitempty"` -} - -func (x *PipelineJob_RuntimeConfig) Reset() { - *x = PipelineJob_RuntimeConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineJob_RuntimeConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineJob_RuntimeConfig) ProtoMessage() {} - -func (x *PipelineJob_RuntimeConfig) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineJob_RuntimeConfig.ProtoReflect.Descriptor instead. -func (*PipelineJob_RuntimeConfig) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{0, 1} -} - -func (x *PipelineJob_RuntimeConfig) GetParameters() map[string]*Value { - if x != nil { - return x.Parameters - } - return nil -} - -func (x *PipelineJob_RuntimeConfig) GetGcsOutputDirectory() string { - if x != nil { - return x.GcsOutputDirectory - } - return "" -} - -// The definition of the runtime parameter. -type PipelineSpec_RuntimeParameter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required field. The type of the runtime parameter. - Type PrimitiveType_PrimitiveTypeEnum `protobuf:"varint,1,opt,name=type,proto3,enum=ml_pipelines.PrimitiveType_PrimitiveTypeEnum" json:"type,omitempty"` - // Optional field. Default value of the runtime parameter. If not set and - // the runtime parameter value is not provided during runtime, an error will - // be raised. - DefaultValue *Value `protobuf:"bytes,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` -} - -func (x *PipelineSpec_RuntimeParameter) Reset() { - *x = PipelineSpec_RuntimeParameter{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineSpec_RuntimeParameter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineSpec_RuntimeParameter) ProtoMessage() {} - -func (x *PipelineSpec_RuntimeParameter) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineSpec_RuntimeParameter.ProtoReflect.Descriptor instead. -func (*PipelineSpec_RuntimeParameter) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{1, 0} -} - -func (x *PipelineSpec_RuntimeParameter) GetType() PrimitiveType_PrimitiveTypeEnum { - if x != nil { - return x.Type - } - return PrimitiveType_PRIMITIVE_TYPE_UNSPECIFIED -} - -func (x *PipelineSpec_RuntimeParameter) GetDefaultValue() *Value { - if x != nil { - return x.DefaultValue - } - return nil -} - -// Selects a defined output artifact from a sub task of the DAG. -type DagOutputsSpec_ArtifactSelectorSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the sub task which produces the output that matches with - // the `output_artifact_key`. - ProducerSubtask string `protobuf:"bytes,1,opt,name=producer_subtask,json=producerSubtask,proto3" json:"producer_subtask,omitempty"` - // The key of [ComponentOutputsSpec.artifacts][] map of the producer task. - OutputArtifactKey string `protobuf:"bytes,2,opt,name=output_artifact_key,json=outputArtifactKey,proto3" json:"output_artifact_key,omitempty"` -} - -func (x *DagOutputsSpec_ArtifactSelectorSpec) Reset() { - *x = DagOutputsSpec_ArtifactSelectorSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DagOutputsSpec_ArtifactSelectorSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DagOutputsSpec_ArtifactSelectorSpec) ProtoMessage() {} - -func (x *DagOutputsSpec_ArtifactSelectorSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DagOutputsSpec_ArtifactSelectorSpec.ProtoReflect.Descriptor instead. -func (*DagOutputsSpec_ArtifactSelectorSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{4, 0} -} - -func (x *DagOutputsSpec_ArtifactSelectorSpec) GetProducerSubtask() string { - if x != nil { - return x.ProducerSubtask - } - return "" -} - -func (x *DagOutputsSpec_ArtifactSelectorSpec) GetOutputArtifactKey() string { - if x != nil { - return x.OutputArtifactKey - } - return "" -} - -// Selects a list of output artifacts that will be aggregated to the single -// output artifact channel of the DAG. -type DagOutputsSpec_DagOutputArtifactSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The selected artifacts will be aggregated as output as a single - // output channel of the DAG. - ArtifactSelectors []*DagOutputsSpec_ArtifactSelectorSpec `protobuf:"bytes,1,rep,name=artifact_selectors,json=artifactSelectors,proto3" json:"artifact_selectors,omitempty"` -} - -func (x *DagOutputsSpec_DagOutputArtifactSpec) Reset() { - *x = DagOutputsSpec_DagOutputArtifactSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DagOutputsSpec_DagOutputArtifactSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DagOutputsSpec_DagOutputArtifactSpec) ProtoMessage() {} - -func (x *DagOutputsSpec_DagOutputArtifactSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DagOutputsSpec_DagOutputArtifactSpec.ProtoReflect.Descriptor instead. -func (*DagOutputsSpec_DagOutputArtifactSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{4, 1} -} - -func (x *DagOutputsSpec_DagOutputArtifactSpec) GetArtifactSelectors() []*DagOutputsSpec_ArtifactSelectorSpec { - if x != nil { - return x.ArtifactSelectors - } - return nil -} - -// Selects a defined output parameter from a sub task of the DAG. -type DagOutputsSpec_ParameterSelectorSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the sub task which produces the output that matches with - // the `output_parameter_key`. - ProducerSubtask string `protobuf:"bytes,1,opt,name=producer_subtask,json=producerSubtask,proto3" json:"producer_subtask,omitempty"` - // The key of [ComponentOutputsSpec.parameters][] map of the producer task. - OutputParameterKey string `protobuf:"bytes,2,opt,name=output_parameter_key,json=outputParameterKey,proto3" json:"output_parameter_key,omitempty"` -} - -func (x *DagOutputsSpec_ParameterSelectorSpec) Reset() { - *x = DagOutputsSpec_ParameterSelectorSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DagOutputsSpec_ParameterSelectorSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DagOutputsSpec_ParameterSelectorSpec) ProtoMessage() {} - -func (x *DagOutputsSpec_ParameterSelectorSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DagOutputsSpec_ParameterSelectorSpec.ProtoReflect.Descriptor instead. -func (*DagOutputsSpec_ParameterSelectorSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{4, 3} -} - -func (x *DagOutputsSpec_ParameterSelectorSpec) GetProducerSubtask() string { - if x != nil { - return x.ProducerSubtask - } - return "" -} - -func (x *DagOutputsSpec_ParameterSelectorSpec) GetOutputParameterKey() string { - if x != nil { - return x.OutputParameterKey - } - return "" -} - -// Aggregate output parameters from sub tasks into a list object. -type DagOutputsSpec_ParameterSelectorsSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ParameterSelectors []*DagOutputsSpec_ParameterSelectorSpec `protobuf:"bytes,1,rep,name=parameter_selectors,json=parameterSelectors,proto3" json:"parameter_selectors,omitempty"` -} - -func (x *DagOutputsSpec_ParameterSelectorsSpec) Reset() { - *x = DagOutputsSpec_ParameterSelectorsSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DagOutputsSpec_ParameterSelectorsSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DagOutputsSpec_ParameterSelectorsSpec) ProtoMessage() {} - -func (x *DagOutputsSpec_ParameterSelectorsSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DagOutputsSpec_ParameterSelectorsSpec.ProtoReflect.Descriptor instead. -func (*DagOutputsSpec_ParameterSelectorsSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{4, 4} -} - -func (x *DagOutputsSpec_ParameterSelectorsSpec) GetParameterSelectors() []*DagOutputsSpec_ParameterSelectorSpec { - if x != nil { - return x.ParameterSelectors - } - return nil -} - -// Aggregates output parameters from sub tasks into a map object. -type DagOutputsSpec_MapParameterSelectorsSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MappedParameters map[string]*DagOutputsSpec_ParameterSelectorSpec `protobuf:"bytes,2,rep,name=mapped_parameters,json=mappedParameters,proto3" json:"mapped_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *DagOutputsSpec_MapParameterSelectorsSpec) Reset() { - *x = DagOutputsSpec_MapParameterSelectorsSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DagOutputsSpec_MapParameterSelectorsSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DagOutputsSpec_MapParameterSelectorsSpec) ProtoMessage() {} - -func (x *DagOutputsSpec_MapParameterSelectorsSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DagOutputsSpec_MapParameterSelectorsSpec.ProtoReflect.Descriptor instead. -func (*DagOutputsSpec_MapParameterSelectorsSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{4, 5} -} - -func (x *DagOutputsSpec_MapParameterSelectorsSpec) GetMappedParameters() map[string]*DagOutputsSpec_ParameterSelectorSpec { - if x != nil { - return x.MappedParameters - } - return nil -} - -// We support four ways to fan-in output parameters from sub tasks to the DAG -// parent task. -// 1. Directly expose a single output parameter from a sub task, -// 2. (Conditional flow) Expose a list of output from multiple tasks -// (some might be skipped) but allows only one of the output being generated. -// 3. Expose a list of outputs from multiple tasks (e.g. iterator flow). -// 4. Expose the aggregation of output parameters as a name-value map. -type DagOutputsSpec_DagOutputParameterSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Kind: - // *DagOutputsSpec_DagOutputParameterSpec_ValueFromParameter - // *DagOutputsSpec_DagOutputParameterSpec_ValueFromOneof - Kind isDagOutputsSpec_DagOutputParameterSpec_Kind `protobuf_oneof:"kind"` -} - -func (x *DagOutputsSpec_DagOutputParameterSpec) Reset() { - *x = DagOutputsSpec_DagOutputParameterSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DagOutputsSpec_DagOutputParameterSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DagOutputsSpec_DagOutputParameterSpec) ProtoMessage() {} - -func (x *DagOutputsSpec_DagOutputParameterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DagOutputsSpec_DagOutputParameterSpec.ProtoReflect.Descriptor instead. -func (*DagOutputsSpec_DagOutputParameterSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{4, 6} -} - -func (m *DagOutputsSpec_DagOutputParameterSpec) GetKind() isDagOutputsSpec_DagOutputParameterSpec_Kind { - if m != nil { - return m.Kind - } - return nil -} - -func (x *DagOutputsSpec_DagOutputParameterSpec) GetValueFromParameter() *DagOutputsSpec_ParameterSelectorSpec { - if x, ok := x.GetKind().(*DagOutputsSpec_DagOutputParameterSpec_ValueFromParameter); ok { - return x.ValueFromParameter - } - return nil -} - -func (x *DagOutputsSpec_DagOutputParameterSpec) GetValueFromOneof() *DagOutputsSpec_ParameterSelectorsSpec { - if x, ok := x.GetKind().(*DagOutputsSpec_DagOutputParameterSpec_ValueFromOneof); ok { - return x.ValueFromOneof - } - return nil -} - -type isDagOutputsSpec_DagOutputParameterSpec_Kind interface { - isDagOutputsSpec_DagOutputParameterSpec_Kind() -} - -type DagOutputsSpec_DagOutputParameterSpec_ValueFromParameter struct { - // Returns the sub-task parameter as a DAG parameter. The selected - // parameter must have the same type as the DAG parameter type. - ValueFromParameter *DagOutputsSpec_ParameterSelectorSpec `protobuf:"bytes,1,opt,name=value_from_parameter,json=valueFromParameter,proto3,oneof"` -} - -type DagOutputsSpec_DagOutputParameterSpec_ValueFromOneof struct { - // Returns one of the sub-task parameters as a DAG parameter. If there are - // multiple values are available to select, the DAG will fail. All the - // selected parameters must have the same type as the DAG parameter type. - ValueFromOneof *DagOutputsSpec_ParameterSelectorsSpec `protobuf:"bytes,2,opt,name=value_from_oneof,json=valueFromOneof,proto3,oneof"` -} - -func (*DagOutputsSpec_DagOutputParameterSpec_ValueFromParameter) isDagOutputsSpec_DagOutputParameterSpec_Kind() { -} - -func (*DagOutputsSpec_DagOutputParameterSpec_ValueFromOneof) isDagOutputsSpec_DagOutputParameterSpec_Kind() { -} - -// Definition of an artifact input. -type ComponentInputsSpec_ArtifactSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ArtifactType *ArtifactTypeSchema `protobuf:"bytes,1,opt,name=artifact_type,json=artifactType,proto3" json:"artifact_type,omitempty"` -} - -func (x *ComponentInputsSpec_ArtifactSpec) Reset() { - *x = ComponentInputsSpec_ArtifactSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComponentInputsSpec_ArtifactSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComponentInputsSpec_ArtifactSpec) ProtoMessage() {} - -func (x *ComponentInputsSpec_ArtifactSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[38] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComponentInputsSpec_ArtifactSpec.ProtoReflect.Descriptor instead. -func (*ComponentInputsSpec_ArtifactSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{5, 0} -} - -func (x *ComponentInputsSpec_ArtifactSpec) GetArtifactType() *ArtifactTypeSchema { - if x != nil { - return x.ArtifactType - } - return nil -} - -// Definition of a parameter input. -type ComponentInputsSpec_ParameterSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type PrimitiveType_PrimitiveTypeEnum `protobuf:"varint,1,opt,name=type,proto3,enum=ml_pipelines.PrimitiveType_PrimitiveTypeEnum" json:"type,omitempty"` -} - -func (x *ComponentInputsSpec_ParameterSpec) Reset() { - *x = ComponentInputsSpec_ParameterSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComponentInputsSpec_ParameterSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComponentInputsSpec_ParameterSpec) ProtoMessage() {} - -func (x *ComponentInputsSpec_ParameterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[39] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComponentInputsSpec_ParameterSpec.ProtoReflect.Descriptor instead. -func (*ComponentInputsSpec_ParameterSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{5, 1} -} - -func (x *ComponentInputsSpec_ParameterSpec) GetType() PrimitiveType_PrimitiveTypeEnum { - if x != nil { - return x.Type - } - return PrimitiveType_PRIMITIVE_TYPE_UNSPECIFIED -} - -// Definition of an artifact output. -type ComponentOutputsSpec_ArtifactSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ArtifactType *ArtifactTypeSchema `protobuf:"bytes,1,opt,name=artifact_type,json=artifactType,proto3" json:"artifact_type,omitempty"` - Properties map[string]*ValueOrRuntimeParameter `protobuf:"bytes,2,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - CustomProperties map[string]*ValueOrRuntimeParameter `protobuf:"bytes,3,rep,name=custom_properties,json=customProperties,proto3" json:"custom_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *ComponentOutputsSpec_ArtifactSpec) Reset() { - *x = ComponentOutputsSpec_ArtifactSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[42] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComponentOutputsSpec_ArtifactSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComponentOutputsSpec_ArtifactSpec) ProtoMessage() {} - -func (x *ComponentOutputsSpec_ArtifactSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[42] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComponentOutputsSpec_ArtifactSpec.ProtoReflect.Descriptor instead. -func (*ComponentOutputsSpec_ArtifactSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{6, 0} -} - -func (x *ComponentOutputsSpec_ArtifactSpec) GetArtifactType() *ArtifactTypeSchema { - if x != nil { - return x.ArtifactType - } - return nil -} - -func (x *ComponentOutputsSpec_ArtifactSpec) GetProperties() map[string]*ValueOrRuntimeParameter { - if x != nil { - return x.Properties - } - return nil -} - -func (x *ComponentOutputsSpec_ArtifactSpec) GetCustomProperties() map[string]*ValueOrRuntimeParameter { - if x != nil { - return x.CustomProperties - } - return nil -} - -// Definition of a parameter output. -type ComponentOutputsSpec_ParameterSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type PrimitiveType_PrimitiveTypeEnum `protobuf:"varint,1,opt,name=type,proto3,enum=ml_pipelines.PrimitiveType_PrimitiveTypeEnum" json:"type,omitempty"` -} - -func (x *ComponentOutputsSpec_ParameterSpec) Reset() { - *x = ComponentOutputsSpec_ParameterSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[43] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComponentOutputsSpec_ParameterSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComponentOutputsSpec_ParameterSpec) ProtoMessage() {} - -func (x *ComponentOutputsSpec_ParameterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[43] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComponentOutputsSpec_ParameterSpec.ProtoReflect.Descriptor instead. -func (*ComponentOutputsSpec_ParameterSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{6, 1} -} - -func (x *ComponentOutputsSpec_ParameterSpec) GetType() PrimitiveType_PrimitiveTypeEnum { - if x != nil { - return x.Type - } - return PrimitiveType_PRIMITIVE_TYPE_UNSPECIFIED -} - -// The specification of a task input artifact. -type TaskInputsSpec_InputArtifactSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the upstream task which produces the output that matches with - // the `output_artifact_key`. - // Deprecated, use - // [TaskInputSpec.InputArtifactSpec.TaskOutputArtifactSpec][] instead. - // - // Deprecated: Do not use. - ProducerTask string `protobuf:"bytes,1,opt,name=producer_task,json=producerTask,proto3" json:"producer_task,omitempty"` - // The key of [TaskOutputsSpec.artifacts][] map of the producer task. - // Deprecated, use - // [TaskInputSpec.InputArtifactSpec.TaskOutputArtifactSpec][] instead. - // - // Deprecated: Do not use. - OutputArtifactKey string `protobuf:"bytes,2,opt,name=output_artifact_key,json=outputArtifactKey,proto3" json:"output_artifact_key,omitempty"` - // Types that are assignable to Kind: - // *TaskInputsSpec_InputArtifactSpec_TaskOutputArtifact - // *TaskInputsSpec_InputArtifactSpec_ComponentInputArtifact - Kind isTaskInputsSpec_InputArtifactSpec_Kind `protobuf_oneof:"kind"` -} - -func (x *TaskInputsSpec_InputArtifactSpec) Reset() { - *x = TaskInputsSpec_InputArtifactSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[48] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TaskInputsSpec_InputArtifactSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TaskInputsSpec_InputArtifactSpec) ProtoMessage() {} - -func (x *TaskInputsSpec_InputArtifactSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[48] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TaskInputsSpec_InputArtifactSpec.ProtoReflect.Descriptor instead. -func (*TaskInputsSpec_InputArtifactSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{7, 0} -} - -// Deprecated: Do not use. -func (x *TaskInputsSpec_InputArtifactSpec) GetProducerTask() string { - if x != nil { - return x.ProducerTask - } - return "" -} - -// Deprecated: Do not use. -func (x *TaskInputsSpec_InputArtifactSpec) GetOutputArtifactKey() string { - if x != nil { - return x.OutputArtifactKey - } - return "" -} - -func (m *TaskInputsSpec_InputArtifactSpec) GetKind() isTaskInputsSpec_InputArtifactSpec_Kind { - if m != nil { - return m.Kind - } - return nil -} - -func (x *TaskInputsSpec_InputArtifactSpec) GetTaskOutputArtifact() *TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec { - if x, ok := x.GetKind().(*TaskInputsSpec_InputArtifactSpec_TaskOutputArtifact); ok { - return x.TaskOutputArtifact - } - return nil -} - -func (x *TaskInputsSpec_InputArtifactSpec) GetComponentInputArtifact() string { - if x, ok := x.GetKind().(*TaskInputsSpec_InputArtifactSpec_ComponentInputArtifact); ok { - return x.ComponentInputArtifact - } - return "" -} - -type isTaskInputsSpec_InputArtifactSpec_Kind interface { - isTaskInputsSpec_InputArtifactSpec_Kind() -} - -type TaskInputsSpec_InputArtifactSpec_TaskOutputArtifact struct { - // Pass the input artifact from another task within the same parent - // component. - TaskOutputArtifact *TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec `protobuf:"bytes,3,opt,name=task_output_artifact,json=taskOutputArtifact,proto3,oneof"` -} - -type TaskInputsSpec_InputArtifactSpec_ComponentInputArtifact struct { - // Pass the input artifact from parent component input artifact. - ComponentInputArtifact string `protobuf:"bytes,4,opt,name=component_input_artifact,json=componentInputArtifact,proto3,oneof"` -} - -func (*TaskInputsSpec_InputArtifactSpec_TaskOutputArtifact) isTaskInputsSpec_InputArtifactSpec_Kind() { -} - -func (*TaskInputsSpec_InputArtifactSpec_ComponentInputArtifact) isTaskInputsSpec_InputArtifactSpec_Kind() { -} - -// Represents an input parameter. The value can be taken from an upstream -// task's output parameter (if specifying `producer_task` and -// `output_parameter_key`, or it can be a runtime value, which can either be -// determined at compile-time, or from a pipeline parameter. -type TaskInputsSpec_InputParameterSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Kind: - // *TaskInputsSpec_InputParameterSpec_TaskOutputParameter - // *TaskInputsSpec_InputParameterSpec_RuntimeValue - // *TaskInputsSpec_InputParameterSpec_ComponentInputParameter - Kind isTaskInputsSpec_InputParameterSpec_Kind `protobuf_oneof:"kind"` -} - -func (x *TaskInputsSpec_InputParameterSpec) Reset() { - *x = TaskInputsSpec_InputParameterSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[49] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TaskInputsSpec_InputParameterSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TaskInputsSpec_InputParameterSpec) ProtoMessage() {} - -func (x *TaskInputsSpec_InputParameterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[49] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TaskInputsSpec_InputParameterSpec.ProtoReflect.Descriptor instead. -func (*TaskInputsSpec_InputParameterSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{7, 1} -} - -func (m *TaskInputsSpec_InputParameterSpec) GetKind() isTaskInputsSpec_InputParameterSpec_Kind { - if m != nil { - return m.Kind - } - return nil -} - -func (x *TaskInputsSpec_InputParameterSpec) GetTaskOutputParameter() *TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec { - if x, ok := x.GetKind().(*TaskInputsSpec_InputParameterSpec_TaskOutputParameter); ok { - return x.TaskOutputParameter - } - return nil -} - -func (x *TaskInputsSpec_InputParameterSpec) GetRuntimeValue() *ValueOrRuntimeParameter { - if x, ok := x.GetKind().(*TaskInputsSpec_InputParameterSpec_RuntimeValue); ok { - return x.RuntimeValue - } - return nil -} - -func (x *TaskInputsSpec_InputParameterSpec) GetComponentInputParameter() string { - if x, ok := x.GetKind().(*TaskInputsSpec_InputParameterSpec_ComponentInputParameter); ok { - return x.ComponentInputParameter - } - return "" -} - -type isTaskInputsSpec_InputParameterSpec_Kind interface { - isTaskInputsSpec_InputParameterSpec_Kind() -} - -type TaskInputsSpec_InputParameterSpec_TaskOutputParameter struct { - // Output parameter from an upstream task. - TaskOutputParameter *TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec `protobuf:"bytes,1,opt,name=task_output_parameter,json=taskOutputParameter,proto3,oneof"` -} - -type TaskInputsSpec_InputParameterSpec_RuntimeValue struct { - // A constant value or runtime parameter. - RuntimeValue *ValueOrRuntimeParameter `protobuf:"bytes,2,opt,name=runtime_value,json=runtimeValue,proto3,oneof"` -} - -type TaskInputsSpec_InputParameterSpec_ComponentInputParameter struct { - // Pass the input parameter from parent component input parameter. - ComponentInputParameter string `protobuf:"bytes,3,opt,name=component_input_parameter,json=componentInputParameter,proto3,oneof"` -} - -func (*TaskInputsSpec_InputParameterSpec_TaskOutputParameter) isTaskInputsSpec_InputParameterSpec_Kind() { -} - -func (*TaskInputsSpec_InputParameterSpec_RuntimeValue) isTaskInputsSpec_InputParameterSpec_Kind() {} - -func (*TaskInputsSpec_InputParameterSpec_ComponentInputParameter) isTaskInputsSpec_InputParameterSpec_Kind() { -} - -type TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the upstream task which produces the output that matches - // with the `output_artifact_key`. - ProducerTask string `protobuf:"bytes,1,opt,name=producer_task,json=producerTask,proto3" json:"producer_task,omitempty"` - // The key of [TaskOutputsSpec.artifacts][] map of the producer task. - OutputArtifactKey string `protobuf:"bytes,2,opt,name=output_artifact_key,json=outputArtifactKey,proto3" json:"output_artifact_key,omitempty"` -} - -func (x *TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec) Reset() { - *x = TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[52] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec) ProtoMessage() {} - -func (x *TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[52] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec.ProtoReflect.Descriptor instead. -func (*TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{7, 0, 0} -} - -func (x *TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec) GetProducerTask() string { - if x != nil { - return x.ProducerTask - } - return "" -} - -func (x *TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec) GetOutputArtifactKey() string { - if x != nil { - return x.OutputArtifactKey - } - return "" -} - -// Represents an upstream task's output parameter. -type TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the upstream task which produces the output parameter that - // matches with the `output_parameter_key`. - ProducerTask string `protobuf:"bytes,1,opt,name=producer_task,json=producerTask,proto3" json:"producer_task,omitempty"` - // The key of [TaskOutputsSpec.parameters][] map of the producer task. - OutputParameterKey string `protobuf:"bytes,2,opt,name=output_parameter_key,json=outputParameterKey,proto3" json:"output_parameter_key,omitempty"` -} - -func (x *TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec) Reset() { - *x = TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[53] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec) ProtoMessage() {} - -func (x *TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[53] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec.ProtoReflect.Descriptor instead. -func (*TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{7, 1, 0} -} - -func (x *TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec) GetProducerTask() string { - if x != nil { - return x.ProducerTask - } - return "" -} - -func (x *TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec) GetOutputParameterKey() string { - if x != nil { - return x.OutputParameterKey - } - return "" -} - -// The specification of a task output artifact. -type TaskOutputsSpec_OutputArtifactSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The type of the artifact. - ArtifactType *ArtifactTypeSchema `protobuf:"bytes,1,opt,name=artifact_type,json=artifactType,proto3" json:"artifact_type,omitempty"` - // The properties of the artifact, which are determined either at - // compile-time, or at pipeline submission time through runtime parameters - Properties map[string]*ValueOrRuntimeParameter `protobuf:"bytes,2,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The custom properties of the artifact, which are determined either at - // compile-time, or at pipeline submission time through runtime parameters - CustomProperties map[string]*ValueOrRuntimeParameter `protobuf:"bytes,3,rep,name=custom_properties,json=customProperties,proto3" json:"custom_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *TaskOutputsSpec_OutputArtifactSpec) Reset() { - *x = TaskOutputsSpec_OutputArtifactSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[54] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TaskOutputsSpec_OutputArtifactSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TaskOutputsSpec_OutputArtifactSpec) ProtoMessage() {} - -func (x *TaskOutputsSpec_OutputArtifactSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[54] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TaskOutputsSpec_OutputArtifactSpec.ProtoReflect.Descriptor instead. -func (*TaskOutputsSpec_OutputArtifactSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{8, 0} -} - -func (x *TaskOutputsSpec_OutputArtifactSpec) GetArtifactType() *ArtifactTypeSchema { - if x != nil { - return x.ArtifactType - } - return nil -} - -func (x *TaskOutputsSpec_OutputArtifactSpec) GetProperties() map[string]*ValueOrRuntimeParameter { - if x != nil { - return x.Properties - } - return nil -} - -func (x *TaskOutputsSpec_OutputArtifactSpec) GetCustomProperties() map[string]*ValueOrRuntimeParameter { - if x != nil { - return x.CustomProperties - } - return nil -} - -// Specification for output parameters produced by the task. -type TaskOutputsSpec_OutputParameterSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required field. The type of the output parameter. - Type PrimitiveType_PrimitiveTypeEnum `protobuf:"varint,1,opt,name=type,proto3,enum=ml_pipelines.PrimitiveType_PrimitiveTypeEnum" json:"type,omitempty"` -} - -func (x *TaskOutputsSpec_OutputParameterSpec) Reset() { - *x = TaskOutputsSpec_OutputParameterSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[55] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TaskOutputsSpec_OutputParameterSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TaskOutputsSpec_OutputParameterSpec) ProtoMessage() {} - -func (x *TaskOutputsSpec_OutputParameterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[55] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TaskOutputsSpec_OutputParameterSpec.ProtoReflect.Descriptor instead. -func (*TaskOutputsSpec_OutputParameterSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{8, 1} -} - -func (x *TaskOutputsSpec_OutputParameterSpec) GetType() PrimitiveType_PrimitiveTypeEnum { - if x != nil { - return x.Type - } - return PrimitiveType_PRIMITIVE_TYPE_UNSPECIFIED -} - -type PipelineTaskSpec_CachingOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Whether or not to enable cache for this task. Defaults to false. - EnableCache bool `protobuf:"varint,1,opt,name=enable_cache,json=enableCache,proto3" json:"enable_cache,omitempty"` -} - -func (x *PipelineTaskSpec_CachingOptions) Reset() { - *x = PipelineTaskSpec_CachingOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[60] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineTaskSpec_CachingOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineTaskSpec_CachingOptions) ProtoMessage() {} - -func (x *PipelineTaskSpec_CachingOptions) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[60] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineTaskSpec_CachingOptions.ProtoReflect.Descriptor instead. -func (*PipelineTaskSpec_CachingOptions) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{10, 0} -} - -func (x *PipelineTaskSpec_CachingOptions) GetEnableCache() bool { - if x != nil { - return x.EnableCache - } - return false -} - -// The specification on a container invocation. -// The string fields of the message support string based placeholder contract -// defined in [ExecutorInput](). The output of the container follows the -// contract of [ExecutorOutput](). -type PipelineDeploymentConfig_PipelineContainerSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The image uri of the container. - Image string `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` - // The main entrypoint commands of the container to run. If not provided, - // fallback to use the entry point command defined in the container image. - Command []string `protobuf:"bytes,2,rep,name=command,proto3" json:"command,omitempty"` - // The arguments to pass into the main entrypoint of the container. - Args []string `protobuf:"bytes,3,rep,name=args,proto3" json:"args,omitempty"` - // The lifecycle hooks of the container executor. - Lifecycle *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle `protobuf:"bytes,4,opt,name=lifecycle,proto3" json:"lifecycle,omitempty"` - Resources *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec `protobuf:"bytes,5,opt,name=resources,proto3" json:"resources,omitempty"` -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec) Reset() { - *x = PipelineDeploymentConfig_PipelineContainerSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[61] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineDeploymentConfig_PipelineContainerSpec) ProtoMessage() {} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[61] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineDeploymentConfig_PipelineContainerSpec.ProtoReflect.Descriptor instead. -func (*PipelineDeploymentConfig_PipelineContainerSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{16, 0} -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec) GetImage() string { - if x != nil { - return x.Image - } - return "" -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec) GetCommand() []string { - if x != nil { - return x.Command - } - return nil -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec) GetArgs() []string { - if x != nil { - return x.Args - } - return nil -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec) GetLifecycle() *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle { - if x != nil { - return x.Lifecycle - } - return nil -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec) GetResources() *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec { - if x != nil { - return x.Resources - } - return nil -} - -// The specification to import or reimport a new artifact to the pipeline. -type PipelineDeploymentConfig_ImporterSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The URI of the artifact. - ArtifactUri *ValueOrRuntimeParameter `protobuf:"bytes,1,opt,name=artifact_uri,json=artifactUri,proto3" json:"artifact_uri,omitempty"` - // The type of the artifact. - TypeSchema *ArtifactTypeSchema `protobuf:"bytes,2,opt,name=type_schema,json=typeSchema,proto3" json:"type_schema,omitempty"` - // The properties of the artifact. - Properties map[string]*ValueOrRuntimeParameter `protobuf:"bytes,3,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The custom properties of the artifact. - CustomProperties map[string]*ValueOrRuntimeParameter `protobuf:"bytes,4,rep,name=custom_properties,json=customProperties,proto3" json:"custom_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Whether or not import an artifact regardless it has been imported before. - Reimport bool `protobuf:"varint,5,opt,name=reimport,proto3" json:"reimport,omitempty"` -} - -func (x *PipelineDeploymentConfig_ImporterSpec) Reset() { - *x = PipelineDeploymentConfig_ImporterSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[62] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineDeploymentConfig_ImporterSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineDeploymentConfig_ImporterSpec) ProtoMessage() {} - -func (x *PipelineDeploymentConfig_ImporterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[62] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineDeploymentConfig_ImporterSpec.ProtoReflect.Descriptor instead. -func (*PipelineDeploymentConfig_ImporterSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{16, 1} -} - -func (x *PipelineDeploymentConfig_ImporterSpec) GetArtifactUri() *ValueOrRuntimeParameter { - if x != nil { - return x.ArtifactUri - } - return nil -} - -func (x *PipelineDeploymentConfig_ImporterSpec) GetTypeSchema() *ArtifactTypeSchema { - if x != nil { - return x.TypeSchema - } - return nil -} - -func (x *PipelineDeploymentConfig_ImporterSpec) GetProperties() map[string]*ValueOrRuntimeParameter { - if x != nil { - return x.Properties - } - return nil -} - -func (x *PipelineDeploymentConfig_ImporterSpec) GetCustomProperties() map[string]*ValueOrRuntimeParameter { - if x != nil { - return x.CustomProperties - } - return nil -} - -func (x *PipelineDeploymentConfig_ImporterSpec) GetReimport() bool { - if x != nil { - return x.Reimport - } - return false -} - -// ResolverSpec resolves artifacts from historical metadata and returns them -// to the pipeline as output artifacts of the resolver task. The downstream -// tasks can consume them as their input artifacts. -type PipelineDeploymentConfig_ResolverSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A list of resolver output definitions. The - // key of the map must be exactly the same as - // the keys in the [TaskOutputsSpec.artifacts][] map. - // At least one output must be defined. - OutputArtifactQueries map[string]*PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec `protobuf:"bytes,1,rep,name=output_artifact_queries,json=outputArtifactQueries,proto3" json:"output_artifact_queries,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *PipelineDeploymentConfig_ResolverSpec) Reset() { - *x = PipelineDeploymentConfig_ResolverSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[63] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineDeploymentConfig_ResolverSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineDeploymentConfig_ResolverSpec) ProtoMessage() {} - -func (x *PipelineDeploymentConfig_ResolverSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[63] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineDeploymentConfig_ResolverSpec.ProtoReflect.Descriptor instead. -func (*PipelineDeploymentConfig_ResolverSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{16, 2} -} - -func (x *PipelineDeploymentConfig_ResolverSpec) GetOutputArtifactQueries() map[string]*PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec { - if x != nil { - return x.OutputArtifactQueries - } - return nil -} - -// The specification of the executor. -type PipelineDeploymentConfig_ExecutorSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Spec: - // *PipelineDeploymentConfig_ExecutorSpec_Container - // *PipelineDeploymentConfig_ExecutorSpec_Importer - // *PipelineDeploymentConfig_ExecutorSpec_Resolver - Spec isPipelineDeploymentConfig_ExecutorSpec_Spec `protobuf_oneof:"spec"` -} - -func (x *PipelineDeploymentConfig_ExecutorSpec) Reset() { - *x = PipelineDeploymentConfig_ExecutorSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[64] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineDeploymentConfig_ExecutorSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineDeploymentConfig_ExecutorSpec) ProtoMessage() {} - -func (x *PipelineDeploymentConfig_ExecutorSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[64] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineDeploymentConfig_ExecutorSpec.ProtoReflect.Descriptor instead. -func (*PipelineDeploymentConfig_ExecutorSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{16, 3} -} - -func (m *PipelineDeploymentConfig_ExecutorSpec) GetSpec() isPipelineDeploymentConfig_ExecutorSpec_Spec { - if m != nil { - return m.Spec - } - return nil -} - -func (x *PipelineDeploymentConfig_ExecutorSpec) GetContainer() *PipelineDeploymentConfig_PipelineContainerSpec { - if x, ok := x.GetSpec().(*PipelineDeploymentConfig_ExecutorSpec_Container); ok { - return x.Container - } - return nil -} - -func (x *PipelineDeploymentConfig_ExecutorSpec) GetImporter() *PipelineDeploymentConfig_ImporterSpec { - if x, ok := x.GetSpec().(*PipelineDeploymentConfig_ExecutorSpec_Importer); ok { - return x.Importer - } - return nil -} - -func (x *PipelineDeploymentConfig_ExecutorSpec) GetResolver() *PipelineDeploymentConfig_ResolverSpec { - if x, ok := x.GetSpec().(*PipelineDeploymentConfig_ExecutorSpec_Resolver); ok { - return x.Resolver - } - return nil -} - -type isPipelineDeploymentConfig_ExecutorSpec_Spec interface { - isPipelineDeploymentConfig_ExecutorSpec_Spec() -} - -type PipelineDeploymentConfig_ExecutorSpec_Container struct { - // Starts a container. - Container *PipelineDeploymentConfig_PipelineContainerSpec `protobuf:"bytes,1,opt,name=container,proto3,oneof"` -} - -type PipelineDeploymentConfig_ExecutorSpec_Importer struct { - // Import an artifact. - Importer *PipelineDeploymentConfig_ImporterSpec `protobuf:"bytes,2,opt,name=importer,proto3,oneof"` -} - -type PipelineDeploymentConfig_ExecutorSpec_Resolver struct { - // Resolves an existing artifact. - Resolver *PipelineDeploymentConfig_ResolverSpec `protobuf:"bytes,3,opt,name=resolver,proto3,oneof"` -} - -func (*PipelineDeploymentConfig_ExecutorSpec_Container) isPipelineDeploymentConfig_ExecutorSpec_Spec() { -} - -func (*PipelineDeploymentConfig_ExecutorSpec_Importer) isPipelineDeploymentConfig_ExecutorSpec_Spec() { -} - -func (*PipelineDeploymentConfig_ExecutorSpec_Resolver) isPipelineDeploymentConfig_ExecutorSpec_Spec() { -} - -// The lifecycle hooks of the container. -// Each hook follows the same I/O contract as the main container entrypoint. -// See [ExecutorInput]() and [ExecutorOutput]() for details. -// (-- TODO(b/165323565): add more documentation on caching and lifecycle -// hooks. --) -type PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // This hook is invoked before caching check. It can change the properties - // of the execution and output artifacts before they are used to compute - // the cache key. The updated metadata will be passed into the main - // container entrypoint. - PreCacheCheck *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec `protobuf:"bytes,1,opt,name=pre_cache_check,json=preCacheCheck,proto3" json:"pre_cache_check,omitempty"` -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle) Reset() { - *x = PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[66] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle) ProtoMessage() {} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[66] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle.ProtoReflect.Descriptor instead. -func (*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{16, 0, 0} -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle) GetPreCacheCheck() *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec { - if x != nil { - return x.PreCacheCheck - } - return nil -} - -// The specification on the resource requirements of a container execution. -// This can include specification of vCPU, memory requirements, as well as -// accelerator types and counts. -type PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The limit of the number of vCPU cores. This container execution needs - // at most cpu_limit vCPU to run. - CpuLimit float64 `protobuf:"fixed64,1,opt,name=cpu_limit,json=cpuLimit,proto3" json:"cpu_limit,omitempty"` - // The memory limit in GB. This container execution needs at most - // memory_limit RAM to run. - MemoryLimit float64 `protobuf:"fixed64,2,opt,name=memory_limit,json=memoryLimit,proto3" json:"memory_limit,omitempty"` - Accelerator *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig `protobuf:"bytes,3,opt,name=accelerator,proto3" json:"accelerator,omitempty"` -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec) Reset() { - *x = PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[67] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec) ProtoMessage() {} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[67] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec.ProtoReflect.Descriptor instead. -func (*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{16, 0, 1} -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec) GetCpuLimit() float64 { - if x != nil { - return x.CpuLimit - } - return 0 -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec) GetMemoryLimit() float64 { - if x != nil { - return x.MemoryLimit - } - return 0 -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec) GetAccelerator() *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig { - if x != nil { - return x.Accelerator - } - return nil -} - -// The command and args to execute a program. -type PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The command of the exec program. - Command []string `protobuf:"bytes,2,rep,name=command,proto3" json:"command,omitempty"` - // The args of the exec program. - Args []string `protobuf:"bytes,3,rep,name=args,proto3" json:"args,omitempty"` -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec) Reset() { - *x = PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[68] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec) ProtoMessage() {} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[68] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec.ProtoReflect.Descriptor instead. -func (*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{16, 0, 0, 0} -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec) GetCommand() []string { - if x != nil { - return x.Command - } - return nil -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec) GetArgs() []string { - if x != nil { - return x.Args - } - return nil -} - -// The specification on the accelerators being attached to this container. -type PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The type of accelerators. - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - // The number of accelerators. - Count int64 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig) Reset() { - *x = PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[69] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig) ProtoMessage() { -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[69] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig.ProtoReflect.Descriptor instead. -func (*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{16, 0, 1, 0} -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig) GetCount() int64 { - if x != nil { - return x.Count - } - return 0 -} - -// The query to fetch artifacts. -type PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The filter of the artifact query. The supported syntax are: - // - `contexts.name='<context name>'` - // - `artifact_type='<artifact type name>'` - // - `uri='<uri>'` - // - `state=<state>` - // - `properties['key']='value'` - // - `custom_properties['key']='value'` - // - `name='value'` - // - `and` to combine two conditions and returns when both are true. - // If no `contexts.name` filter is set, the query will be scoped to the - // the current pipeline context. - Filter string `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` - // The maximum number of the artifacts to be returned from the - // query. If not defined, the default limit is `1`. - Limit int32 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"` -} - -func (x *PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec) Reset() { - *x = PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[72] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec) ProtoMessage() {} - -func (x *PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[72] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec.ProtoReflect.Descriptor instead. -func (*PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{16, 2, 0} -} - -func (x *PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec) GetFilter() string { - if x != nil { - return x.Filter - } - return "" -} - -func (x *PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec) GetLimit() int32 { - if x != nil { - return x.Limit - } - return 0 -} - -// The runtime inputs data of the execution. -type ExecutorInput_Inputs struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Input parameters of the execution. - Parameters map[string]*Value `protobuf:"bytes,1,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Input artifacts of the execution. - Artifacts map[string]*ArtifactList `protobuf:"bytes,2,rep,name=artifacts,proto3" json:"artifacts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *ExecutorInput_Inputs) Reset() { - *x = ExecutorInput_Inputs{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[76] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExecutorInput_Inputs) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExecutorInput_Inputs) ProtoMessage() {} - -func (x *ExecutorInput_Inputs) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[76] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExecutorInput_Inputs.ProtoReflect.Descriptor instead. -func (*ExecutorInput_Inputs) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{20, 0} -} - -func (x *ExecutorInput_Inputs) GetParameters() map[string]*Value { - if x != nil { - return x.Parameters - } - return nil -} - -func (x *ExecutorInput_Inputs) GetArtifacts() map[string]*ArtifactList { - if x != nil { - return x.Artifacts - } - return nil -} - -// The runtime output parameter. -type ExecutorInput_OutputParameter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The file path which is used by the executor to pass the parameter value - // to the system. - OutputFile string `protobuf:"bytes,1,opt,name=output_file,json=outputFile,proto3" json:"output_file,omitempty"` -} - -func (x *ExecutorInput_OutputParameter) Reset() { - *x = ExecutorInput_OutputParameter{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[77] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExecutorInput_OutputParameter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExecutorInput_OutputParameter) ProtoMessage() {} - -func (x *ExecutorInput_OutputParameter) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[77] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExecutorInput_OutputParameter.ProtoReflect.Descriptor instead. -func (*ExecutorInput_OutputParameter) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{20, 1} -} - -func (x *ExecutorInput_OutputParameter) GetOutputFile() string { - if x != nil { - return x.OutputFile - } - return "" -} - -// The runtime outputs data of the execution. -type ExecutorInput_Outputs struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The runtime output parameters. - Parameters map[string]*ExecutorInput_OutputParameter `protobuf:"bytes,1,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The runtime output artifacts. - Artifacts map[string]*ArtifactList `protobuf:"bytes,2,rep,name=artifacts,proto3" json:"artifacts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The file path of the full output metadata JSON. The schema of the output - // file is [ExecutorOutput][]. - // - // When the full output metadata file is set by the container, the output - // parameter files will be ignored. - OutputFile string `protobuf:"bytes,3,opt,name=output_file,json=outputFile,proto3" json:"output_file,omitempty"` -} - -func (x *ExecutorInput_Outputs) Reset() { - *x = ExecutorInput_Outputs{} - if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[78] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExecutorInput_Outputs) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExecutorInput_Outputs) ProtoMessage() {} - -func (x *ExecutorInput_Outputs) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[78] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExecutorInput_Outputs.ProtoReflect.Descriptor instead. -func (*ExecutorInput_Outputs) Descriptor() ([]byte, []int) { - return file_pipeline_spec_proto_rawDescGZIP(), []int{20, 2} -} - -func (x *ExecutorInput_Outputs) GetParameters() map[string]*ExecutorInput_OutputParameter { - if x != nil { - return x.Parameters - } - return nil -} - -func (x *ExecutorInput_Outputs) GetArtifacts() map[string]*ArtifactList { - if x != nil { - return x.Artifacts - } - return nil -} - -func (x *ExecutorInput_Outputs) GetOutputFile() string { - if x != nil { - return x.OutputFile - } - return "" -} - -var File_pipeline_spec_proto protoreflect.FileDescriptor - -var file_pipeline_spec_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe7, 0x04, 0x0a, - 0x0b, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, - 0x73, 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x3d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, - 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4a, 0x6f, 0x62, 0x2e, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x12, 0x4e, 0x0a, 0x0e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x4a, 0x6f, 0x62, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xee, 0x01, 0x0a, 0x0d, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x57, 0x0a, - 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, - 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4a, 0x6f, 0x62, 0x2e, 0x52, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x67, 0x63, 0x73, 0x5f, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x67, 0x63, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x1a, 0x52, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x03, - 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, - 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, - 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x22, 0x9e, 0x07, 0x0a, 0x0c, 0x50, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3f, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x38, 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, - 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x74, 0x61, 0x73, - 0x6b, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x10, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x0f, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x73, - 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x73, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x12, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x1a, 0x8f, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, - 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x38, - 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x71, 0x0a, 0x16, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5a, 0x0a, 0x0f, 0x43, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x98, 0x02, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4e, 0x0a, 0x11, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, - 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x10, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x44, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x51, 0x0a, 0x12, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x03, - 0x64, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x53, 0x70, 0x65, 0x63, - 0x48, 0x00, 0x52, 0x03, 0x64, 0x61, 0x67, 0x12, 0x27, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x42, 0x10, 0x0a, 0x0e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0xd3, 0x01, 0x0a, 0x07, 0x44, 0x61, 0x67, 0x53, 0x70, 0x65, 0x63, 0x12, 0x36, - 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, - 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x1a, 0x58, - 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x34, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf0, 0x0a, 0x0a, 0x0e, 0x44, 0x61, 0x67, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x49, 0x0a, 0x09, 0x61, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, - 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, - 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x1a, 0x71, 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x29, 0x0a, 0x10, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, - 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x1a, 0x79, 0x0a, 0x15, 0x44, 0x61, 0x67, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, - 0x12, 0x60, 0x0a, 0x12, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x11, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x73, 0x1a, 0x70, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x48, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, - 0x70, 0x65, 0x63, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x74, 0x0a, 0x15, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x29, 0x0a, - 0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x61, 0x73, - 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, - 0x72, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x30, 0x0a, 0x14, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x1a, 0x7d, 0x0a, 0x16, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, - 0x53, 0x70, 0x65, 0x63, 0x12, 0x63, 0x0a, 0x13, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, - 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x12, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x1a, 0x8f, 0x02, 0x0a, 0x19, 0x4d, 0x61, - 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x79, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, - 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, - 0x2e, 0x4d, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x10, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x1a, 0x77, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x48, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xe9, 0x01, 0x0a, 0x16, - 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x66, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, - 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, - 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x12, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x5f, - 0x0a, 0x10, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6f, 0x6e, 0x65, - 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, - 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x42, - 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x1a, 0x72, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, - 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc1, 0x04, 0x0a, 0x13, - 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, - 0x70, 0x65, 0x63, 0x12, 0x4e, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x73, 0x12, 0x51, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x55, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x45, 0x0a, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x0c, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x52, 0x0a, - 0x0d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x41, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x6d, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, - 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x1a, 0x6c, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, - 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x6e, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xee, 0x07, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4f, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, 0x6c, - 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, - 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, - 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, - 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0xfc, 0x03, - 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x45, - 0x0a, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0c, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5f, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x72, 0x0a, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x45, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, - 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, - 0x65, 0x63, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x64, 0x0a, 0x0f, 0x50, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x6a, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, - 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, - 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x52, 0x0a, 0x0d, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x41, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, - 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, - 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, - 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x1a, 0x6d, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x6f, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xc4, 0x09, 0x0a, 0x0e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, - 0x70, 0x65, 0x63, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x49, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, - 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x9e, 0x03, 0x0a, - 0x11, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x27, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x5f, 0x74, - 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x32, 0x0a, 0x13, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x12, - 0x79, 0x0a, 0x14, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, - 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, 0x61, - 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x12, 0x74, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x3a, 0x0a, 0x18, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x16, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x1a, 0x6d, 0x0a, 0x16, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, - 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x73, - 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, - 0x72, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, - 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x1a, 0x99, 0x03, - 0x0a, 0x12, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x53, 0x70, 0x65, 0x63, 0x12, 0x7d, 0x0a, 0x15, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, - 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x13, - 0x74, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, - 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, - 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x1a, - 0x70, 0x0a, 0x17, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x12, - 0x30, 0x0a, 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4b, 0x65, - 0x79, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x1a, 0x6e, 0x0a, 0x0f, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, - 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6c, 0x0a, 0x0e, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, - 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xef, 0x07, 0x0a, 0x0f, 0x54, 0x61, 0x73, 0x6b, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4d, 0x0a, 0x0a, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, - 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x09, 0x61, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, - 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x84, 0x04, 0x0a, 0x12, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x45, 0x0a, - 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0c, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x60, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x73, 0x0a, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x46, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, - 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, - 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, - 0x70, 0x65, 0x63, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x64, 0x0a, 0x0f, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x6a, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, - 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, - 0x13, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x53, 0x70, 0x65, 0x63, 0x12, 0x41, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x2e, - 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, - 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x70, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, 0x6c, - 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6e, 0x0a, 0x0e, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x65, 0x0a, 0x0d, 0x50, 0x72, 0x69, - 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x54, 0x0a, 0x11, 0x50, 0x72, - 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, - 0x1e, 0x0a, 0x1a, 0x50, 0x52, 0x49, 0x4d, 0x49, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x07, 0x0a, 0x03, 0x49, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x4f, 0x55, 0x42, - 0x4c, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, - 0x22, 0xe4, 0x03, 0x0a, 0x10, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, - 0x6b, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x34, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, - 0x01, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x61, - 0x73, 0x6b, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x65, 0x6e, - 0x64, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x56, 0x0a, 0x0f, 0x63, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, - 0x65, 0x63, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x0e, 0x63, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x72, - 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x66, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x66, 0x1a, 0x33, 0x0a, 0x0e, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, - 0x61, 0x63, 0x68, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x22, 0x22, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x22, 0x0a, 0x0c, 0x50, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x8d, 0x01, 0x0a, 0x12, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x5f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x72, 0x69, 0x12, 0x29, 0x0a, 0x0f, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, - 0x26, 0x0a, 0x10, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, - 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x48, 0x00, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x2d, 0x0a, 0x11, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x10, - 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xcc, 0x11, 0x0a, 0x18, 0x50, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x53, 0x0a, 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x1a, 0xf2, 0x05, 0x0a, 0x15, - 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x12, 0x64, 0x0a, 0x09, 0x6c, 0x69, 0x66, - 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x52, 0x09, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, - 0x67, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0xb6, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x66, - 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x73, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x5f, 0x63, 0x61, - 0x63, 0x68, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x4b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4c, 0x69, - 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x0d, 0x70, 0x72, - 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x1a, 0x34, 0x0a, 0x04, 0x45, - 0x78, 0x65, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, - 0x73, 0x1a, 0x8c, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x63, 0x70, 0x75, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x12, 0x7d, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x1a, 0x3d, 0x0a, 0x11, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x1a, 0xe6, 0x04, 0x0a, 0x0c, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x48, 0x0a, 0x0c, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x75, 0x72, - 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0b, - 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x55, 0x72, 0x69, 0x12, 0x41, 0x0a, 0x0b, 0x74, - 0x79, 0x70, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, - 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x52, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x63, - 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x12, 0x76, 0x0a, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x53, - 0x70, 0x65, 0x63, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, - 0x65, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, - 0x65, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x64, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, - 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6a, 0x0a, - 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xec, 0x02, 0x0a, 0x0c, 0x52, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x86, 0x01, 0x0a, 0x17, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x71, - 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x70, 0x65, - 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x1a, 0x41, 0x0a, 0x11, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x1a, 0x8f, 0x01, 0x0a, 0x1a, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x9a, 0x02, 0x0a, 0x0c, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x5c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x51, 0x0a, 0x08, 0x69, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, - 0x52, 0x08, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x12, 0x51, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x70, 0x65, - 0x63, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x42, 0x06, 0x0a, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x1a, 0x71, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x79, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0xcc, 0x03, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x41, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x75, 0x72, 0x69, 0x12, 0x4d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x12, 0x60, 0x0a, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x6f, - 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x52, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x2e, 0x43, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x1a, 0x52, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x41, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, - 0xb6, 0x07, 0x0a, 0x0d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, - 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x73, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x3d, 0x0a, - 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x73, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x1a, 0xdb, 0x02, 0x0a, - 0x06, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, - 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x2e, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4f, 0x0a, 0x09, 0x61, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x52, 0x0a, 0x0f, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x58, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x32, 0x0a, 0x0f, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, - 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x1a, 0x97, - 0x03, 0x0a, 0x07, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x53, 0x0a, 0x0a, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x73, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, - 0x50, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, - 0x6c, 0x65, 0x1a, 0x6a, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, - 0x70, 0x75, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, - 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, - 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd7, 0x02, 0x0a, 0x0e, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x4c, 0x0a, 0x0a, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x49, 0x0a, 0x09, 0x61, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x73, 0x1a, 0x52, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6c, - 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2f, 0x67, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_pipeline_spec_proto_rawDescOnce sync.Once - file_pipeline_spec_proto_rawDescData = file_pipeline_spec_proto_rawDesc -) - -func file_pipeline_spec_proto_rawDescGZIP() []byte { - file_pipeline_spec_proto_rawDescOnce.Do(func() { - file_pipeline_spec_proto_rawDescData = protoimpl.X.CompressGZIP(file_pipeline_spec_proto_rawDescData) - }) - return file_pipeline_spec_proto_rawDescData -} - -var file_pipeline_spec_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_pipeline_spec_proto_msgTypes = make([]protoimpl.MessageInfo, 85) -var file_pipeline_spec_proto_goTypes = []interface{}{ - (PrimitiveType_PrimitiveTypeEnum)(0), // 0: ml_pipelines.PrimitiveType.PrimitiveTypeEnum - (*PipelineJob)(nil), // 1: ml_pipelines.PipelineJob - (*PipelineSpec)(nil), // 2: ml_pipelines.PipelineSpec - (*ComponentSpec)(nil), // 3: ml_pipelines.ComponentSpec - (*DagSpec)(nil), // 4: ml_pipelines.DagSpec - (*DagOutputsSpec)(nil), // 5: ml_pipelines.DagOutputsSpec - (*ComponentInputsSpec)(nil), // 6: ml_pipelines.ComponentInputsSpec - (*ComponentOutputsSpec)(nil), // 7: ml_pipelines.ComponentOutputsSpec - (*TaskInputsSpec)(nil), // 8: ml_pipelines.TaskInputsSpec - (*TaskOutputsSpec)(nil), // 9: ml_pipelines.TaskOutputsSpec - (*PrimitiveType)(nil), // 10: ml_pipelines.PrimitiveType - (*PipelineTaskSpec)(nil), // 11: ml_pipelines.PipelineTaskSpec - (*ComponentRef)(nil), // 12: ml_pipelines.ComponentRef - (*PipelineInfo)(nil), // 13: ml_pipelines.PipelineInfo - (*ArtifactTypeSchema)(nil), // 14: ml_pipelines.ArtifactTypeSchema - (*PipelineTaskInfo)(nil), // 15: ml_pipelines.PipelineTaskInfo - (*ValueOrRuntimeParameter)(nil), // 16: ml_pipelines.ValueOrRuntimeParameter - (*PipelineDeploymentConfig)(nil), // 17: ml_pipelines.PipelineDeploymentConfig - (*Value)(nil), // 18: ml_pipelines.Value - (*RuntimeArtifact)(nil), // 19: ml_pipelines.RuntimeArtifact - (*ArtifactList)(nil), // 20: ml_pipelines.ArtifactList - (*ExecutorInput)(nil), // 21: ml_pipelines.ExecutorInput - (*ExecutorOutput)(nil), // 22: ml_pipelines.ExecutorOutput - nil, // 23: ml_pipelines.PipelineJob.LabelsEntry - (*PipelineJob_RuntimeConfig)(nil), // 24: ml_pipelines.PipelineJob.RuntimeConfig - nil, // 25: ml_pipelines.PipelineJob.RuntimeConfig.ParametersEntry - (*PipelineSpec_RuntimeParameter)(nil), // 26: ml_pipelines.PipelineSpec.RuntimeParameter - nil, // 27: ml_pipelines.PipelineSpec.RuntimeParametersEntry - nil, // 28: ml_pipelines.PipelineSpec.ComponentsEntry - nil, // 29: ml_pipelines.DagSpec.TasksEntry - (*DagOutputsSpec_ArtifactSelectorSpec)(nil), // 30: ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec - (*DagOutputsSpec_DagOutputArtifactSpec)(nil), // 31: ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec - nil, // 32: ml_pipelines.DagOutputsSpec.ArtifactsEntry - (*DagOutputsSpec_ParameterSelectorSpec)(nil), // 33: ml_pipelines.DagOutputsSpec.ParameterSelectorSpec - (*DagOutputsSpec_ParameterSelectorsSpec)(nil), // 34: ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec - (*DagOutputsSpec_MapParameterSelectorsSpec)(nil), // 35: ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec - (*DagOutputsSpec_DagOutputParameterSpec)(nil), // 36: ml_pipelines.DagOutputsSpec.DagOutputParameterSpec - nil, // 37: ml_pipelines.DagOutputsSpec.ParametersEntry - nil, // 38: ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.MappedParametersEntry - (*ComponentInputsSpec_ArtifactSpec)(nil), // 39: ml_pipelines.ComponentInputsSpec.ArtifactSpec - (*ComponentInputsSpec_ParameterSpec)(nil), // 40: ml_pipelines.ComponentInputsSpec.ParameterSpec - nil, // 41: ml_pipelines.ComponentInputsSpec.ArtifactsEntry - nil, // 42: ml_pipelines.ComponentInputsSpec.ParametersEntry - (*ComponentOutputsSpec_ArtifactSpec)(nil), // 43: ml_pipelines.ComponentOutputsSpec.ArtifactSpec - (*ComponentOutputsSpec_ParameterSpec)(nil), // 44: ml_pipelines.ComponentOutputsSpec.ParameterSpec - nil, // 45: ml_pipelines.ComponentOutputsSpec.ArtifactsEntry - nil, // 46: ml_pipelines.ComponentOutputsSpec.ParametersEntry - nil, // 47: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.PropertiesEntry - nil, // 48: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.CustomPropertiesEntry - (*TaskInputsSpec_InputArtifactSpec)(nil), // 49: ml_pipelines.TaskInputsSpec.InputArtifactSpec - (*TaskInputsSpec_InputParameterSpec)(nil), // 50: ml_pipelines.TaskInputsSpec.InputParameterSpec - nil, // 51: ml_pipelines.TaskInputsSpec.ParametersEntry - nil, // 52: ml_pipelines.TaskInputsSpec.ArtifactsEntry - (*TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec)(nil), // 53: ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec - (*TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec)(nil), // 54: ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec - (*TaskOutputsSpec_OutputArtifactSpec)(nil), // 55: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec - (*TaskOutputsSpec_OutputParameterSpec)(nil), // 56: ml_pipelines.TaskOutputsSpec.OutputParameterSpec - nil, // 57: ml_pipelines.TaskOutputsSpec.ParametersEntry - nil, // 58: ml_pipelines.TaskOutputsSpec.ArtifactsEntry - nil, // 59: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.PropertiesEntry - nil, // 60: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.CustomPropertiesEntry - (*PipelineTaskSpec_CachingOptions)(nil), // 61: ml_pipelines.PipelineTaskSpec.CachingOptions - (*PipelineDeploymentConfig_PipelineContainerSpec)(nil), // 62: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec - (*PipelineDeploymentConfig_ImporterSpec)(nil), // 63: ml_pipelines.PipelineDeploymentConfig.ImporterSpec - (*PipelineDeploymentConfig_ResolverSpec)(nil), // 64: ml_pipelines.PipelineDeploymentConfig.ResolverSpec - (*PipelineDeploymentConfig_ExecutorSpec)(nil), // 65: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec - nil, // 66: ml_pipelines.PipelineDeploymentConfig.ExecutorsEntry - (*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle)(nil), // 67: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle - (*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec)(nil), // 68: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec - (*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec)(nil), // 69: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec - (*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig)(nil), // 70: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig - nil, // 71: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.PropertiesEntry - nil, // 72: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.CustomPropertiesEntry - (*PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec)(nil), // 73: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec - nil, // 74: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.OutputArtifactQueriesEntry - nil, // 75: ml_pipelines.RuntimeArtifact.PropertiesEntry - nil, // 76: ml_pipelines.RuntimeArtifact.CustomPropertiesEntry - (*ExecutorInput_Inputs)(nil), // 77: ml_pipelines.ExecutorInput.Inputs - (*ExecutorInput_OutputParameter)(nil), // 78: ml_pipelines.ExecutorInput.OutputParameter - (*ExecutorInput_Outputs)(nil), // 79: ml_pipelines.ExecutorInput.Outputs - nil, // 80: ml_pipelines.ExecutorInput.Inputs.ParametersEntry - nil, // 81: ml_pipelines.ExecutorInput.Inputs.ArtifactsEntry - nil, // 82: ml_pipelines.ExecutorInput.Outputs.ParametersEntry - nil, // 83: ml_pipelines.ExecutorInput.Outputs.ArtifactsEntry - nil, // 84: ml_pipelines.ExecutorOutput.ParametersEntry - nil, // 85: ml_pipelines.ExecutorOutput.ArtifactsEntry - (*structpb.Struct)(nil), // 86: google.protobuf.Struct - (*anypb.Any)(nil), // 87: google.protobuf.Any -} -var file_pipeline_spec_proto_depIdxs = []int32{ - 86, // 0: ml_pipelines.PipelineJob.pipeline_spec:type_name -> google.protobuf.Struct - 23, // 1: ml_pipelines.PipelineJob.labels:type_name -> ml_pipelines.PipelineJob.LabelsEntry - 24, // 2: ml_pipelines.PipelineJob.runtime_config:type_name -> ml_pipelines.PipelineJob.RuntimeConfig - 13, // 3: ml_pipelines.PipelineSpec.pipeline_info:type_name -> ml_pipelines.PipelineInfo - 11, // 4: ml_pipelines.PipelineSpec.tasks:type_name -> ml_pipelines.PipelineTaskSpec - 87, // 5: ml_pipelines.PipelineSpec.deployment_config:type_name -> google.protobuf.Any - 86, // 6: ml_pipelines.PipelineSpec.deployment_spec:type_name -> google.protobuf.Struct - 27, // 7: ml_pipelines.PipelineSpec.runtime_parameters:type_name -> ml_pipelines.PipelineSpec.RuntimeParametersEntry - 28, // 8: ml_pipelines.PipelineSpec.components:type_name -> ml_pipelines.PipelineSpec.ComponentsEntry - 3, // 9: ml_pipelines.PipelineSpec.root:type_name -> ml_pipelines.ComponentSpec - 6, // 10: ml_pipelines.ComponentSpec.input_definitions:type_name -> ml_pipelines.ComponentInputsSpec - 7, // 11: ml_pipelines.ComponentSpec.output_definitions:type_name -> ml_pipelines.ComponentOutputsSpec - 4, // 12: ml_pipelines.ComponentSpec.dag:type_name -> ml_pipelines.DagSpec - 29, // 13: ml_pipelines.DagSpec.tasks:type_name -> ml_pipelines.DagSpec.TasksEntry - 5, // 14: ml_pipelines.DagSpec.outputs:type_name -> ml_pipelines.DagOutputsSpec - 32, // 15: ml_pipelines.DagOutputsSpec.artifacts:type_name -> ml_pipelines.DagOutputsSpec.ArtifactsEntry - 37, // 16: ml_pipelines.DagOutputsSpec.parameters:type_name -> ml_pipelines.DagOutputsSpec.ParametersEntry - 41, // 17: ml_pipelines.ComponentInputsSpec.artifacts:type_name -> ml_pipelines.ComponentInputsSpec.ArtifactsEntry - 42, // 18: ml_pipelines.ComponentInputsSpec.parameters:type_name -> ml_pipelines.ComponentInputsSpec.ParametersEntry - 45, // 19: ml_pipelines.ComponentOutputsSpec.artifacts:type_name -> ml_pipelines.ComponentOutputsSpec.ArtifactsEntry - 46, // 20: ml_pipelines.ComponentOutputsSpec.parameters:type_name -> ml_pipelines.ComponentOutputsSpec.ParametersEntry - 51, // 21: ml_pipelines.TaskInputsSpec.parameters:type_name -> ml_pipelines.TaskInputsSpec.ParametersEntry - 52, // 22: ml_pipelines.TaskInputsSpec.artifacts:type_name -> ml_pipelines.TaskInputsSpec.ArtifactsEntry - 57, // 23: ml_pipelines.TaskOutputsSpec.parameters:type_name -> ml_pipelines.TaskOutputsSpec.ParametersEntry - 58, // 24: ml_pipelines.TaskOutputsSpec.artifacts:type_name -> ml_pipelines.TaskOutputsSpec.ArtifactsEntry - 15, // 25: ml_pipelines.PipelineTaskSpec.task_info:type_name -> ml_pipelines.PipelineTaskInfo - 8, // 26: ml_pipelines.PipelineTaskSpec.inputs:type_name -> ml_pipelines.TaskInputsSpec - 9, // 27: ml_pipelines.PipelineTaskSpec.outputs:type_name -> ml_pipelines.TaskOutputsSpec - 61, // 28: ml_pipelines.PipelineTaskSpec.caching_options:type_name -> ml_pipelines.PipelineTaskSpec.CachingOptions - 12, // 29: ml_pipelines.PipelineTaskSpec.component_ref:type_name -> ml_pipelines.ComponentRef - 18, // 30: ml_pipelines.ValueOrRuntimeParameter.constant_value:type_name -> ml_pipelines.Value - 66, // 31: ml_pipelines.PipelineDeploymentConfig.executors:type_name -> ml_pipelines.PipelineDeploymentConfig.ExecutorsEntry - 14, // 32: ml_pipelines.RuntimeArtifact.type:type_name -> ml_pipelines.ArtifactTypeSchema - 75, // 33: ml_pipelines.RuntimeArtifact.properties:type_name -> ml_pipelines.RuntimeArtifact.PropertiesEntry - 76, // 34: ml_pipelines.RuntimeArtifact.custom_properties:type_name -> ml_pipelines.RuntimeArtifact.CustomPropertiesEntry - 19, // 35: ml_pipelines.ArtifactList.artifacts:type_name -> ml_pipelines.RuntimeArtifact - 77, // 36: ml_pipelines.ExecutorInput.inputs:type_name -> ml_pipelines.ExecutorInput.Inputs - 79, // 37: ml_pipelines.ExecutorInput.outputs:type_name -> ml_pipelines.ExecutorInput.Outputs - 84, // 38: ml_pipelines.ExecutorOutput.parameters:type_name -> ml_pipelines.ExecutorOutput.ParametersEntry - 85, // 39: ml_pipelines.ExecutorOutput.artifacts:type_name -> ml_pipelines.ExecutorOutput.ArtifactsEntry - 25, // 40: ml_pipelines.PipelineJob.RuntimeConfig.parameters:type_name -> ml_pipelines.PipelineJob.RuntimeConfig.ParametersEntry - 18, // 41: ml_pipelines.PipelineJob.RuntimeConfig.ParametersEntry.value:type_name -> ml_pipelines.Value - 0, // 42: ml_pipelines.PipelineSpec.RuntimeParameter.type:type_name -> ml_pipelines.PrimitiveType.PrimitiveTypeEnum - 18, // 43: ml_pipelines.PipelineSpec.RuntimeParameter.default_value:type_name -> ml_pipelines.Value - 26, // 44: ml_pipelines.PipelineSpec.RuntimeParametersEntry.value:type_name -> ml_pipelines.PipelineSpec.RuntimeParameter - 3, // 45: ml_pipelines.PipelineSpec.ComponentsEntry.value:type_name -> ml_pipelines.ComponentSpec - 11, // 46: ml_pipelines.DagSpec.TasksEntry.value:type_name -> ml_pipelines.PipelineTaskSpec - 30, // 47: ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.artifact_selectors:type_name -> ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec - 31, // 48: ml_pipelines.DagOutputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec - 33, // 49: ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.parameter_selectors:type_name -> ml_pipelines.DagOutputsSpec.ParameterSelectorSpec - 38, // 50: ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.mapped_parameters:type_name -> ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.MappedParametersEntry - 33, // 51: ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.value_from_parameter:type_name -> ml_pipelines.DagOutputsSpec.ParameterSelectorSpec - 34, // 52: ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.value_from_oneof:type_name -> ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec - 36, // 53: ml_pipelines.DagOutputsSpec.ParametersEntry.value:type_name -> ml_pipelines.DagOutputsSpec.DagOutputParameterSpec - 33, // 54: ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.MappedParametersEntry.value:type_name -> ml_pipelines.DagOutputsSpec.ParameterSelectorSpec - 14, // 55: ml_pipelines.ComponentInputsSpec.ArtifactSpec.artifact_type:type_name -> ml_pipelines.ArtifactTypeSchema - 0, // 56: ml_pipelines.ComponentInputsSpec.ParameterSpec.type:type_name -> ml_pipelines.PrimitiveType.PrimitiveTypeEnum - 39, // 57: ml_pipelines.ComponentInputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.ComponentInputsSpec.ArtifactSpec - 40, // 58: ml_pipelines.ComponentInputsSpec.ParametersEntry.value:type_name -> ml_pipelines.ComponentInputsSpec.ParameterSpec - 14, // 59: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.artifact_type:type_name -> ml_pipelines.ArtifactTypeSchema - 47, // 60: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.properties:type_name -> ml_pipelines.ComponentOutputsSpec.ArtifactSpec.PropertiesEntry - 48, // 61: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.custom_properties:type_name -> ml_pipelines.ComponentOutputsSpec.ArtifactSpec.CustomPropertiesEntry - 0, // 62: ml_pipelines.ComponentOutputsSpec.ParameterSpec.type:type_name -> ml_pipelines.PrimitiveType.PrimitiveTypeEnum - 43, // 63: ml_pipelines.ComponentOutputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.ComponentOutputsSpec.ArtifactSpec - 44, // 64: ml_pipelines.ComponentOutputsSpec.ParametersEntry.value:type_name -> ml_pipelines.ComponentOutputsSpec.ParameterSpec - 16, // 65: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.PropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 16, // 66: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.CustomPropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 53, // 67: ml_pipelines.TaskInputsSpec.InputArtifactSpec.task_output_artifact:type_name -> ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec - 54, // 68: ml_pipelines.TaskInputsSpec.InputParameterSpec.task_output_parameter:type_name -> ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec - 16, // 69: ml_pipelines.TaskInputsSpec.InputParameterSpec.runtime_value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 50, // 70: ml_pipelines.TaskInputsSpec.ParametersEntry.value:type_name -> ml_pipelines.TaskInputsSpec.InputParameterSpec - 49, // 71: ml_pipelines.TaskInputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.TaskInputsSpec.InputArtifactSpec - 14, // 72: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.artifact_type:type_name -> ml_pipelines.ArtifactTypeSchema - 59, // 73: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.properties:type_name -> ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.PropertiesEntry - 60, // 74: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.custom_properties:type_name -> ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.CustomPropertiesEntry - 0, // 75: ml_pipelines.TaskOutputsSpec.OutputParameterSpec.type:type_name -> ml_pipelines.PrimitiveType.PrimitiveTypeEnum - 56, // 76: ml_pipelines.TaskOutputsSpec.ParametersEntry.value:type_name -> ml_pipelines.TaskOutputsSpec.OutputParameterSpec - 55, // 77: ml_pipelines.TaskOutputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.TaskOutputsSpec.OutputArtifactSpec - 16, // 78: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.PropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 16, // 79: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.CustomPropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 67, // 80: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.lifecycle:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle - 68, // 81: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.resources:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec - 16, // 82: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.artifact_uri:type_name -> ml_pipelines.ValueOrRuntimeParameter - 14, // 83: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.type_schema:type_name -> ml_pipelines.ArtifactTypeSchema - 71, // 84: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.properties:type_name -> ml_pipelines.PipelineDeploymentConfig.ImporterSpec.PropertiesEntry - 72, // 85: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.custom_properties:type_name -> ml_pipelines.PipelineDeploymentConfig.ImporterSpec.CustomPropertiesEntry - 74, // 86: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.output_artifact_queries:type_name -> ml_pipelines.PipelineDeploymentConfig.ResolverSpec.OutputArtifactQueriesEntry - 62, // 87: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.container:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec - 63, // 88: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.importer:type_name -> ml_pipelines.PipelineDeploymentConfig.ImporterSpec - 64, // 89: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.resolver:type_name -> ml_pipelines.PipelineDeploymentConfig.ResolverSpec - 65, // 90: ml_pipelines.PipelineDeploymentConfig.ExecutorsEntry.value:type_name -> ml_pipelines.PipelineDeploymentConfig.ExecutorSpec - 69, // 91: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.pre_cache_check:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec - 70, // 92: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.accelerator:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig - 16, // 93: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.PropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 16, // 94: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.CustomPropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 73, // 95: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.OutputArtifactQueriesEntry.value:type_name -> ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec - 18, // 96: ml_pipelines.RuntimeArtifact.PropertiesEntry.value:type_name -> ml_pipelines.Value - 18, // 97: ml_pipelines.RuntimeArtifact.CustomPropertiesEntry.value:type_name -> ml_pipelines.Value - 80, // 98: ml_pipelines.ExecutorInput.Inputs.parameters:type_name -> ml_pipelines.ExecutorInput.Inputs.ParametersEntry - 81, // 99: ml_pipelines.ExecutorInput.Inputs.artifacts:type_name -> ml_pipelines.ExecutorInput.Inputs.ArtifactsEntry - 82, // 100: ml_pipelines.ExecutorInput.Outputs.parameters:type_name -> ml_pipelines.ExecutorInput.Outputs.ParametersEntry - 83, // 101: ml_pipelines.ExecutorInput.Outputs.artifacts:type_name -> ml_pipelines.ExecutorInput.Outputs.ArtifactsEntry - 18, // 102: ml_pipelines.ExecutorInput.Inputs.ParametersEntry.value:type_name -> ml_pipelines.Value - 20, // 103: ml_pipelines.ExecutorInput.Inputs.ArtifactsEntry.value:type_name -> ml_pipelines.ArtifactList - 78, // 104: ml_pipelines.ExecutorInput.Outputs.ParametersEntry.value:type_name -> ml_pipelines.ExecutorInput.OutputParameter - 20, // 105: ml_pipelines.ExecutorInput.Outputs.ArtifactsEntry.value:type_name -> ml_pipelines.ArtifactList - 18, // 106: ml_pipelines.ExecutorOutput.ParametersEntry.value:type_name -> ml_pipelines.Value - 20, // 107: ml_pipelines.ExecutorOutput.ArtifactsEntry.value:type_name -> ml_pipelines.ArtifactList - 108, // [108:108] is the sub-list for method output_type - 108, // [108:108] is the sub-list for method input_type - 108, // [108:108] is the sub-list for extension type_name - 108, // [108:108] is the sub-list for extension extendee - 0, // [0:108] is the sub-list for field type_name -} - -func init() { file_pipeline_spec_proto_init() } -func file_pipeline_spec_proto_init() { - if File_pipeline_spec_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_pipeline_spec_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineJob); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComponentSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DagSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DagOutputsSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComponentInputsSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComponentOutputsSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TaskInputsSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TaskOutputsSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrimitiveType); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineTaskSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComponentRef); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArtifactTypeSchema); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineTaskInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValueOrRuntimeParameter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineDeploymentConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Value); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RuntimeArtifact); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArtifactList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecutorInput); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecutorOutput); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineJob_RuntimeConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineSpec_RuntimeParameter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DagOutputsSpec_ArtifactSelectorSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DagOutputsSpec_DagOutputArtifactSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DagOutputsSpec_ParameterSelectorSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DagOutputsSpec_ParameterSelectorsSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DagOutputsSpec_MapParameterSelectorsSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DagOutputsSpec_DagOutputParameterSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComponentInputsSpec_ArtifactSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComponentInputsSpec_ParameterSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComponentOutputsSpec_ArtifactSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComponentOutputsSpec_ParameterSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TaskInputsSpec_InputArtifactSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TaskInputsSpec_InputParameterSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TaskOutputsSpec_OutputArtifactSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TaskOutputsSpec_OutputParameterSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineTaskSpec_CachingOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineDeploymentConfig_PipelineContainerSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineDeploymentConfig_ImporterSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineDeploymentConfig_ResolverSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineDeploymentConfig_ExecutorSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecutorInput_Inputs); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecutorInput_OutputParameter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pipeline_spec_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecutorInput_Outputs); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_pipeline_spec_proto_msgTypes[2].OneofWrappers = []interface{}{ - (*ComponentSpec_Dag)(nil), - (*ComponentSpec_ExecutorLabel)(nil), - } - file_pipeline_spec_proto_msgTypes[13].OneofWrappers = []interface{}{ - (*ArtifactTypeSchema_SchemaTitle)(nil), - (*ArtifactTypeSchema_SchemaUri)(nil), - (*ArtifactTypeSchema_InstanceSchema)(nil), - } - file_pipeline_spec_proto_msgTypes[15].OneofWrappers = []interface{}{ - (*ValueOrRuntimeParameter_ConstantValue)(nil), - (*ValueOrRuntimeParameter_RuntimeParameter)(nil), - } - file_pipeline_spec_proto_msgTypes[17].OneofWrappers = []interface{}{ - (*Value_IntValue)(nil), - (*Value_DoubleValue)(nil), - (*Value_StringValue)(nil), - } - file_pipeline_spec_proto_msgTypes[35].OneofWrappers = []interface{}{ - (*DagOutputsSpec_DagOutputParameterSpec_ValueFromParameter)(nil), - (*DagOutputsSpec_DagOutputParameterSpec_ValueFromOneof)(nil), - } - file_pipeline_spec_proto_msgTypes[48].OneofWrappers = []interface{}{ - (*TaskInputsSpec_InputArtifactSpec_TaskOutputArtifact)(nil), - (*TaskInputsSpec_InputArtifactSpec_ComponentInputArtifact)(nil), - } - file_pipeline_spec_proto_msgTypes[49].OneofWrappers = []interface{}{ - (*TaskInputsSpec_InputParameterSpec_TaskOutputParameter)(nil), - (*TaskInputsSpec_InputParameterSpec_RuntimeValue)(nil), - (*TaskInputsSpec_InputParameterSpec_ComponentInputParameter)(nil), - } - file_pipeline_spec_proto_msgTypes[64].OneofWrappers = []interface{}{ - (*PipelineDeploymentConfig_ExecutorSpec_Container)(nil), - (*PipelineDeploymentConfig_ExecutorSpec_Importer)(nil), - (*PipelineDeploymentConfig_ExecutorSpec_Resolver)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pipeline_spec_proto_rawDesc, - NumEnums: 1, - NumMessages: 85, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_pipeline_spec_proto_goTypes, - DependencyIndexes: file_pipeline_spec_proto_depIdxs, - EnumInfos: file_pipeline_spec_proto_enumTypes, - MessageInfos: file_pipeline_spec_proto_msgTypes, - }.Build() - File_pipeline_spec_proto = out.File - file_pipeline_spec_proto_rawDesc = nil - file_pipeline_spec_proto_goTypes = nil - file_pipeline_spec_proto_depIdxs = nil -} diff --git a/v2/third_party/pipeline_spec/pipeline_spec.pb.go b/api/v2alpha1/go/pipelinespec/pipeline_spec.pb.go similarity index 64% rename from v2/third_party/pipeline_spec/pipeline_spec.pb.go rename to api/v2alpha1/go/pipelinespec/pipeline_spec.pb.go index e6d02df1f0..a94be38879 100644 --- a/v2/third_party/pipeline_spec/pipeline_spec.pb.go +++ b/api/v2alpha1/go/pipelinespec/pipeline_spec.pb.go @@ -1,16 +1,17 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel -// protoc v3.6.1 +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: pipeline_spec.proto -package pipeline_spec +package pipelinespec import ( - any "github.com/golang/protobuf/ptypes/any" - _struct "github.com/golang/protobuf/ptypes/struct" + status "google.golang.org/genproto/googleapis/rpc/status" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + _ "google.golang.org/protobuf/types/known/anypb" + structpb "google.golang.org/protobuf/types/known/structpb" reflect "reflect" sync "sync" ) @@ -75,6 +76,163 @@ func (PrimitiveType_PrimitiveTypeEnum) EnumDescriptor() ([]byte, []int) { return file_pipeline_spec_proto_rawDescGZIP(), []int{9, 0} } +// An enum defines the trigger strategy of when the task will be ready to be +// triggered. +// ALL_UPSTREAM_TASKS_SUCCEEDED - all upstream tasks in succeeded state. +// ALL_UPSTREAM_TASKS_COMPLETED - all upstream tasks in any final state. +// (Note that CANCELLED is also a final state but job will not trigger new +// tasks when job is in CANCELLING state, so that the task with the trigger +// policy at ALL_UPSTREAM_TASKS_COMPLETED will not start when job +// cancellation is in progress.) +type PipelineTaskSpec_TriggerPolicy_TriggerStrategy int32 + +const ( + // Unspecified. Behave the same as ALL_UPSTREAM_TASKS_SUCCEEDED. + PipelineTaskSpec_TriggerPolicy_TRIGGER_STRATEGY_UNSPECIFIED PipelineTaskSpec_TriggerPolicy_TriggerStrategy = 0 + // Specifies that all upstream tasks are in succeeded state. + PipelineTaskSpec_TriggerPolicy_ALL_UPSTREAM_TASKS_SUCCEEDED PipelineTaskSpec_TriggerPolicy_TriggerStrategy = 1 + // Specifies that all upstream tasks are in any final state. + PipelineTaskSpec_TriggerPolicy_ALL_UPSTREAM_TASKS_COMPLETED PipelineTaskSpec_TriggerPolicy_TriggerStrategy = 2 +) + +// Enum value maps for PipelineTaskSpec_TriggerPolicy_TriggerStrategy. +var ( + PipelineTaskSpec_TriggerPolicy_TriggerStrategy_name = map[int32]string{ + 0: "TRIGGER_STRATEGY_UNSPECIFIED", + 1: "ALL_UPSTREAM_TASKS_SUCCEEDED", + 2: "ALL_UPSTREAM_TASKS_COMPLETED", + } + PipelineTaskSpec_TriggerPolicy_TriggerStrategy_value = map[string]int32{ + "TRIGGER_STRATEGY_UNSPECIFIED": 0, + "ALL_UPSTREAM_TASKS_SUCCEEDED": 1, + "ALL_UPSTREAM_TASKS_COMPLETED": 2, + } +) + +func (x PipelineTaskSpec_TriggerPolicy_TriggerStrategy) Enum() *PipelineTaskSpec_TriggerPolicy_TriggerStrategy { + p := new(PipelineTaskSpec_TriggerPolicy_TriggerStrategy) + *p = x + return p +} + +func (x PipelineTaskSpec_TriggerPolicy_TriggerStrategy) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PipelineTaskSpec_TriggerPolicy_TriggerStrategy) Descriptor() protoreflect.EnumDescriptor { + return file_pipeline_spec_proto_enumTypes[1].Descriptor() +} + +func (PipelineTaskSpec_TriggerPolicy_TriggerStrategy) Type() protoreflect.EnumType { + return &file_pipeline_spec_proto_enumTypes[1] +} + +func (x PipelineTaskSpec_TriggerPolicy_TriggerStrategy) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PipelineTaskSpec_TriggerPolicy_TriggerStrategy.Descriptor instead. +func (PipelineTaskSpec_TriggerPolicy_TriggerStrategy) EnumDescriptor() ([]byte, []int) { + return file_pipeline_spec_proto_rawDescGZIP(), []int{10, 1, 0} +} + +type PipelineStateEnum_PipelineTaskState int32 + +const ( + PipelineStateEnum_TASK_STATE_UNSPECIFIED PipelineStateEnum_PipelineTaskState = 0 + PipelineStateEnum_PENDING PipelineStateEnum_PipelineTaskState = 1 + PipelineStateEnum_RUNNING_DRIVER PipelineStateEnum_PipelineTaskState = 2 + PipelineStateEnum_DRIVER_SUCCEEDED PipelineStateEnum_PipelineTaskState = 3 + PipelineStateEnum_RUNNING_EXECUTOR PipelineStateEnum_PipelineTaskState = 4 + PipelineStateEnum_SUCCEEDED PipelineStateEnum_PipelineTaskState = 5 + PipelineStateEnum_CANCEL_PENDING PipelineStateEnum_PipelineTaskState = 6 + PipelineStateEnum_CANCELLING PipelineStateEnum_PipelineTaskState = 7 + PipelineStateEnum_CANCELLED PipelineStateEnum_PipelineTaskState = 8 + PipelineStateEnum_FAILED PipelineStateEnum_PipelineTaskState = 9 + // Indicates that the task is skipped to run due to a cache hit. + PipelineStateEnum_SKIPPED PipelineStateEnum_PipelineTaskState = 10 + // Indicates that the task was just populated to the DB but not ready to + // be scheduled. Once job handler determined the task being ready to + // be scheduled, the task state will change to PENDING. The state + // transition is depicted below: + // * QUEUED(not ready to run) --> PENDING(ready to run) --> RUNNING + PipelineStateEnum_QUEUED PipelineStateEnum_PipelineTaskState = 11 + // Indicates that the task is not triggered based on the + // [PipelineTaskSpec.TriggerPolicy.condition][] config. + PipelineStateEnum_NOT_TRIGGERED PipelineStateEnum_PipelineTaskState = 12 + // Indicates that the tasks will no longer be schedulable. Usually a task + // was set to this state because its all upstream tasks are in final state + // but the [PipelineTaskSpec.TriggerPolicy.strategy][] disallows the task to + // be triggered. + // The difference between `NOT_TRIGGERED` is that `UNSCHEDULABLE` must met + // [PipelineTaskSpec.TriggerPolicy.strategy][], but must not met the + // [PipelineTaskSpec.TriggerPolicy.condition][]. + PipelineStateEnum_UNSCHEDULABLE PipelineStateEnum_PipelineTaskState = 13 +) + +// Enum value maps for PipelineStateEnum_PipelineTaskState. +var ( + PipelineStateEnum_PipelineTaskState_name = map[int32]string{ + 0: "TASK_STATE_UNSPECIFIED", + 1: "PENDING", + 2: "RUNNING_DRIVER", + 3: "DRIVER_SUCCEEDED", + 4: "RUNNING_EXECUTOR", + 5: "SUCCEEDED", + 6: "CANCEL_PENDING", + 7: "CANCELLING", + 8: "CANCELLED", + 9: "FAILED", + 10: "SKIPPED", + 11: "QUEUED", + 12: "NOT_TRIGGERED", + 13: "UNSCHEDULABLE", + } + PipelineStateEnum_PipelineTaskState_value = map[string]int32{ + "TASK_STATE_UNSPECIFIED": 0, + "PENDING": 1, + "RUNNING_DRIVER": 2, + "DRIVER_SUCCEEDED": 3, + "RUNNING_EXECUTOR": 4, + "SUCCEEDED": 5, + "CANCEL_PENDING": 6, + "CANCELLING": 7, + "CANCELLED": 8, + "FAILED": 9, + "SKIPPED": 10, + "QUEUED": 11, + "NOT_TRIGGERED": 12, + "UNSCHEDULABLE": 13, + } +) + +func (x PipelineStateEnum_PipelineTaskState) Enum() *PipelineStateEnum_PipelineTaskState { + p := new(PipelineStateEnum_PipelineTaskState) + *p = x + return p +} + +func (x PipelineStateEnum_PipelineTaskState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PipelineStateEnum_PipelineTaskState) Descriptor() protoreflect.EnumDescriptor { + return file_pipeline_spec_proto_enumTypes[2].Descriptor() +} + +func (PipelineStateEnum_PipelineTaskState) Type() protoreflect.EnumType { + return &file_pipeline_spec_proto_enumTypes[2] +} + +func (x PipelineStateEnum_PipelineTaskState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PipelineStateEnum_PipelineTaskState.Descriptor instead. +func (PipelineStateEnum_PipelineTaskState) EnumDescriptor() ([]byte, []int) { + return file_pipeline_spec_proto_rawDescGZIP(), []int{25, 0} +} + // The spec of a pipeline job. type PipelineJob struct { state protoimpl.MessageState @@ -85,7 +243,7 @@ type PipelineJob struct { // User friendly display name DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` // Definition of the pipeline that is being executed. - PipelineSpec *_struct.Struct `protobuf:"bytes,7,opt,name=pipeline_spec,json=pipelineSpec,proto3" json:"pipeline_spec,omitempty"` + PipelineSpec *structpb.Struct `protobuf:"bytes,7,opt,name=pipeline_spec,json=pipelineSpec,proto3" json:"pipeline_spec,omitempty"` // The labels with user-defined metadata to organize PipelineJob. Labels map[string]string `protobuf:"bytes,11,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Runtime config of the pipeline. @@ -138,7 +296,7 @@ func (x *PipelineJob) GetDisplayName() string { return "" } -func (x *PipelineJob) GetPipelineSpec() *_struct.Struct { +func (x *PipelineJob) GetPipelineSpec() *structpb.Struct { if x != nil { return x.PipelineSpec } @@ -167,32 +325,13 @@ type PipelineSpec struct { // The metadata of the pipeline. PipelineInfo *PipelineInfo `protobuf:"bytes,1,opt,name=pipeline_info,json=pipelineInfo,proto3" json:"pipeline_info,omitempty"` - // A list of pipeline tasks, which form a DAG. - // Deprecated, use [PipelineSpec.root][] instead. - // - // Deprecated: Do not use. - Tasks []*PipelineTaskSpec `protobuf:"bytes,2,rep,name=tasks,proto3" json:"tasks,omitempty"` - // The deployment config of the pipeline. - // The deployment config can be extended to provide platform specific configs. - // The supported config is [PipelineDeploymentConifg](). - // Deprecated in favor of deployment_spec. - // - // Deprecated: Do not use. - DeploymentConfig *any.Any `protobuf:"bytes,3,opt,name=deployment_config,json=deploymentConfig,proto3" json:"deployment_config,omitempty"` // The deployment config of the pipeline. // The deployment config can be extended to provide platform specific configs. - DeploymentSpec *_struct.Struct `protobuf:"bytes,7,opt,name=deployment_spec,json=deploymentSpec,proto3" json:"deployment_spec,omitempty"` + DeploymentSpec *structpb.Struct `protobuf:"bytes,7,opt,name=deployment_spec,json=deploymentSpec,proto3" json:"deployment_spec,omitempty"` // The version of the sdk, which compiles the spec. SdkVersion string `protobuf:"bytes,4,opt,name=sdk_version,json=sdkVersion,proto3" json:"sdk_version,omitempty"` // The version of the schema. SchemaVersion string `protobuf:"bytes,5,opt,name=schema_version,json=schemaVersion,proto3" json:"schema_version,omitempty"` - // The runtime parameters of the pipeline. Keyed by parameter name. - // Deprecated, instead of defining the runtime_parameters, user can define - // [ComponentSpec.input_definitions][] field of the [PipelineSpec.root][] to - // define the pipeline parameters. - // - // Deprecated: Do not use. - RuntimeParameters map[string]*PipelineSpec_RuntimeParameter `protobuf:"bytes,6,rep,name=runtime_parameters,json=runtimeParameters,proto3" json:"runtime_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // The map of name to definition of all components used in this pipeline. Components map[string]*ComponentSpec `protobuf:"bytes,8,rep,name=components,proto3" json:"components,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // The definition of the main pipeline. Execution of the pipeline is @@ -239,23 +378,7 @@ func (x *PipelineSpec) GetPipelineInfo() *PipelineInfo { return nil } -// Deprecated: Do not use. -func (x *PipelineSpec) GetTasks() []*PipelineTaskSpec { - if x != nil { - return x.Tasks - } - return nil -} - -// Deprecated: Do not use. -func (x *PipelineSpec) GetDeploymentConfig() *any.Any { - if x != nil { - return x.DeploymentConfig - } - return nil -} - -func (x *PipelineSpec) GetDeploymentSpec() *_struct.Struct { +func (x *PipelineSpec) GetDeploymentSpec() *structpb.Struct { if x != nil { return x.DeploymentSpec } @@ -276,14 +399,6 @@ func (x *PipelineSpec) GetSchemaVersion() string { return "" } -// Deprecated: Do not use. -func (x *PipelineSpec) GetRuntimeParameters() map[string]*PipelineSpec_RuntimeParameter { - if x != nil { - return x.RuntimeParameters - } - return nil -} - func (x *PipelineSpec) GetComponents() map[string]*ComponentSpec { if x != nil { return x.Components @@ -805,32 +920,6 @@ type PipelineTaskSpec struct { TaskInfo *PipelineTaskInfo `protobuf:"bytes,1,opt,name=task_info,json=taskInfo,proto3" json:"task_info,omitempty"` // Specification for task inputs which contains parameters and artifacts. Inputs *TaskInputsSpec `protobuf:"bytes,2,opt,name=inputs,proto3" json:"inputs,omitempty"` - // Specification for task outputs. - // Deprecated, the output definition is moved to [ComponentSpec.outputs][]. - // - // Deprecated: Do not use. - Outputs *TaskOutputsSpec `protobuf:"bytes,3,opt,name=outputs,proto3" json:"outputs,omitempty"` - // Label for the executor of the task. - // The specification will be specified in the deployment config. - // For example: - // ``` - // tasks: - // - task_info: - // name: trainer - // executor_label: trainer - // deployment_config: - // @type: cloud.ml.pipelines.v1alpha3.proto.PipelineDeploymentConfig - // executors: - // trainer: - // container: - // image: gcr.io/tfx:latest - // args: [] - // ``` - // Deprecated, the executor_label is moved to - // [ComponentSpec.executor_label][]. - // - // Deprecated: Do not use. - ExecutorLabel string `protobuf:"bytes,4,opt,name=executor_label,json=executorLabel,proto3" json:"executor_label,omitempty"` // A list of names of upstream tasks that do not provide input // artifacts for this task, but nonetheless whose completion this task depends // on. @@ -913,22 +1002,6 @@ func (x *PipelineTaskSpec) GetInputs() *TaskInputsSpec { return nil } -// Deprecated: Do not use. -func (x *PipelineTaskSpec) GetOutputs() *TaskOutputsSpec { - if x != nil { - return x.Outputs - } - return nil -} - -// Deprecated: Do not use. -func (x *PipelineTaskSpec) GetExecutorLabel() string { - if x != nil { - return x.ExecutorLabel - } - return "" -} - func (x *PipelineTaskSpec) GetDependentTasks() []string { if x != nil { return x.DependentTasks @@ -1226,6 +1299,9 @@ type ArtifactTypeSchema struct { // *ArtifactTypeSchema_SchemaUri // *ArtifactTypeSchema_InstanceSchema Kind isArtifactTypeSchema_Kind `protobuf_oneof:"kind"` + // The schema version of the artifact. If the value is not set, it defaults + // to the the latest version in the system. + SchemaVersion string `protobuf:"bytes,4,opt,name=schema_version,json=schemaVersion,proto3" json:"schema_version,omitempty"` } func (x *ArtifactTypeSchema) Reset() { @@ -1274,6 +1350,7 @@ func (x *ArtifactTypeSchema) GetSchemaTitle() string { return "" } +// Deprecated: Do not use. func (x *ArtifactTypeSchema) GetSchemaUri() string { if x, ok := x.GetKind().(*ArtifactTypeSchema_SchemaUri); ok { return x.SchemaUri @@ -1288,16 +1365,23 @@ func (x *ArtifactTypeSchema) GetInstanceSchema() string { return "" } +func (x *ArtifactTypeSchema) GetSchemaVersion() string { + if x != nil { + return x.SchemaVersion + } + return "" +} + type isArtifactTypeSchema_Kind interface { isArtifactTypeSchema_Kind() } type ArtifactTypeSchema_SchemaTitle struct { // The name of the type. The format of the title must be: - // `<namespace>.<title>.<version>`. + // `<namespace>.<title>`. // Examples: - // - `aiplatform.Model.v1` - // - `acme.CustomModel.v2` + // - `aiplatform.Model` + // - `acme.CustomModel` // When this field is set, the type must be pre-registered in the MLMD // store. SchemaTitle string `protobuf:"bytes,1,opt,name=schema_title,json=schemaTitle,proto3,oneof"` @@ -1306,6 +1390,10 @@ type ArtifactTypeSchema_SchemaTitle struct { type ArtifactTypeSchema_SchemaUri struct { // Points to a YAML file stored on Google Cloud Storage describing the // format. + // Deprecated. Use [PipelineArtifactTypeSchema.schema_title][] or + // [PipelineArtifactTypeSchema.instance_schema][] instead. + // + // Deprecated: Do not use. SchemaUri string `protobuf:"bytes,2,opt,name=schema_uri,json=schemaUri,proto3,oneof"` } @@ -1449,7 +1537,7 @@ type ValueOrRuntimeParameter_ConstantValue struct { } type ValueOrRuntimeParameter_RuntimeParameter struct { - // Name of the runtime parameter. + // The runtime parameter refers to the parent component input parameter. RuntimeParameter string `protobuf:"bytes,2,opt,name=runtime_parameter,json=runtimeParameter,proto3,oneof"` } @@ -1618,9 +1706,17 @@ type RuntimeArtifact struct { // The URI of the artifact. Uri string `protobuf:"bytes,3,opt,name=uri,proto3" json:"uri,omitempty"` // The properties of the artifact. + // Deprecated. Use [RuntimeArtifact.metadata][] instead. + // + // Deprecated: Do not use. Properties map[string]*Value `protobuf:"bytes,4,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // The custom properties of the artifact. + // Deprecated. Use [RuntimeArtifact.metadata][] instead. + // + // Deprecated: Do not use. CustomProperties map[string]*Value `protobuf:"bytes,5,rep,name=custom_properties,json=customProperties,proto3" json:"custom_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Properties of the Artifact. + Metadata *structpb.Struct `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` } func (x *RuntimeArtifact) Reset() { @@ -1676,6 +1772,7 @@ func (x *RuntimeArtifact) GetUri() string { return "" } +// Deprecated: Do not use. func (x *RuntimeArtifact) GetProperties() map[string]*Value { if x != nil { return x.Properties @@ -1683,6 +1780,7 @@ func (x *RuntimeArtifact) GetProperties() map[string]*Value { return nil } +// Deprecated: Do not use. func (x *RuntimeArtifact) GetCustomProperties() map[string]*Value { if x != nil { return x.CustomProperties @@ -1690,6 +1788,13 @@ func (x *RuntimeArtifact) GetCustomProperties() map[string]*Value { return nil } +func (x *RuntimeArtifact) GetMetadata() *structpb.Struct { + if x != nil { + return x.Metadata + } + return nil +} + // Message that represents a list of artifacts. type ArtifactList struct { state protoimpl.MessageState @@ -1880,6 +1985,104 @@ func (x *ExecutorOutput) GetArtifacts() map[string]*ArtifactList { return nil } +// The final status of a task. The structure will be passed to input parameter +// of kind `task_final_status`. +type PipelineTaskFinalStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The final state of the task. + // The value is the string version of [PipelineStateEnum.PipelineTaskState][] + State string `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"` + // The error of the task. + Error *status.Status `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *PipelineTaskFinalStatus) Reset() { + *x = PipelineTaskFinalStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_pipeline_spec_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PipelineTaskFinalStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PipelineTaskFinalStatus) ProtoMessage() {} + +func (x *PipelineTaskFinalStatus) ProtoReflect() protoreflect.Message { + mi := &file_pipeline_spec_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PipelineTaskFinalStatus.ProtoReflect.Descriptor instead. +func (*PipelineTaskFinalStatus) Descriptor() ([]byte, []int) { + return file_pipeline_spec_proto_rawDescGZIP(), []int{24} +} + +func (x *PipelineTaskFinalStatus) GetState() string { + if x != nil { + return x.State + } + return "" +} + +func (x *PipelineTaskFinalStatus) GetError() *status.Status { + if x != nil { + return x.Error + } + return nil +} + +type PipelineStateEnum struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *PipelineStateEnum) Reset() { + *x = PipelineStateEnum{} + if protoimpl.UnsafeEnabled { + mi := &file_pipeline_spec_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PipelineStateEnum) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PipelineStateEnum) ProtoMessage() {} + +func (x *PipelineStateEnum) ProtoReflect() protoreflect.Message { + mi := &file_pipeline_spec_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PipelineStateEnum.ProtoReflect.Descriptor instead. +func (*PipelineStateEnum) Descriptor() ([]byte, []int) { + return file_pipeline_spec_proto_rawDescGZIP(), []int{25} +} + // The runtime config of a PipelineJob. type PipelineJob_RuntimeConfig struct { state protoimpl.MessageState @@ -1900,7 +2103,7 @@ type PipelineJob_RuntimeConfig struct { func (x *PipelineJob_RuntimeConfig) Reset() { *x = PipelineJob_RuntimeConfig{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[25] + mi := &file_pipeline_spec_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1913,7 +2116,7 @@ func (x *PipelineJob_RuntimeConfig) String() string { func (*PipelineJob_RuntimeConfig) ProtoMessage() {} func (x *PipelineJob_RuntimeConfig) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[25] + mi := &file_pipeline_spec_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1960,7 +2163,7 @@ type PipelineSpec_RuntimeParameter struct { func (x *PipelineSpec_RuntimeParameter) Reset() { *x = PipelineSpec_RuntimeParameter{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[27] + mi := &file_pipeline_spec_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1973,7 +2176,7 @@ func (x *PipelineSpec_RuntimeParameter) String() string { func (*PipelineSpec_RuntimeParameter) ProtoMessage() {} func (x *PipelineSpec_RuntimeParameter) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[27] + mi := &file_pipeline_spec_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2019,7 +2222,7 @@ type DagOutputsSpec_ArtifactSelectorSpec struct { func (x *DagOutputsSpec_ArtifactSelectorSpec) Reset() { *x = DagOutputsSpec_ArtifactSelectorSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[31] + mi := &file_pipeline_spec_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2032,7 +2235,7 @@ func (x *DagOutputsSpec_ArtifactSelectorSpec) String() string { func (*DagOutputsSpec_ArtifactSelectorSpec) ProtoMessage() {} func (x *DagOutputsSpec_ArtifactSelectorSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[31] + mi := &file_pipeline_spec_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2077,7 +2280,7 @@ type DagOutputsSpec_DagOutputArtifactSpec struct { func (x *DagOutputsSpec_DagOutputArtifactSpec) Reset() { *x = DagOutputsSpec_DagOutputArtifactSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[32] + mi := &file_pipeline_spec_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2090,7 +2293,7 @@ func (x *DagOutputsSpec_DagOutputArtifactSpec) String() string { func (*DagOutputsSpec_DagOutputArtifactSpec) ProtoMessage() {} func (x *DagOutputsSpec_DagOutputArtifactSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[32] + mi := &file_pipeline_spec_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2129,7 +2332,7 @@ type DagOutputsSpec_ParameterSelectorSpec struct { func (x *DagOutputsSpec_ParameterSelectorSpec) Reset() { *x = DagOutputsSpec_ParameterSelectorSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[34] + mi := &file_pipeline_spec_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2142,7 +2345,7 @@ func (x *DagOutputsSpec_ParameterSelectorSpec) String() string { func (*DagOutputsSpec_ParameterSelectorSpec) ProtoMessage() {} func (x *DagOutputsSpec_ParameterSelectorSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[34] + mi := &file_pipeline_spec_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2184,7 +2387,7 @@ type DagOutputsSpec_ParameterSelectorsSpec struct { func (x *DagOutputsSpec_ParameterSelectorsSpec) Reset() { *x = DagOutputsSpec_ParameterSelectorsSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[35] + mi := &file_pipeline_spec_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2197,7 +2400,7 @@ func (x *DagOutputsSpec_ParameterSelectorsSpec) String() string { func (*DagOutputsSpec_ParameterSelectorsSpec) ProtoMessage() {} func (x *DagOutputsSpec_ParameterSelectorsSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[35] + mi := &file_pipeline_spec_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2232,7 +2435,7 @@ type DagOutputsSpec_MapParameterSelectorsSpec struct { func (x *DagOutputsSpec_MapParameterSelectorsSpec) Reset() { *x = DagOutputsSpec_MapParameterSelectorsSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[36] + mi := &file_pipeline_spec_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2245,7 +2448,7 @@ func (x *DagOutputsSpec_MapParameterSelectorsSpec) String() string { func (*DagOutputsSpec_MapParameterSelectorsSpec) ProtoMessage() {} func (x *DagOutputsSpec_MapParameterSelectorsSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[36] + mi := &file_pipeline_spec_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2289,7 +2492,7 @@ type DagOutputsSpec_DagOutputParameterSpec struct { func (x *DagOutputsSpec_DagOutputParameterSpec) Reset() { *x = DagOutputsSpec_DagOutputParameterSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[37] + mi := &file_pipeline_spec_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2302,7 +2505,7 @@ func (x *DagOutputsSpec_DagOutputParameterSpec) String() string { func (*DagOutputsSpec_DagOutputParameterSpec) ProtoMessage() {} func (x *DagOutputsSpec_DagOutputParameterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[37] + mi := &file_pipeline_spec_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2374,7 +2577,7 @@ type ComponentInputsSpec_ArtifactSpec struct { func (x *ComponentInputsSpec_ArtifactSpec) Reset() { *x = ComponentInputsSpec_ArtifactSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[40] + mi := &file_pipeline_spec_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2387,7 +2590,7 @@ func (x *ComponentInputsSpec_ArtifactSpec) String() string { func (*ComponentInputsSpec_ArtifactSpec) ProtoMessage() {} func (x *ComponentInputsSpec_ArtifactSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[40] + mi := &file_pipeline_spec_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2422,7 +2625,7 @@ type ComponentInputsSpec_ParameterSpec struct { func (x *ComponentInputsSpec_ParameterSpec) Reset() { *x = ComponentInputsSpec_ParameterSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[41] + mi := &file_pipeline_spec_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2435,7 +2638,7 @@ func (x *ComponentInputsSpec_ParameterSpec) String() string { func (*ComponentInputsSpec_ParameterSpec) ProtoMessage() {} func (x *ComponentInputsSpec_ParameterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[41] + mi := &file_pipeline_spec_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2464,15 +2667,23 @@ type ComponentOutputsSpec_ArtifactSpec struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ArtifactType *ArtifactTypeSchema `protobuf:"bytes,1,opt,name=artifact_type,json=artifactType,proto3" json:"artifact_type,omitempty"` - Properties map[string]*ValueOrRuntimeParameter `protobuf:"bytes,2,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + ArtifactType *ArtifactTypeSchema `protobuf:"bytes,1,opt,name=artifact_type,json=artifactType,proto3" json:"artifact_type,omitempty"` + // Deprecated. Use [ArtifactSpec.metadata][] instead. + // + // Deprecated: Do not use. + Properties map[string]*ValueOrRuntimeParameter `protobuf:"bytes,2,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Deprecated. Use [ArtifactSpec.metadata][] instead. + // + // Deprecated: Do not use. CustomProperties map[string]*ValueOrRuntimeParameter `protobuf:"bytes,3,rep,name=custom_properties,json=customProperties,proto3" json:"custom_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Properties of the Artifact. + Metadata *structpb.Struct `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` } func (x *ComponentOutputsSpec_ArtifactSpec) Reset() { *x = ComponentOutputsSpec_ArtifactSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[44] + mi := &file_pipeline_spec_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2485,7 +2696,7 @@ func (x *ComponentOutputsSpec_ArtifactSpec) String() string { func (*ComponentOutputsSpec_ArtifactSpec) ProtoMessage() {} func (x *ComponentOutputsSpec_ArtifactSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[44] + mi := &file_pipeline_spec_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2508,6 +2719,7 @@ func (x *ComponentOutputsSpec_ArtifactSpec) GetArtifactType() *ArtifactTypeSchem return nil } +// Deprecated: Do not use. func (x *ComponentOutputsSpec_ArtifactSpec) GetProperties() map[string]*ValueOrRuntimeParameter { if x != nil { return x.Properties @@ -2515,6 +2727,7 @@ func (x *ComponentOutputsSpec_ArtifactSpec) GetProperties() map[string]*ValueOrR return nil } +// Deprecated: Do not use. func (x *ComponentOutputsSpec_ArtifactSpec) GetCustomProperties() map[string]*ValueOrRuntimeParameter { if x != nil { return x.CustomProperties @@ -2522,6 +2735,13 @@ func (x *ComponentOutputsSpec_ArtifactSpec) GetCustomProperties() map[string]*Va return nil } +func (x *ComponentOutputsSpec_ArtifactSpec) GetMetadata() *structpb.Struct { + if x != nil { + return x.Metadata + } + return nil +} + // Definition of a parameter output. type ComponentOutputsSpec_ParameterSpec struct { state protoimpl.MessageState @@ -2534,7 +2754,7 @@ type ComponentOutputsSpec_ParameterSpec struct { func (x *ComponentOutputsSpec_ParameterSpec) Reset() { *x = ComponentOutputsSpec_ParameterSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[45] + mi := &file_pipeline_spec_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2547,7 +2767,7 @@ func (x *ComponentOutputsSpec_ParameterSpec) String() string { func (*ComponentOutputsSpec_ParameterSpec) ProtoMessage() {} func (x *ComponentOutputsSpec_ParameterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[45] + mi := &file_pipeline_spec_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2576,19 +2796,6 @@ type TaskInputsSpec_InputArtifactSpec struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The name of the upstream task which produces the output that matches with - // the `output_artifact_key`. - // Deprecated, use - // [TaskInputSpec.InputArtifactSpec.TaskOutputArtifactSpec][] instead. - // - // Deprecated: Do not use. - ProducerTask string `protobuf:"bytes,1,opt,name=producer_task,json=producerTask,proto3" json:"producer_task,omitempty"` - // The key of [TaskOutputsSpec.artifacts][] map of the producer task. - // Deprecated, use - // [TaskInputSpec.InputArtifactSpec.TaskOutputArtifactSpec][] instead. - // - // Deprecated: Do not use. - OutputArtifactKey string `protobuf:"bytes,2,opt,name=output_artifact_key,json=outputArtifactKey,proto3" json:"output_artifact_key,omitempty"` // Types that are assignable to Kind: // *TaskInputsSpec_InputArtifactSpec_TaskOutputArtifact // *TaskInputsSpec_InputArtifactSpec_ComponentInputArtifact @@ -2598,7 +2805,7 @@ type TaskInputsSpec_InputArtifactSpec struct { func (x *TaskInputsSpec_InputArtifactSpec) Reset() { *x = TaskInputsSpec_InputArtifactSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[50] + mi := &file_pipeline_spec_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2611,7 +2818,7 @@ func (x *TaskInputsSpec_InputArtifactSpec) String() string { func (*TaskInputsSpec_InputArtifactSpec) ProtoMessage() {} func (x *TaskInputsSpec_InputArtifactSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[50] + mi := &file_pipeline_spec_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2627,22 +2834,6 @@ func (*TaskInputsSpec_InputArtifactSpec) Descriptor() ([]byte, []int) { return file_pipeline_spec_proto_rawDescGZIP(), []int{7, 0} } -// Deprecated: Do not use. -func (x *TaskInputsSpec_InputArtifactSpec) GetProducerTask() string { - if x != nil { - return x.ProducerTask - } - return "" -} - -// Deprecated: Do not use. -func (x *TaskInputsSpec_InputArtifactSpec) GetOutputArtifactKey() string { - if x != nil { - return x.OutputArtifactKey - } - return "" -} - func (m *TaskInputsSpec_InputArtifactSpec) GetKind() isTaskInputsSpec_InputArtifactSpec_Kind { if m != nil { return m.Kind @@ -2698,13 +2889,40 @@ type TaskInputsSpec_InputParameterSpec struct { // *TaskInputsSpec_InputParameterSpec_TaskOutputParameter // *TaskInputsSpec_InputParameterSpec_RuntimeValue // *TaskInputsSpec_InputParameterSpec_ComponentInputParameter + // *TaskInputsSpec_InputParameterSpec_TaskFinalStatus_ Kind isTaskInputsSpec_InputParameterSpec_Kind `protobuf_oneof:"kind"` + // Selector expression of Common Expression Language (CEL) + // that applies to the parameter found from above kind. + // + // The expression is applied to the Value type + // [Value][]. For example, + // 'size(string_value)' will return the size of the Value.string_value. + // + // After applying the selection, the parameter will be returned as a + // [Value][]. The type of the Value is either deferred from the input + // definition in the corresponding + // [ComponentSpec.input_definitions.parameters][], or if not found, + // automatically deferred as either string value or double value. + // + // In addition to the builtin functions in CEL, The value.string_value can + // be treated as a json string and parsed to the [google.protobuf.Value][] + // proto message. Then, the CEL expression provided in this field will be + // used to get the requested field. For examples, + // - if Value.string_value is a json array of "[1.1, 2.2, 3.3]", + // 'parseJson(string_value)[i]' will pass the ith parameter from the list + // to the current task, or + // - if the Value.string_value is a json map of "{"a": 1.1, "b": 2.2, + // "c": 3.3}, 'parseJson(string_value)[key]' will pass the map value from + // the struct map to the current task. + // + // If unset, the value will be passed directly to the current task. + ParameterExpressionSelector string `protobuf:"bytes,4,opt,name=parameter_expression_selector,json=parameterExpressionSelector,proto3" json:"parameter_expression_selector,omitempty"` } func (x *TaskInputsSpec_InputParameterSpec) Reset() { *x = TaskInputsSpec_InputParameterSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[51] + mi := &file_pipeline_spec_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2717,7 +2935,7 @@ func (x *TaskInputsSpec_InputParameterSpec) String() string { func (*TaskInputsSpec_InputParameterSpec) ProtoMessage() {} func (x *TaskInputsSpec_InputParameterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[51] + mi := &file_pipeline_spec_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2761,7 +2979,21 @@ func (x *TaskInputsSpec_InputParameterSpec) GetComponentInputParameter() string return "" } -type isTaskInputsSpec_InputParameterSpec_Kind interface { +func (x *TaskInputsSpec_InputParameterSpec) GetTaskFinalStatus() *TaskInputsSpec_InputParameterSpec_TaskFinalStatus { + if x, ok := x.GetKind().(*TaskInputsSpec_InputParameterSpec_TaskFinalStatus_); ok { + return x.TaskFinalStatus + } + return nil +} + +func (x *TaskInputsSpec_InputParameterSpec) GetParameterExpressionSelector() string { + if x != nil { + return x.ParameterExpressionSelector + } + return "" +} + +type isTaskInputsSpec_InputParameterSpec_Kind interface { isTaskInputsSpec_InputParameterSpec_Kind() } @@ -2780,6 +3012,11 @@ type TaskInputsSpec_InputParameterSpec_ComponentInputParameter struct { ComponentInputParameter string `protobuf:"bytes,3,opt,name=component_input_parameter,json=componentInputParameter,proto3,oneof"` } +type TaskInputsSpec_InputParameterSpec_TaskFinalStatus_ struct { + // The final status of an uptream task. + TaskFinalStatus *TaskInputsSpec_InputParameterSpec_TaskFinalStatus `protobuf:"bytes,5,opt,name=task_final_status,json=taskFinalStatus,proto3,oneof"` +} + func (*TaskInputsSpec_InputParameterSpec_TaskOutputParameter) isTaskInputsSpec_InputParameterSpec_Kind() { } @@ -2788,6 +3025,9 @@ func (*TaskInputsSpec_InputParameterSpec_RuntimeValue) isTaskInputsSpec_InputPar func (*TaskInputsSpec_InputParameterSpec_ComponentInputParameter) isTaskInputsSpec_InputParameterSpec_Kind() { } +func (*TaskInputsSpec_InputParameterSpec_TaskFinalStatus_) isTaskInputsSpec_InputParameterSpec_Kind() { +} + type TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2803,7 +3043,7 @@ type TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec struct { func (x *TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec) Reset() { *x = TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[54] + mi := &file_pipeline_spec_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2816,7 +3056,7 @@ func (x *TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec) String() strin func (*TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec) ProtoMessage() {} func (x *TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[54] + mi := &file_pipeline_spec_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2862,7 +3102,7 @@ type TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec struct { func (x *TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec) Reset() { *x = TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[55] + mi := &file_pipeline_spec_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2875,7 +3115,7 @@ func (x *TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec) String() str func (*TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec) ProtoMessage() {} func (x *TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[55] + mi := &file_pipeline_spec_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2905,6 +3145,57 @@ func (x *TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec) GetOutputPar return "" } +// Represents an upstream task's final status. The field can only be set if +// the schema version is `2.0.0`. The resolved input parameter will be a +// json payload in string type. +type TaskInputsSpec_InputParameterSpec_TaskFinalStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The name of the upsteram task where the final status is coming from. + ProducerTask string `protobuf:"bytes,1,opt,name=producer_task,json=producerTask,proto3" json:"producer_task,omitempty"` +} + +func (x *TaskInputsSpec_InputParameterSpec_TaskFinalStatus) Reset() { + *x = TaskInputsSpec_InputParameterSpec_TaskFinalStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_pipeline_spec_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TaskInputsSpec_InputParameterSpec_TaskFinalStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TaskInputsSpec_InputParameterSpec_TaskFinalStatus) ProtoMessage() {} + +func (x *TaskInputsSpec_InputParameterSpec_TaskFinalStatus) ProtoReflect() protoreflect.Message { + mi := &file_pipeline_spec_proto_msgTypes[57] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TaskInputsSpec_InputParameterSpec_TaskFinalStatus.ProtoReflect.Descriptor instead. +func (*TaskInputsSpec_InputParameterSpec_TaskFinalStatus) Descriptor() ([]byte, []int) { + return file_pipeline_spec_proto_rawDescGZIP(), []int{7, 1, 1} +} + +func (x *TaskInputsSpec_InputParameterSpec_TaskFinalStatus) GetProducerTask() string { + if x != nil { + return x.ProducerTask + } + return "" +} + // The specification of a task output artifact. type TaskOutputsSpec_OutputArtifactSpec struct { state protoimpl.MessageState @@ -2924,7 +3215,7 @@ type TaskOutputsSpec_OutputArtifactSpec struct { func (x *TaskOutputsSpec_OutputArtifactSpec) Reset() { *x = TaskOutputsSpec_OutputArtifactSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[56] + mi := &file_pipeline_spec_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2937,7 +3228,7 @@ func (x *TaskOutputsSpec_OutputArtifactSpec) String() string { func (*TaskOutputsSpec_OutputArtifactSpec) ProtoMessage() {} func (x *TaskOutputsSpec_OutputArtifactSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[56] + mi := &file_pipeline_spec_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2987,7 +3278,7 @@ type TaskOutputsSpec_OutputParameterSpec struct { func (x *TaskOutputsSpec_OutputParameterSpec) Reset() { *x = TaskOutputsSpec_OutputParameterSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[57] + mi := &file_pipeline_spec_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3000,7 +3291,7 @@ func (x *TaskOutputsSpec_OutputParameterSpec) String() string { func (*TaskOutputsSpec_OutputParameterSpec) ProtoMessage() {} func (x *TaskOutputsSpec_OutputParameterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[57] + mi := &file_pipeline_spec_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3035,7 +3326,7 @@ type PipelineTaskSpec_CachingOptions struct { func (x *PipelineTaskSpec_CachingOptions) Reset() { *x = PipelineTaskSpec_CachingOptions{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[62] + mi := &file_pipeline_spec_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3048,7 +3339,7 @@ func (x *PipelineTaskSpec_CachingOptions) String() string { func (*PipelineTaskSpec_CachingOptions) ProtoMessage() {} func (x *PipelineTaskSpec_CachingOptions) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[62] + mi := &file_pipeline_spec_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3072,7 +3363,7 @@ func (x *PipelineTaskSpec_CachingOptions) GetEnableCache() bool { } // Trigger policy defines how the task gets triggered. If a task is not -// triggered, it will run into NOT_TRIGGERED state. +// triggered, it will run into SKIPPED state. type PipelineTaskSpec_TriggerPolicy struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3086,12 +3377,18 @@ type PipelineTaskSpec_TriggerPolicy struct { // - `inputs.artifacts['model'][0].properties['accuracy']*100 > 90` // - `inputs.parameters['type'] == 'foo' && inputs.parameters['num'] == 1` Condition string `protobuf:"bytes,1,opt,name=condition,proto3" json:"condition,omitempty"` + // The trigger strategy of this task. The `strategy` and `condition` are + // in logic "AND", as a task will only be tested for the `condition` when + // the `strategy` is meet. + // Unset or set to default value of TRIGGER_STATEGY_UNDEFINED behaves the + // same as ALL_UPSTREAM_TASKS_SUCCEEDED. + Strategy PipelineTaskSpec_TriggerPolicy_TriggerStrategy `protobuf:"varint,2,opt,name=strategy,proto3,enum=ml_pipelines.PipelineTaskSpec_TriggerPolicy_TriggerStrategy" json:"strategy,omitempty"` } func (x *PipelineTaskSpec_TriggerPolicy) Reset() { *x = PipelineTaskSpec_TriggerPolicy{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[63] + mi := &file_pipeline_spec_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3104,7 +3401,7 @@ func (x *PipelineTaskSpec_TriggerPolicy) String() string { func (*PipelineTaskSpec_TriggerPolicy) ProtoMessage() {} func (x *PipelineTaskSpec_TriggerPolicy) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[63] + mi := &file_pipeline_spec_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3127,6 +3424,13 @@ func (x *PipelineTaskSpec_TriggerPolicy) GetCondition() string { return "" } +func (x *PipelineTaskSpec_TriggerPolicy) GetStrategy() PipelineTaskSpec_TriggerPolicy_TriggerStrategy { + if x != nil { + return x.Strategy + } + return PipelineTaskSpec_TriggerPolicy_TRIGGER_STRATEGY_UNSPECIFIED +} + // Specifies the name of the artifact channel which contains the collection of // items to iterate. The iterator will create a sub-task for each item of // the collection and pass the item as a new input artifact channel as @@ -3143,7 +3447,7 @@ type ArtifactIteratorSpec_ItemsSpec struct { func (x *ArtifactIteratorSpec_ItemsSpec) Reset() { *x = ArtifactIteratorSpec_ItemsSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[64] + mi := &file_pipeline_spec_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3156,7 +3460,7 @@ func (x *ArtifactIteratorSpec_ItemsSpec) String() string { func (*ArtifactIteratorSpec_ItemsSpec) ProtoMessage() {} func (x *ArtifactIteratorSpec_ItemsSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[64] + mi := &file_pipeline_spec_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3198,7 +3502,7 @@ type ParameterIteratorSpec_ItemsSpec struct { func (x *ParameterIteratorSpec_ItemsSpec) Reset() { *x = ParameterIteratorSpec_ItemsSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[65] + mi := &file_pipeline_spec_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3211,7 +3515,7 @@ func (x *ParameterIteratorSpec_ItemsSpec) String() string { func (*ParameterIteratorSpec_ItemsSpec) ProtoMessage() {} func (x *ParameterIteratorSpec_ItemsSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[65] + mi := &file_pipeline_spec_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3287,12 +3591,14 @@ type PipelineDeploymentConfig_PipelineContainerSpec struct { // The lifecycle hooks of the container executor. Lifecycle *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle `protobuf:"bytes,4,opt,name=lifecycle,proto3" json:"lifecycle,omitempty"` Resources *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec `protobuf:"bytes,5,opt,name=resources,proto3" json:"resources,omitempty"` + // Environment variables to be passed to the container. + Env []*PipelineDeploymentConfig_PipelineContainerSpec_EnvVar `protobuf:"bytes,6,rep,name=env,proto3" json:"env,omitempty"` } func (x *PipelineDeploymentConfig_PipelineContainerSpec) Reset() { *x = PipelineDeploymentConfig_PipelineContainerSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[66] + mi := &file_pipeline_spec_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3305,7 +3611,7 @@ func (x *PipelineDeploymentConfig_PipelineContainerSpec) String() string { func (*PipelineDeploymentConfig_PipelineContainerSpec) ProtoMessage() {} func (x *PipelineDeploymentConfig_PipelineContainerSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[66] + mi := &file_pipeline_spec_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3356,6 +3662,13 @@ func (x *PipelineDeploymentConfig_PipelineContainerSpec) GetResources() *Pipelin return nil } +func (x *PipelineDeploymentConfig_PipelineContainerSpec) GetEnv() []*PipelineDeploymentConfig_PipelineContainerSpec_EnvVar { + if x != nil { + return x.Env + } + return nil +} + // The specification to import or reimport a new artifact to the pipeline. type PipelineDeploymentConfig_ImporterSpec struct { state protoimpl.MessageState @@ -3367,9 +3680,17 @@ type PipelineDeploymentConfig_ImporterSpec struct { // The type of the artifact. TypeSchema *ArtifactTypeSchema `protobuf:"bytes,2,opt,name=type_schema,json=typeSchema,proto3" json:"type_schema,omitempty"` // The properties of the artifact. + // Deprecated. Use [ImporterSpec.metadata][] instead. + // + // Deprecated: Do not use. Properties map[string]*ValueOrRuntimeParameter `protobuf:"bytes,3,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // The custom properties of the artifact. + // Deprecated. Use [ImporterSpec.metadata][] instead. + // + // Deprecated: Do not use. CustomProperties map[string]*ValueOrRuntimeParameter `protobuf:"bytes,4,rep,name=custom_properties,json=customProperties,proto3" json:"custom_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Properties of the Artifact. + Metadata *structpb.Struct `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` // Whether or not import an artifact regardless it has been imported before. Reimport bool `protobuf:"varint,5,opt,name=reimport,proto3" json:"reimport,omitempty"` } @@ -3377,7 +3698,7 @@ type PipelineDeploymentConfig_ImporterSpec struct { func (x *PipelineDeploymentConfig_ImporterSpec) Reset() { *x = PipelineDeploymentConfig_ImporterSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[67] + mi := &file_pipeline_spec_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3390,7 +3711,7 @@ func (x *PipelineDeploymentConfig_ImporterSpec) String() string { func (*PipelineDeploymentConfig_ImporterSpec) ProtoMessage() {} func (x *PipelineDeploymentConfig_ImporterSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[67] + mi := &file_pipeline_spec_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3420,6 +3741,7 @@ func (x *PipelineDeploymentConfig_ImporterSpec) GetTypeSchema() *ArtifactTypeSch return nil } +// Deprecated: Do not use. func (x *PipelineDeploymentConfig_ImporterSpec) GetProperties() map[string]*ValueOrRuntimeParameter { if x != nil { return x.Properties @@ -3427,6 +3749,7 @@ func (x *PipelineDeploymentConfig_ImporterSpec) GetProperties() map[string]*Valu return nil } +// Deprecated: Do not use. func (x *PipelineDeploymentConfig_ImporterSpec) GetCustomProperties() map[string]*ValueOrRuntimeParameter { if x != nil { return x.CustomProperties @@ -3434,6 +3757,13 @@ func (x *PipelineDeploymentConfig_ImporterSpec) GetCustomProperties() map[string return nil } +func (x *PipelineDeploymentConfig_ImporterSpec) GetMetadata() *structpb.Struct { + if x != nil { + return x.Metadata + } + return nil +} + func (x *PipelineDeploymentConfig_ImporterSpec) GetReimport() bool { if x != nil { return x.Reimport @@ -3451,7 +3781,7 @@ type PipelineDeploymentConfig_ResolverSpec struct { // A list of resolver output definitions. The // key of the map must be exactly the same as - // the keys in the [TaskOutputsSpec.artifacts][] map. + // the keys in the [PipelineTaskOutputsSpec.artifacts][] map. // At least one output must be defined. OutputArtifactQueries map[string]*PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec `protobuf:"bytes,1,rep,name=output_artifact_queries,json=outputArtifactQueries,proto3" json:"output_artifact_queries,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -3459,7 +3789,7 @@ type PipelineDeploymentConfig_ResolverSpec struct { func (x *PipelineDeploymentConfig_ResolverSpec) Reset() { *x = PipelineDeploymentConfig_ResolverSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[68] + mi := &file_pipeline_spec_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3472,7 +3802,7 @@ func (x *PipelineDeploymentConfig_ResolverSpec) String() string { func (*PipelineDeploymentConfig_ResolverSpec) ProtoMessage() {} func (x *PipelineDeploymentConfig_ResolverSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[68] + mi := &file_pipeline_spec_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3495,6 +3825,7 @@ func (x *PipelineDeploymentConfig_ResolverSpec) GetOutputArtifactQueries() map[s return nil } +// Deprecated: Do not use. type PipelineDeploymentConfig_AIPlatformCustomJobSpec struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3508,13 +3839,13 @@ type PipelineDeploymentConfig_AIPlatformCustomJobSpec struct { // string based placeholder contract defined in [ExecutorInput](). The // placeholders will be replaced with the actual value during the runtime // before the job is launched. - CustomJob *_struct.Struct `protobuf:"bytes,1,opt,name=custom_job,json=customJob,proto3" json:"custom_job,omitempty"` + CustomJob *structpb.Struct `protobuf:"bytes,1,opt,name=custom_job,json=customJob,proto3" json:"custom_job,omitempty"` } func (x *PipelineDeploymentConfig_AIPlatformCustomJobSpec) Reset() { *x = PipelineDeploymentConfig_AIPlatformCustomJobSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[69] + mi := &file_pipeline_spec_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3527,7 +3858,7 @@ func (x *PipelineDeploymentConfig_AIPlatformCustomJobSpec) String() string { func (*PipelineDeploymentConfig_AIPlatformCustomJobSpec) ProtoMessage() {} func (x *PipelineDeploymentConfig_AIPlatformCustomJobSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[69] + mi := &file_pipeline_spec_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3543,7 +3874,7 @@ func (*PipelineDeploymentConfig_AIPlatformCustomJobSpec) Descriptor() ([]byte, [ return file_pipeline_spec_proto_rawDescGZIP(), []int{18, 3} } -func (x *PipelineDeploymentConfig_AIPlatformCustomJobSpec) GetCustomJob() *_struct.Struct { +func (x *PipelineDeploymentConfig_AIPlatformCustomJobSpec) GetCustomJob() *structpb.Struct { if x != nil { return x.CustomJob } @@ -3567,7 +3898,7 @@ type PipelineDeploymentConfig_ExecutorSpec struct { func (x *PipelineDeploymentConfig_ExecutorSpec) Reset() { *x = PipelineDeploymentConfig_ExecutorSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[70] + mi := &file_pipeline_spec_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3580,7 +3911,7 @@ func (x *PipelineDeploymentConfig_ExecutorSpec) String() string { func (*PipelineDeploymentConfig_ExecutorSpec) ProtoMessage() {} func (x *PipelineDeploymentConfig_ExecutorSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[70] + mi := &file_pipeline_spec_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3624,6 +3955,7 @@ func (x *PipelineDeploymentConfig_ExecutorSpec) GetResolver() *PipelineDeploymen return nil } +// Deprecated: Do not use. func (x *PipelineDeploymentConfig_ExecutorSpec) GetCustomJob() *PipelineDeploymentConfig_AIPlatformCustomJobSpec { if x, ok := x.GetSpec().(*PipelineDeploymentConfig_ExecutorSpec_CustomJob); ok { return x.CustomJob @@ -3652,6 +3984,8 @@ type PipelineDeploymentConfig_ExecutorSpec_Resolver struct { type PipelineDeploymentConfig_ExecutorSpec_CustomJob struct { // Starts a Google Cloud AI Platform CustomJob. + // + // Deprecated: Do not use. CustomJob *PipelineDeploymentConfig_AIPlatformCustomJobSpec `protobuf:"bytes,4,opt,name=custom_job,json=customJob,proto3,oneof"` } @@ -3687,7 +4021,7 @@ type PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle struct { func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle) Reset() { *x = PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[72] + mi := &file_pipeline_spec_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3700,7 +4034,7 @@ func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle) String() stri func (*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle) ProtoMessage() {} func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[72] + mi := &file_pipeline_spec_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3743,7 +4077,7 @@ type PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec struct { func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec) Reset() { *x = PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[73] + mi := &file_pipeline_spec_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3756,7 +4090,7 @@ func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec) String() s func (*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec) ProtoMessage() {} func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[73] + mi := &file_pipeline_spec_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3793,6 +4127,74 @@ func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec) GetAcceler return nil } +// Environment variables to be passed to the container. +// Represents an environment variable present in a container. +type PipelineDeploymentConfig_PipelineContainerSpec_EnvVar struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of the environment variable. Must be a valid C identifier. It can + // be composed of characters such as uppercase, lowercase characters, + // underscore, digits, but the leading character should be either a + // letter or an underscore. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Variables that reference a $(VAR_NAME) are expanded using the previous + // defined environment variables in the container and any environment + // variables defined by the platform runtime that executes this pipeline. + // If a variable cannot be resolved, the reference in the input string + // will be unchanged. The $(VAR_NAME) syntax can be escaped with a double + // $$, ie: $$(VAR_NAME). Escaped references will never be expanded, + // regardless of whether the variable exists or not. + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *PipelineDeploymentConfig_PipelineContainerSpec_EnvVar) Reset() { + *x = PipelineDeploymentConfig_PipelineContainerSpec_EnvVar{} + if protoimpl.UnsafeEnabled { + mi := &file_pipeline_spec_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PipelineDeploymentConfig_PipelineContainerSpec_EnvVar) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PipelineDeploymentConfig_PipelineContainerSpec_EnvVar) ProtoMessage() {} + +func (x *PipelineDeploymentConfig_PipelineContainerSpec_EnvVar) ProtoReflect() protoreflect.Message { + mi := &file_pipeline_spec_proto_msgTypes[76] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PipelineDeploymentConfig_PipelineContainerSpec_EnvVar.ProtoReflect.Descriptor instead. +func (*PipelineDeploymentConfig_PipelineContainerSpec_EnvVar) Descriptor() ([]byte, []int) { + return file_pipeline_spec_proto_rawDescGZIP(), []int{18, 0, 2} +} + +func (x *PipelineDeploymentConfig_PipelineContainerSpec_EnvVar) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PipelineDeploymentConfig_PipelineContainerSpec_EnvVar) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + // The command and args to execute a program. type PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec struct { state protoimpl.MessageState @@ -3808,7 +4210,7 @@ type PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec struct { func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec) Reset() { *x = PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[74] + mi := &file_pipeline_spec_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3821,7 +4223,7 @@ func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec) String() func (*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec) ProtoMessage() {} func (x *PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[74] + mi := &file_pipeline_spec_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3866,7 +4268,7 @@ type PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConf func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig) Reset() { *x = PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[75] + mi := &file_pipeline_spec_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3880,7 +4282,7 @@ func (*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorCo } func (x *PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[75] + mi := &file_pipeline_spec_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3917,15 +4319,13 @@ type PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec struct { unknownFields protoimpl.UnknownFields // The filter of the artifact query. The supported syntax are: - // - `contexts.name='<context name>'` - // - `artifact_type='<artifact type name>'` - // - `uri='<uri>'` + // - `in_context("<context name>")` + // - `artifact_type="<artifact type name>"` + // - `uri="<uri>"` // - `state=<state>` - // - `properties['key']='value'` - // - `custom_properties['key']='value'` - // - `name='value'` - // - `and` to combine two conditions and returns when both are true. - // If no `contexts.name` filter is set, the query will be scoped to the + // - `name="value"` + // - `AND` to combine two conditions and returns when both are true. + // If no `in_context` filter is set, the query will be scoped to the // the current pipeline context. Filter string `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` // The maximum number of the artifacts to be returned from the @@ -3936,7 +4336,7 @@ type PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec struct { func (x *PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec) Reset() { *x = PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[78] + mi := &file_pipeline_spec_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3949,7 +4349,7 @@ func (x *PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec) String() strin func (*PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec) ProtoMessage() {} func (x *PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[78] + mi := &file_pipeline_spec_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3994,7 +4394,7 @@ type ExecutorInput_Inputs struct { func (x *ExecutorInput_Inputs) Reset() { *x = ExecutorInput_Inputs{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[82] + mi := &file_pipeline_spec_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4007,7 +4407,7 @@ func (x *ExecutorInput_Inputs) String() string { func (*ExecutorInput_Inputs) ProtoMessage() {} func (x *ExecutorInput_Inputs) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[82] + mi := &file_pipeline_spec_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4051,7 +4451,7 @@ type ExecutorInput_OutputParameter struct { func (x *ExecutorInput_OutputParameter) Reset() { *x = ExecutorInput_OutputParameter{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[83] + mi := &file_pipeline_spec_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4064,7 +4464,7 @@ func (x *ExecutorInput_OutputParameter) String() string { func (*ExecutorInput_OutputParameter) ProtoMessage() {} func (x *ExecutorInput_OutputParameter) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[83] + mi := &file_pipeline_spec_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4108,7 +4508,7 @@ type ExecutorInput_Outputs struct { func (x *ExecutorInput_Outputs) Reset() { *x = ExecutorInput_Outputs{} if protoimpl.UnsafeEnabled { - mi := &file_pipeline_spec_proto_msgTypes[84] + mi := &file_pipeline_spec_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4121,7 +4521,7 @@ func (x *ExecutorInput_Outputs) String() string { func (*ExecutorInput_Outputs) ProtoMessage() {} func (x *ExecutorInput_Outputs) ProtoReflect() protoreflect.Message { - mi := &file_pipeline_spec_proto_msgTypes[84] + mi := &file_pipeline_spec_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4166,429 +4566,662 @@ var file_pipeline_spec_proto_rawDesc = []byte{ 0x6e, 0x65, 0x73, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe7, 0x04, 0x0a, - 0x0b, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, - 0x73, 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x3d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, - 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4a, 0x6f, 0x62, 0x2e, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x12, 0x4e, 0x0a, 0x0e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x4a, 0x6f, 0x62, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xee, 0x01, 0x0a, 0x0d, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x57, 0x0a, - 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe7, 0x04, 0x0a, 0x0b, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0d, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0c, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3d, 0x0a, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x4a, 0x6f, 0x62, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x4e, 0x0a, 0x0e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4a, 0x6f, 0x62, 0x2e, 0x52, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x67, 0x63, 0x73, 0x5f, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x67, 0x63, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x1a, 0x52, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x03, - 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, - 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, - 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x22, 0x9e, 0x07, 0x0a, 0x0c, 0x50, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3f, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x38, 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, - 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x74, 0x61, 0x73, - 0x6b, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x10, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x0f, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x73, - 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x73, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x12, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x1a, 0x8f, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, - 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x38, - 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xee, 0x01, 0x0a, 0x0d, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x57, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x6d, 0x6c, 0x5f, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x4a, 0x6f, 0x62, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, + 0x30, 0x0a, 0x14, 0x67, 0x63, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x67, + 0x63, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x79, 0x1a, 0x52, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x71, 0x0a, 0x16, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5a, 0x0a, 0x0f, 0x43, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x98, 0x02, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4e, 0x0a, 0x11, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, - 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x10, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x44, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x51, 0x0a, 0x12, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x03, - 0x64, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x53, 0x70, 0x65, 0x63, - 0x48, 0x00, 0x52, 0x03, 0x64, 0x61, 0x67, 0x12, 0x27, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x42, 0x10, 0x0a, 0x0e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0xd3, 0x01, 0x0a, 0x07, 0x44, 0x61, 0x67, 0x53, 0x70, 0x65, 0x63, 0x12, 0x36, - 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, + 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, + 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x22, + 0xc4, 0x04, 0x0a, 0x0c, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, + 0x12, 0x3f, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x40, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x73, 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x64, 0x6b, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x0a, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x1a, 0x8f, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, + 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x38, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x5a, 0x0a, 0x0f, 0x43, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x98, 0x02, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4e, 0x0a, 0x11, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, 0x75, + 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x10, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x44, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x51, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x03, 0x64, + 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x53, 0x70, 0x65, 0x63, 0x48, + 0x00, 0x52, 0x03, 0x64, 0x61, 0x67, 0x12, 0x27, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x42, + 0x10, 0x0a, 0x0e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0xd3, 0x01, 0x0a, 0x07, 0x44, 0x61, 0x67, 0x53, 0x70, 0x65, 0x63, 0x12, 0x36, 0x0a, + 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, + 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x53, + 0x70, 0x65, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, + 0x74, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x1a, 0x58, 0x0a, + 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x34, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, + 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf6, 0x0a, 0x0a, 0x0e, 0x44, 0x61, 0x67, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x49, 0x0a, 0x09, 0x61, 0x72, + 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, - 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x1a, 0x58, - 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x34, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf0, 0x0a, 0x0a, 0x0e, 0x44, 0x61, 0x67, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x49, 0x0a, 0x09, 0x61, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, - 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, - 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x1a, 0x71, 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x1a, 0x71, 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x29, 0x0a, 0x10, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x53, + 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x1a, 0x79, 0x0a, 0x15, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x60, 0x0a, 0x12, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, 0x6c, + 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x11, + 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x73, 0x1a, 0x70, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x48, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, + 0x65, 0x63, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x74, 0x0a, 0x15, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, - 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x1a, 0x79, 0x0a, 0x15, 0x44, 0x61, 0x67, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, - 0x12, 0x60, 0x0a, 0x12, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x11, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x73, 0x1a, 0x70, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x48, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, - 0x70, 0x65, 0x63, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x74, 0x0a, 0x15, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x29, 0x0a, - 0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x61, 0x73, - 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, - 0x72, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x30, 0x0a, 0x14, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x1a, 0x7d, 0x0a, 0x16, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, - 0x53, 0x70, 0x65, 0x63, 0x12, 0x63, 0x0a, 0x13, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, - 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, + 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x30, 0x0a, 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x1a, 0x7d, 0x0a, 0x16, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x63, 0x0a, 0x13, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, + 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x12, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x1a, 0x8f, 0x02, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x12, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x1a, 0x8f, 0x02, 0x0a, 0x19, 0x4d, 0x61, - 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x79, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, - 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, - 0x2e, 0x4d, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x10, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x1a, 0x77, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x48, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xe9, 0x01, 0x0a, 0x16, - 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x66, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, - 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, - 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x12, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x5f, - 0x0a, 0x10, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6f, 0x6e, 0x65, - 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, - 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x42, - 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x1a, 0x72, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x72, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x79, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, + 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x4c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, + 0x4d, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x10, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x1a, 0x77, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x48, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc1, 0x04, 0x0a, 0x13, - 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, - 0x70, 0x65, 0x63, 0x12, 0x4e, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x73, 0x12, 0x51, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x55, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x45, 0x0a, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x0c, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x52, 0x0a, - 0x0d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x41, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x6d, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, - 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x1a, 0x6c, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, - 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x6e, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xee, 0x07, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4f, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, 0x6c, + 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xef, 0x01, 0x0a, 0x16, 0x44, + 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x66, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, + 0x72, 0x6f, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, + 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x12, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x5f, 0x0a, + 0x10, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, + 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x0e, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x42, 0x06, + 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x1a, 0x72, 0x0a, 0x0f, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, + 0x44, 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x44, + 0x61, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xc1, 0x04, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, + 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4e, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, - 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, - 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, - 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0xfc, 0x03, - 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x45, - 0x0a, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0c, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5f, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, + 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x51, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, + 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x55, 0x0a, 0x0c, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x45, 0x0a, 0x0d, 0x61, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0c, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x1a, 0x52, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x41, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x50, + 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x6c, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x72, 0x0a, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x45, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, - 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, - 0x65, 0x63, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x64, 0x0a, 0x0f, 0x50, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x6a, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, - 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, - 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x52, 0x0a, 0x0d, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x41, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, - 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, - 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, - 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x1a, 0x6d, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x6e, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, + 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6e, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0xab, 0x08, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4f, 0x0a, + 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x31, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, + 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x52, + 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x1a, 0xb9, 0x04, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x45, 0x0a, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6c, 0x5f, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0c, 0x61, 0x72, + 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x63, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, + 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, + 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, + 0x02, 0x18, 0x01, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, + 0x76, 0x0a, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x6d, 0x6c, 0x5f, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x64, 0x0a, 0x0f, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x6a, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, + 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x52, + 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x41, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, + 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, + 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x1a, 0x6d, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x6f, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xd8, 0x0a, 0x0a, 0x0e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, + 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, + 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x49, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, + 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0xc7, + 0x02, 0x0a, 0x11, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x53, 0x70, 0x65, 0x63, 0x12, 0x79, 0x0a, 0x14, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, + 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, + 0x65, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, + 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x12, 0x74, 0x61, 0x73, + 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, + 0x3a, 0x0a, 0x18, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x70, + 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x16, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, + 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x1a, 0x6d, 0x0a, 0x16, 0x54, + 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, + 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, + 0x72, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, + 0x6e, 0x64, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x1a, 0x84, 0x05, 0x0a, 0x12, 0x49, 0x6e, 0x70, + 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x7d, 0x0a, 0x15, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, + 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, + 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x49, 0x6e, 0x70, + 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, + 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x13, 0x74, 0x61, 0x73, 0x6b, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x4c, + 0x0a, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x19, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, 0x75, + 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x6d, 0x0a, 0x11, 0x74, 0x61, + 0x73, 0x6b, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, + 0x70, 0x65, 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x74, 0x61, 0x73, 0x6b, 0x46, 0x69, + 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x42, 0x0a, 0x1d, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x1b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x1a, 0x70, 0x0a, + 0x17, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x30, 0x0a, + 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x1a, + 0x36, 0x0a, 0x0f, 0x54, 0x61, 0x73, 0x6b, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x5f, 0x74, + 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x1a, + 0x6e, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, + 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x6f, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xd0, 0x09, 0x0a, 0x0e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, - 0x70, 0x65, 0x63, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x49, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, + 0x6c, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, + 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xef, 0x07, + 0x0a, 0x0f, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, + 0x63, 0x12, 0x4d, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, + 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x12, 0x4a, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0xa4, 0x03, 0x0a, - 0x11, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x27, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x5f, 0x74, - 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x32, 0x0a, 0x13, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x12, - 0x79, 0x0a, 0x14, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, - 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, 0x61, - 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x12, 0x74, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x3a, 0x0a, 0x18, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x16, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x1a, 0x6d, 0x0a, 0x16, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, + 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x84, 0x04, 0x0a, + 0x12, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x45, 0x0a, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6c, 0x5f, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0c, 0x61, 0x72, + 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x60, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, + 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, + 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, - 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x73, - 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, - 0x72, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, - 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x4a, 0x04, 0x08, - 0x05, 0x10, 0x06, 0x1a, 0x9f, 0x03, 0x0a, 0x12, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x7d, 0x0a, 0x15, 0x74, 0x61, - 0x73, 0x6b, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, - 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, - 0x65, 0x63, 0x48, 0x00, 0x52, 0x13, 0x74, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x0d, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x17, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x1a, 0x70, 0x0a, 0x17, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, - 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x73, - 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, - 0x72, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x30, 0x0a, 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x4a, - 0x04, 0x08, 0x04, 0x10, 0x05, 0x1a, 0x6e, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, - 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6c, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, + 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x73, 0x0a, 0x11, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, + 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x1a, 0x64, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6a, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x13, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x41, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x70, 0x0a, + 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x31, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, + 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x6e, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, + 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x65, 0x0a, 0x0d, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x22, 0x54, 0x0a, 0x11, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x1a, 0x50, 0x52, 0x49, 0x4d, 0x49, 0x54, 0x49, + 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0a, + 0x0a, 0x06, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, + 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x22, 0x89, 0x07, 0x0a, 0x10, 0x50, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3b, 0x0a, 0x09, 0x74, + 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, + 0x74, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x34, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0xef, 0x07, 0x0a, 0x0f, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4d, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, - 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x73, 0x1a, 0x84, 0x04, 0x0a, 0x12, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x45, 0x0a, 0x0d, 0x61, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, - 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x52, 0x0c, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x60, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, - 0x70, 0x65, 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x12, 0x73, 0x0a, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x6f, - 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, - 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, - 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, - 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x64, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x27, + 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x61, 0x73, 0x6b, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, + 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x56, 0x0a, 0x0f, 0x63, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x67, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, + 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, + 0x2e, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x0e, 0x63, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x3f, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x66, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x66, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x66, + 0x12, 0x53, 0x0a, 0x0e, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0d, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x51, 0x0a, 0x11, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, + 0x74, 0x5f, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, + 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x10, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x54, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x74, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x11, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x33, + 0x0a, 0x0e, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x1a, 0x80, 0x02, 0x0a, 0x0d, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, + 0x6b, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x72, 0x61, 0x74, + 0x65, 0x67, 0x79, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x77, 0x0a, + 0x0f, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, + 0x12, 0x20, 0x0a, 0x1c, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x52, 0x41, + 0x54, 0x45, 0x47, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x4c, 0x4c, 0x5f, 0x55, 0x50, 0x53, 0x54, 0x52, 0x45, + 0x41, 0x4d, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x45, 0x44, + 0x45, 0x44, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x4c, 0x4c, 0x5f, 0x55, 0x50, 0x53, 0x54, + 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, + 0x45, 0x54, 0x45, 0x44, 0x10, 0x02, 0x42, 0x0a, 0x0a, 0x08, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x22, 0xad, 0x01, 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, + 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x32, + 0x0a, 0x09, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x25, 0x0a, 0x0e, 0x69, + 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x22, 0xcf, 0x01, 0x0a, 0x15, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x43, 0x0a, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, + 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, + 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x70, 0x75, 0x74, + 0x1a, 0x52, 0x0a, 0x09, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, + 0x03, 0x72, 0x61, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, + 0x77, 0x12, 0x29, 0x0a, 0x0f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x22, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x22, 0x0a, 0x0c, 0x50, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xb8, 0x01, 0x0a, + 0x12, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, + 0x48, 0x00, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x72, 0x69, 0x12, 0x29, 0x0a, + 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x26, 0x0a, 0x10, 0x50, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x8f, 0x01, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x0e, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2d, 0x0a, 0x11, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x10, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0xd0, 0x14, 0x0a, 0x18, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x53, + 0x0a, 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x73, 0x1a, 0xfd, 0x06, 0x0a, 0x15, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x14, 0x0a, + 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, + 0x73, 0x12, 0x64, 0x0a, 0x09, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, + 0x65, 0x63, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x09, 0x6c, 0x69, + 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x67, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x6d, 0x6c, 0x5f, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x12, 0x55, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, + 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x45, 0x6e, 0x76, 0x56, + 0x61, 0x72, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x1a, 0xb6, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x66, 0x65, + 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x73, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x5f, 0x63, 0x61, 0x63, + 0x68, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4b, + 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4c, 0x69, 0x66, + 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x0d, 0x70, 0x72, 0x65, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x1a, 0x34, 0x0a, 0x04, 0x45, 0x78, + 0x65, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, + 0x1a, 0x8c, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, + 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x63, 0x70, 0x75, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x7d, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x53, 0x70, 0x65, 0x63, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, + 0x63, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x1a, 0x3d, 0x0a, 0x11, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, + 0x32, 0x0a, 0x06, 0x45, 0x6e, 0x76, 0x56, 0x61, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x1a, 0xa3, 0x05, 0x0a, 0x0c, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, + 0x53, 0x70, 0x65, 0x63, 0x12, 0x48, 0x0a, 0x0c, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, + 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x52, 0x0b, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x55, 0x72, 0x69, 0x12, 0x41, + 0x0a, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x12, 0x67, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x7a, 0x0a, 0x11, 0x63, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x42, 0x02, 0x18, 0x01, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x72, + 0x65, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, + 0x65, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x64, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, @@ -4601,412 +5234,221 @@ var file_pipeline_spec_proto_rawDesc = []byte{ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x13, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, - 0x12, 0x41, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x72, - 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x50, 0x72, 0x69, 0x6d, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x1a, 0x70, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6e, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x65, 0x0a, 0x0d, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, - 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x54, 0x0a, 0x11, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, - 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x1a, 0x50, - 0x52, 0x49, 0x4d, 0x49, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x49, - 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x02, - 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x22, 0x9d, 0x06, 0x0a, - 0x10, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x3b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x34, - 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, - 0x73, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x06, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, - 0x53, 0x70, 0x65, 0x63, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x73, 0x12, 0x29, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x27, 0x0a, 0x0f, - 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, - 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x56, 0x0a, 0x0f, 0x63, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, - 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0e, 0x63, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, - 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x66, - 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x66, 0x12, 0x53, - 0x0a, 0x0e, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, - 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0d, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x51, 0x0a, 0x11, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, - 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, - 0x65, 0x63, 0x48, 0x00, 0x52, 0x10, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x74, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x54, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x5f, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x74, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x11, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x33, 0x0a, 0x0e, - 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, - 0x0a, 0x0c, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x1a, 0x2d, 0x0a, 0x0d, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x0a, 0x0a, 0x08, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xad, 0x01, 0x0a, - 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x74, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x74, 0x65, - 0x6d, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, - 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x32, 0x0a, 0x09, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x61, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x22, 0xcf, 0x01, 0x0a, - 0x15, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x43, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x74, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, - 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x52, 0x0a, 0x09, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x12, 0x29, 0x0a, 0x0f, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x22, - 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x66, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x22, 0x0a, 0x0c, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x12, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x23, 0x0a, - 0x0c, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x69, 0x74, - 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x75, 0x72, 0x69, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x55, 0x72, 0x69, 0x12, 0x29, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x42, 0x06, - 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x26, 0x0a, 0x10, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8f, - 0x01, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x0e, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2d, 0x0a, 0x11, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x10, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x80, 0x13, 0x0a, 0x18, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x53, 0x0a, - 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, - 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x73, 0x1a, 0xf2, 0x05, 0x0a, 0x15, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x14, 0x0a, 0x05, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, - 0x12, 0x64, 0x0a, 0x09, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xec, 0x02, 0x0a, 0x0c, 0x52, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x86, 0x01, 0x0a, 0x17, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x71, + 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x6d, + 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x70, 0x65, + 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x69, 0x65, 0x73, 0x1a, 0x41, 0x0a, 0x11, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x1a, 0x8f, 0x01, 0x0a, 0x1a, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x17, 0x41, 0x49, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4a, 0x6f, 0x62, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x36, 0x0a, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6a, 0x6f, + 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x09, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4a, 0x6f, 0x62, 0x3a, 0x02, 0x18, 0x01, 0x1a, + 0xff, 0x02, 0x0a, 0x0c, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, + 0x12, 0x5c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, - 0x63, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x09, 0x6c, 0x69, 0x66, - 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x67, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, - 0xb6, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x73, 0x0a, - 0x0f, 0x70, 0x72, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x45, - 0x78, 0x65, 0x63, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x1a, 0x34, 0x0a, 0x04, 0x45, 0x78, 0x65, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x1a, 0x8c, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, - 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x63, 0x70, - 0x75, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, - 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x6d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x7d, 0x0a, 0x0b, 0x61, 0x63, 0x63, - 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5b, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x61, 0x63, 0x63, - 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x3d, 0x0a, 0x11, 0x41, 0x63, 0x63, 0x65, - 0x6c, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0xe6, 0x04, 0x0a, 0x0c, 0x49, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x48, 0x0a, 0x0c, 0x61, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0b, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x55, - 0x72, 0x69, 0x12, 0x41, 0x0a, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x63, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, - 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x76, 0x0a, 0x11, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x64, - 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6a, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x4f, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0xec, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x86, 0x01, 0x0a, 0x17, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x15, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x41, 0x0a, 0x11, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, - 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x1a, 0x8f, 0x01, - 0x0a, 0x1a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5b, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x70, - 0x65, 0x63, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x51, 0x0a, 0x17, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x12, 0x36, 0x0a, 0x0a, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x09, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4a, - 0x6f, 0x62, 0x1a, 0xfb, 0x02, 0x0a, 0x0c, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x53, - 0x70, 0x65, 0x63, 0x12, 0x5c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x12, 0x51, 0x0a, 0x08, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x72, 0x12, 0x51, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x08, 0x72, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x12, 0x5f, 0x0a, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x5f, 0x6a, 0x6f, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x6d, 0x6c, - 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x09, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4a, 0x6f, 0x62, 0x42, 0x06, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x1a, 0x71, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x63, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x51, + 0x0a, 0x08, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, + 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, + 0x72, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, + 0x72, 0x12, 0x51, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x79, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x09, - 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, - 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xcc, - 0x03, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x4d, - 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x60, 0x0a, - 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x41, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, - 0x52, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, - 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, - 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3b, 0x0a, - 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x52, - 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0xb6, 0x07, 0x0a, 0x0d, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x3a, 0x0a, 0x06, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, - 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, - 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x52, 0x07, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x1a, 0xdb, 0x02, 0x0a, 0x06, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, - 0x70, 0x75, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4f, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x2e, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x52, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x72, 0x12, 0x63, 0x0a, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6a, + 0x6f, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x09, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4a, 0x6f, 0x62, 0x42, 0x06, 0x0a, 0x04, 0x73, 0x70, 0x65, + 0x63, 0x1a, 0x71, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x79, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, + 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, + 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x89, 0x04, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, + 0x51, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x73, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x12, 0x64, 0x0a, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x52, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x2e, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x52, 0x0a, + 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x58, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x0e, 0x41, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x32, 0x0a, 0x0f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x1a, 0x97, 0x03, 0x0a, 0x07, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x53, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x2e, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x50, 0x0a, 0x09, 0x61, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x1a, 0x6a, 0x0a, - 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, - 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x05, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x0c, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x09, 0x61, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x52, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x52, 0x09, 0x61, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0xb6, 0x07, 0x0a, 0x0d, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x6c, 0x5f, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x52, 0x06, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, + 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x52, 0x07, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x73, 0x1a, 0xdb, 0x02, 0x0a, 0x06, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, + 0x12, 0x52, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, + 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x4f, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, + 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x52, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0xd7, 0x02, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, - 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x49, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, - 0x52, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x3d, 0x5a, - 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x65, 0x75, 0x72, - 0x6f, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6b, 0x66, 0x70, 0x2d, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, - 0x65, 0x72, 0x2f, 0x74, 0x68, 0x69, 0x72, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x79, 0x2f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x02, 0x38, 0x01, 0x1a, 0x32, 0x0a, 0x0f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x1a, 0x97, 0x03, 0x0a, 0x07, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x73, 0x12, 0x53, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, + 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x2e, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x50, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x6c, + 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, + 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x1a, 0x6a, 0x0a, 0x0f, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6c, 0x5f, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0xd7, 0x02, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x49, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x52, 0x0a, + 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x58, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6c, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x59, 0x0a, 0x17, 0x50, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x9f, 0x02, 0x0a, 0x11, 0x50, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x22, 0x89, 0x02, 0x0a, + 0x11, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x41, 0x53, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, + 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x52, + 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, + 0x14, 0x0a, 0x10, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x45, + 0x44, 0x45, 0x44, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, + 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x53, + 0x55, 0x43, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x41, + 0x4e, 0x43, 0x45, 0x4c, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x0e, + 0x0a, 0x0a, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x0d, + 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x08, 0x12, 0x0a, 0x0a, + 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x09, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x4b, 0x49, + 0x50, 0x50, 0x45, 0x44, 0x10, 0x0a, 0x12, 0x0a, 0x0a, 0x06, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, + 0x10, 0x0b, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, + 0x52, 0x45, 0x44, 0x10, 0x0c, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x43, 0x48, 0x45, 0x44, + 0x55, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x0d, 0x42, 0x3c, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x2f, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x70, 0x65, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5021,225 +5463,232 @@ func file_pipeline_spec_proto_rawDescGZIP() []byte { return file_pipeline_spec_proto_rawDescData } -var file_pipeline_spec_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_pipeline_spec_proto_msgTypes = make([]protoimpl.MessageInfo, 91) +var file_pipeline_spec_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_pipeline_spec_proto_msgTypes = make([]protoimpl.MessageInfo, 94) var file_pipeline_spec_proto_goTypes = []interface{}{ - (PrimitiveType_PrimitiveTypeEnum)(0), // 0: ml_pipelines.PrimitiveType.PrimitiveTypeEnum - (*PipelineJob)(nil), // 1: ml_pipelines.PipelineJob - (*PipelineSpec)(nil), // 2: ml_pipelines.PipelineSpec - (*ComponentSpec)(nil), // 3: ml_pipelines.ComponentSpec - (*DagSpec)(nil), // 4: ml_pipelines.DagSpec - (*DagOutputsSpec)(nil), // 5: ml_pipelines.DagOutputsSpec - (*ComponentInputsSpec)(nil), // 6: ml_pipelines.ComponentInputsSpec - (*ComponentOutputsSpec)(nil), // 7: ml_pipelines.ComponentOutputsSpec - (*TaskInputsSpec)(nil), // 8: ml_pipelines.TaskInputsSpec - (*TaskOutputsSpec)(nil), // 9: ml_pipelines.TaskOutputsSpec - (*PrimitiveType)(nil), // 10: ml_pipelines.PrimitiveType - (*PipelineTaskSpec)(nil), // 11: ml_pipelines.PipelineTaskSpec - (*ArtifactIteratorSpec)(nil), // 12: ml_pipelines.ArtifactIteratorSpec - (*ParameterIteratorSpec)(nil), // 13: ml_pipelines.ParameterIteratorSpec - (*ComponentRef)(nil), // 14: ml_pipelines.ComponentRef - (*PipelineInfo)(nil), // 15: ml_pipelines.PipelineInfo - (*ArtifactTypeSchema)(nil), // 16: ml_pipelines.ArtifactTypeSchema - (*PipelineTaskInfo)(nil), // 17: ml_pipelines.PipelineTaskInfo - (*ValueOrRuntimeParameter)(nil), // 18: ml_pipelines.ValueOrRuntimeParameter - (*PipelineDeploymentConfig)(nil), // 19: ml_pipelines.PipelineDeploymentConfig - (*Value)(nil), // 20: ml_pipelines.Value - (*RuntimeArtifact)(nil), // 21: ml_pipelines.RuntimeArtifact - (*ArtifactList)(nil), // 22: ml_pipelines.ArtifactList - (*ExecutorInput)(nil), // 23: ml_pipelines.ExecutorInput - (*ExecutorOutput)(nil), // 24: ml_pipelines.ExecutorOutput - nil, // 25: ml_pipelines.PipelineJob.LabelsEntry - (*PipelineJob_RuntimeConfig)(nil), // 26: ml_pipelines.PipelineJob.RuntimeConfig - nil, // 27: ml_pipelines.PipelineJob.RuntimeConfig.ParametersEntry - (*PipelineSpec_RuntimeParameter)(nil), // 28: ml_pipelines.PipelineSpec.RuntimeParameter - nil, // 29: ml_pipelines.PipelineSpec.RuntimeParametersEntry - nil, // 30: ml_pipelines.PipelineSpec.ComponentsEntry - nil, // 31: ml_pipelines.DagSpec.TasksEntry - (*DagOutputsSpec_ArtifactSelectorSpec)(nil), // 32: ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec - (*DagOutputsSpec_DagOutputArtifactSpec)(nil), // 33: ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec - nil, // 34: ml_pipelines.DagOutputsSpec.ArtifactsEntry - (*DagOutputsSpec_ParameterSelectorSpec)(nil), // 35: ml_pipelines.DagOutputsSpec.ParameterSelectorSpec - (*DagOutputsSpec_ParameterSelectorsSpec)(nil), // 36: ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec - (*DagOutputsSpec_MapParameterSelectorsSpec)(nil), // 37: ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec - (*DagOutputsSpec_DagOutputParameterSpec)(nil), // 38: ml_pipelines.DagOutputsSpec.DagOutputParameterSpec - nil, // 39: ml_pipelines.DagOutputsSpec.ParametersEntry - nil, // 40: ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.MappedParametersEntry - (*ComponentInputsSpec_ArtifactSpec)(nil), // 41: ml_pipelines.ComponentInputsSpec.ArtifactSpec - (*ComponentInputsSpec_ParameterSpec)(nil), // 42: ml_pipelines.ComponentInputsSpec.ParameterSpec - nil, // 43: ml_pipelines.ComponentInputsSpec.ArtifactsEntry - nil, // 44: ml_pipelines.ComponentInputsSpec.ParametersEntry - (*ComponentOutputsSpec_ArtifactSpec)(nil), // 45: ml_pipelines.ComponentOutputsSpec.ArtifactSpec - (*ComponentOutputsSpec_ParameterSpec)(nil), // 46: ml_pipelines.ComponentOutputsSpec.ParameterSpec - nil, // 47: ml_pipelines.ComponentOutputsSpec.ArtifactsEntry - nil, // 48: ml_pipelines.ComponentOutputsSpec.ParametersEntry - nil, // 49: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.PropertiesEntry - nil, // 50: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.CustomPropertiesEntry - (*TaskInputsSpec_InputArtifactSpec)(nil), // 51: ml_pipelines.TaskInputsSpec.InputArtifactSpec - (*TaskInputsSpec_InputParameterSpec)(nil), // 52: ml_pipelines.TaskInputsSpec.InputParameterSpec - nil, // 53: ml_pipelines.TaskInputsSpec.ParametersEntry - nil, // 54: ml_pipelines.TaskInputsSpec.ArtifactsEntry - (*TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec)(nil), // 55: ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec - (*TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec)(nil), // 56: ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec - (*TaskOutputsSpec_OutputArtifactSpec)(nil), // 57: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec - (*TaskOutputsSpec_OutputParameterSpec)(nil), // 58: ml_pipelines.TaskOutputsSpec.OutputParameterSpec - nil, // 59: ml_pipelines.TaskOutputsSpec.ParametersEntry - nil, // 60: ml_pipelines.TaskOutputsSpec.ArtifactsEntry - nil, // 61: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.PropertiesEntry - nil, // 62: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.CustomPropertiesEntry - (*PipelineTaskSpec_CachingOptions)(nil), // 63: ml_pipelines.PipelineTaskSpec.CachingOptions - (*PipelineTaskSpec_TriggerPolicy)(nil), // 64: ml_pipelines.PipelineTaskSpec.TriggerPolicy - (*ArtifactIteratorSpec_ItemsSpec)(nil), // 65: ml_pipelines.ArtifactIteratorSpec.ItemsSpec - (*ParameterIteratorSpec_ItemsSpec)(nil), // 66: ml_pipelines.ParameterIteratorSpec.ItemsSpec - (*PipelineDeploymentConfig_PipelineContainerSpec)(nil), // 67: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec - (*PipelineDeploymentConfig_ImporterSpec)(nil), // 68: ml_pipelines.PipelineDeploymentConfig.ImporterSpec - (*PipelineDeploymentConfig_ResolverSpec)(nil), // 69: ml_pipelines.PipelineDeploymentConfig.ResolverSpec - (*PipelineDeploymentConfig_AIPlatformCustomJobSpec)(nil), // 70: ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec - (*PipelineDeploymentConfig_ExecutorSpec)(nil), // 71: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec - nil, // 72: ml_pipelines.PipelineDeploymentConfig.ExecutorsEntry - (*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle)(nil), // 73: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle - (*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec)(nil), // 74: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec - (*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec)(nil), // 75: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec - (*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig)(nil), // 76: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig - nil, // 77: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.PropertiesEntry - nil, // 78: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.CustomPropertiesEntry - (*PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec)(nil), // 79: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec - nil, // 80: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.OutputArtifactQueriesEntry - nil, // 81: ml_pipelines.RuntimeArtifact.PropertiesEntry - nil, // 82: ml_pipelines.RuntimeArtifact.CustomPropertiesEntry - (*ExecutorInput_Inputs)(nil), // 83: ml_pipelines.ExecutorInput.Inputs - (*ExecutorInput_OutputParameter)(nil), // 84: ml_pipelines.ExecutorInput.OutputParameter - (*ExecutorInput_Outputs)(nil), // 85: ml_pipelines.ExecutorInput.Outputs - nil, // 86: ml_pipelines.ExecutorInput.Inputs.ParametersEntry - nil, // 87: ml_pipelines.ExecutorInput.Inputs.ArtifactsEntry - nil, // 88: ml_pipelines.ExecutorInput.Outputs.ParametersEntry - nil, // 89: ml_pipelines.ExecutorInput.Outputs.ArtifactsEntry - nil, // 90: ml_pipelines.ExecutorOutput.ParametersEntry - nil, // 91: ml_pipelines.ExecutorOutput.ArtifactsEntry - (*_struct.Struct)(nil), // 92: google.protobuf.Struct - (*any.Any)(nil), // 93: google.protobuf.Any + (PrimitiveType_PrimitiveTypeEnum)(0), // 0: ml_pipelines.PrimitiveType.PrimitiveTypeEnum + (PipelineTaskSpec_TriggerPolicy_TriggerStrategy)(0), // 1: ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy + (PipelineStateEnum_PipelineTaskState)(0), // 2: ml_pipelines.PipelineStateEnum.PipelineTaskState + (*PipelineJob)(nil), // 3: ml_pipelines.PipelineJob + (*PipelineSpec)(nil), // 4: ml_pipelines.PipelineSpec + (*ComponentSpec)(nil), // 5: ml_pipelines.ComponentSpec + (*DagSpec)(nil), // 6: ml_pipelines.DagSpec + (*DagOutputsSpec)(nil), // 7: ml_pipelines.DagOutputsSpec + (*ComponentInputsSpec)(nil), // 8: ml_pipelines.ComponentInputsSpec + (*ComponentOutputsSpec)(nil), // 9: ml_pipelines.ComponentOutputsSpec + (*TaskInputsSpec)(nil), // 10: ml_pipelines.TaskInputsSpec + (*TaskOutputsSpec)(nil), // 11: ml_pipelines.TaskOutputsSpec + (*PrimitiveType)(nil), // 12: ml_pipelines.PrimitiveType + (*PipelineTaskSpec)(nil), // 13: ml_pipelines.PipelineTaskSpec + (*ArtifactIteratorSpec)(nil), // 14: ml_pipelines.ArtifactIteratorSpec + (*ParameterIteratorSpec)(nil), // 15: ml_pipelines.ParameterIteratorSpec + (*ComponentRef)(nil), // 16: ml_pipelines.ComponentRef + (*PipelineInfo)(nil), // 17: ml_pipelines.PipelineInfo + (*ArtifactTypeSchema)(nil), // 18: ml_pipelines.ArtifactTypeSchema + (*PipelineTaskInfo)(nil), // 19: ml_pipelines.PipelineTaskInfo + (*ValueOrRuntimeParameter)(nil), // 20: ml_pipelines.ValueOrRuntimeParameter + (*PipelineDeploymentConfig)(nil), // 21: ml_pipelines.PipelineDeploymentConfig + (*Value)(nil), // 22: ml_pipelines.Value + (*RuntimeArtifact)(nil), // 23: ml_pipelines.RuntimeArtifact + (*ArtifactList)(nil), // 24: ml_pipelines.ArtifactList + (*ExecutorInput)(nil), // 25: ml_pipelines.ExecutorInput + (*ExecutorOutput)(nil), // 26: ml_pipelines.ExecutorOutput + (*PipelineTaskFinalStatus)(nil), // 27: ml_pipelines.PipelineTaskFinalStatus + (*PipelineStateEnum)(nil), // 28: ml_pipelines.PipelineStateEnum + nil, // 29: ml_pipelines.PipelineJob.LabelsEntry + (*PipelineJob_RuntimeConfig)(nil), // 30: ml_pipelines.PipelineJob.RuntimeConfig + nil, // 31: ml_pipelines.PipelineJob.RuntimeConfig.ParametersEntry + (*PipelineSpec_RuntimeParameter)(nil), // 32: ml_pipelines.PipelineSpec.RuntimeParameter + nil, // 33: ml_pipelines.PipelineSpec.ComponentsEntry + nil, // 34: ml_pipelines.DagSpec.TasksEntry + (*DagOutputsSpec_ArtifactSelectorSpec)(nil), // 35: ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec + (*DagOutputsSpec_DagOutputArtifactSpec)(nil), // 36: ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec + nil, // 37: ml_pipelines.DagOutputsSpec.ArtifactsEntry + (*DagOutputsSpec_ParameterSelectorSpec)(nil), // 38: ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + (*DagOutputsSpec_ParameterSelectorsSpec)(nil), // 39: ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec + (*DagOutputsSpec_MapParameterSelectorsSpec)(nil), // 40: ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec + (*DagOutputsSpec_DagOutputParameterSpec)(nil), // 41: ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + nil, // 42: ml_pipelines.DagOutputsSpec.ParametersEntry + nil, // 43: ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.MappedParametersEntry + (*ComponentInputsSpec_ArtifactSpec)(nil), // 44: ml_pipelines.ComponentInputsSpec.ArtifactSpec + (*ComponentInputsSpec_ParameterSpec)(nil), // 45: ml_pipelines.ComponentInputsSpec.ParameterSpec + nil, // 46: ml_pipelines.ComponentInputsSpec.ArtifactsEntry + nil, // 47: ml_pipelines.ComponentInputsSpec.ParametersEntry + (*ComponentOutputsSpec_ArtifactSpec)(nil), // 48: ml_pipelines.ComponentOutputsSpec.ArtifactSpec + (*ComponentOutputsSpec_ParameterSpec)(nil), // 49: ml_pipelines.ComponentOutputsSpec.ParameterSpec + nil, // 50: ml_pipelines.ComponentOutputsSpec.ArtifactsEntry + nil, // 51: ml_pipelines.ComponentOutputsSpec.ParametersEntry + nil, // 52: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.PropertiesEntry + nil, // 53: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.CustomPropertiesEntry + (*TaskInputsSpec_InputArtifactSpec)(nil), // 54: ml_pipelines.TaskInputsSpec.InputArtifactSpec + (*TaskInputsSpec_InputParameterSpec)(nil), // 55: ml_pipelines.TaskInputsSpec.InputParameterSpec + nil, // 56: ml_pipelines.TaskInputsSpec.ParametersEntry + nil, // 57: ml_pipelines.TaskInputsSpec.ArtifactsEntry + (*TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec)(nil), // 58: ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec + (*TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec)(nil), // 59: ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec + (*TaskInputsSpec_InputParameterSpec_TaskFinalStatus)(nil), // 60: ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus + (*TaskOutputsSpec_OutputArtifactSpec)(nil), // 61: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + (*TaskOutputsSpec_OutputParameterSpec)(nil), // 62: ml_pipelines.TaskOutputsSpec.OutputParameterSpec + nil, // 63: ml_pipelines.TaskOutputsSpec.ParametersEntry + nil, // 64: ml_pipelines.TaskOutputsSpec.ArtifactsEntry + nil, // 65: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.PropertiesEntry + nil, // 66: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.CustomPropertiesEntry + (*PipelineTaskSpec_CachingOptions)(nil), // 67: ml_pipelines.PipelineTaskSpec.CachingOptions + (*PipelineTaskSpec_TriggerPolicy)(nil), // 68: ml_pipelines.PipelineTaskSpec.TriggerPolicy + (*ArtifactIteratorSpec_ItemsSpec)(nil), // 69: ml_pipelines.ArtifactIteratorSpec.ItemsSpec + (*ParameterIteratorSpec_ItemsSpec)(nil), // 70: ml_pipelines.ParameterIteratorSpec.ItemsSpec + (*PipelineDeploymentConfig_PipelineContainerSpec)(nil), // 71: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + (*PipelineDeploymentConfig_ImporterSpec)(nil), // 72: ml_pipelines.PipelineDeploymentConfig.ImporterSpec + (*PipelineDeploymentConfig_ResolverSpec)(nil), // 73: ml_pipelines.PipelineDeploymentConfig.ResolverSpec + (*PipelineDeploymentConfig_AIPlatformCustomJobSpec)(nil), // 74: ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec + (*PipelineDeploymentConfig_ExecutorSpec)(nil), // 75: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + nil, // 76: ml_pipelines.PipelineDeploymentConfig.ExecutorsEntry + (*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle)(nil), // 77: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + (*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec)(nil), // 78: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + (*PipelineDeploymentConfig_PipelineContainerSpec_EnvVar)(nil), // 79: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.EnvVar + (*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec)(nil), // 80: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec + (*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig)(nil), // 81: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig + nil, // 82: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.PropertiesEntry + nil, // 83: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.CustomPropertiesEntry + (*PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec)(nil), // 84: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec + nil, // 85: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.OutputArtifactQueriesEntry + nil, // 86: ml_pipelines.RuntimeArtifact.PropertiesEntry + nil, // 87: ml_pipelines.RuntimeArtifact.CustomPropertiesEntry + (*ExecutorInput_Inputs)(nil), // 88: ml_pipelines.ExecutorInput.Inputs + (*ExecutorInput_OutputParameter)(nil), // 89: ml_pipelines.ExecutorInput.OutputParameter + (*ExecutorInput_Outputs)(nil), // 90: ml_pipelines.ExecutorInput.Outputs + nil, // 91: ml_pipelines.ExecutorInput.Inputs.ParametersEntry + nil, // 92: ml_pipelines.ExecutorInput.Inputs.ArtifactsEntry + nil, // 93: ml_pipelines.ExecutorInput.Outputs.ParametersEntry + nil, // 94: ml_pipelines.ExecutorInput.Outputs.ArtifactsEntry + nil, // 95: ml_pipelines.ExecutorOutput.ParametersEntry + nil, // 96: ml_pipelines.ExecutorOutput.ArtifactsEntry + (*structpb.Struct)(nil), // 97: google.protobuf.Struct + (*status.Status)(nil), // 98: google.rpc.Status } var file_pipeline_spec_proto_depIdxs = []int32{ - 92, // 0: ml_pipelines.PipelineJob.pipeline_spec:type_name -> google.protobuf.Struct - 25, // 1: ml_pipelines.PipelineJob.labels:type_name -> ml_pipelines.PipelineJob.LabelsEntry - 26, // 2: ml_pipelines.PipelineJob.runtime_config:type_name -> ml_pipelines.PipelineJob.RuntimeConfig - 15, // 3: ml_pipelines.PipelineSpec.pipeline_info:type_name -> ml_pipelines.PipelineInfo - 11, // 4: ml_pipelines.PipelineSpec.tasks:type_name -> ml_pipelines.PipelineTaskSpec - 93, // 5: ml_pipelines.PipelineSpec.deployment_config:type_name -> google.protobuf.Any - 92, // 6: ml_pipelines.PipelineSpec.deployment_spec:type_name -> google.protobuf.Struct - 29, // 7: ml_pipelines.PipelineSpec.runtime_parameters:type_name -> ml_pipelines.PipelineSpec.RuntimeParametersEntry - 30, // 8: ml_pipelines.PipelineSpec.components:type_name -> ml_pipelines.PipelineSpec.ComponentsEntry - 3, // 9: ml_pipelines.PipelineSpec.root:type_name -> ml_pipelines.ComponentSpec - 6, // 10: ml_pipelines.ComponentSpec.input_definitions:type_name -> ml_pipelines.ComponentInputsSpec - 7, // 11: ml_pipelines.ComponentSpec.output_definitions:type_name -> ml_pipelines.ComponentOutputsSpec - 4, // 12: ml_pipelines.ComponentSpec.dag:type_name -> ml_pipelines.DagSpec - 31, // 13: ml_pipelines.DagSpec.tasks:type_name -> ml_pipelines.DagSpec.TasksEntry - 5, // 14: ml_pipelines.DagSpec.outputs:type_name -> ml_pipelines.DagOutputsSpec - 34, // 15: ml_pipelines.DagOutputsSpec.artifacts:type_name -> ml_pipelines.DagOutputsSpec.ArtifactsEntry - 39, // 16: ml_pipelines.DagOutputsSpec.parameters:type_name -> ml_pipelines.DagOutputsSpec.ParametersEntry - 43, // 17: ml_pipelines.ComponentInputsSpec.artifacts:type_name -> ml_pipelines.ComponentInputsSpec.ArtifactsEntry - 44, // 18: ml_pipelines.ComponentInputsSpec.parameters:type_name -> ml_pipelines.ComponentInputsSpec.ParametersEntry - 47, // 19: ml_pipelines.ComponentOutputsSpec.artifacts:type_name -> ml_pipelines.ComponentOutputsSpec.ArtifactsEntry - 48, // 20: ml_pipelines.ComponentOutputsSpec.parameters:type_name -> ml_pipelines.ComponentOutputsSpec.ParametersEntry - 53, // 21: ml_pipelines.TaskInputsSpec.parameters:type_name -> ml_pipelines.TaskInputsSpec.ParametersEntry - 54, // 22: ml_pipelines.TaskInputsSpec.artifacts:type_name -> ml_pipelines.TaskInputsSpec.ArtifactsEntry - 59, // 23: ml_pipelines.TaskOutputsSpec.parameters:type_name -> ml_pipelines.TaskOutputsSpec.ParametersEntry - 60, // 24: ml_pipelines.TaskOutputsSpec.artifacts:type_name -> ml_pipelines.TaskOutputsSpec.ArtifactsEntry - 17, // 25: ml_pipelines.PipelineTaskSpec.task_info:type_name -> ml_pipelines.PipelineTaskInfo - 8, // 26: ml_pipelines.PipelineTaskSpec.inputs:type_name -> ml_pipelines.TaskInputsSpec - 9, // 27: ml_pipelines.PipelineTaskSpec.outputs:type_name -> ml_pipelines.TaskOutputsSpec - 63, // 28: ml_pipelines.PipelineTaskSpec.caching_options:type_name -> ml_pipelines.PipelineTaskSpec.CachingOptions - 14, // 29: ml_pipelines.PipelineTaskSpec.component_ref:type_name -> ml_pipelines.ComponentRef - 64, // 30: ml_pipelines.PipelineTaskSpec.trigger_policy:type_name -> ml_pipelines.PipelineTaskSpec.TriggerPolicy - 12, // 31: ml_pipelines.PipelineTaskSpec.artifact_iterator:type_name -> ml_pipelines.ArtifactIteratorSpec - 13, // 32: ml_pipelines.PipelineTaskSpec.parameter_iterator:type_name -> ml_pipelines.ParameterIteratorSpec - 65, // 33: ml_pipelines.ArtifactIteratorSpec.items:type_name -> ml_pipelines.ArtifactIteratorSpec.ItemsSpec - 66, // 34: ml_pipelines.ParameterIteratorSpec.items:type_name -> ml_pipelines.ParameterIteratorSpec.ItemsSpec - 20, // 35: ml_pipelines.ValueOrRuntimeParameter.constant_value:type_name -> ml_pipelines.Value - 72, // 36: ml_pipelines.PipelineDeploymentConfig.executors:type_name -> ml_pipelines.PipelineDeploymentConfig.ExecutorsEntry - 16, // 37: ml_pipelines.RuntimeArtifact.type:type_name -> ml_pipelines.ArtifactTypeSchema - 81, // 38: ml_pipelines.RuntimeArtifact.properties:type_name -> ml_pipelines.RuntimeArtifact.PropertiesEntry - 82, // 39: ml_pipelines.RuntimeArtifact.custom_properties:type_name -> ml_pipelines.RuntimeArtifact.CustomPropertiesEntry - 21, // 40: ml_pipelines.ArtifactList.artifacts:type_name -> ml_pipelines.RuntimeArtifact - 83, // 41: ml_pipelines.ExecutorInput.inputs:type_name -> ml_pipelines.ExecutorInput.Inputs - 85, // 42: ml_pipelines.ExecutorInput.outputs:type_name -> ml_pipelines.ExecutorInput.Outputs - 90, // 43: ml_pipelines.ExecutorOutput.parameters:type_name -> ml_pipelines.ExecutorOutput.ParametersEntry - 91, // 44: ml_pipelines.ExecutorOutput.artifacts:type_name -> ml_pipelines.ExecutorOutput.ArtifactsEntry - 27, // 45: ml_pipelines.PipelineJob.RuntimeConfig.parameters:type_name -> ml_pipelines.PipelineJob.RuntimeConfig.ParametersEntry - 20, // 46: ml_pipelines.PipelineJob.RuntimeConfig.ParametersEntry.value:type_name -> ml_pipelines.Value - 0, // 47: ml_pipelines.PipelineSpec.RuntimeParameter.type:type_name -> ml_pipelines.PrimitiveType.PrimitiveTypeEnum - 20, // 48: ml_pipelines.PipelineSpec.RuntimeParameter.default_value:type_name -> ml_pipelines.Value - 28, // 49: ml_pipelines.PipelineSpec.RuntimeParametersEntry.value:type_name -> ml_pipelines.PipelineSpec.RuntimeParameter - 3, // 50: ml_pipelines.PipelineSpec.ComponentsEntry.value:type_name -> ml_pipelines.ComponentSpec - 11, // 51: ml_pipelines.DagSpec.TasksEntry.value:type_name -> ml_pipelines.PipelineTaskSpec - 32, // 52: ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.artifact_selectors:type_name -> ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec - 33, // 53: ml_pipelines.DagOutputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec - 35, // 54: ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.parameter_selectors:type_name -> ml_pipelines.DagOutputsSpec.ParameterSelectorSpec - 40, // 55: ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.mapped_parameters:type_name -> ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.MappedParametersEntry - 35, // 56: ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.value_from_parameter:type_name -> ml_pipelines.DagOutputsSpec.ParameterSelectorSpec - 36, // 57: ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.value_from_oneof:type_name -> ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec - 38, // 58: ml_pipelines.DagOutputsSpec.ParametersEntry.value:type_name -> ml_pipelines.DagOutputsSpec.DagOutputParameterSpec - 35, // 59: ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.MappedParametersEntry.value:type_name -> ml_pipelines.DagOutputsSpec.ParameterSelectorSpec - 16, // 60: ml_pipelines.ComponentInputsSpec.ArtifactSpec.artifact_type:type_name -> ml_pipelines.ArtifactTypeSchema - 0, // 61: ml_pipelines.ComponentInputsSpec.ParameterSpec.type:type_name -> ml_pipelines.PrimitiveType.PrimitiveTypeEnum - 41, // 62: ml_pipelines.ComponentInputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.ComponentInputsSpec.ArtifactSpec - 42, // 63: ml_pipelines.ComponentInputsSpec.ParametersEntry.value:type_name -> ml_pipelines.ComponentInputsSpec.ParameterSpec - 16, // 64: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.artifact_type:type_name -> ml_pipelines.ArtifactTypeSchema - 49, // 65: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.properties:type_name -> ml_pipelines.ComponentOutputsSpec.ArtifactSpec.PropertiesEntry - 50, // 66: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.custom_properties:type_name -> ml_pipelines.ComponentOutputsSpec.ArtifactSpec.CustomPropertiesEntry - 0, // 67: ml_pipelines.ComponentOutputsSpec.ParameterSpec.type:type_name -> ml_pipelines.PrimitiveType.PrimitiveTypeEnum - 45, // 68: ml_pipelines.ComponentOutputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.ComponentOutputsSpec.ArtifactSpec - 46, // 69: ml_pipelines.ComponentOutputsSpec.ParametersEntry.value:type_name -> ml_pipelines.ComponentOutputsSpec.ParameterSpec - 18, // 70: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.PropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 18, // 71: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.CustomPropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 55, // 72: ml_pipelines.TaskInputsSpec.InputArtifactSpec.task_output_artifact:type_name -> ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec - 56, // 73: ml_pipelines.TaskInputsSpec.InputParameterSpec.task_output_parameter:type_name -> ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec - 18, // 74: ml_pipelines.TaskInputsSpec.InputParameterSpec.runtime_value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 52, // 75: ml_pipelines.TaskInputsSpec.ParametersEntry.value:type_name -> ml_pipelines.TaskInputsSpec.InputParameterSpec - 51, // 76: ml_pipelines.TaskInputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.TaskInputsSpec.InputArtifactSpec - 16, // 77: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.artifact_type:type_name -> ml_pipelines.ArtifactTypeSchema - 61, // 78: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.properties:type_name -> ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.PropertiesEntry - 62, // 79: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.custom_properties:type_name -> ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.CustomPropertiesEntry - 0, // 80: ml_pipelines.TaskOutputsSpec.OutputParameterSpec.type:type_name -> ml_pipelines.PrimitiveType.PrimitiveTypeEnum - 58, // 81: ml_pipelines.TaskOutputsSpec.ParametersEntry.value:type_name -> ml_pipelines.TaskOutputsSpec.OutputParameterSpec - 57, // 82: ml_pipelines.TaskOutputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.TaskOutputsSpec.OutputArtifactSpec - 18, // 83: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.PropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 18, // 84: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.CustomPropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 73, // 85: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.lifecycle:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle - 74, // 86: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.resources:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec - 18, // 87: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.artifact_uri:type_name -> ml_pipelines.ValueOrRuntimeParameter - 16, // 88: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.type_schema:type_name -> ml_pipelines.ArtifactTypeSchema - 77, // 89: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.properties:type_name -> ml_pipelines.PipelineDeploymentConfig.ImporterSpec.PropertiesEntry - 78, // 90: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.custom_properties:type_name -> ml_pipelines.PipelineDeploymentConfig.ImporterSpec.CustomPropertiesEntry - 80, // 91: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.output_artifact_queries:type_name -> ml_pipelines.PipelineDeploymentConfig.ResolverSpec.OutputArtifactQueriesEntry - 92, // 92: ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.custom_job:type_name -> google.protobuf.Struct - 67, // 93: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.container:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec - 68, // 94: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.importer:type_name -> ml_pipelines.PipelineDeploymentConfig.ImporterSpec - 69, // 95: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.resolver:type_name -> ml_pipelines.PipelineDeploymentConfig.ResolverSpec - 70, // 96: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.custom_job:type_name -> ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec - 71, // 97: ml_pipelines.PipelineDeploymentConfig.ExecutorsEntry.value:type_name -> ml_pipelines.PipelineDeploymentConfig.ExecutorSpec - 75, // 98: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.pre_cache_check:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec - 76, // 99: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.accelerator:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig - 18, // 100: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.PropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 18, // 101: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.CustomPropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter - 79, // 102: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.OutputArtifactQueriesEntry.value:type_name -> ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec - 20, // 103: ml_pipelines.RuntimeArtifact.PropertiesEntry.value:type_name -> ml_pipelines.Value - 20, // 104: ml_pipelines.RuntimeArtifact.CustomPropertiesEntry.value:type_name -> ml_pipelines.Value - 86, // 105: ml_pipelines.ExecutorInput.Inputs.parameters:type_name -> ml_pipelines.ExecutorInput.Inputs.ParametersEntry - 87, // 106: ml_pipelines.ExecutorInput.Inputs.artifacts:type_name -> ml_pipelines.ExecutorInput.Inputs.ArtifactsEntry - 88, // 107: ml_pipelines.ExecutorInput.Outputs.parameters:type_name -> ml_pipelines.ExecutorInput.Outputs.ParametersEntry - 89, // 108: ml_pipelines.ExecutorInput.Outputs.artifacts:type_name -> ml_pipelines.ExecutorInput.Outputs.ArtifactsEntry - 20, // 109: ml_pipelines.ExecutorInput.Inputs.ParametersEntry.value:type_name -> ml_pipelines.Value - 22, // 110: ml_pipelines.ExecutorInput.Inputs.ArtifactsEntry.value:type_name -> ml_pipelines.ArtifactList - 84, // 111: ml_pipelines.ExecutorInput.Outputs.ParametersEntry.value:type_name -> ml_pipelines.ExecutorInput.OutputParameter - 22, // 112: ml_pipelines.ExecutorInput.Outputs.ArtifactsEntry.value:type_name -> ml_pipelines.ArtifactList - 20, // 113: ml_pipelines.ExecutorOutput.ParametersEntry.value:type_name -> ml_pipelines.Value - 22, // 114: ml_pipelines.ExecutorOutput.ArtifactsEntry.value:type_name -> ml_pipelines.ArtifactList - 115, // [115:115] is the sub-list for method output_type - 115, // [115:115] is the sub-list for method input_type - 115, // [115:115] is the sub-list for extension type_name - 115, // [115:115] is the sub-list for extension extendee - 0, // [0:115] is the sub-list for field type_name + 97, // 0: ml_pipelines.PipelineJob.pipeline_spec:type_name -> google.protobuf.Struct + 29, // 1: ml_pipelines.PipelineJob.labels:type_name -> ml_pipelines.PipelineJob.LabelsEntry + 30, // 2: ml_pipelines.PipelineJob.runtime_config:type_name -> ml_pipelines.PipelineJob.RuntimeConfig + 17, // 3: ml_pipelines.PipelineSpec.pipeline_info:type_name -> ml_pipelines.PipelineInfo + 97, // 4: ml_pipelines.PipelineSpec.deployment_spec:type_name -> google.protobuf.Struct + 33, // 5: ml_pipelines.PipelineSpec.components:type_name -> ml_pipelines.PipelineSpec.ComponentsEntry + 5, // 6: ml_pipelines.PipelineSpec.root:type_name -> ml_pipelines.ComponentSpec + 8, // 7: ml_pipelines.ComponentSpec.input_definitions:type_name -> ml_pipelines.ComponentInputsSpec + 9, // 8: ml_pipelines.ComponentSpec.output_definitions:type_name -> ml_pipelines.ComponentOutputsSpec + 6, // 9: ml_pipelines.ComponentSpec.dag:type_name -> ml_pipelines.DagSpec + 34, // 10: ml_pipelines.DagSpec.tasks:type_name -> ml_pipelines.DagSpec.TasksEntry + 7, // 11: ml_pipelines.DagSpec.outputs:type_name -> ml_pipelines.DagOutputsSpec + 37, // 12: ml_pipelines.DagOutputsSpec.artifacts:type_name -> ml_pipelines.DagOutputsSpec.ArtifactsEntry + 42, // 13: ml_pipelines.DagOutputsSpec.parameters:type_name -> ml_pipelines.DagOutputsSpec.ParametersEntry + 46, // 14: ml_pipelines.ComponentInputsSpec.artifacts:type_name -> ml_pipelines.ComponentInputsSpec.ArtifactsEntry + 47, // 15: ml_pipelines.ComponentInputsSpec.parameters:type_name -> ml_pipelines.ComponentInputsSpec.ParametersEntry + 50, // 16: ml_pipelines.ComponentOutputsSpec.artifacts:type_name -> ml_pipelines.ComponentOutputsSpec.ArtifactsEntry + 51, // 17: ml_pipelines.ComponentOutputsSpec.parameters:type_name -> ml_pipelines.ComponentOutputsSpec.ParametersEntry + 56, // 18: ml_pipelines.TaskInputsSpec.parameters:type_name -> ml_pipelines.TaskInputsSpec.ParametersEntry + 57, // 19: ml_pipelines.TaskInputsSpec.artifacts:type_name -> ml_pipelines.TaskInputsSpec.ArtifactsEntry + 63, // 20: ml_pipelines.TaskOutputsSpec.parameters:type_name -> ml_pipelines.TaskOutputsSpec.ParametersEntry + 64, // 21: ml_pipelines.TaskOutputsSpec.artifacts:type_name -> ml_pipelines.TaskOutputsSpec.ArtifactsEntry + 19, // 22: ml_pipelines.PipelineTaskSpec.task_info:type_name -> ml_pipelines.PipelineTaskInfo + 10, // 23: ml_pipelines.PipelineTaskSpec.inputs:type_name -> ml_pipelines.TaskInputsSpec + 67, // 24: ml_pipelines.PipelineTaskSpec.caching_options:type_name -> ml_pipelines.PipelineTaskSpec.CachingOptions + 16, // 25: ml_pipelines.PipelineTaskSpec.component_ref:type_name -> ml_pipelines.ComponentRef + 68, // 26: ml_pipelines.PipelineTaskSpec.trigger_policy:type_name -> ml_pipelines.PipelineTaskSpec.TriggerPolicy + 14, // 27: ml_pipelines.PipelineTaskSpec.artifact_iterator:type_name -> ml_pipelines.ArtifactIteratorSpec + 15, // 28: ml_pipelines.PipelineTaskSpec.parameter_iterator:type_name -> ml_pipelines.ParameterIteratorSpec + 69, // 29: ml_pipelines.ArtifactIteratorSpec.items:type_name -> ml_pipelines.ArtifactIteratorSpec.ItemsSpec + 70, // 30: ml_pipelines.ParameterIteratorSpec.items:type_name -> ml_pipelines.ParameterIteratorSpec.ItemsSpec + 22, // 31: ml_pipelines.ValueOrRuntimeParameter.constant_value:type_name -> ml_pipelines.Value + 76, // 32: ml_pipelines.PipelineDeploymentConfig.executors:type_name -> ml_pipelines.PipelineDeploymentConfig.ExecutorsEntry + 18, // 33: ml_pipelines.RuntimeArtifact.type:type_name -> ml_pipelines.ArtifactTypeSchema + 86, // 34: ml_pipelines.RuntimeArtifact.properties:type_name -> ml_pipelines.RuntimeArtifact.PropertiesEntry + 87, // 35: ml_pipelines.RuntimeArtifact.custom_properties:type_name -> ml_pipelines.RuntimeArtifact.CustomPropertiesEntry + 97, // 36: ml_pipelines.RuntimeArtifact.metadata:type_name -> google.protobuf.Struct + 23, // 37: ml_pipelines.ArtifactList.artifacts:type_name -> ml_pipelines.RuntimeArtifact + 88, // 38: ml_pipelines.ExecutorInput.inputs:type_name -> ml_pipelines.ExecutorInput.Inputs + 90, // 39: ml_pipelines.ExecutorInput.outputs:type_name -> ml_pipelines.ExecutorInput.Outputs + 95, // 40: ml_pipelines.ExecutorOutput.parameters:type_name -> ml_pipelines.ExecutorOutput.ParametersEntry + 96, // 41: ml_pipelines.ExecutorOutput.artifacts:type_name -> ml_pipelines.ExecutorOutput.ArtifactsEntry + 98, // 42: ml_pipelines.PipelineTaskFinalStatus.error:type_name -> google.rpc.Status + 31, // 43: ml_pipelines.PipelineJob.RuntimeConfig.parameters:type_name -> ml_pipelines.PipelineJob.RuntimeConfig.ParametersEntry + 22, // 44: ml_pipelines.PipelineJob.RuntimeConfig.ParametersEntry.value:type_name -> ml_pipelines.Value + 0, // 45: ml_pipelines.PipelineSpec.RuntimeParameter.type:type_name -> ml_pipelines.PrimitiveType.PrimitiveTypeEnum + 22, // 46: ml_pipelines.PipelineSpec.RuntimeParameter.default_value:type_name -> ml_pipelines.Value + 5, // 47: ml_pipelines.PipelineSpec.ComponentsEntry.value:type_name -> ml_pipelines.ComponentSpec + 13, // 48: ml_pipelines.DagSpec.TasksEntry.value:type_name -> ml_pipelines.PipelineTaskSpec + 35, // 49: ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.artifact_selectors:type_name -> ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec + 36, // 50: ml_pipelines.DagOutputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec + 38, // 51: ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.parameter_selectors:type_name -> ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + 43, // 52: ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.mapped_parameters:type_name -> ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.MappedParametersEntry + 38, // 53: ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.value_from_parameter:type_name -> ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + 39, // 54: ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.value_from_oneof:type_name -> ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec + 41, // 55: ml_pipelines.DagOutputsSpec.ParametersEntry.value:type_name -> ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + 38, // 56: ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.MappedParametersEntry.value:type_name -> ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + 18, // 57: ml_pipelines.ComponentInputsSpec.ArtifactSpec.artifact_type:type_name -> ml_pipelines.ArtifactTypeSchema + 0, // 58: ml_pipelines.ComponentInputsSpec.ParameterSpec.type:type_name -> ml_pipelines.PrimitiveType.PrimitiveTypeEnum + 44, // 59: ml_pipelines.ComponentInputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.ComponentInputsSpec.ArtifactSpec + 45, // 60: ml_pipelines.ComponentInputsSpec.ParametersEntry.value:type_name -> ml_pipelines.ComponentInputsSpec.ParameterSpec + 18, // 61: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.artifact_type:type_name -> ml_pipelines.ArtifactTypeSchema + 52, // 62: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.properties:type_name -> ml_pipelines.ComponentOutputsSpec.ArtifactSpec.PropertiesEntry + 53, // 63: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.custom_properties:type_name -> ml_pipelines.ComponentOutputsSpec.ArtifactSpec.CustomPropertiesEntry + 97, // 64: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.metadata:type_name -> google.protobuf.Struct + 0, // 65: ml_pipelines.ComponentOutputsSpec.ParameterSpec.type:type_name -> ml_pipelines.PrimitiveType.PrimitiveTypeEnum + 48, // 66: ml_pipelines.ComponentOutputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.ComponentOutputsSpec.ArtifactSpec + 49, // 67: ml_pipelines.ComponentOutputsSpec.ParametersEntry.value:type_name -> ml_pipelines.ComponentOutputsSpec.ParameterSpec + 20, // 68: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.PropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter + 20, // 69: ml_pipelines.ComponentOutputsSpec.ArtifactSpec.CustomPropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter + 58, // 70: ml_pipelines.TaskInputsSpec.InputArtifactSpec.task_output_artifact:type_name -> ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec + 59, // 71: ml_pipelines.TaskInputsSpec.InputParameterSpec.task_output_parameter:type_name -> ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec + 20, // 72: ml_pipelines.TaskInputsSpec.InputParameterSpec.runtime_value:type_name -> ml_pipelines.ValueOrRuntimeParameter + 60, // 73: ml_pipelines.TaskInputsSpec.InputParameterSpec.task_final_status:type_name -> ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus + 55, // 74: ml_pipelines.TaskInputsSpec.ParametersEntry.value:type_name -> ml_pipelines.TaskInputsSpec.InputParameterSpec + 54, // 75: ml_pipelines.TaskInputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.TaskInputsSpec.InputArtifactSpec + 18, // 76: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.artifact_type:type_name -> ml_pipelines.ArtifactTypeSchema + 65, // 77: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.properties:type_name -> ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.PropertiesEntry + 66, // 78: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.custom_properties:type_name -> ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.CustomPropertiesEntry + 0, // 79: ml_pipelines.TaskOutputsSpec.OutputParameterSpec.type:type_name -> ml_pipelines.PrimitiveType.PrimitiveTypeEnum + 62, // 80: ml_pipelines.TaskOutputsSpec.ParametersEntry.value:type_name -> ml_pipelines.TaskOutputsSpec.OutputParameterSpec + 61, // 81: ml_pipelines.TaskOutputsSpec.ArtifactsEntry.value:type_name -> ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + 20, // 82: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.PropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter + 20, // 83: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.CustomPropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter + 1, // 84: ml_pipelines.PipelineTaskSpec.TriggerPolicy.strategy:type_name -> ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy + 77, // 85: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.lifecycle:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + 78, // 86: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.resources:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + 79, // 87: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.env:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.EnvVar + 20, // 88: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.artifact_uri:type_name -> ml_pipelines.ValueOrRuntimeParameter + 18, // 89: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.type_schema:type_name -> ml_pipelines.ArtifactTypeSchema + 82, // 90: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.properties:type_name -> ml_pipelines.PipelineDeploymentConfig.ImporterSpec.PropertiesEntry + 83, // 91: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.custom_properties:type_name -> ml_pipelines.PipelineDeploymentConfig.ImporterSpec.CustomPropertiesEntry + 97, // 92: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.metadata:type_name -> google.protobuf.Struct + 85, // 93: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.output_artifact_queries:type_name -> ml_pipelines.PipelineDeploymentConfig.ResolverSpec.OutputArtifactQueriesEntry + 97, // 94: ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.custom_job:type_name -> google.protobuf.Struct + 71, // 95: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.container:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + 72, // 96: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.importer:type_name -> ml_pipelines.PipelineDeploymentConfig.ImporterSpec + 73, // 97: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.resolver:type_name -> ml_pipelines.PipelineDeploymentConfig.ResolverSpec + 74, // 98: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.custom_job:type_name -> ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec + 75, // 99: ml_pipelines.PipelineDeploymentConfig.ExecutorsEntry.value:type_name -> ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + 80, // 100: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.pre_cache_check:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec + 81, // 101: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.accelerator:type_name -> ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig + 20, // 102: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.PropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter + 20, // 103: ml_pipelines.PipelineDeploymentConfig.ImporterSpec.CustomPropertiesEntry.value:type_name -> ml_pipelines.ValueOrRuntimeParameter + 84, // 104: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.OutputArtifactQueriesEntry.value:type_name -> ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec + 22, // 105: ml_pipelines.RuntimeArtifact.PropertiesEntry.value:type_name -> ml_pipelines.Value + 22, // 106: ml_pipelines.RuntimeArtifact.CustomPropertiesEntry.value:type_name -> ml_pipelines.Value + 91, // 107: ml_pipelines.ExecutorInput.Inputs.parameters:type_name -> ml_pipelines.ExecutorInput.Inputs.ParametersEntry + 92, // 108: ml_pipelines.ExecutorInput.Inputs.artifacts:type_name -> ml_pipelines.ExecutorInput.Inputs.ArtifactsEntry + 93, // 109: ml_pipelines.ExecutorInput.Outputs.parameters:type_name -> ml_pipelines.ExecutorInput.Outputs.ParametersEntry + 94, // 110: ml_pipelines.ExecutorInput.Outputs.artifacts:type_name -> ml_pipelines.ExecutorInput.Outputs.ArtifactsEntry + 22, // 111: ml_pipelines.ExecutorInput.Inputs.ParametersEntry.value:type_name -> ml_pipelines.Value + 24, // 112: ml_pipelines.ExecutorInput.Inputs.ArtifactsEntry.value:type_name -> ml_pipelines.ArtifactList + 89, // 113: ml_pipelines.ExecutorInput.Outputs.ParametersEntry.value:type_name -> ml_pipelines.ExecutorInput.OutputParameter + 24, // 114: ml_pipelines.ExecutorInput.Outputs.ArtifactsEntry.value:type_name -> ml_pipelines.ArtifactList + 22, // 115: ml_pipelines.ExecutorOutput.ParametersEntry.value:type_name -> ml_pipelines.Value + 24, // 116: ml_pipelines.ExecutorOutput.ArtifactsEntry.value:type_name -> ml_pipelines.ArtifactList + 117, // [117:117] is the sub-list for method output_type + 117, // [117:117] is the sub-list for method input_type + 117, // [117:117] is the sub-list for extension type_name + 117, // [117:117] is the sub-list for extension extendee + 0, // [0:117] is the sub-list for field type_name } func init() { file_pipeline_spec_proto_init() } @@ -5536,8 +5985,20 @@ func file_pipeline_spec_proto_init() { return nil } } + file_pipeline_spec_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PipelineTaskFinalStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } file_pipeline_spec_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipelineJob_RuntimeConfig); i { + switch v := v.(*PipelineStateEnum); i { case 0: return &v.state case 1: @@ -5549,6 +6010,18 @@ func file_pipeline_spec_proto_init() { } } file_pipeline_spec_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PipelineJob_RuntimeConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pipeline_spec_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipelineSpec_RuntimeParameter); i { case 0: return &v.state @@ -5560,7 +6033,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DagOutputsSpec_ArtifactSelectorSpec); i { case 0: return &v.state @@ -5572,7 +6045,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DagOutputsSpec_DagOutputArtifactSpec); i { case 0: return &v.state @@ -5584,7 +6057,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DagOutputsSpec_ParameterSelectorSpec); i { case 0: return &v.state @@ -5596,7 +6069,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DagOutputsSpec_ParameterSelectorsSpec); i { case 0: return &v.state @@ -5608,7 +6081,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DagOutputsSpec_MapParameterSelectorsSpec); i { case 0: return &v.state @@ -5620,7 +6093,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DagOutputsSpec_DagOutputParameterSpec); i { case 0: return &v.state @@ -5632,7 +6105,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ComponentInputsSpec_ArtifactSpec); i { case 0: return &v.state @@ -5644,7 +6117,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ComponentInputsSpec_ParameterSpec); i { case 0: return &v.state @@ -5656,7 +6129,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ComponentOutputsSpec_ArtifactSpec); i { case 0: return &v.state @@ -5668,7 +6141,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ComponentOutputsSpec_ParameterSpec); i { case 0: return &v.state @@ -5680,7 +6153,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskInputsSpec_InputArtifactSpec); i { case 0: return &v.state @@ -5692,7 +6165,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskInputsSpec_InputParameterSpec); i { case 0: return &v.state @@ -5704,7 +6177,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskInputsSpec_InputArtifactSpec_TaskOutputArtifactSpec); i { case 0: return &v.state @@ -5716,7 +6189,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskInputsSpec_InputParameterSpec_TaskOutputParameterSpec); i { case 0: return &v.state @@ -5728,7 +6201,19 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TaskInputsSpec_InputParameterSpec_TaskFinalStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pipeline_spec_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskOutputsSpec_OutputArtifactSpec); i { case 0: return &v.state @@ -5740,7 +6225,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskOutputsSpec_OutputParameterSpec); i { case 0: return &v.state @@ -5752,7 +6237,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipelineTaskSpec_CachingOptions); i { case 0: return &v.state @@ -5764,7 +6249,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipelineTaskSpec_TriggerPolicy); i { case 0: return &v.state @@ -5776,7 +6261,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ArtifactIteratorSpec_ItemsSpec); i { case 0: return &v.state @@ -5788,7 +6273,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ParameterIteratorSpec_ItemsSpec); i { case 0: return &v.state @@ -5800,7 +6285,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipelineDeploymentConfig_PipelineContainerSpec); i { case 0: return &v.state @@ -5812,7 +6297,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipelineDeploymentConfig_ImporterSpec); i { case 0: return &v.state @@ -5824,7 +6309,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipelineDeploymentConfig_ResolverSpec); i { case 0: return &v.state @@ -5836,7 +6321,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipelineDeploymentConfig_AIPlatformCustomJobSpec); i { case 0: return &v.state @@ -5848,7 +6333,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipelineDeploymentConfig_ExecutorSpec); i { case 0: return &v.state @@ -5860,7 +6345,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle); i { case 0: return &v.state @@ -5872,7 +6357,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec); i { case 0: return &v.state @@ -5884,7 +6369,19 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PipelineDeploymentConfig_PipelineContainerSpec_EnvVar); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pipeline_spec_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipelineDeploymentConfig_PipelineContainerSpec_Lifecycle_Exec); i { case 0: return &v.state @@ -5896,7 +6393,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipelineDeploymentConfig_PipelineContainerSpec_ResourceSpec_AcceleratorConfig); i { case 0: return &v.state @@ -5908,7 +6405,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipelineDeploymentConfig_ResolverSpec_ArtifactQuerySpec); i { case 0: return &v.state @@ -5920,7 +6417,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExecutorInput_Inputs); i { case 0: return &v.state @@ -5932,7 +6429,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExecutorInput_OutputParameter); i { case 0: return &v.state @@ -5944,7 +6441,7 @@ func file_pipeline_spec_proto_init() { return nil } } - file_pipeline_spec_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + file_pipeline_spec_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExecutorInput_Outputs); i { case 0: return &v.state @@ -5979,24 +6476,25 @@ func file_pipeline_spec_proto_init() { (*Value_DoubleValue)(nil), (*Value_StringValue)(nil), } - file_pipeline_spec_proto_msgTypes[37].OneofWrappers = []interface{}{ + file_pipeline_spec_proto_msgTypes[38].OneofWrappers = []interface{}{ (*DagOutputsSpec_DagOutputParameterSpec_ValueFromParameter)(nil), (*DagOutputsSpec_DagOutputParameterSpec_ValueFromOneof)(nil), } - file_pipeline_spec_proto_msgTypes[50].OneofWrappers = []interface{}{ + file_pipeline_spec_proto_msgTypes[51].OneofWrappers = []interface{}{ (*TaskInputsSpec_InputArtifactSpec_TaskOutputArtifact)(nil), (*TaskInputsSpec_InputArtifactSpec_ComponentInputArtifact)(nil), } - file_pipeline_spec_proto_msgTypes[51].OneofWrappers = []interface{}{ + file_pipeline_spec_proto_msgTypes[52].OneofWrappers = []interface{}{ (*TaskInputsSpec_InputParameterSpec_TaskOutputParameter)(nil), (*TaskInputsSpec_InputParameterSpec_RuntimeValue)(nil), (*TaskInputsSpec_InputParameterSpec_ComponentInputParameter)(nil), + (*TaskInputsSpec_InputParameterSpec_TaskFinalStatus_)(nil), } - file_pipeline_spec_proto_msgTypes[65].OneofWrappers = []interface{}{ + file_pipeline_spec_proto_msgTypes[67].OneofWrappers = []interface{}{ (*ParameterIteratorSpec_ItemsSpec_Raw)(nil), (*ParameterIteratorSpec_ItemsSpec_InputParameter)(nil), } - file_pipeline_spec_proto_msgTypes[70].OneofWrappers = []interface{}{ + file_pipeline_spec_proto_msgTypes[72].OneofWrappers = []interface{}{ (*PipelineDeploymentConfig_ExecutorSpec_Container)(nil), (*PipelineDeploymentConfig_ExecutorSpec_Importer)(nil), (*PipelineDeploymentConfig_ExecutorSpec_Resolver)(nil), @@ -6007,8 +6505,8 @@ func file_pipeline_spec_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pipeline_spec_proto_rawDesc, - NumEnums: 1, - NumMessages: 91, + NumEnums: 3, + NumMessages: 94, NumExtensions: 0, NumServices: 0, }, diff --git a/api/v2alpha1/pipeline_spec.proto b/api/v2alpha1/pipeline_spec.proto index 43da2ed750..854d0e4a9b 100644 --- a/api/v2alpha1/pipeline_spec.proto +++ b/api/v2alpha1/pipeline_spec.proto @@ -4,8 +4,9 @@ package ml_pipelines; import "google/protobuf/any.proto"; import "google/protobuf/struct.proto"; +import "google/rpc/status.proto"; -option go_package = "github.com/kubeflow/pipelines/api/v2alpha1/go"; +option go_package = "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec"; // The spec of a pipeline job. message PipelineJob { @@ -47,16 +48,6 @@ message PipelineSpec { // The metadata of the pipeline. PipelineInfo pipeline_info = 1; - // A list of pipeline tasks, which form a DAG. - // Deprecated, use [PipelineSpec.root][] instead. - repeated PipelineTaskSpec tasks = 2 [deprecated = true]; - - // The deployment config of the pipeline. - // The deployment config can be extended to provide platform specific configs. - // The supported config is [PipelineDeploymentConifg](). - // Deprecated in favor of deployment_spec. - google.protobuf.Any deployment_config = 3 [deprecated = true]; - // The deployment config of the pipeline. // The deployment config can be extended to provide platform specific configs. google.protobuf.Struct deployment_spec = 7; @@ -76,11 +67,6 @@ message PipelineSpec { // be raised. Value default_value = 2; } - // The runtime parameters of the pipeline. Keyed by parameter name. - // Deprecated, instead of defining the runtime_parameters, user can define - // [ComponentSpec.input_definitions][] field of the [PipelineSpec.root][] to - // define the pipeline parameters. - map<string, RuntimeParameter> runtime_parameters = 6 [deprecated = true]; // The map of name to definition of all components used in this pipeline. map<string, ComponentSpec> components = 8; @@ -172,6 +158,7 @@ message DagOutputsSpec { // selected parameters must have the same type as the DAG parameter type. ParameterSelectorsSpec value_from_oneof = 2; } + reserved 3; } // The name to the output parameter. @@ -221,17 +208,6 @@ message ComponentOutputsSpec { message TaskInputsSpec { // The specification of a task input artifact. message InputArtifactSpec { - // The name of the upstream task which produces the output that matches with - // the `output_artifact_key`. - // Deprecated, use - // [TaskInputSpec.InputArtifactSpec.TaskOutputArtifactSpec][] instead. - string producer_task = 1 [deprecated = true]; - - // The key of [TaskOutputsSpec.artifacts][] map of the producer task. - // Deprecated, use - // [TaskInputSpec.InputArtifactSpec.TaskOutputArtifactSpec][] instead. - string output_artifact_key = 2 [deprecated = true]; - message TaskOutputArtifactSpec { // The name of the upstream task which produces the output that matches // with the `output_artifact_key`. @@ -375,30 +351,6 @@ message PipelineTaskSpec { // Specification for task inputs which contains parameters and artifacts. TaskInputsSpec inputs = 2; - // Specification for task outputs. - // Deprecated, the output definition is moved to [ComponentSpec.outputs][]. - TaskOutputsSpec outputs = 3 [deprecated = true]; - - // Label for the executor of the task. - // The specification will be specified in the deployment config. - // For example: - // ``` - // tasks: - // - task_info: - // name: trainer - // executor_label: trainer - // deployment_config: - // @type: cloud.ml.pipelines.v1alpha3.proto.PipelineDeploymentConfig - // executors: - // trainer: - // container: - // image: gcr.io/tfx:latest - // args: [] - // ``` - // Deprecated, the executor_label is moved to - // [ComponentSpec.executor_label][]. - string executor_label = 4 [deprecated = true]; - // A list of names of upstream tasks that do not provide input // artifacts for this task, but nonetheless whose completion this task depends // on. @@ -415,7 +367,7 @@ message PipelineTaskSpec { ComponentRef component_ref = 7; // Trigger policy defines how the task gets triggered. If a task is not - // triggered, it will run into NOT_TRIGGERED state. + // triggered, it will run into SKIPPED state. message TriggerPolicy { // An expression which will be evaluated into a boolean value. True to // trigger the task to run. The expression follows the language of @@ -538,22 +490,28 @@ message PipelineInfo { message ArtifactTypeSchema { oneof kind { // The name of the type. The format of the title must be: - // `<namespace>.<title>.<version>`. + // `<namespace>.<title>`. // Examples: - // - `aiplatform.Model.v1` - // - `acme.CustomModel.v2` + // - `aiplatform.Model` + // - `acme.CustomModel` // When this field is set, the type must be pre-registered in the MLMD // store. string schema_title = 1; // Points to a YAML file stored on Google Cloud Storage describing the // format. - string schema_uri = 2; + // Deprecated. Use [PipelineArtifactTypeSchema.schema_title][] or + // [PipelineArtifactTypeSchema.instance_schema][] instead. + string schema_uri = 2 [deprecated = true]; // Contains a raw YAML string, describing the format of // the properties of the type. string instance_schema = 3; } + + // The schema version of the artifact. If the value is not set, it defaults + // to the the latest version in the system. + string schema_version = 4; } // The basic info of a task. @@ -571,7 +529,7 @@ message ValueOrRuntimeParameter { oneof value { // Constant value which is determined in compile time. Value constant_value = 1; - // Name of the runtime parameter. + // The runtime parameter refers to the parent component input parameter. string runtime_parameter = 2; } } @@ -636,6 +594,27 @@ message PipelineDeploymentConfig { AcceleratorConfig accelerator = 3; } ResourceSpec resources = 5; + + // Environment variables to be passed to the container. + // Represents an environment variable present in a container. + message EnvVar { + // Name of the environment variable. Must be a valid C identifier. It can + // be composed of characters such as uppercase, lowercase characters, + // underscore, digits, but the leading character should be either a + // letter or an underscore. + string name = 1; + + // Variables that reference a $(VAR_NAME) are expanded using the previous + // defined environment variables in the container and any environment + // variables defined by the platform runtime that executes this pipeline. + // If a variable cannot be resolved, the reference in the input string + // will be unchanged. The $(VAR_NAME) syntax can be escaped with a double + // $$, ie: $$(VAR_NAME). Escaped references will never be expanded, + // regardless of whether the variable exists or not. + string value = 2; + } + // Environment variables to be passed to the container. + repeated EnvVar env = 6; } // The specification to import or reimport a new artifact to the pipeline. @@ -669,15 +648,13 @@ message PipelineDeploymentConfig { // The query to fetch artifacts. message ArtifactQuerySpec { // The filter of the artifact query. The supported syntax are: - // - `contexts.name='<context name>'` - // - `artifact_type='<artifact type name>'` - // - `uri='<uri>'` + // - `in_context("<context name>")` + // - `artifact_type="<artifact type name>"` + // - `uri="<uri>"` // - `state=<state>` - // - `properties['key']='value'` - // - `custom_properties['key']='value'` - // - `name='value'` - // - `and` to combine two conditions and returns when both are true. - // If no `contexts.name` filter is set, the query will be scoped to the + // - `name="value"` + // - `AND` to combine two conditions and returns when both are true. + // If no `in_context` filter is set, the query will be scoped to the // the current pipeline context. string filter = 1; // The maximum number of the artifacts to be returned from the @@ -687,12 +664,14 @@ message PipelineDeploymentConfig { // A list of resolver output definitions. The // key of the map must be exactly the same as - // the keys in the [TaskOutputsSpec.artifacts][] map. + // the keys in the [PipelineTaskOutputsSpec.artifacts][] map. // At least one output must be defined. map<string, ArtifactQuerySpec> output_artifact_queries = 1; } message AIPlatformCustomJobSpec { + option deprecated = true; + // API Specification for invoking a Google Cloud AI Platform CustomJob. // The fields must match the field names and structures of CustomJob // defined in @@ -836,3 +815,48 @@ message ExecutorOutput { // The updated metadata for output artifact. map<string, ArtifactList> artifacts = 2; } + +// The final status of a task. The structure will be passed to input parameter +// of kind `task_final_status`. +message PipelineTaskFinalStatus { + // The final state of the task. + // The value is the string version of [PipelineStateEnum.PipelineTaskState][] + string state = 1; + + // The error of the task. + google.rpc.Status error = 2; +} + +message PipelineStateEnum { + enum PipelineTaskState { + TASK_STATE_UNSPECIFIED = 0; + PENDING = 1; + RUNNING_DRIVER = 2; + DRIVER_SUCCEEDED = 3; + RUNNING_EXECUTOR = 4; + SUCCEEDED = 5; + CANCEL_PENDING = 6; + CANCELLING = 7; + CANCELLED = 8; + FAILED = 9; + // Indicates that the task is skipped to run due to a cache hit. + SKIPPED = 10; + // Indicates that the task was just populated to the DB but not ready to + // be scheduled. Once job handler determined the task being ready to + // be scheduled, the task state will change to PENDING. The state + // transition is depicted below: + // * QUEUED(not ready to run) --> PENDING(ready to run) --> RUNNING + QUEUED = 11; + // Indicates that the task is not triggered based on the + // [PipelineTaskSpec.TriggerPolicy.condition][] config. + NOT_TRIGGERED = 12; + // Indicates that the tasks will no longer be schedulable. Usually a task + // was set to this state because its all upstream tasks are in final state + // but the [PipelineTaskSpec.TriggerPolicy.strategy][] disallows the task to + // be triggered. + // The difference between `NOT_TRIGGERED` is that `UNSCHEDULABLE` must met + // [PipelineTaskSpec.TriggerPolicy.strategy][], but must not met the + // [PipelineTaskSpec.TriggerPolicy.condition][]. + UNSCHEDULABLE = 13; + } +} diff --git a/api/v2alpha1/python/kfp/pipeline_spec/__init__.py b/api/v2alpha1/python/kfp/pipeline_spec/__init__.py index 6913f02e36..05ba64817c 100644 --- a/api/v2alpha1/python/kfp/pipeline_spec/__init__.py +++ b/api/v2alpha1/python/kfp/pipeline_spec/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/api/v2alpha1/python/setup.py b/api/v2alpha1/python/setup.py index 50c7cdb6f3..abb6274a8d 100644 --- a/api/v2alpha1/python/setup.py +++ b/api/v2alpha1/python/setup.py @@ -1,4 +1,4 @@ -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -22,7 +22,7 @@ from shutil import which as find_executable NAME = "kfp-pipeline-spec" -VERSION = "0.1.7" +VERSION = "0.1.9" PROTO_DIR = os.path.realpath( os.path.join(os.path.dirname(__file__), os.pardir)) diff --git a/backend/Dockerfile b/backend/Dockerfile index a8fb2ff592..58fd939f2e 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,19 +1,32 @@ ### Updated base image to golang in order to build with go modules ### Bazel build cannot work with the Tekton library because the current ### KFP Bazel does not support go.mod "replace" on key dependencies. +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # 1. Build api server application # Use golang:1.13.1-stretch to keep GLIBC at 2.24 https://github.com/gotify/server/issues/225 FROM golang:1.13.1-stretch as builder RUN apt-get update && apt-get install -y cmake clang musl-dev openssl - WORKDIR /go/src/github.com/kubeflow/pipelines COPY . . -RUN go mod vendor RUN GO111MODULE=on go build -o /bin/apiserver backend/src/apiserver/*.go - -RUN mkdir -p /go/src/github.com/kubeflow/pipelines/bazel-bin/backend/src/apiserver/ -RUN go build -o /go/src/github.com/kubeflow/pipelines/bazel-bin/backend/src/apiserver/apiserver ./backend/src/apiserver +# Check licenses and comply with license terms. +RUN ./hack/install-go-licenses.sh +RUN go-licenses csv /bin/apiserver > /tmp/licenses.csv && \ + diff /tmp/licenses.csv backend/third_party_licenses/apiserver.csv && \ + go-licenses save /tmp/licenses.csv --save_path /tmp/NOTICES # 2. Compile preloaded pipeline samples FROM python:3.7 as compiler @@ -22,10 +35,6 @@ RUN wget https://bootstrap.pypa.io/get-pip.py && python3 get-pip.py COPY sdk/python/requirements.txt . RUN python3 -m pip install -r requirements.txt --no-cache-dir -# Downloading Argo CLI so that the samples are validated, but doesn't need it for Tekton. -# ADD https://github.com/argoproj/argo/releases/download/v2.7.5/argo-linux-amd64 /usr/local/bin/argo -# RUN chmod +x /usr/local/bin/argo - WORKDIR /go/src/github.com/kubeflow/pipelines COPY sdk sdk WORKDIR /go/src/github.com/kubeflow/pipelines/sdk/python @@ -40,13 +49,16 @@ COPY backend/src/apiserver/config/sample_config.json /samples/ RUN set -e; \ < /samples/sample_config.json jq .[].file --raw-output | while read pipeline_yaml; do \ pipeline_py="${pipeline_yaml%.yaml}.py"; \ + pipeline_py="${pipeline_yaml%.yaml}.py"; \ + mode=`< /samples/sample_config.json jq ".[] | select(.file == \"${pipeline_yaml}\") | (if .mode == null then \"V1\" else .mode end)" --raw-output`; \ mv "$pipeline_py" "${pipeline_py}.tmp"; \ echo 'import kfp; kfp.components.default_base_image_or_builder="gcr.io/google-appengine/python:2020-03-31-141326"' | cat - "${pipeline_py}.tmp" > "$pipeline_py"; \ - dsl-compile-tekton --py "$pipeline_py" --output "$pipeline_yaml" || python3 "$pipeline_py"; \ + dsl-compile-tekton --py "$pipeline_py" --output "$pipeline_yaml" --mode "$mode" || python3 "$pipeline_py"; \ done + # 3. Start api web server -FROM golang:1.13.0 +FROM debian:stretch ARG COMMIT_SHA=unknown ENV COMMIT_SHA=${COMMIT_SHA} @@ -55,10 +67,12 @@ ENV TAG_NAME=${TAG_NAME} WORKDIR /bin -COPY third_party/license.txt /bin/license.txt COPY backend/src/apiserver/config/ /config - COPY --from=builder /bin/apiserver /bin/apiserver + +# Copy licenses and notices. +COPY --from=builder /tmp/licenses.csv /third_party/licenses.csv +COPY --from=builder /tmp/NOTICES /third_party/NOTICES COPY --from=compiler /samples/ /samples/ RUN chmod +x /bin/apiserver diff --git a/backend/Dockerfile.cacheserver b/backend/Dockerfile.cacheserver index c68e7f38bb..cbedf387ab 100644 --- a/backend/Dockerfile.cacheserver +++ b/backend/Dockerfile.cacheserver @@ -1,3 +1,17 @@ +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # Dockerfile for building the source code of cache_server FROM golang:1.13.15-alpine3.12 as builder @@ -8,13 +22,19 @@ WORKDIR /go/src/github.com/kubeflow/pipelines COPY . . RUN GO111MODULE=on go build -o /bin/cache_server backend/src/cache/*.go -RUN git clone https://github.com/hashicorp/golang-lru.git /kfp/cache/golang-lru/ + +# Check licenses and comply with license terms. +RUN ./hack/install-go-licenses.sh +RUN go-licenses csv /bin/cache_server > /tmp/licenses.csv && \ + diff /tmp/licenses.csv backend/third_party_licenses/cache_server.csv && \ + go-licenses save /tmp/licenses.csv --save_path /tmp/NOTICES FROM alpine:3.8 WORKDIR /bin COPY --from=builder /bin/cache_server /bin/cache_server -COPY --from=builder /go/src/github.com/kubeflow/pipelines/third_party/license.txt /bin/license.txt -COPY --from=builder /kfp/cache/golang-lru/* /bin/golang-lru/ +# Copy licenses and notices. +COPY --from=builder /tmp/licenses.csv /third_party/licenses.csv +COPY --from=builder /tmp/NOTICES /third_party/NOTICES -ENTRYPOINT [ "/bin/cache_server" ] \ No newline at end of file +ENTRYPOINT [ "/bin/cache_server" ] diff --git a/backend/Dockerfile.persistenceagent b/backend/Dockerfile.persistenceagent index c97dacc556..3b3511ac2b 100644 --- a/backend/Dockerfile.persistenceagent +++ b/backend/Dockerfile.persistenceagent @@ -1,5 +1,18 @@ # Updated golang image to 1.13 since Tekton 0.13 onwards # requires golang 1.13 in order to build certain packages. +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. FROM golang:1.13.15-alpine3.12 as builder @@ -11,12 +24,19 @@ RUN apk update && apk upgrade && \ apk add --no-cache bash git openssh gcc musl-dev RUN GO111MODULE=on go build -o /bin/persistence_agent backend/src/agent/persistence/*.go +# Check licenses and comply with license terms. +RUN ./hack/install-go-licenses.sh +RUN go-licenses csv /bin/persistence_agent > /tmp/licenses.csv && \ + diff /tmp/licenses.csv backend/third_party_licenses/persistence_agent.csv && \ + go-licenses save /tmp/licenses.csv --save_path /tmp/NOTICES FROM alpine:3.11 WORKDIR /bin COPY --from=builder /bin/persistence_agent /bin/persistence_agent -COPY --from=builder /go/src/github.com/kubeflow/pipelines/third_party/license.txt /bin/license.txt +# Copy licenses and notices. +COPY --from=builder /tmp/licenses.csv /third_party/licenses.csv +COPY --from=builder /tmp/NOTICES /third_party/NOTICES ENV NAMESPACE "" diff --git a/backend/Dockerfile.scheduledworkflow b/backend/Dockerfile.scheduledworkflow index 1692da062f..2bacfcce74 100644 --- a/backend/Dockerfile.scheduledworkflow +++ b/backend/Dockerfile.scheduledworkflow @@ -1,3 +1,17 @@ +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + FROM golang:1.13.15-alpine3.12 as builder WORKDIR /go/src/github.com/kubeflow/pipelines @@ -8,13 +22,21 @@ RUN apk update && apk upgrade && \ apk add --no-cache bash git openssh gcc musl-dev RUN GO111MODULE=on go build -o /bin/controller backend/src/crd/controller/scheduledworkflow/*.go +# Check licenses and comply with license terms. +RUN ./hack/install-go-licenses.sh +RUN go-licenses csv /bin/controller > /tmp/licenses.csv && \ + diff /tmp/licenses.csv backend/third_party_licenses/swf.csv && \ + go-licenses save /tmp/licenses.csv --save_path /tmp/NOTICES FROM alpine:3.11 WORKDIR /bin COPY --from=builder /bin/controller /bin/controller -COPY --from=builder /go/src/github.com/kubeflow/pipelines/third_party/license.txt /bin/license.txt +# Copy licenses and notices. +COPY --from=builder /tmp/licenses.csv /third_party/licenses.csv +COPY --from=builder /tmp/NOTICES /third_party/NOTICES RUN chmod +x /bin/controller +RUN apk --no-cache add tzdata ENV NAMESPACE "" diff --git a/backend/Dockerfile.viewercontroller b/backend/Dockerfile.viewercontroller index 750e2cb696..62bce0c088 100644 --- a/backend/Dockerfile.viewercontroller +++ b/backend/Dockerfile.viewercontroller @@ -1,3 +1,17 @@ +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + FROM golang:alpine as builder RUN apk update && apk upgrade @@ -6,19 +20,23 @@ RUN apk add --no-cache git gcc musl-dev WORKDIR /src/github.com/kubeflow/pipelines COPY . . -RUN go mod vendor -RUN go build -o /bin/controller backend/src/crd/controller/viewer/*.go +RUN GO111MODULE=on go build -o /bin/controller backend/src/crd/controller/viewer/*.go +# Check licenses and comply with license terms. +RUN ./hack/install-go-licenses.sh +RUN go-licenses csv /bin/controller > /tmp/licenses.csv && \ + diff /tmp/licenses.csv backend/third_party_licenses/viewer.csv && \ + go-licenses save /tmp/licenses.csv --save_path /tmp/NOTICES FROM alpine -WORKDIR /src -COPY --from=builder /src/github.com/kubeflow/pipelines/vendor vendor - WORKDIR /bin COPY --from=builder /bin/controller /bin/controller -COPY --from=builder /src/github.com/kubeflow/pipelines/third_party/license.txt /bin/license.txt RUN chmod +x /bin/controller +# Copy licenses and notices. +COPY --from=builder /tmp/licenses.csv /third_party/licenses.csv +COPY --from=builder /tmp/NOTICES /third_party/NOTICES + ENV MAX_NUM_VIEWERS "50" ENV NAMESPACE "kubeflow" diff --git a/backend/Dockerfile.visualization b/backend/Dockerfile.visualization index 9d767ef871..4bcdcb03a0 100644 --- a/backend/Dockerfile.visualization +++ b/backend/Dockerfile.visualization @@ -1,9 +1,4 @@ -# This docker file starts server.py (located at src/apiserver/visualization) -# which accepts a post request that resolves to html that depicts a specified -# visualization. More details about this process can be found in the server.py -# and exporter.py files in the directory specified above. - -# Copyright 2019-2020 Google LLC +# Copyright 2019-2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,8 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. +# This docker file starts server.py (located at src/apiserver/visualization) +# which accepts a post request that resolves to html that depicts a specified +# visualization. More details about this process can be found in the server.py +# and exporter.py files in the directory specified above. + # This image should be in sync with image in backend/src/apiserver/visualization/update_requirements.sh. -FROM tensorflow/tensorflow:2.4.0 +FROM tensorflow/tensorflow:2.5.1 RUN apt-get update \ && apt-get install -y wget curl tar openssl diff --git a/backend/Makefile b/backend/Makefile new file mode 100644 index 0000000000..a3c1dfb60a --- /dev/null +++ b/backend/Makefile @@ -0,0 +1,63 @@ +BUILD=build +MOD_ROOT=.. +CSV_PATH=backend/third_party_licenses + +# Whenever build command for any of the binaries change, we should update them both here and in backend/Dockerfiles. + +.PHONY: all +all: license_apiserver license_persistence_agent license_cache_server license_swf license_viewer + +.PHONY: clean +clean: + rm -rf $(BUILD) + +$(BUILD)/apiserver: + GO111MODULE=on go build -o $(BUILD)/apiserver github.com/kubeflow/pipelines/backend/src/apiserver +$(BUILD)/persistence_agent: + GO111MODULE=on go build -o $(BUILD)/persistence_agent github.com/kubeflow/pipelines/backend/src/agent/persistence +$(BUILD)/cache_server: + GO111MODULE=on go build -o $(BUILD)/cache_server github.com/kubeflow/pipelines/backend/src/cache +$(BUILD)/swf: + GO111MODULE=on go build -o $(BUILD)/swf github.com/kubeflow/pipelines/backend/src/crd/controller/scheduledworkflow +$(BUILD)/viewer: + GO111MODULE=on go build -o $(BUILD)/viewer github.com/kubeflow/pipelines/backend/src/crd/controller/viewer + +# Update licenses info after dependencies changed. +# See README.md#updating-licenses-info section for more details. +.PHONY: license_apiserver +license_apiserver: $(BUILD)/apiserver + cd $(MOD_ROOT) && go-licenses csv backend/$(BUILD)/apiserver > $(CSV_PATH)/apiserver.csv +.PHONY: license_persistence_agent +license_persistence_agent: $(BUILD)/persistence_agent + cd $(MOD_ROOT) && go-licenses csv backend/$(BUILD)/persistence_agent > $(CSV_PATH)/persistence_agent.csv +.PHONY: license_cache_server +license_cache_server: $(BUILD)/cache_server + cd $(MOD_ROOT) && go-licenses csv backend/$(BUILD)/cache_server > $(CSV_PATH)/cache_server.csv +.PHONY: license_swf +license_swf: $(BUILD)/swf + cd $(MOD_ROOT) && go-licenses csv backend/$(BUILD)/swf > $(CSV_PATH)/swf.csv +.PHONY: license_viewer +license_viewer: $(BUILD)/viewer + cd $(MOD_ROOT) && go-licenses csv backend/$(BUILD)/viewer > $(CSV_PATH)/viewer.csv + +.PHONY: image_all +image_all: image_apiserver image_persistence_agent image_cache image_swf image_viewer image_visualization + +.PHONY: image_apiserver +image_apiserver: + cd $(MOD_ROOT) && docker build -t apiserver -f backend/Dockerfile . +.PHONY: image_persistence_agent +image_persistence_agent: + cd $(MOD_ROOT) && docker build -t persistence-agent -f backend/Dockerfile.persistenceagent . +.PHONY: image_cache +image_cache: + cd $(MOD_ROOT) && docker build -t cache-server -f backend/Dockerfile.cacheserver . +.PHONY: image_swf +image_swf: + cd $(MOD_ROOT) && docker build -t scheduledworkflow -f backend/Dockerfile.scheduledworkflow . +.PHONY: image_viewer +image_viewer: + cd $(MOD_ROOT) && docker build -t viewercontroller -f backend/Dockerfile.viewercontroller . +.PHONY: image_visualization +image_visualization: + cd $(MOD_ROOT) && docker build -t visualization -f backend/Dockerfile.visualization . diff --git a/backend/README.md b/backend/README.md index 8905cbf467..ecf62853fe 100644 --- a/backend/README.md +++ b/backend/README.md @@ -45,9 +45,21 @@ docker build -f backend/Dockerfile . --tag $API_SERVER_IMAGE After making changes to proto files, the Go client libraries, Python client libraries and swagger files need to be regenerated and checked-in. Refer to [backend/api](./api/README.md) for details. +## Updating licenses info + +1. Install go-licenses tool from https://github.com/Bobgy/go-licenses/releases, +and refer to its documentation for how to use it. + +2. Run the tool to update all licenses: + + ```bash + make all + ``` + + ## Updating python dependencies [pip-tools](https://github.com/jazzband/pip-tools) is used to manage python dependencies. To update dependencies, edit [requirements.in](requirements.in) -and run `./update_requirements.sh <requirements.in >requirements.txt` to update +and run `./update_requirements.sh` to update and pin the transitive and pin the transitive dependencies. diff --git a/backend/api/Dockerfile b/backend/api/Dockerfile index 75e13e0214..e7092c293d 100644 --- a/backend/api/Dockerfile +++ b/backend/api/Dockerfile @@ -1,10 +1,24 @@ +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # Generate client code (go & json) from API protocol buffers -FROM golang:1.13.1-stretch as generator +FROM golang:1.15.10 as generator ENV GRPC_GATEWAY_VERSION v1.9.0 ENV GO_SWAGGER_VERSION v0.18.0 -ENV GOLANG_PROTOBUF_VERSION v1.3.2 +ENV GOLANG_PROTOBUF_VERSION v1.5.1 ENV GRPC_VERSION v1.23.0 -ENV PROTOC_VERSION 3.13.0 +ENV PROTOC_VERSION 3.17.3 ENV GOBIN=/go/bin # Install protoc. diff --git a/backend/api/Makefile b/backend/api/Makefile index 801971755d..60aa1cb367 100644 --- a/backend/api/Makefile +++ b/backend/api/Makefile @@ -1,9 +1,23 @@ +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # Makefile to generate KFP api clients from proto. IMAGE_TAG=kfp-api-generator # Contact one of Bobgy, capri-xiyue or zijianjoy if this remote image needs an update. REMOTE_IMAGE=gcr.io/ml-pipeline-test/api-generator -PREBUILT_REMOTE_IMAGE=gcr.io/ml-pipeline-test/api-generator@sha256:2bca5a3e4c1a6c8f4677ef8433ec373894599e35febdc84c4563c2c9bb3f8de7 +PREBUILT_REMOTE_IMAGE=gcr.io/ml-pipeline-test/api-generator@sha256:10a09669794180b91c8b0fffb803db81eb458372e6ab669051f40d4979cdf43c # Generate clients using a pre-built api-generator image. .PHONY: generate @@ -14,6 +28,8 @@ generate: hack/generator.sh *.proto $(PREBUILT_REMOTE_IMAGE) /go/src/github.com/kubeflow/pipelines/backend/api/hack/generator.sh # Generate clients starting by building api-generator image locally. +# Note, this should only be used for local development purposes. Once any change is made to the Dockerfile, +# we should push the new image remotely to ensure everyone is using the same tools. .PHONY: generate-from-scratch generate-from-scratch: .image-built hack/generator.sh *.proto docker run --interactive --rm \ diff --git a/backend/api/README.md b/backend/api/README.md index 2630488f79..73ff832612 100644 --- a/backend/api/README.md +++ b/backend/api/README.md @@ -1,7 +1,9 @@ # Kubeflow Pipelines API ## Before You Start + Tools needed: + * Docker * Make @@ -12,6 +14,7 @@ make ``` Code will be generated in: + * `./go_client` * `./go_http_client` * `./swagger` @@ -28,8 +31,20 @@ Code will be generated in `./python_http_client`. This directory contains API definitions. They are used to generate [the API reference on kubeflow.org](https://www.kubeflow.org/docs/pipelines/reference/api/kubeflow-pipeline-api-spec/). -- Use the tools [bootprint-openapi](https://github.com/bootprint/bootprint-monorepo/tree/master/packages/bootprint-openapi) and [html-inline](https://github.com/substack/html-inline) to generate the API reference from [kfp_api_single_file.swagger.json](https://github.com/kubeflow/pipelines/blob/master/backend/api/swagger/kfp_api_single_file.swagger.json). These [instructions](https://github.com/bootprint/bootprint-monorepo/tree/master/packages/bootprint-openapi#bootprint-openapi) have shown how to generate *a single self-contained html file* which is the API reference, from a json file. +* Use the tools [bootprint-openapi](https://github.com/bootprint/bootprint-monorepo/tree/master/packages/bootprint-openapi) and [html-inline](https://github.com/substack/html-inline) to generate the API reference from [kfp_api_single_file.swagger.json](https://github.com/kubeflow/pipelines/blob/master/backend/api/swagger/kfp_api_single_file.swagger.json). These [instructions](https://github.com/bootprint/bootprint-monorepo/tree/master/packages/bootprint-openapi#bootprint-openapi) have shown how to generate *a single self-contained html file* which is the API reference, from a json file. -- Use the above generated html to replace the html section, which is below the title section, in the file [kubeflow-pipeline-api-spec.html](https://github.com/kubeflow/website/blob/master/content/en/docs/pipelines/reference/api/kubeflow-pipeline-api-spec.html) +* Use the above generated html to replace the html section, which is below the title section, in the file [kubeflow-pipeline-api-spec.html](https://github.com/kubeflow/website/blob/master/content/en/docs/pipelines/reference/api/kubeflow-pipeline-api-spec.html) Note: whenever the API definition changes (i.e., the file [kfp_api_single_file.swagger.json](https://github.com/kubeflow/pipelines/blob/master/backend/api/swagger/kfp_api_single_file.swagger.json) changes), the API reference needs to be updated. + +## Auto-generation of api generator image + +```bash +make push +``` + +When you update the [Dockerfile](`./Dockerfile`), to make sure others are using the same image as you do: + +1. push a new version of the api generator image to gcr.io/ml-pipeline-test/api-generator:latest. +2. update the PREBUILT_REMOTE_IMAGE var in Makefile to point to your new image. +3. push a new version of the release tools image to gcr.io/ml-pipeline-test/release:latest, run `make push` in [test/release/Makefile](../../test/release/Makefile). diff --git a/backend/api/auth.proto b/backend/api/auth.proto index 692fef5ff8..028361b0f2 100644 --- a/backend/api/auth.proto +++ b/backend/api/auth.proto @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/api/build_kfp_server_api_python_package.sh b/backend/api/build_kfp_server_api_python_package.sh index 3f95f54a89..679207011c 100755 --- a/backend/api/build_kfp_server_api_python_package.sh +++ b/backend/api/build_kfp_server_api_python_package.sh @@ -1,6 +1,6 @@ #!/bin/bash -e # -# Copyright 2018-2021 Google LLC +# Copyright 2018-2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/api/error.proto b/backend/api/error.proto index 0415425baf..c0548c3005 100644 --- a/backend/api/error.proto +++ b/backend/api/error.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/api/experiment.proto b/backend/api/experiment.proto index d570a00fbd..860d769f26 100644 --- a/backend/api/experiment.proto +++ b/backend/api/experiment.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -132,8 +132,7 @@ message ListExperimentsRequest { string sort_by = 3; // A url-encoded, JSON-serialized Filter protocol buffer (see - // [filter.proto](https://github.com/kubeflow/pipelines/ - // blob/master/backend/api/filter.proto)). + // [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). string filter = 4; // What resource reference to filter on. diff --git a/backend/api/filter.proto b/backend/api/filter.proto index dbd30c5c86..578233d6ac 100644 --- a/backend/api/filter.proto +++ b/backend/api/filter.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/api/go_client/auth.pb.go b/backend/api/go_client/auth.pb.go index 144362bd86..aadd69eaa4 100644 --- a/backend/api/go_client/auth.pb.go +++ b/backend/api/go_client/auth.pb.go @@ -1,31 +1,45 @@ +// Copyright 2020 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: backend/api/auth.proto package go_client import ( context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - empty "github.com/golang/protobuf/ptypes/empty" _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) // Type of resources in pipelines system. type AuthorizeRequest_Resources int32 @@ -35,22 +49,43 @@ const ( AuthorizeRequest_VIEWERS AuthorizeRequest_Resources = 1 ) -var AuthorizeRequest_Resources_name = map[int32]string{ - 0: "UNASSIGNED_RESOURCES", - 1: "VIEWERS", -} +// Enum value maps for AuthorizeRequest_Resources. +var ( + AuthorizeRequest_Resources_name = map[int32]string{ + 0: "UNASSIGNED_RESOURCES", + 1: "VIEWERS", + } + AuthorizeRequest_Resources_value = map[string]int32{ + "UNASSIGNED_RESOURCES": 0, + "VIEWERS": 1, + } +) -var AuthorizeRequest_Resources_value = map[string]int32{ - "UNASSIGNED_RESOURCES": 0, - "VIEWERS": 1, +func (x AuthorizeRequest_Resources) Enum() *AuthorizeRequest_Resources { + p := new(AuthorizeRequest_Resources) + *p = x + return p } func (x AuthorizeRequest_Resources) String() string { - return proto.EnumName(AuthorizeRequest_Resources_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } +func (AuthorizeRequest_Resources) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_auth_proto_enumTypes[0].Descriptor() +} + +func (AuthorizeRequest_Resources) Type() protoreflect.EnumType { + return &file_backend_api_auth_proto_enumTypes[0] +} + +func (x AuthorizeRequest_Resources) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AuthorizeRequest_Resources.Descriptor instead. func (AuthorizeRequest_Resources) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_cc78a6d242bd08ff, []int{0, 0} + return file_backend_api_auth_proto_rawDescGZIP(), []int{0, 0} } // Type of verbs that act on the resources. @@ -63,152 +98,259 @@ const ( AuthorizeRequest_DELETE AuthorizeRequest_Verb = 3 ) -var AuthorizeRequest_Verb_name = map[int32]string{ - 0: "UNASSIGNED_VERB", - 1: "CREATE", - 2: "GET", - 3: "DELETE", -} +// Enum value maps for AuthorizeRequest_Verb. +var ( + AuthorizeRequest_Verb_name = map[int32]string{ + 0: "UNASSIGNED_VERB", + 1: "CREATE", + 2: "GET", + 3: "DELETE", + } + AuthorizeRequest_Verb_value = map[string]int32{ + "UNASSIGNED_VERB": 0, + "CREATE": 1, + "GET": 2, + "DELETE": 3, + } +) -var AuthorizeRequest_Verb_value = map[string]int32{ - "UNASSIGNED_VERB": 0, - "CREATE": 1, - "GET": 2, - "DELETE": 3, +func (x AuthorizeRequest_Verb) Enum() *AuthorizeRequest_Verb { + p := new(AuthorizeRequest_Verb) + *p = x + return p } func (x AuthorizeRequest_Verb) String() string { - return proto.EnumName(AuthorizeRequest_Verb_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AuthorizeRequest_Verb) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_auth_proto_enumTypes[1].Descriptor() +} + +func (AuthorizeRequest_Verb) Type() protoreflect.EnumType { + return &file_backend_api_auth_proto_enumTypes[1] +} + +func (x AuthorizeRequest_Verb) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use AuthorizeRequest_Verb.Descriptor instead. func (AuthorizeRequest_Verb) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_cc78a6d242bd08ff, []int{0, 1} + return file_backend_api_auth_proto_rawDescGZIP(), []int{0, 1} } // Ask for authorization of an access by providing resource's namespace, type // and verb. User identity is not part of the message, because it is expected // to be parsed from request headers. Caller should proxy user request's headers. type AuthorizeRequest struct { - Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` - Resources AuthorizeRequest_Resources `protobuf:"varint,2,opt,name=resources,proto3,enum=api.AuthorizeRequest_Resources" json:"resources,omitempty"` - Verb AuthorizeRequest_Verb `protobuf:"varint,3,opt,name=verb,proto3,enum=api.AuthorizeRequest_Verb" json:"verb,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *AuthorizeRequest) Reset() { *m = AuthorizeRequest{} } -func (m *AuthorizeRequest) String() string { return proto.CompactTextString(m) } -func (*AuthorizeRequest) ProtoMessage() {} -func (*AuthorizeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_cc78a6d242bd08ff, []int{0} + Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` // Namespace the resource belongs to. + Resources AuthorizeRequest_Resources `protobuf:"varint,2,opt,name=resources,proto3,enum=api.AuthorizeRequest_Resources" json:"resources,omitempty"` // Resource type asking for authorization. + Verb AuthorizeRequest_Verb `protobuf:"varint,3,opt,name=verb,proto3,enum=api.AuthorizeRequest_Verb" json:"verb,omitempty"` // Verb on the resource asking for authorization. } -func (m *AuthorizeRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_AuthorizeRequest.Unmarshal(m, b) -} -func (m *AuthorizeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_AuthorizeRequest.Marshal(b, m, deterministic) -} -func (m *AuthorizeRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_AuthorizeRequest.Merge(m, src) +func (x *AuthorizeRequest) Reset() { + *x = AuthorizeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_auth_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *AuthorizeRequest) XXX_Size() int { - return xxx_messageInfo_AuthorizeRequest.Size(m) + +func (x *AuthorizeRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *AuthorizeRequest) XXX_DiscardUnknown() { - xxx_messageInfo_AuthorizeRequest.DiscardUnknown(m) + +func (*AuthorizeRequest) ProtoMessage() {} + +func (x *AuthorizeRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_auth_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_AuthorizeRequest proto.InternalMessageInfo +// Deprecated: Use AuthorizeRequest.ProtoReflect.Descriptor instead. +func (*AuthorizeRequest) Descriptor() ([]byte, []int) { + return file_backend_api_auth_proto_rawDescGZIP(), []int{0} +} -func (m *AuthorizeRequest) GetNamespace() string { - if m != nil { - return m.Namespace +func (x *AuthorizeRequest) GetNamespace() string { + if x != nil { + return x.Namespace } return "" } -func (m *AuthorizeRequest) GetResources() AuthorizeRequest_Resources { - if m != nil { - return m.Resources +func (x *AuthorizeRequest) GetResources() AuthorizeRequest_Resources { + if x != nil { + return x.Resources } return AuthorizeRequest_UNASSIGNED_RESOURCES } -func (m *AuthorizeRequest) GetVerb() AuthorizeRequest_Verb { - if m != nil { - return m.Verb +func (x *AuthorizeRequest) GetVerb() AuthorizeRequest_Verb { + if x != nil { + return x.Verb } return AuthorizeRequest_UNASSIGNED_VERB } -func init() { - proto.RegisterEnum("api.AuthorizeRequest_Resources", AuthorizeRequest_Resources_name, AuthorizeRequest_Resources_value) - proto.RegisterEnum("api.AuthorizeRequest_Verb", AuthorizeRequest_Verb_name, AuthorizeRequest_Verb_value) - proto.RegisterType((*AuthorizeRequest)(nil), "api.AuthorizeRequest") -} - -func init() { proto.RegisterFile("backend/api/auth.proto", fileDescriptor_cc78a6d242bd08ff) } - -var fileDescriptor_cc78a6d242bd08ff = []byte{ - // 453 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xc1, 0x4e, 0xdb, 0x40, - 0x10, 0x86, 0x63, 0x07, 0x25, 0xcd, 0xa4, 0x14, 0x77, 0xa1, 0x28, 0x72, 0x53, 0x11, 0xe5, 0xc4, - 0xa1, 0xd8, 0x22, 0x5c, 0xdb, 0x43, 0x02, 0x2b, 0x84, 0xd4, 0x52, 0x69, 0x1d, 0x52, 0x89, 0x0b, - 0x5a, 0x9b, 0x89, 0xb3, 0xc2, 0xf1, 0xba, 0xeb, 0xdd, 0xa0, 0xf6, 0x58, 0xa9, 0x0f, 0xd0, 0xf6, - 0xd1, 0xfa, 0x0a, 0x7d, 0x90, 0xca, 0x9b, 0x10, 0x50, 0xe1, 0x64, 0x79, 0xe6, 0xff, 0xff, 0xf9, - 0xa5, 0x6f, 0x61, 0x37, 0xe6, 0xc9, 0x0d, 0xe6, 0xd7, 0x21, 0x2f, 0x44, 0xc8, 0x8d, 0x9e, 0x05, - 0x85, 0x92, 0x5a, 0x92, 0x3a, 0x2f, 0x84, 0xdf, 0x4d, 0xa5, 0x4c, 0x33, 0x5c, 0xee, 0xf2, 0x5c, - 0x6a, 0xae, 0x85, 0xcc, 0xcb, 0xa5, 0xc4, 0x7f, 0xbd, 0xda, 0xda, 0xbf, 0xd8, 0x4c, 0x43, 0x9c, - 0x17, 0xfa, 0xeb, 0x6a, 0xf9, 0xd6, 0x7e, 0x92, 0x83, 0x14, 0xf3, 0x83, 0xf2, 0x96, 0xa7, 0x29, - 0xaa, 0x50, 0x16, 0xd6, 0xfe, 0x38, 0xaa, 0xff, 0xd3, 0x05, 0x6f, 0x68, 0xf4, 0x4c, 0x2a, 0xf1, - 0x0d, 0x19, 0x7e, 0x31, 0x58, 0x6a, 0xd2, 0x85, 0x56, 0xce, 0xe7, 0x58, 0x16, 0x3c, 0xc1, 0x8e, - 0xd3, 0x73, 0xf6, 0x5b, 0xec, 0x7e, 0x40, 0xde, 0x43, 0x4b, 0x61, 0x29, 0x8d, 0x4a, 0xb0, 0xec, - 0xb8, 0x3d, 0x67, 0xff, 0xc5, 0x60, 0x2f, 0xe0, 0x85, 0x08, 0xfe, 0xcf, 0x09, 0xd8, 0x9d, 0x8c, - 0xdd, 0x3b, 0x48, 0x00, 0x1b, 0x0b, 0x54, 0x71, 0xa7, 0x6e, 0x9d, 0xfe, 0xd3, 0xce, 0x09, 0xaa, - 0x98, 0x59, 0x5d, 0x7f, 0x00, 0xad, 0x75, 0x0e, 0xe9, 0xc0, 0xce, 0xc5, 0xf9, 0x30, 0x8a, 0xce, - 0x4e, 0xcf, 0xe9, 0xc9, 0x15, 0xa3, 0xd1, 0xa7, 0x0b, 0x76, 0x4c, 0x23, 0xaf, 0x46, 0xda, 0xd0, - 0x9c, 0x9c, 0xd1, 0xcf, 0x94, 0x45, 0x9e, 0xd3, 0x7f, 0x07, 0x1b, 0x55, 0x02, 0xd9, 0x86, 0xad, - 0x07, 0xf2, 0x09, 0x65, 0x23, 0xaf, 0x46, 0x00, 0x1a, 0xc7, 0x8c, 0x0e, 0xc7, 0xd4, 0x73, 0x48, - 0x13, 0xea, 0xa7, 0x74, 0xec, 0xb9, 0xd5, 0xf0, 0x84, 0x7e, 0xa0, 0x63, 0xea, 0xd5, 0x07, 0x08, - 0xed, 0xaa, 0x50, 0x84, 0x6a, 0x21, 0x12, 0x24, 0x13, 0x68, 0xad, 0xfb, 0x91, 0x57, 0x4f, 0xf6, - 0xf5, 0x77, 0x83, 0x25, 0x92, 0xe0, 0x0e, 0x49, 0x40, 0x2b, 0x24, 0x7d, 0xff, 0xfb, 0x9f, 0xbf, - 0xbf, 0xdd, 0x1d, 0x42, 0x2a, 0x92, 0x65, 0xb8, 0x38, 0x8c, 0x51, 0xf3, 0x43, 0x8b, 0x7b, 0xf4, - 0xc3, 0xf9, 0x35, 0xfc, 0xc8, 0xba, 0xd0, 0xbc, 0xc6, 0x29, 0x37, 0x99, 0x26, 0x2f, 0xc9, 0x16, - 0x6c, 0xfa, 0x6d, 0x7b, 0x21, 0xd2, 0x5c, 0x9b, 0xf2, 0x72, 0x0f, 0xde, 0x40, 0x63, 0x84, 0x5c, - 0xa1, 0x22, 0xdb, 0xcf, 0x5c, 0x7f, 0x93, 0xaf, 0x2e, 0x5b, 0x88, 0x3d, 0x37, 0x7e, 0x0e, 0xb0, - 0x16, 0xd4, 0x2e, 0x8f, 0x52, 0xa1, 0x67, 0x26, 0x0e, 0x12, 0x39, 0x0f, 0x6f, 0x4c, 0x8c, 0xd3, - 0x4c, 0xde, 0x86, 0x85, 0x28, 0x30, 0x13, 0x39, 0x96, 0xe1, 0xc3, 0x17, 0x97, 0xca, 0xab, 0x24, - 0x13, 0x98, 0xeb, 0xb8, 0x61, 0x3b, 0x1f, 0xfd, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x98, 0xcf, 0xb4, - 0xb0, 0x91, 0x02, 0x00, 0x00, +var File_backend_api_auth_proto protoreflect.FileDescriptor + +var file_backend_api_auth_proto_rawDesc = []byte{ + 0x0a, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x75, + 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, 0x1c, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, + 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x91, 0x02, 0x0a, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x09, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, 0x65, + 0x72, 0x62, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x22, 0x32, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x41, 0x53, 0x53, 0x49, 0x47, + 0x4e, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x53, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x56, 0x49, 0x45, 0x57, 0x45, 0x52, 0x53, 0x10, 0x01, 0x22, 0x3c, 0x0a, 0x04, + 0x56, 0x65, 0x72, 0x62, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x41, 0x53, 0x53, 0x49, 0x47, 0x4e, + 0x45, 0x44, 0x5f, 0x56, 0x45, 0x52, 0x42, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x54, 0x10, 0x02, 0x12, 0x0a, + 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x32, 0x65, 0x0a, 0x0b, 0x41, 0x75, + 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x56, 0x0a, 0x09, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, + 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x75, 0x74, + 0x68, 0x42, 0x85, 0x01, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x67, 0x6f, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x92, 0x41, 0x4d, 0x52, 0x1c, 0x0a, 0x07, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x11, 0x12, 0x0f, 0x0a, 0x0d, 0x1a, 0x0b, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5a, 0x1f, 0x0a, 0x1d, 0x0a, 0x06, + 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x13, 0x08, 0x02, 0x1a, 0x0d, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, 0x62, 0x0c, 0x0a, 0x0a, 0x0a, + 0x06, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_backend_api_auth_proto_rawDescOnce sync.Once + file_backend_api_auth_proto_rawDescData = file_backend_api_auth_proto_rawDesc +) + +func file_backend_api_auth_proto_rawDescGZIP() []byte { + file_backend_api_auth_proto_rawDescOnce.Do(func() { + file_backend_api_auth_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_auth_proto_rawDescData) + }) + return file_backend_api_auth_proto_rawDescData +} + +var file_backend_api_auth_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_backend_api_auth_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_backend_api_auth_proto_goTypes = []interface{}{ + (AuthorizeRequest_Resources)(0), // 0: api.AuthorizeRequest.Resources + (AuthorizeRequest_Verb)(0), // 1: api.AuthorizeRequest.Verb + (*AuthorizeRequest)(nil), // 2: api.AuthorizeRequest + (*emptypb.Empty)(nil), // 3: google.protobuf.Empty +} +var file_backend_api_auth_proto_depIdxs = []int32{ + 0, // 0: api.AuthorizeRequest.resources:type_name -> api.AuthorizeRequest.Resources + 1, // 1: api.AuthorizeRequest.verb:type_name -> api.AuthorizeRequest.Verb + 2, // 2: api.AuthService.Authorize:input_type -> api.AuthorizeRequest + 3, // 3: api.AuthService.Authorize:output_type -> google.protobuf.Empty + 3, // [3:4] is the sub-list for method output_type + 2, // [2:3] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_backend_api_auth_proto_init() } +func file_backend_api_auth_proto_init() { + if File_backend_api_auth_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_backend_api_auth_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthorizeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_auth_proto_rawDesc, + NumEnums: 2, + NumMessages: 1, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_backend_api_auth_proto_goTypes, + DependencyIndexes: file_backend_api_auth_proto_depIdxs, + EnumInfos: file_backend_api_auth_proto_enumTypes, + MessageInfos: file_backend_api_auth_proto_msgTypes, + }.Build() + File_backend_api_auth_proto = out.File + file_backend_api_auth_proto_rawDesc = nil + file_backend_api_auth_proto_goTypes = nil + file_backend_api_auth_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // AuthServiceClient is the client API for AuthService service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type AuthServiceClient interface { - Authorize(ctx context.Context, in *AuthorizeRequest, opts ...grpc.CallOption) (*empty.Empty, error) + Authorize(ctx context.Context, in *AuthorizeRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) } type authServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewAuthServiceClient(cc *grpc.ClientConn) AuthServiceClient { +func NewAuthServiceClient(cc grpc.ClientConnInterface) AuthServiceClient { return &authServiceClient{cc} } -func (c *authServiceClient) Authorize(ctx context.Context, in *AuthorizeRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *authServiceClient) Authorize(ctx context.Context, in *AuthorizeRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.AuthService/Authorize", in, out, opts...) if err != nil { return nil, err @@ -218,14 +360,14 @@ func (c *authServiceClient) Authorize(ctx context.Context, in *AuthorizeRequest, // AuthServiceServer is the server API for AuthService service. type AuthServiceServer interface { - Authorize(context.Context, *AuthorizeRequest) (*empty.Empty, error) + Authorize(context.Context, *AuthorizeRequest) (*emptypb.Empty, error) } // UnimplementedAuthServiceServer can be embedded to have forward compatible implementations. type UnimplementedAuthServiceServer struct { } -func (*UnimplementedAuthServiceServer) Authorize(ctx context.Context, req *AuthorizeRequest) (*empty.Empty, error) { +func (*UnimplementedAuthServiceServer) Authorize(context.Context, *AuthorizeRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Authorize not implemented") } diff --git a/backend/api/go_client/error.pb.go b/backend/api/go_client/error.pb.go index 7ea489bc37..05d5274f11 100644 --- a/backend/api/go_client/error.pb.go +++ b/backend/api/go_client/error.pb.go @@ -1,150 +1,256 @@ +// Copyright 2018 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: backend/api/error.proto package go_client import ( - fmt "fmt" - proto "github.com/golang/protobuf/proto" - any "github.com/golang/protobuf/ptypes/any" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) type Error struct { - ErrorMessage string `protobuf:"bytes,1,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` - ErrorDetails string `protobuf:"bytes,2,opt,name=error_details,json=errorDetails,proto3" json:"error_details,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Error) Reset() { *m = Error{} } -func (m *Error) String() string { return proto.CompactTextString(m) } -func (*Error) ProtoMessage() {} -func (*Error) Descriptor() ([]byte, []int) { - return fileDescriptor_6c5901d52662fdde, []int{0} + ErrorMessage string `protobuf:"bytes,1,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` + ErrorDetails string `protobuf:"bytes,2,opt,name=error_details,json=errorDetails,proto3" json:"error_details,omitempty"` } -func (m *Error) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Error.Unmarshal(m, b) -} -func (m *Error) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Error.Marshal(b, m, deterministic) -} -func (m *Error) XXX_Merge(src proto.Message) { - xxx_messageInfo_Error.Merge(m, src) +func (x *Error) Reset() { + *x = Error{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_error_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Error) XXX_Size() int { - return xxx_messageInfo_Error.Size(m) + +func (x *Error) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Error) XXX_DiscardUnknown() { - xxx_messageInfo_Error.DiscardUnknown(m) + +func (*Error) ProtoMessage() {} + +func (x *Error) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_error_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Error proto.InternalMessageInfo +// Deprecated: Use Error.ProtoReflect.Descriptor instead. +func (*Error) Descriptor() ([]byte, []int) { + return file_backend_api_error_proto_rawDescGZIP(), []int{0} +} -func (m *Error) GetErrorMessage() string { - if m != nil { - return m.ErrorMessage +func (x *Error) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage } return "" } -func (m *Error) GetErrorDetails() string { - if m != nil { - return m.ErrorDetails +func (x *Error) GetErrorDetails() string { + if x != nil { + return x.ErrorDetails } return "" } type Status struct { - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` - Details []*any.Any `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Status) Reset() { *m = Status{} } -func (m *Status) String() string { return proto.CompactTextString(m) } -func (*Status) ProtoMessage() {} -func (*Status) Descriptor() ([]byte, []int) { - return fileDescriptor_6c5901d52662fdde, []int{1} + Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` + Details []*anypb.Any `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty"` } -func (m *Status) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Status.Unmarshal(m, b) -} -func (m *Status) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Status.Marshal(b, m, deterministic) -} -func (m *Status) XXX_Merge(src proto.Message) { - xxx_messageInfo_Status.Merge(m, src) +func (x *Status) Reset() { + *x = Status{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_error_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Status) XXX_Size() int { - return xxx_messageInfo_Status.Size(m) + +func (x *Status) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Status) XXX_DiscardUnknown() { - xxx_messageInfo_Status.DiscardUnknown(m) + +func (*Status) ProtoMessage() {} + +func (x *Status) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_error_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Status proto.InternalMessageInfo +// Deprecated: Use Status.ProtoReflect.Descriptor instead. +func (*Status) Descriptor() ([]byte, []int) { + return file_backend_api_error_proto_rawDescGZIP(), []int{1} +} -func (m *Status) GetError() string { - if m != nil { - return m.Error +func (x *Status) GetError() string { + if x != nil { + return x.Error } return "" } -func (m *Status) GetCode() int32 { - if m != nil { - return m.Code +func (x *Status) GetCode() int32 { + if x != nil { + return x.Code } return 0 } -func (m *Status) GetDetails() []*any.Any { - if m != nil { - return m.Details +func (x *Status) GetDetails() []*anypb.Any { + if x != nil { + return x.Details } return nil } -func init() { - proto.RegisterType((*Error)(nil), "api.Error") - proto.RegisterType((*Status)(nil), "api.Status") -} - -func init() { proto.RegisterFile("backend/api/error.proto", fileDescriptor_6c5901d52662fdde) } - -var fileDescriptor_6c5901d52662fdde = []byte{ - // 228 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x90, 0x4d, 0x4b, 0x03, 0x31, - 0x10, 0x86, 0xa9, 0xeb, 0x56, 0x8c, 0x7a, 0x09, 0x05, 0xab, 0xa7, 0x52, 0x2f, 0x3d, 0x25, 0x60, - 0xf1, 0x07, 0x28, 0x7a, 0xf4, 0xe0, 0x7a, 0xf3, 0x52, 0x92, 0xec, 0x34, 0x86, 0xa6, 0x99, 0x90, - 0x0f, 0x64, 0xff, 0xbd, 0x98, 0xb8, 0x74, 0x6f, 0xc9, 0x33, 0xcf, 0xbc, 0xbc, 0x0c, 0xb9, 0x95, - 0x42, 0x1d, 0xc0, 0xf5, 0x5c, 0x78, 0xc3, 0x21, 0x04, 0x0c, 0xcc, 0x07, 0x4c, 0x48, 0x1b, 0xe1, - 0xcd, 0xfd, 0x9d, 0x46, 0xd4, 0x16, 0x78, 0x41, 0x32, 0xef, 0xb9, 0x70, 0x43, 0x9d, 0xaf, 0x3f, - 0x48, 0xfb, 0xf6, 0xa7, 0xd3, 0x07, 0x72, 0x53, 0xf6, 0x76, 0x47, 0x88, 0x51, 0x68, 0x58, 0xce, - 0x56, 0xb3, 0xcd, 0x65, 0x77, 0x5d, 0xe0, 0x7b, 0x65, 0x27, 0xa9, 0x87, 0x24, 0x8c, 0x8d, 0xcb, - 0xb3, 0x89, 0xf4, 0x5a, 0xd9, 0x5a, 0x92, 0xf9, 0x67, 0x12, 0x29, 0x47, 0xba, 0x20, 0x6d, 0x99, - 0xfc, 0x67, 0xd5, 0x0f, 0xa5, 0xe4, 0x5c, 0x61, 0x0f, 0x65, 0xb7, 0xed, 0xca, 0x9b, 0x32, 0x72, - 0x31, 0x46, 0x36, 0xab, 0x66, 0x73, 0xf5, 0xb8, 0x60, 0xb5, 0x33, 0x1b, 0x3b, 0xb3, 0x67, 0x37, - 0x74, 0xa3, 0xf4, 0xf2, 0xf4, 0xb5, 0xd5, 0x26, 0x7d, 0x67, 0xc9, 0x14, 0x1e, 0xf9, 0x21, 0x4b, - 0xd8, 0x5b, 0xfc, 0xe1, 0xde, 0x78, 0xb0, 0xc6, 0x41, 0xe4, 0xd3, 0x7b, 0x68, 0xdc, 0x29, 0x6b, - 0xc0, 0x25, 0x39, 0x2f, 0x69, 0xdb, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x12, 0x2e, 0x20, 0xa9, - 0x2f, 0x01, 0x00, 0x00, +var File_backend_api_error_proto protoreflect.FileDescriptor + +var file_backend_api_error_proto_rawDesc = []byte{ + 0x0a, 0x17, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, 0x19, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x51, 0x0a, 0x05, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x62, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, + 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, + 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_error_proto_rawDescOnce sync.Once + file_backend_api_error_proto_rawDescData = file_backend_api_error_proto_rawDesc +) + +func file_backend_api_error_proto_rawDescGZIP() []byte { + file_backend_api_error_proto_rawDescOnce.Do(func() { + file_backend_api_error_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_error_proto_rawDescData) + }) + return file_backend_api_error_proto_rawDescData +} + +var file_backend_api_error_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_backend_api_error_proto_goTypes = []interface{}{ + (*Error)(nil), // 0: api.Error + (*Status)(nil), // 1: api.Status + (*anypb.Any)(nil), // 2: google.protobuf.Any +} +var file_backend_api_error_proto_depIdxs = []int32{ + 2, // 0: api.Status.details:type_name -> google.protobuf.Any + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_backend_api_error_proto_init() } +func file_backend_api_error_proto_init() { + if File_backend_api_error_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_backend_api_error_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Error); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_error_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Status); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_error_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_backend_api_error_proto_goTypes, + DependencyIndexes: file_backend_api_error_proto_depIdxs, + MessageInfos: file_backend_api_error_proto_msgTypes, + }.Build() + File_backend_api_error_proto = out.File + file_backend_api_error_proto_rawDesc = nil + file_backend_api_error_proto_goTypes = nil + file_backend_api_error_proto_depIdxs = nil } diff --git a/backend/api/go_client/experiment.pb.go b/backend/api/go_client/experiment.pb.go index fd20b09749..f1344a82f1 100644 --- a/backend/api/go_client/experiment.pb.go +++ b/backend/api/go_client/experiment.pb.go @@ -1,32 +1,46 @@ +// Copyright 2018 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: backend/api/experiment.proto package go_client import ( context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - empty "github.com/golang/protobuf/ptypes/empty" - timestamp "github.com/golang/protobuf/ptypes/timestamp" _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) type Experiment_StorageState int32 @@ -36,107 +50,148 @@ const ( Experiment_STORAGESTATE_ARCHIVED Experiment_StorageState = 2 ) -var Experiment_StorageState_name = map[int32]string{ - 0: "STORAGESTATE_UNSPECIFIED", - 1: "STORAGESTATE_AVAILABLE", - 2: "STORAGESTATE_ARCHIVED", -} +// Enum value maps for Experiment_StorageState. +var ( + Experiment_StorageState_name = map[int32]string{ + 0: "STORAGESTATE_UNSPECIFIED", + 1: "STORAGESTATE_AVAILABLE", + 2: "STORAGESTATE_ARCHIVED", + } + Experiment_StorageState_value = map[string]int32{ + "STORAGESTATE_UNSPECIFIED": 0, + "STORAGESTATE_AVAILABLE": 1, + "STORAGESTATE_ARCHIVED": 2, + } +) -var Experiment_StorageState_value = map[string]int32{ - "STORAGESTATE_UNSPECIFIED": 0, - "STORAGESTATE_AVAILABLE": 1, - "STORAGESTATE_ARCHIVED": 2, +func (x Experiment_StorageState) Enum() *Experiment_StorageState { + p := new(Experiment_StorageState) + *p = x + return p } func (x Experiment_StorageState) String() string { - return proto.EnumName(Experiment_StorageState_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (Experiment_StorageState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_2acb5110e2ac785b, []int{5, 0} +func (Experiment_StorageState) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_experiment_proto_enumTypes[0].Descriptor() } -type CreateExperimentRequest struct { - // The experiment to be created. - Experiment *Experiment `protobuf:"bytes,1,opt,name=experiment,proto3" json:"experiment,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (Experiment_StorageState) Type() protoreflect.EnumType { + return &file_backend_api_experiment_proto_enumTypes[0] } -func (m *CreateExperimentRequest) Reset() { *m = CreateExperimentRequest{} } -func (m *CreateExperimentRequest) String() string { return proto.CompactTextString(m) } -func (*CreateExperimentRequest) ProtoMessage() {} -func (*CreateExperimentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_2acb5110e2ac785b, []int{0} +func (x Experiment_StorageState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (m *CreateExperimentRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CreateExperimentRequest.Unmarshal(m, b) +// Deprecated: Use Experiment_StorageState.Descriptor instead. +func (Experiment_StorageState) EnumDescriptor() ([]byte, []int) { + return file_backend_api_experiment_proto_rawDescGZIP(), []int{5, 0} } -func (m *CreateExperimentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CreateExperimentRequest.Marshal(b, m, deterministic) + +type CreateExperimentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The experiment to be created. + Experiment *Experiment `protobuf:"bytes,1,opt,name=experiment,proto3" json:"experiment,omitempty"` } -func (m *CreateExperimentRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateExperimentRequest.Merge(m, src) + +func (x *CreateExperimentRequest) Reset() { + *x = CreateExperimentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_experiment_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *CreateExperimentRequest) XXX_Size() int { - return xxx_messageInfo_CreateExperimentRequest.Size(m) + +func (x *CreateExperimentRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateExperimentRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateExperimentRequest.DiscardUnknown(m) + +func (*CreateExperimentRequest) ProtoMessage() {} + +func (x *CreateExperimentRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_experiment_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_CreateExperimentRequest proto.InternalMessageInfo +// Deprecated: Use CreateExperimentRequest.ProtoReflect.Descriptor instead. +func (*CreateExperimentRequest) Descriptor() ([]byte, []int) { + return file_backend_api_experiment_proto_rawDescGZIP(), []int{0} +} -func (m *CreateExperimentRequest) GetExperiment() *Experiment { - if m != nil { - return m.Experiment +func (x *CreateExperimentRequest) GetExperiment() *Experiment { + if x != nil { + return x.Experiment } return nil } type GetExperimentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the experiment to be retrieved. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *GetExperimentRequest) Reset() { *m = GetExperimentRequest{} } -func (m *GetExperimentRequest) String() string { return proto.CompactTextString(m) } -func (*GetExperimentRequest) ProtoMessage() {} -func (*GetExperimentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_2acb5110e2ac785b, []int{1} +func (x *GetExperimentRequest) Reset() { + *x = GetExperimentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_experiment_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GetExperimentRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetExperimentRequest.Unmarshal(m, b) -} -func (m *GetExperimentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetExperimentRequest.Marshal(b, m, deterministic) -} -func (m *GetExperimentRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetExperimentRequest.Merge(m, src) -} -func (m *GetExperimentRequest) XXX_Size() int { - return xxx_messageInfo_GetExperimentRequest.Size(m) +func (x *GetExperimentRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetExperimentRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetExperimentRequest.DiscardUnknown(m) + +func (*GetExperimentRequest) ProtoMessage() {} + +func (x *GetExperimentRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_experiment_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_GetExperimentRequest proto.InternalMessageInfo +// Deprecated: Use GetExperimentRequest.ProtoReflect.Descriptor instead. +func (*GetExperimentRequest) Descriptor() ([]byte, []int) { + return file_backend_api_experiment_proto_rawDescGZIP(), []int{1} +} -func (m *GetExperimentRequest) GetId() string { - if m != nil { - return m.Id +func (x *GetExperimentRequest) GetId() string { + if x != nil { + return x.Id } return "" } type ListExperimentsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // A page token to request the next page of results. The token is acquried // from the nextPageToken field of the response from the previous // ListExperiment call or can be omitted when fetching the first page. @@ -149,177 +204,200 @@ type ListExperimentsRequest struct { // Ascending by default. SortBy string `protobuf:"bytes,3,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"` // A url-encoded, JSON-serialized Filter protocol buffer (see - // [filter.proto](https://github.com/kubeflow/pipelines/ - // blob/master/backend/api/filter.proto)). + // [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). Filter string `protobuf:"bytes,4,opt,name=filter,proto3" json:"filter,omitempty"` // What resource reference to filter on. // For Experiment, the only valid resource type is Namespace. An sample query string could be // resource_reference_key.type=NAMESPACE&resource_reference_key.id=ns1 ResourceReferenceKey *ResourceKey `protobuf:"bytes,5,opt,name=resource_reference_key,json=resourceReferenceKey,proto3" json:"resource_reference_key,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` } -func (m *ListExperimentsRequest) Reset() { *m = ListExperimentsRequest{} } -func (m *ListExperimentsRequest) String() string { return proto.CompactTextString(m) } -func (*ListExperimentsRequest) ProtoMessage() {} -func (*ListExperimentsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_2acb5110e2ac785b, []int{2} +func (x *ListExperimentsRequest) Reset() { + *x = ListExperimentsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_experiment_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ListExperimentsRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListExperimentsRequest.Unmarshal(m, b) -} -func (m *ListExperimentsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListExperimentsRequest.Marshal(b, m, deterministic) -} -func (m *ListExperimentsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListExperimentsRequest.Merge(m, src) -} -func (m *ListExperimentsRequest) XXX_Size() int { - return xxx_messageInfo_ListExperimentsRequest.Size(m) +func (x *ListExperimentsRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListExperimentsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListExperimentsRequest.DiscardUnknown(m) + +func (*ListExperimentsRequest) ProtoMessage() {} + +func (x *ListExperimentsRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_experiment_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ListExperimentsRequest proto.InternalMessageInfo +// Deprecated: Use ListExperimentsRequest.ProtoReflect.Descriptor instead. +func (*ListExperimentsRequest) Descriptor() ([]byte, []int) { + return file_backend_api_experiment_proto_rawDescGZIP(), []int{2} +} -func (m *ListExperimentsRequest) GetPageToken() string { - if m != nil { - return m.PageToken +func (x *ListExperimentsRequest) GetPageToken() string { + if x != nil { + return x.PageToken } return "" } -func (m *ListExperimentsRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize +func (x *ListExperimentsRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize } return 0 } -func (m *ListExperimentsRequest) GetSortBy() string { - if m != nil { - return m.SortBy +func (x *ListExperimentsRequest) GetSortBy() string { + if x != nil { + return x.SortBy } return "" } -func (m *ListExperimentsRequest) GetFilter() string { - if m != nil { - return m.Filter +func (x *ListExperimentsRequest) GetFilter() string { + if x != nil { + return x.Filter } return "" } -func (m *ListExperimentsRequest) GetResourceReferenceKey() *ResourceKey { - if m != nil { - return m.ResourceReferenceKey +func (x *ListExperimentsRequest) GetResourceReferenceKey() *ResourceKey { + if x != nil { + return x.ResourceReferenceKey } return nil } type ListExperimentsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // A list of experiments returned. Experiments []*Experiment `protobuf:"bytes,1,rep,name=experiments,proto3" json:"experiments,omitempty"` // The total number of experiments for the given query. TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` // The token to list the next page of experiments. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` } -func (m *ListExperimentsResponse) Reset() { *m = ListExperimentsResponse{} } -func (m *ListExperimentsResponse) String() string { return proto.CompactTextString(m) } -func (*ListExperimentsResponse) ProtoMessage() {} -func (*ListExperimentsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2acb5110e2ac785b, []int{3} +func (x *ListExperimentsResponse) Reset() { + *x = ListExperimentsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_experiment_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ListExperimentsResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListExperimentsResponse.Unmarshal(m, b) -} -func (m *ListExperimentsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListExperimentsResponse.Marshal(b, m, deterministic) -} -func (m *ListExperimentsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListExperimentsResponse.Merge(m, src) +func (x *ListExperimentsResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListExperimentsResponse) XXX_Size() int { - return xxx_messageInfo_ListExperimentsResponse.Size(m) -} -func (m *ListExperimentsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListExperimentsResponse.DiscardUnknown(m) + +func (*ListExperimentsResponse) ProtoMessage() {} + +func (x *ListExperimentsResponse) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_experiment_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ListExperimentsResponse proto.InternalMessageInfo +// Deprecated: Use ListExperimentsResponse.ProtoReflect.Descriptor instead. +func (*ListExperimentsResponse) Descriptor() ([]byte, []int) { + return file_backend_api_experiment_proto_rawDescGZIP(), []int{3} +} -func (m *ListExperimentsResponse) GetExperiments() []*Experiment { - if m != nil { - return m.Experiments +func (x *ListExperimentsResponse) GetExperiments() []*Experiment { + if x != nil { + return x.Experiments } return nil } -func (m *ListExperimentsResponse) GetTotalSize() int32 { - if m != nil { - return m.TotalSize +func (x *ListExperimentsResponse) GetTotalSize() int32 { + if x != nil { + return x.TotalSize } return 0 } -func (m *ListExperimentsResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken +func (x *ListExperimentsResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken } return "" } type DeleteExperimentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the experiment to be deleted. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *DeleteExperimentRequest) Reset() { *m = DeleteExperimentRequest{} } -func (m *DeleteExperimentRequest) String() string { return proto.CompactTextString(m) } -func (*DeleteExperimentRequest) ProtoMessage() {} -func (*DeleteExperimentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_2acb5110e2ac785b, []int{4} +func (x *DeleteExperimentRequest) Reset() { + *x = DeleteExperimentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_experiment_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *DeleteExperimentRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteExperimentRequest.Unmarshal(m, b) -} -func (m *DeleteExperimentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteExperimentRequest.Marshal(b, m, deterministic) -} -func (m *DeleteExperimentRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteExperimentRequest.Merge(m, src) +func (x *DeleteExperimentRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *DeleteExperimentRequest) XXX_Size() int { - return xxx_messageInfo_DeleteExperimentRequest.Size(m) -} -func (m *DeleteExperimentRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteExperimentRequest.DiscardUnknown(m) + +func (*DeleteExperimentRequest) ProtoMessage() {} + +func (x *DeleteExperimentRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_experiment_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_DeleteExperimentRequest proto.InternalMessageInfo +// Deprecated: Use DeleteExperimentRequest.ProtoReflect.Descriptor instead. +func (*DeleteExperimentRequest) Descriptor() ([]byte, []int) { + return file_backend_api_experiment_proto_rawDescGZIP(), []int{4} +} -func (m *DeleteExperimentRequest) GetId() string { - if m != nil { - return m.Id +func (x *DeleteExperimentRequest) GetId() string { + if x != nil { + return x.Id } return "" } type Experiment struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Output. Unique experiment ID. Generated by API server. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Required input field. Unique experiment name provided by user. @@ -327,245 +405,508 @@ type Experiment struct { // Optional input field. Describing the purpose of the experiment Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` // Output. The time that the experiment created. - CreatedAt *timestamp.Timestamp `protobuf:"bytes,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Optional input field. Specify which resource this run belongs to. // For Experiment, the only valid resource reference is a single Namespace. ResourceReferences []*ResourceReference `protobuf:"bytes,5,rep,name=resource_references,json=resourceReferences,proto3" json:"resource_references,omitempty"` // Output. Specifies whether this experiment is in archived or available state. - StorageState Experiment_StorageState `protobuf:"varint,6,opt,name=storage_state,json=storageState,proto3,enum=api.Experiment_StorageState" json:"storage_state,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + StorageState Experiment_StorageState `protobuf:"varint,6,opt,name=storage_state,json=storageState,proto3,enum=api.Experiment_StorageState" json:"storage_state,omitempty"` } -func (m *Experiment) Reset() { *m = Experiment{} } -func (m *Experiment) String() string { return proto.CompactTextString(m) } -func (*Experiment) ProtoMessage() {} -func (*Experiment) Descriptor() ([]byte, []int) { - return fileDescriptor_2acb5110e2ac785b, []int{5} +func (x *Experiment) Reset() { + *x = Experiment{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_experiment_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Experiment) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Experiment.Unmarshal(m, b) -} -func (m *Experiment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Experiment.Marshal(b, m, deterministic) +func (x *Experiment) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Experiment) XXX_Merge(src proto.Message) { - xxx_messageInfo_Experiment.Merge(m, src) -} -func (m *Experiment) XXX_Size() int { - return xxx_messageInfo_Experiment.Size(m) -} -func (m *Experiment) XXX_DiscardUnknown() { - xxx_messageInfo_Experiment.DiscardUnknown(m) + +func (*Experiment) ProtoMessage() {} + +func (x *Experiment) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_experiment_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Experiment proto.InternalMessageInfo +// Deprecated: Use Experiment.ProtoReflect.Descriptor instead. +func (*Experiment) Descriptor() ([]byte, []int) { + return file_backend_api_experiment_proto_rawDescGZIP(), []int{5} +} -func (m *Experiment) GetId() string { - if m != nil { - return m.Id +func (x *Experiment) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *Experiment) GetName() string { - if m != nil { - return m.Name +func (x *Experiment) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *Experiment) GetDescription() string { - if m != nil { - return m.Description +func (x *Experiment) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *Experiment) GetCreatedAt() *timestamp.Timestamp { - if m != nil { - return m.CreatedAt +func (x *Experiment) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt } return nil } -func (m *Experiment) GetResourceReferences() []*ResourceReference { - if m != nil { - return m.ResourceReferences +func (x *Experiment) GetResourceReferences() []*ResourceReference { + if x != nil { + return x.ResourceReferences } return nil } -func (m *Experiment) GetStorageState() Experiment_StorageState { - if m != nil { - return m.StorageState +func (x *Experiment) GetStorageState() Experiment_StorageState { + if x != nil { + return x.StorageState } return Experiment_STORAGESTATE_UNSPECIFIED } type ArchiveExperimentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the experiment to be archived. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *ArchiveExperimentRequest) Reset() { *m = ArchiveExperimentRequest{} } -func (m *ArchiveExperimentRequest) String() string { return proto.CompactTextString(m) } -func (*ArchiveExperimentRequest) ProtoMessage() {} -func (*ArchiveExperimentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_2acb5110e2ac785b, []int{6} +func (x *ArchiveExperimentRequest) Reset() { + *x = ArchiveExperimentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_experiment_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ArchiveExperimentRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ArchiveExperimentRequest.Unmarshal(m, b) +func (x *ArchiveExperimentRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ArchiveExperimentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ArchiveExperimentRequest.Marshal(b, m, deterministic) -} -func (m *ArchiveExperimentRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ArchiveExperimentRequest.Merge(m, src) -} -func (m *ArchiveExperimentRequest) XXX_Size() int { - return xxx_messageInfo_ArchiveExperimentRequest.Size(m) -} -func (m *ArchiveExperimentRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ArchiveExperimentRequest.DiscardUnknown(m) + +func (*ArchiveExperimentRequest) ProtoMessage() {} + +func (x *ArchiveExperimentRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_experiment_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ArchiveExperimentRequest proto.InternalMessageInfo +// Deprecated: Use ArchiveExperimentRequest.ProtoReflect.Descriptor instead. +func (*ArchiveExperimentRequest) Descriptor() ([]byte, []int) { + return file_backend_api_experiment_proto_rawDescGZIP(), []int{6} +} -func (m *ArchiveExperimentRequest) GetId() string { - if m != nil { - return m.Id +func (x *ArchiveExperimentRequest) GetId() string { + if x != nil { + return x.Id } return "" } type UnarchiveExperimentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the experiment to be restored. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *UnarchiveExperimentRequest) Reset() { *m = UnarchiveExperimentRequest{} } -func (m *UnarchiveExperimentRequest) String() string { return proto.CompactTextString(m) } -func (*UnarchiveExperimentRequest) ProtoMessage() {} -func (*UnarchiveExperimentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_2acb5110e2ac785b, []int{7} +func (x *UnarchiveExperimentRequest) Reset() { + *x = UnarchiveExperimentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_experiment_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *UnarchiveExperimentRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UnarchiveExperimentRequest.Unmarshal(m, b) -} -func (m *UnarchiveExperimentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UnarchiveExperimentRequest.Marshal(b, m, deterministic) -} -func (m *UnarchiveExperimentRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UnarchiveExperimentRequest.Merge(m, src) -} -func (m *UnarchiveExperimentRequest) XXX_Size() int { - return xxx_messageInfo_UnarchiveExperimentRequest.Size(m) +func (x *UnarchiveExperimentRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UnarchiveExperimentRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UnarchiveExperimentRequest.DiscardUnknown(m) + +func (*UnarchiveExperimentRequest) ProtoMessage() {} + +func (x *UnarchiveExperimentRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_experiment_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_UnarchiveExperimentRequest proto.InternalMessageInfo +// Deprecated: Use UnarchiveExperimentRequest.ProtoReflect.Descriptor instead. +func (*UnarchiveExperimentRequest) Descriptor() ([]byte, []int) { + return file_backend_api_experiment_proto_rawDescGZIP(), []int{7} +} -func (m *UnarchiveExperimentRequest) GetId() string { - if m != nil { - return m.Id +func (x *UnarchiveExperimentRequest) GetId() string { + if x != nil { + return x.Id } return "" } -func init() { - proto.RegisterEnum("api.Experiment_StorageState", Experiment_StorageState_name, Experiment_StorageState_value) - proto.RegisterType((*CreateExperimentRequest)(nil), "api.CreateExperimentRequest") - proto.RegisterType((*GetExperimentRequest)(nil), "api.GetExperimentRequest") - proto.RegisterType((*ListExperimentsRequest)(nil), "api.ListExperimentsRequest") - proto.RegisterType((*ListExperimentsResponse)(nil), "api.ListExperimentsResponse") - proto.RegisterType((*DeleteExperimentRequest)(nil), "api.DeleteExperimentRequest") - proto.RegisterType((*Experiment)(nil), "api.Experiment") - proto.RegisterType((*ArchiveExperimentRequest)(nil), "api.ArchiveExperimentRequest") - proto.RegisterType((*UnarchiveExperimentRequest)(nil), "api.UnarchiveExperimentRequest") -} - -func init() { proto.RegisterFile("backend/api/experiment.proto", fileDescriptor_2acb5110e2ac785b) } - -var fileDescriptor_2acb5110e2ac785b = []byte{ - // 889 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0x51, 0x53, 0xdb, 0x46, - 0x10, 0x8e, 0x4c, 0x70, 0xc2, 0x1a, 0x83, 0x39, 0x52, 0x5b, 0x08, 0x53, 0x5c, 0x4d, 0x87, 0xba, - 0x4c, 0xb0, 0x0a, 0x79, 0x6a, 0xde, 0x0c, 0x38, 0x94, 0x86, 0xb6, 0x19, 0xd9, 0xc9, 0x43, 0x5e, - 0x3c, 0x67, 0x79, 0x6d, 0x6e, 0xb0, 0x75, 0xea, 0xdd, 0x89, 0xc4, 0x74, 0x3a, 0xd3, 0xe9, 0x4c, - 0xff, 0x40, 0xf3, 0xb3, 0x3a, 0x7d, 0xea, 0x5f, 0xe8, 0xef, 0xe8, 0x74, 0x74, 0x96, 0x41, 0xb6, - 0xec, 0x84, 0x27, 0xb8, 0xdd, 0xcf, 0xb7, 0xf7, 0x7d, 0xfb, 0xed, 0x0a, 0xca, 0x1d, 0xea, 0x5d, - 0xa1, 0xdf, 0x75, 0x68, 0xc0, 0x1c, 0x7c, 0x1f, 0xa0, 0x60, 0x43, 0xf4, 0x55, 0x2d, 0x10, 0x5c, - 0x71, 0xb2, 0x44, 0x03, 0x66, 0x95, 0xa6, 0x20, 0x42, 0x70, 0x31, 0xce, 0x5a, 0x5f, 0x26, 0x13, - 0x02, 0x25, 0x0f, 0x85, 0x87, 0x6d, 0x81, 0x3d, 0x14, 0xe8, 0x7b, 0x18, 0xa3, 0xca, 0x7d, 0xce, - 0xfb, 0x03, 0xd4, 0x20, 0xea, 0xfb, 0x5c, 0x51, 0xc5, 0xb8, 0x2f, 0xe3, 0xec, 0x76, 0x9c, 0xd5, - 0xa7, 0x4e, 0xd8, 0x73, 0x70, 0x18, 0xa8, 0x51, 0x9c, 0xdc, 0x9d, 0x4d, 0x2a, 0x36, 0x44, 0xa9, - 0xe8, 0x30, 0x88, 0x01, 0x4f, 0xf5, 0x1f, 0xef, 0xa0, 0x8f, 0xfe, 0x81, 0x7c, 0x47, 0xfb, 0x7d, - 0x14, 0x0e, 0x0f, 0xf4, 0xfd, 0xe9, 0x5a, 0xf6, 0xf7, 0x50, 0x3a, 0x11, 0x48, 0x15, 0x36, 0x6e, - 0x79, 0xba, 0xf8, 0x73, 0x88, 0x52, 0x11, 0x07, 0xe0, 0x8e, 0xbc, 0x69, 0x54, 0x8c, 0x6a, 0xee, - 0x68, 0xbd, 0x46, 0x03, 0x56, 0x4b, 0x60, 0x13, 0x10, 0x7b, 0x0f, 0x9e, 0x9c, 0xa1, 0x4a, 0x5f, - 0xb4, 0x06, 0x19, 0xd6, 0xd5, 0x17, 0xac, 0xb8, 0x19, 0xd6, 0xb5, 0xff, 0x36, 0xa0, 0x78, 0xc1, - 0x64, 0x02, 0x29, 0x27, 0xd0, 0x1d, 0x80, 0x80, 0xf6, 0xb1, 0xad, 0xf8, 0x15, 0xfa, 0xf1, 0x4f, - 0x56, 0xa2, 0x48, 0x2b, 0x0a, 0x90, 0x6d, 0xd0, 0x87, 0xb6, 0x64, 0x37, 0x68, 0x66, 0x2a, 0x46, - 0x75, 0xd9, 0x7d, 0x1c, 0x05, 0x9a, 0xec, 0x06, 0x49, 0x09, 0x1e, 0x49, 0x2e, 0x54, 0xbb, 0x33, - 0x32, 0x97, 0xf4, 0x0f, 0xb3, 0xd1, 0xf1, 0x78, 0x44, 0x8a, 0x90, 0xed, 0xb1, 0x81, 0x42, 0x61, - 0x3e, 0x1c, 0xc7, 0xc7, 0x27, 0xf2, 0x02, 0x8a, 0xe9, 0x0e, 0xb5, 0xaf, 0x70, 0x64, 0x2e, 0x6b, - 0xb2, 0x05, 0x4d, 0xd6, 0x8d, 0x21, 0x2f, 0x71, 0xe4, 0x3e, 0x99, 0xe0, 0xdd, 0x09, 0xfc, 0x25, - 0x8e, 0xec, 0x0f, 0x06, 0x94, 0x52, 0x7c, 0x64, 0xc0, 0x7d, 0x89, 0xe4, 0x10, 0x72, 0x77, 0x0a, - 0x49, 0xd3, 0xa8, 0x2c, 0xcd, 0x53, 0x31, 0x89, 0x89, 0x34, 0x50, 0x5c, 0xd1, 0xc1, 0x98, 0xe5, - 0x92, 0x66, 0xb9, 0xa2, 0x23, 0x9a, 0xe6, 0x1e, 0xac, 0xfb, 0xf8, 0x5e, 0xb5, 0x13, 0x3a, 0x65, - 0x34, 0xad, 0x7c, 0x14, 0x7e, 0x35, 0xd1, 0xca, 0xfe, 0x1a, 0x4a, 0xa7, 0x38, 0xc0, 0x79, 0x9d, - 0x9d, 0x6d, 0xc8, 0x7f, 0x19, 0x80, 0x3b, 0xd4, 0x6c, 0x9a, 0x10, 0x78, 0xe8, 0xd3, 0x21, 0xc6, - 0x65, 0xf4, 0xff, 0xa4, 0x02, 0xb9, 0x2e, 0x4a, 0x4f, 0x30, 0xed, 0xac, 0x58, 0xf0, 0x64, 0x88, - 0x7c, 0x0b, 0xe0, 0x69, 0x67, 0x75, 0xdb, 0x54, 0x69, 0xe5, 0x73, 0x47, 0x56, 0x6d, 0xec, 0xde, - 0xda, 0xc4, 0xbd, 0xb5, 0xd6, 0xc4, 0xbd, 0xee, 0x4a, 0x8c, 0xae, 0x2b, 0x72, 0x06, 0x9b, 0xe9, - 0xc6, 0x48, 0x73, 0x59, 0x8b, 0x57, 0x9c, 0xea, 0xca, 0x6d, 0x23, 0x5c, 0x92, 0xea, 0x8d, 0x24, - 0x75, 0xc8, 0x4b, 0xc5, 0x85, 0xb6, 0x8c, 0xa2, 0x0a, 0xcd, 0x6c, 0xc5, 0xa8, 0xae, 0x1d, 0x95, - 0x67, 0xf4, 0xaf, 0x35, 0xc7, 0xa0, 0x66, 0x84, 0x71, 0x57, 0x65, 0xe2, 0x64, 0x7b, 0xb0, 0x9a, - 0xcc, 0x92, 0x32, 0x98, 0xcd, 0xd6, 0x4f, 0x6e, 0xfd, 0xac, 0xd1, 0x6c, 0xd5, 0x5b, 0x8d, 0xf6, - 0xeb, 0x1f, 0x9b, 0xaf, 0x1a, 0x27, 0xe7, 0x2f, 0xce, 0x1b, 0xa7, 0x85, 0x07, 0xc4, 0x82, 0xe2, - 0x54, 0xb6, 0xfe, 0xa6, 0x7e, 0x7e, 0x51, 0x3f, 0xbe, 0x68, 0x14, 0x0c, 0xb2, 0x05, 0x9f, 0x4d, - 0xe7, 0xdc, 0x93, 0xef, 0xce, 0xdf, 0x34, 0x4e, 0x0b, 0x19, 0x7b, 0x1f, 0xcc, 0xba, 0xf0, 0x2e, - 0xd9, 0xf5, 0x3d, 0x9a, 0xf5, 0x14, 0xac, 0xd7, 0x3e, 0xbd, 0x27, 0xfa, 0xe8, 0xaf, 0x65, 0xd8, - 0xb8, 0x43, 0x35, 0x51, 0x5c, 0x33, 0x0f, 0x49, 0x00, 0x85, 0xd9, 0xa9, 0x27, 0x63, 0x51, 0x16, - 0x2c, 0x03, 0x6b, 0xd6, 0xb2, 0xf6, 0xc1, 0xef, 0xff, 0xfc, 0xfb, 0x21, 0xf3, 0x95, 0xbd, 0x15, - 0x2d, 0x31, 0xe9, 0x5c, 0x1f, 0x76, 0x50, 0xd1, 0xc3, 0xc4, 0xba, 0x94, 0xcf, 0x13, 0xbb, 0x81, - 0x78, 0x90, 0x9f, 0xda, 0x0d, 0x64, 0x4b, 0x5f, 0x38, 0x6f, 0x5f, 0xa4, 0x6b, 0xed, 0xe9, 0x5a, - 0x15, 0xf2, 0xf9, 0xc2, 0x5a, 0xce, 0x2f, 0xac, 0xfb, 0x2b, 0xf1, 0x61, 0x6d, 0x7a, 0x0e, 0xc9, - 0xb6, 0xbe, 0x6a, 0xfe, 0xb2, 0xb1, 0xca, 0xf3, 0x93, 0xe3, 0xc9, 0xb5, 0xbf, 0xd0, 0x45, 0xb7, - 0xc9, 0x62, 0x82, 0x91, 0x8c, 0xb3, 0x23, 0x16, 0xcb, 0xb8, 0x60, 0xf2, 0xac, 0x62, 0x6a, 0x00, - 0x1a, 0xd1, 0x6e, 0x9f, 0x30, 0xdc, 0xff, 0x14, 0xc3, 0x1b, 0xd8, 0x48, 0x19, 0x85, 0xec, 0xe8, - 0x92, 0x8b, 0x0c, 0xb4, 0xb0, 0x66, 0x4d, 0xd7, 0xac, 0xda, 0x7b, 0x1f, 0xaf, 0xf9, 0x3c, 0xf6, - 0x1a, 0xf9, 0xcd, 0x80, 0xcd, 0x39, 0xce, 0x23, 0xbb, 0xba, 0xfc, 0x62, 0x4f, 0x2e, 0x7c, 0xc0, - 0x37, 0xfa, 0x01, 0xfb, 0x76, 0xf5, 0x13, 0x0f, 0x08, 0x27, 0x57, 0x1f, 0xff, 0x61, 0xfc, 0x59, - 0xff, 0xc1, 0x2d, 0xc3, 0xa3, 0x2e, 0xf6, 0x68, 0x38, 0x50, 0x64, 0x83, 0xac, 0x43, 0xde, 0xca, - 0xe9, 0x17, 0x44, 0xf3, 0x19, 0xca, 0xb7, 0xbb, 0xb0, 0x03, 0xd9, 0x63, 0xa4, 0x02, 0x05, 0xd9, - 0x7c, 0x9c, 0xb1, 0xf2, 0x34, 0x54, 0x97, 0x5c, 0xb0, 0x1b, 0xfd, 0xdd, 0xab, 0x64, 0x3a, 0xab, - 0x00, 0xb7, 0x80, 0x07, 0x6f, 0x9f, 0xf5, 0x99, 0xba, 0x0c, 0x3b, 0x35, 0x8f, 0x0f, 0x9d, 0xab, - 0xb0, 0x83, 0xbd, 0x01, 0x7f, 0xe7, 0x04, 0x2c, 0xc0, 0x01, 0xf3, 0x51, 0x3a, 0xc9, 0xcf, 0x79, - 0x9f, 0xb7, 0xbd, 0x01, 0x43, 0x5f, 0x75, 0xb2, 0x9a, 0xc9, 0xb3, 0xff, 0x03, 0x00, 0x00, 0xff, - 0xff, 0x0b, 0x8f, 0xfa, 0xad, 0x2a, 0x08, 0x00, 0x00, +var File_backend_api_experiment_proto protoreflect.FileDescriptor + +var file_backend_api_experiment_proto_rawDesc = []byte{ + 0x0a, 0x1c, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, + 0x61, 0x70, 0x69, 0x1a, 0x17, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x62, 0x61, + 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, 0x67, 0x67, + 0x65, 0x72, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4a, 0x0a, 0x17, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x26, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x45, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x22, 0xcd, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, + 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, + 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, + 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, + 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4b, 0x65, 0x79, + 0x22, 0x93, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x0b, + 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x26, + 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, + 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x29, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0xfe, 0x02, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x47, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x0d, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x63, 0x0a, + 0x0c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, + 0x18, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x53, + 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, + 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x54, 0x4f, 0x52, 0x41, + 0x47, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, + 0x10, 0x02, 0x22, 0x2a, 0x0a, 0x18, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2c, + 0x0a, 0x1a, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x32, 0xcb, 0x05, 0x0a, + 0x11, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x70, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x19, 0x2f, + 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x63, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x45, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x73, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x6e, 0x0a, 0x0e, 0x4c, 0x69, 0x73, + 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, + 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x70, 0x0a, 0x10, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x61, 0x70, + 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x7a, 0x0a, 0x11, 0x41, + 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x22, + 0x26, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, + 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x13, 0x55, 0x6e, 0x61, 0x72, + 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, + 0x22, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x3a, 0x75, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x42, 0x85, 0x01, 0x5a, 0x33, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, + 0x6f, 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, + 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x5f, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x92, 0x41, 0x4d, 0x52, 0x1c, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x12, 0x11, 0x12, 0x0f, 0x0a, 0x0d, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x5a, 0x1f, 0x0a, 0x1d, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, + 0x13, 0x08, 0x02, 0x1a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x02, 0x62, 0x0c, 0x0a, 0x0a, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, + 0x12, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_experiment_proto_rawDescOnce sync.Once + file_backend_api_experiment_proto_rawDescData = file_backend_api_experiment_proto_rawDesc +) + +func file_backend_api_experiment_proto_rawDescGZIP() []byte { + file_backend_api_experiment_proto_rawDescOnce.Do(func() { + file_backend_api_experiment_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_experiment_proto_rawDescData) + }) + return file_backend_api_experiment_proto_rawDescData +} + +var file_backend_api_experiment_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_backend_api_experiment_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_backend_api_experiment_proto_goTypes = []interface{}{ + (Experiment_StorageState)(0), // 0: api.Experiment.StorageState + (*CreateExperimentRequest)(nil), // 1: api.CreateExperimentRequest + (*GetExperimentRequest)(nil), // 2: api.GetExperimentRequest + (*ListExperimentsRequest)(nil), // 3: api.ListExperimentsRequest + (*ListExperimentsResponse)(nil), // 4: api.ListExperimentsResponse + (*DeleteExperimentRequest)(nil), // 5: api.DeleteExperimentRequest + (*Experiment)(nil), // 6: api.Experiment + (*ArchiveExperimentRequest)(nil), // 7: api.ArchiveExperimentRequest + (*UnarchiveExperimentRequest)(nil), // 8: api.UnarchiveExperimentRequest + (*ResourceKey)(nil), // 9: api.ResourceKey + (*timestamppb.Timestamp)(nil), // 10: google.protobuf.Timestamp + (*ResourceReference)(nil), // 11: api.ResourceReference + (*emptypb.Empty)(nil), // 12: google.protobuf.Empty +} +var file_backend_api_experiment_proto_depIdxs = []int32{ + 6, // 0: api.CreateExperimentRequest.experiment:type_name -> api.Experiment + 9, // 1: api.ListExperimentsRequest.resource_reference_key:type_name -> api.ResourceKey + 6, // 2: api.ListExperimentsResponse.experiments:type_name -> api.Experiment + 10, // 3: api.Experiment.created_at:type_name -> google.protobuf.Timestamp + 11, // 4: api.Experiment.resource_references:type_name -> api.ResourceReference + 0, // 5: api.Experiment.storage_state:type_name -> api.Experiment.StorageState + 1, // 6: api.ExperimentService.CreateExperiment:input_type -> api.CreateExperimentRequest + 2, // 7: api.ExperimentService.GetExperiment:input_type -> api.GetExperimentRequest + 3, // 8: api.ExperimentService.ListExperiment:input_type -> api.ListExperimentsRequest + 5, // 9: api.ExperimentService.DeleteExperiment:input_type -> api.DeleteExperimentRequest + 7, // 10: api.ExperimentService.ArchiveExperiment:input_type -> api.ArchiveExperimentRequest + 8, // 11: api.ExperimentService.UnarchiveExperiment:input_type -> api.UnarchiveExperimentRequest + 6, // 12: api.ExperimentService.CreateExperiment:output_type -> api.Experiment + 6, // 13: api.ExperimentService.GetExperiment:output_type -> api.Experiment + 4, // 14: api.ExperimentService.ListExperiment:output_type -> api.ListExperimentsResponse + 12, // 15: api.ExperimentService.DeleteExperiment:output_type -> google.protobuf.Empty + 12, // 16: api.ExperimentService.ArchiveExperiment:output_type -> google.protobuf.Empty + 12, // 17: api.ExperimentService.UnarchiveExperiment:output_type -> google.protobuf.Empty + 12, // [12:18] is the sub-list for method output_type + 6, // [6:12] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_backend_api_experiment_proto_init() } +func file_backend_api_experiment_proto_init() { + if File_backend_api_experiment_proto != nil { + return + } + file_backend_api_error_proto_init() + file_backend_api_resource_reference_proto_init() + if !protoimpl.UnsafeEnabled { + file_backend_api_experiment_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateExperimentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_experiment_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetExperimentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_experiment_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListExperimentsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_experiment_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListExperimentsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_experiment_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteExperimentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_experiment_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Experiment); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_experiment_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ArchiveExperimentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_experiment_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnarchiveExperimentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_experiment_proto_rawDesc, + NumEnums: 1, + NumMessages: 8, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_backend_api_experiment_proto_goTypes, + DependencyIndexes: file_backend_api_experiment_proto_depIdxs, + EnumInfos: file_backend_api_experiment_proto_enumTypes, + MessageInfos: file_backend_api_experiment_proto_msgTypes, + }.Build() + File_backend_api_experiment_proto = out.File + file_backend_api_experiment_proto_rawDesc = nil + file_backend_api_experiment_proto_goTypes = nil + file_backend_api_experiment_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // ExperimentServiceClient is the client API for ExperimentService service. // @@ -580,19 +921,19 @@ type ExperimentServiceClient interface { // Deletes an experiment without deleting the experiment's runs and jobs. To // avoid unexpected behaviors, delete an experiment's runs and jobs before // deleting the experiment. - DeleteExperiment(ctx context.Context, in *DeleteExperimentRequest, opts ...grpc.CallOption) (*empty.Empty, error) + DeleteExperiment(ctx context.Context, in *DeleteExperimentRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Archives an experiment and the experiment's runs and jobs. - ArchiveExperiment(ctx context.Context, in *ArchiveExperimentRequest, opts ...grpc.CallOption) (*empty.Empty, error) + ArchiveExperiment(ctx context.Context, in *ArchiveExperimentRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Restores an archived experiment. The experiment's archived runs and jobs // will stay archived. - UnarchiveExperiment(ctx context.Context, in *UnarchiveExperimentRequest, opts ...grpc.CallOption) (*empty.Empty, error) + UnarchiveExperiment(ctx context.Context, in *UnarchiveExperimentRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) } type experimentServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewExperimentServiceClient(cc *grpc.ClientConn) ExperimentServiceClient { +func NewExperimentServiceClient(cc grpc.ClientConnInterface) ExperimentServiceClient { return &experimentServiceClient{cc} } @@ -623,8 +964,8 @@ func (c *experimentServiceClient) ListExperiment(ctx context.Context, in *ListEx return out, nil } -func (c *experimentServiceClient) DeleteExperiment(ctx context.Context, in *DeleteExperimentRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *experimentServiceClient) DeleteExperiment(ctx context.Context, in *DeleteExperimentRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.ExperimentService/DeleteExperiment", in, out, opts...) if err != nil { return nil, err @@ -632,8 +973,8 @@ func (c *experimentServiceClient) DeleteExperiment(ctx context.Context, in *Dele return out, nil } -func (c *experimentServiceClient) ArchiveExperiment(ctx context.Context, in *ArchiveExperimentRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *experimentServiceClient) ArchiveExperiment(ctx context.Context, in *ArchiveExperimentRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.ExperimentService/ArchiveExperiment", in, out, opts...) if err != nil { return nil, err @@ -641,8 +982,8 @@ func (c *experimentServiceClient) ArchiveExperiment(ctx context.Context, in *Arc return out, nil } -func (c *experimentServiceClient) UnarchiveExperiment(ctx context.Context, in *UnarchiveExperimentRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *experimentServiceClient) UnarchiveExperiment(ctx context.Context, in *UnarchiveExperimentRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.ExperimentService/UnarchiveExperiment", in, out, opts...) if err != nil { return nil, err @@ -661,34 +1002,34 @@ type ExperimentServiceServer interface { // Deletes an experiment without deleting the experiment's runs and jobs. To // avoid unexpected behaviors, delete an experiment's runs and jobs before // deleting the experiment. - DeleteExperiment(context.Context, *DeleteExperimentRequest) (*empty.Empty, error) + DeleteExperiment(context.Context, *DeleteExperimentRequest) (*emptypb.Empty, error) // Archives an experiment and the experiment's runs and jobs. - ArchiveExperiment(context.Context, *ArchiveExperimentRequest) (*empty.Empty, error) + ArchiveExperiment(context.Context, *ArchiveExperimentRequest) (*emptypb.Empty, error) // Restores an archived experiment. The experiment's archived runs and jobs // will stay archived. - UnarchiveExperiment(context.Context, *UnarchiveExperimentRequest) (*empty.Empty, error) + UnarchiveExperiment(context.Context, *UnarchiveExperimentRequest) (*emptypb.Empty, error) } // UnimplementedExperimentServiceServer can be embedded to have forward compatible implementations. type UnimplementedExperimentServiceServer struct { } -func (*UnimplementedExperimentServiceServer) CreateExperiment(ctx context.Context, req *CreateExperimentRequest) (*Experiment, error) { +func (*UnimplementedExperimentServiceServer) CreateExperiment(context.Context, *CreateExperimentRequest) (*Experiment, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateExperiment not implemented") } -func (*UnimplementedExperimentServiceServer) GetExperiment(ctx context.Context, req *GetExperimentRequest) (*Experiment, error) { +func (*UnimplementedExperimentServiceServer) GetExperiment(context.Context, *GetExperimentRequest) (*Experiment, error) { return nil, status.Errorf(codes.Unimplemented, "method GetExperiment not implemented") } -func (*UnimplementedExperimentServiceServer) ListExperiment(ctx context.Context, req *ListExperimentsRequest) (*ListExperimentsResponse, error) { +func (*UnimplementedExperimentServiceServer) ListExperiment(context.Context, *ListExperimentsRequest) (*ListExperimentsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListExperiment not implemented") } -func (*UnimplementedExperimentServiceServer) DeleteExperiment(ctx context.Context, req *DeleteExperimentRequest) (*empty.Empty, error) { +func (*UnimplementedExperimentServiceServer) DeleteExperiment(context.Context, *DeleteExperimentRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteExperiment not implemented") } -func (*UnimplementedExperimentServiceServer) ArchiveExperiment(ctx context.Context, req *ArchiveExperimentRequest) (*empty.Empty, error) { +func (*UnimplementedExperimentServiceServer) ArchiveExperiment(context.Context, *ArchiveExperimentRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method ArchiveExperiment not implemented") } -func (*UnimplementedExperimentServiceServer) UnarchiveExperiment(ctx context.Context, req *UnarchiveExperimentRequest) (*empty.Empty, error) { +func (*UnimplementedExperimentServiceServer) UnarchiveExperiment(context.Context, *UnarchiveExperimentRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method UnarchiveExperiment not implemented") } diff --git a/backend/api/go_client/filter.pb.go b/backend/api/go_client/filter.pb.go index a065f89c18..82c2995d0d 100644 --- a/backend/api/go_client/filter.pb.go +++ b/backend/api/go_client/filter.pb.go @@ -1,30 +1,44 @@ +// Copyright 2018 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: backend/api/filter.proto package go_client import ( context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - timestamp "github.com/golang/protobuf/ptypes/timestamp" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) // Op is the operation to apply. type Predicate_Op int32 @@ -47,44 +61,69 @@ const ( Predicate_IS_SUBSTRING Predicate_Op = 9 ) -var Predicate_Op_name = map[int32]string{ - 0: "UNKNOWN", - 1: "EQUALS", - 2: "NOT_EQUALS", - 3: "GREATER_THAN", - 5: "GREATER_THAN_EQUALS", - 6: "LESS_THAN", - 7: "LESS_THAN_EQUALS", - 8: "IN", - 9: "IS_SUBSTRING", -} - -var Predicate_Op_value = map[string]int32{ - "UNKNOWN": 0, - "EQUALS": 1, - "NOT_EQUALS": 2, - "GREATER_THAN": 3, - "GREATER_THAN_EQUALS": 5, - "LESS_THAN": 6, - "LESS_THAN_EQUALS": 7, - "IN": 8, - "IS_SUBSTRING": 9, +// Enum value maps for Predicate_Op. +var ( + Predicate_Op_name = map[int32]string{ + 0: "UNKNOWN", + 1: "EQUALS", + 2: "NOT_EQUALS", + 3: "GREATER_THAN", + 5: "GREATER_THAN_EQUALS", + 6: "LESS_THAN", + 7: "LESS_THAN_EQUALS", + 8: "IN", + 9: "IS_SUBSTRING", + } + Predicate_Op_value = map[string]int32{ + "UNKNOWN": 0, + "EQUALS": 1, + "NOT_EQUALS": 2, + "GREATER_THAN": 3, + "GREATER_THAN_EQUALS": 5, + "LESS_THAN": 6, + "LESS_THAN_EQUALS": 7, + "IN": 8, + "IS_SUBSTRING": 9, + } +) + +func (x Predicate_Op) Enum() *Predicate_Op { + p := new(Predicate_Op) + *p = x + return p } func (x Predicate_Op) String() string { - return proto.EnumName(Predicate_Op_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Predicate_Op) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_filter_proto_enumTypes[0].Descriptor() +} + +func (Predicate_Op) Type() protoreflect.EnumType { + return &file_backend_api_filter_proto_enumTypes[0] +} + +func (x Predicate_Op) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use Predicate_Op.Descriptor instead. func (Predicate_Op) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_aab96529e99c2762, []int{0, 0} + return file_backend_api_filter_proto_rawDescGZIP(), []int{0, 0} } // Predicate captures individual conditions that must be true for a resource // being filtered. type Predicate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Op Predicate_Op `protobuf:"varint,1,opt,name=op,proto3,enum=api.Predicate_Op" json:"op,omitempty"` Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` - // Types that are valid to be assigned to Value: + // Types that are assignable to Value: // *Predicate_IntValue // *Predicate_LongValue // *Predicate_StringValue @@ -92,51 +131,111 @@ type Predicate struct { // *Predicate_IntValues // *Predicate_LongValues // *Predicate_StringValues - Value isPredicate_Value `protobuf_oneof:"value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Value isPredicate_Value `protobuf_oneof:"value"` } -func (m *Predicate) Reset() { *m = Predicate{} } -func (m *Predicate) String() string { return proto.CompactTextString(m) } -func (*Predicate) ProtoMessage() {} -func (*Predicate) Descriptor() ([]byte, []int) { - return fileDescriptor_aab96529e99c2762, []int{0} +func (x *Predicate) Reset() { + *x = Predicate{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_filter_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Predicate) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Predicate.Unmarshal(m, b) -} -func (m *Predicate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Predicate.Marshal(b, m, deterministic) +func (x *Predicate) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Predicate) XXX_Merge(src proto.Message) { - xxx_messageInfo_Predicate.Merge(m, src) + +func (*Predicate) ProtoMessage() {} + +func (x *Predicate) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_filter_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *Predicate) XXX_Size() int { - return xxx_messageInfo_Predicate.Size(m) + +// Deprecated: Use Predicate.ProtoReflect.Descriptor instead. +func (*Predicate) Descriptor() ([]byte, []int) { + return file_backend_api_filter_proto_rawDescGZIP(), []int{0} } -func (m *Predicate) XXX_DiscardUnknown() { - xxx_messageInfo_Predicate.DiscardUnknown(m) + +func (x *Predicate) GetOp() Predicate_Op { + if x != nil { + return x.Op + } + return Predicate_UNKNOWN } -var xxx_messageInfo_Predicate proto.InternalMessageInfo +func (x *Predicate) GetKey() string { + if x != nil { + return x.Key + } + return "" +} -func (m *Predicate) GetOp() Predicate_Op { +func (m *Predicate) GetValue() isPredicate_Value { if m != nil { - return m.Op + return m.Value } - return Predicate_UNKNOWN + return nil } -func (m *Predicate) GetKey() string { - if m != nil { - return m.Key +func (x *Predicate) GetIntValue() int32 { + if x, ok := x.GetValue().(*Predicate_IntValue); ok { + return x.IntValue + } + return 0 +} + +func (x *Predicate) GetLongValue() int64 { + if x, ok := x.GetValue().(*Predicate_LongValue); ok { + return x.LongValue + } + return 0 +} + +func (x *Predicate) GetStringValue() string { + if x, ok := x.GetValue().(*Predicate_StringValue); ok { + return x.StringValue } return "" } +func (x *Predicate) GetTimestampValue() *timestamppb.Timestamp { + if x, ok := x.GetValue().(*Predicate_TimestampValue); ok { + return x.TimestampValue + } + return nil +} + +func (x *Predicate) GetIntValues() *IntValues { + if x, ok := x.GetValue().(*Predicate_IntValues); ok { + return x.IntValues + } + return nil +} + +func (x *Predicate) GetLongValues() *LongValues { + if x, ok := x.GetValue().(*Predicate_LongValues); ok { + return x.LongValues + } + return nil +} + +func (x *Predicate) GetStringValues() *StringValues { + if x, ok := x.GetValue().(*Predicate_StringValues); ok { + return x.StringValues + } + return nil +} + type isPredicate_Value interface { isPredicate_Value() } @@ -154,10 +253,13 @@ type Predicate_StringValue struct { } type Predicate_TimestampValue struct { - TimestampValue *timestamp.Timestamp `protobuf:"bytes,6,opt,name=timestamp_value,json=timestampValue,proto3,oneof"` + // Timestamp values will be converted to Unix time (seconds since the epoch) + // prior to being used in a filtering operation. + TimestampValue *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=timestamp_value,json=timestampValue,proto3,oneof"` } type Predicate_IntValues struct { + // Array values below are only meant to be used by the IN operator. IntValues *IntValues `protobuf:"bytes,7,opt,name=int_values,json=intValues,proto3,oneof"` } @@ -183,188 +285,143 @@ func (*Predicate_LongValues) isPredicate_Value() {} func (*Predicate_StringValues) isPredicate_Value() {} -func (m *Predicate) GetValue() isPredicate_Value { - if m != nil { - return m.Value - } - return nil -} +type IntValues struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Predicate) GetIntValue() int32 { - if x, ok := m.GetValue().(*Predicate_IntValue); ok { - return x.IntValue - } - return 0 + Values []int32 `protobuf:"varint,1,rep,packed,name=values,proto3" json:"values,omitempty"` } -func (m *Predicate) GetLongValue() int64 { - if x, ok := m.GetValue().(*Predicate_LongValue); ok { - return x.LongValue +func (x *IntValues) Reset() { + *x = IntValues{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_filter_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return 0 } -func (m *Predicate) GetStringValue() string { - if x, ok := m.GetValue().(*Predicate_StringValue); ok { - return x.StringValue - } - return "" +func (x *IntValues) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Predicate) GetTimestampValue() *timestamp.Timestamp { - if x, ok := m.GetValue().(*Predicate_TimestampValue); ok { - return x.TimestampValue - } - return nil -} +func (*IntValues) ProtoMessage() {} -func (m *Predicate) GetIntValues() *IntValues { - if x, ok := m.GetValue().(*Predicate_IntValues); ok { - return x.IntValues +func (x *IntValues) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_filter_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *Predicate) GetLongValues() *LongValues { - if x, ok := m.GetValue().(*Predicate_LongValues); ok { - return x.LongValues - } - return nil +// Deprecated: Use IntValues.ProtoReflect.Descriptor instead. +func (*IntValues) Descriptor() ([]byte, []int) { + return file_backend_api_filter_proto_rawDescGZIP(), []int{1} } -func (m *Predicate) GetStringValues() *StringValues { - if x, ok := m.GetValue().(*Predicate_StringValues); ok { - return x.StringValues +func (x *IntValues) GetValues() []int32 { + if x != nil { + return x.Values } return nil } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*Predicate) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*Predicate_IntValue)(nil), - (*Predicate_LongValue)(nil), - (*Predicate_StringValue)(nil), - (*Predicate_TimestampValue)(nil), - (*Predicate_IntValues)(nil), - (*Predicate_LongValues)(nil), - (*Predicate_StringValues)(nil), - } -} +type StringValues struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -type IntValues struct { - Values []int32 `protobuf:"varint,1,rep,packed,name=values,proto3" json:"values,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Values []string `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"` } -func (m *IntValues) Reset() { *m = IntValues{} } -func (m *IntValues) String() string { return proto.CompactTextString(m) } -func (*IntValues) ProtoMessage() {} -func (*IntValues) Descriptor() ([]byte, []int) { - return fileDescriptor_aab96529e99c2762, []int{1} +func (x *StringValues) Reset() { + *x = StringValues{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_filter_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *IntValues) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_IntValues.Unmarshal(m, b) -} -func (m *IntValues) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_IntValues.Marshal(b, m, deterministic) -} -func (m *IntValues) XXX_Merge(src proto.Message) { - xxx_messageInfo_IntValues.Merge(m, src) -} -func (m *IntValues) XXX_Size() int { - return xxx_messageInfo_IntValues.Size(m) -} -func (m *IntValues) XXX_DiscardUnknown() { - xxx_messageInfo_IntValues.DiscardUnknown(m) +func (x *StringValues) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_IntValues proto.InternalMessageInfo +func (*StringValues) ProtoMessage() {} -func (m *IntValues) GetValues() []int32 { - if m != nil { - return m.Values +func (x *StringValues) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_filter_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil -} - -type StringValues struct { - Values []string `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + return mi.MessageOf(x) } -func (m *StringValues) Reset() { *m = StringValues{} } -func (m *StringValues) String() string { return proto.CompactTextString(m) } -func (*StringValues) ProtoMessage() {} +// Deprecated: Use StringValues.ProtoReflect.Descriptor instead. func (*StringValues) Descriptor() ([]byte, []int) { - return fileDescriptor_aab96529e99c2762, []int{2} + return file_backend_api_filter_proto_rawDescGZIP(), []int{2} } -func (m *StringValues) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_StringValues.Unmarshal(m, b) -} -func (m *StringValues) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_StringValues.Marshal(b, m, deterministic) -} -func (m *StringValues) XXX_Merge(src proto.Message) { - xxx_messageInfo_StringValues.Merge(m, src) -} -func (m *StringValues) XXX_Size() int { - return xxx_messageInfo_StringValues.Size(m) -} -func (m *StringValues) XXX_DiscardUnknown() { - xxx_messageInfo_StringValues.DiscardUnknown(m) -} - -var xxx_messageInfo_StringValues proto.InternalMessageInfo - -func (m *StringValues) GetValues() []string { - if m != nil { - return m.Values +func (x *StringValues) GetValues() []string { + if x != nil { + return x.Values } return nil } type LongValues struct { - Values []int64 `protobuf:"varint,3,rep,packed,name=values,proto3" json:"values,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *LongValues) Reset() { *m = LongValues{} } -func (m *LongValues) String() string { return proto.CompactTextString(m) } -func (*LongValues) ProtoMessage() {} -func (*LongValues) Descriptor() ([]byte, []int) { - return fileDescriptor_aab96529e99c2762, []int{3} + Values []int64 `protobuf:"varint,3,rep,packed,name=values,proto3" json:"values,omitempty"` } -func (m *LongValues) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LongValues.Unmarshal(m, b) -} -func (m *LongValues) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LongValues.Marshal(b, m, deterministic) -} -func (m *LongValues) XXX_Merge(src proto.Message) { - xxx_messageInfo_LongValues.Merge(m, src) +func (x *LongValues) Reset() { + *x = LongValues{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_filter_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *LongValues) XXX_Size() int { - return xxx_messageInfo_LongValues.Size(m) + +func (x *LongValues) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *LongValues) XXX_DiscardUnknown() { - xxx_messageInfo_LongValues.DiscardUnknown(m) + +func (*LongValues) ProtoMessage() {} + +func (x *LongValues) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_filter_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_LongValues proto.InternalMessageInfo +// Deprecated: Use LongValues.ProtoReflect.Descriptor instead. +func (*LongValues) Descriptor() ([]byte, []int) { + return file_backend_api_filter_proto_rawDescGZIP(), []int{3} +} -func (m *LongValues) GetValues() []int64 { - if m != nil { - return m.Values +func (x *LongValues) GetValues() []int64 { + if x != nil { + return x.Values } return nil } @@ -410,102 +467,261 @@ func (m *LongValues) GetValues() []int64 { // } // } type Filter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // All predicates are AND-ed when this filter is applied. - Predicates []*Predicate `protobuf:"bytes,1,rep,name=predicates,proto3" json:"predicates,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Predicates []*Predicate `protobuf:"bytes,1,rep,name=predicates,proto3" json:"predicates,omitempty"` } -func (m *Filter) Reset() { *m = Filter{} } -func (m *Filter) String() string { return proto.CompactTextString(m) } -func (*Filter) ProtoMessage() {} -func (*Filter) Descriptor() ([]byte, []int) { - return fileDescriptor_aab96529e99c2762, []int{4} +func (x *Filter) Reset() { + *x = Filter{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_filter_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Filter) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Filter.Unmarshal(m, b) -} -func (m *Filter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Filter.Marshal(b, m, deterministic) -} -func (m *Filter) XXX_Merge(src proto.Message) { - xxx_messageInfo_Filter.Merge(m, src) +func (x *Filter) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Filter) XXX_Size() int { - return xxx_messageInfo_Filter.Size(m) -} -func (m *Filter) XXX_DiscardUnknown() { - xxx_messageInfo_Filter.DiscardUnknown(m) + +func (*Filter) ProtoMessage() {} + +func (x *Filter) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_filter_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Filter proto.InternalMessageInfo +// Deprecated: Use Filter.ProtoReflect.Descriptor instead. +func (*Filter) Descriptor() ([]byte, []int) { + return file_backend_api_filter_proto_rawDescGZIP(), []int{4} +} -func (m *Filter) GetPredicates() []*Predicate { - if m != nil { - return m.Predicates +func (x *Filter) GetPredicates() []*Predicate { + if x != nil { + return x.Predicates } return nil } -func init() { - proto.RegisterEnum("api.Predicate_Op", Predicate_Op_name, Predicate_Op_value) - proto.RegisterType((*Predicate)(nil), "api.Predicate") - proto.RegisterType((*IntValues)(nil), "api.IntValues") - proto.RegisterType((*StringValues)(nil), "api.StringValues") - proto.RegisterType((*LongValues)(nil), "api.LongValues") - proto.RegisterType((*Filter)(nil), "api.Filter") -} - -func init() { proto.RegisterFile("backend/api/filter.proto", fileDescriptor_aab96529e99c2762) } - -var fileDescriptor_aab96529e99c2762 = []byte{ - // 553 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x93, 0xdf, 0x8f, 0xd2, 0x40, - 0x10, 0xc7, 0xfb, 0xe3, 0x28, 0xd7, 0x81, 0xe3, 0xea, 0x6a, 0xb4, 0x21, 0x9a, 0xab, 0x9c, 0xd1, - 0x3e, 0xb5, 0x09, 0x17, 0x93, 0x7b, 0xf1, 0x01, 0x22, 0x02, 0x91, 0x14, 0x6d, 0x41, 0x13, 0x5f, - 0x48, 0xe1, 0x16, 0xdc, 0x50, 0xba, 0x1b, 0xba, 0x9c, 0xb9, 0xbf, 0xc4, 0xff, 0xc2, 0xbf, 0xd1, - 0xb4, 0xdb, 0x2e, 0x7d, 0xeb, 0xcc, 0x7c, 0xbe, 0xd3, 0xf9, 0x4e, 0xa7, 0x60, 0xaf, 0xe3, 0xcd, - 0x1e, 0xa7, 0x0f, 0x7e, 0xcc, 0x88, 0xbf, 0x25, 0x09, 0xc7, 0x47, 0x8f, 0x1d, 0x29, 0xa7, 0x48, - 0x8f, 0x19, 0xe9, 0xbe, 0xde, 0x51, 0xba, 0x4b, 0x70, 0x51, 0x8d, 0xd3, 0x94, 0xf2, 0x98, 0x13, - 0x9a, 0x66, 0x02, 0xe9, 0xde, 0x94, 0xd5, 0x22, 0x5a, 0x9f, 0xb6, 0x3e, 0x27, 0x07, 0x9c, 0xf1, - 0xf8, 0xc0, 0x04, 0xd0, 0xfb, 0x77, 0x01, 0xe6, 0xb7, 0x23, 0x7e, 0x20, 0x9b, 0x98, 0x63, 0xf4, - 0x16, 0x34, 0xca, 0x6c, 0xd5, 0x51, 0xdd, 0x4e, 0xff, 0x99, 0x17, 0x33, 0xe2, 0xc9, 0x9a, 0x37, - 0x67, 0xa1, 0x46, 0x19, 0xb2, 0x40, 0xdf, 0xe3, 0x27, 0x5b, 0x73, 0x54, 0xd7, 0x0c, 0xf3, 0x47, - 0xf4, 0x06, 0x4c, 0x92, 0xf2, 0xd5, 0x63, 0x9c, 0x9c, 0xb0, 0xad, 0x3b, 0xaa, 0xdb, 0x98, 0x28, - 0xe1, 0x25, 0x49, 0xf9, 0x8f, 0x3c, 0x83, 0x6e, 0x00, 0x12, 0x9a, 0xee, 0xca, 0xfa, 0x85, 0xa3, - 0xba, 0xfa, 0x44, 0x09, 0xcd, 0x3c, 0x27, 0x80, 0x5b, 0x68, 0x67, 0xfc, 0x48, 0x24, 0xd2, 0xc8, - 0x5b, 0x4f, 0x94, 0xb0, 0x25, 0xb2, 0x02, 0x1a, 0xc1, 0xb5, 0x1c, 0xbd, 0xe4, 0x0c, 0x47, 0x75, - 0x5b, 0xfd, 0xae, 0x27, 0x2c, 0x7a, 0x95, 0x45, 0x6f, 0x51, 0x71, 0x13, 0x25, 0xec, 0x48, 0x91, - 0x68, 0xe3, 0x03, 0xc8, 0x59, 0x33, 0xbb, 0x59, 0x74, 0xe8, 0x14, 0x46, 0xa7, 0xe5, 0xbc, 0x59, - 0x3e, 0x5c, 0x35, 0x7c, 0x86, 0xfa, 0xd0, 0x3a, 0x4f, 0x9f, 0xd9, 0x97, 0x85, 0xe2, 0xba, 0x50, - 0xcc, 0x2a, 0x07, 0xb9, 0x04, 0xa4, 0x9f, 0x0c, 0xdd, 0xc3, 0x55, 0xdd, 0x50, 0x66, 0x9b, 0x85, - 0x4a, 0x2c, 0x34, 0x3a, 0x9b, 0xca, 0x75, 0xed, 0x9a, 0xc9, 0xac, 0xf7, 0x57, 0x05, 0x6d, 0xce, - 0x50, 0x0b, 0x9a, 0xcb, 0xe0, 0x6b, 0x30, 0xff, 0x19, 0x58, 0x0a, 0x02, 0x30, 0x46, 0xdf, 0x97, - 0x83, 0x59, 0x64, 0xa9, 0xa8, 0x03, 0x10, 0xcc, 0x17, 0xab, 0x32, 0xd6, 0x90, 0x05, 0xed, 0x71, - 0x38, 0x1a, 0x2c, 0x46, 0xe1, 0x6a, 0x31, 0x19, 0x04, 0x96, 0x8e, 0x5e, 0xc1, 0xf3, 0x7a, 0xa6, - 0x42, 0x1b, 0xe8, 0x0a, 0xcc, 0xd9, 0x28, 0x8a, 0x04, 0x67, 0xa0, 0x17, 0x60, 0xc9, 0xb0, 0x82, - 0x9a, 0xc8, 0x00, 0x6d, 0x1a, 0x58, 0x97, 0x79, 0xdf, 0x69, 0xb4, 0x8a, 0x96, 0xc3, 0x68, 0x11, - 0x4e, 0x83, 0xb1, 0x65, 0x0e, 0x9b, 0xd0, 0x28, 0xcc, 0xf4, 0x6e, 0xc1, 0x94, 0xab, 0x42, 0x2f, - 0xc1, 0x28, 0x2d, 0xaa, 0x8e, 0xee, 0x36, 0xc2, 0x32, 0xea, 0xbd, 0x87, 0x76, 0xdd, 0x67, 0x8d, - 0xd3, 0x1c, 0xdd, 0x35, 0x25, 0xf7, 0x0e, 0xe0, 0xbc, 0xc5, 0x1a, 0xa5, 0x3b, 0xba, 0xab, 0x4b, - 0xea, 0x1e, 0x8c, 0x2f, 0xc5, 0xdd, 0x23, 0x0f, 0x80, 0x55, 0x07, 0x29, 0xde, 0x59, 0x7d, 0x3e, - 0x79, 0xa7, 0x61, 0x8d, 0xe8, 0x7f, 0x02, 0xf4, 0xf9, 0x74, 0x38, 0x3c, 0x09, 0x79, 0x84, 0x8f, - 0x8f, 0x64, 0x83, 0xd1, 0x07, 0x30, 0xc7, 0x98, 0x97, 0x2d, 0x5b, 0x85, 0x5c, 0x04, 0xdd, 0x7a, - 0xd0, 0x53, 0x86, 0x1f, 0x7f, 0xdd, 0xed, 0x08, 0xff, 0x7d, 0x5a, 0x7b, 0x1b, 0x7a, 0xf0, 0xf7, - 0xa7, 0x35, 0xde, 0x26, 0xf4, 0x8f, 0xcf, 0x08, 0xc3, 0x09, 0x49, 0x71, 0xe6, 0xd7, 0x7f, 0xcd, - 0x1d, 0x5d, 0x6d, 0x12, 0x82, 0x53, 0xbe, 0x36, 0x8a, 0x53, 0xbc, 0xfb, 0x1f, 0x00, 0x00, 0xff, - 0xff, 0xf8, 0x38, 0x00, 0xb0, 0xba, 0x03, 0x00, 0x00, +var File_backend_api_filter_proto protoreflect.FileDescriptor + +var file_backend_api_filter_proto_rawDesc = []byte{ + 0x0a, 0x18, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xae, + 0x04, 0x0a, 0x09, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x02, + 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, + 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x02, 0x6f, 0x70, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x1f, 0x0a, 0x0a, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x0e, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2f, 0x0a, + 0x0a, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x48, 0x00, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x32, + 0x0a, 0x0b, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0c, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x97, 0x01, 0x0a, + 0x02, 0x4f, 0x70, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, + 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, + 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x03, 0x12, 0x17, + 0x0a, 0x13, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x45, + 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x45, 0x53, 0x53, 0x5f, + 0x54, 0x48, 0x41, 0x4e, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, + 0x48, 0x41, 0x4e, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x07, 0x12, 0x06, 0x0a, 0x02, + 0x49, 0x4e, 0x10, 0x08, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x54, + 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x23, 0x0a, 0x09, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x22, 0x26, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x24, 0x0a, 0x0a, + 0x4c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x22, 0x38, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x0a, + 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x52, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x32, 0x3d, 0x0a, 0x12, + 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x27, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, + 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x0b, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x00, 0x42, 0x35, 0x5a, 0x33, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, + 0x6f, 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, + 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x5f, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_filter_proto_rawDescOnce sync.Once + file_backend_api_filter_proto_rawDescData = file_backend_api_filter_proto_rawDesc +) + +func file_backend_api_filter_proto_rawDescGZIP() []byte { + file_backend_api_filter_proto_rawDescOnce.Do(func() { + file_backend_api_filter_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_filter_proto_rawDescData) + }) + return file_backend_api_filter_proto_rawDescData +} + +var file_backend_api_filter_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_backend_api_filter_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_backend_api_filter_proto_goTypes = []interface{}{ + (Predicate_Op)(0), // 0: api.Predicate.Op + (*Predicate)(nil), // 1: api.Predicate + (*IntValues)(nil), // 2: api.IntValues + (*StringValues)(nil), // 3: api.StringValues + (*LongValues)(nil), // 4: api.LongValues + (*Filter)(nil), // 5: api.Filter + (*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp +} +var file_backend_api_filter_proto_depIdxs = []int32{ + 0, // 0: api.Predicate.op:type_name -> api.Predicate.Op + 6, // 1: api.Predicate.timestamp_value:type_name -> google.protobuf.Timestamp + 2, // 2: api.Predicate.int_values:type_name -> api.IntValues + 4, // 3: api.Predicate.long_values:type_name -> api.LongValues + 3, // 4: api.Predicate.string_values:type_name -> api.StringValues + 1, // 5: api.Filter.predicates:type_name -> api.Predicate + 5, // 6: api.DummyFilterService.GetFilter:input_type -> api.Filter + 5, // 7: api.DummyFilterService.GetFilter:output_type -> api.Filter + 7, // [7:8] is the sub-list for method output_type + 6, // [6:7] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_backend_api_filter_proto_init() } +func file_backend_api_filter_proto_init() { + if File_backend_api_filter_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_backend_api_filter_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Predicate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_filter_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IntValues); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_filter_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StringValues); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_filter_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LongValues); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_filter_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Filter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_backend_api_filter_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*Predicate_IntValue)(nil), + (*Predicate_LongValue)(nil), + (*Predicate_StringValue)(nil), + (*Predicate_TimestampValue)(nil), + (*Predicate_IntValues)(nil), + (*Predicate_LongValues)(nil), + (*Predicate_StringValues)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_filter_proto_rawDesc, + NumEnums: 1, + NumMessages: 5, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_backend_api_filter_proto_goTypes, + DependencyIndexes: file_backend_api_filter_proto_depIdxs, + EnumInfos: file_backend_api_filter_proto_enumTypes, + MessageInfos: file_backend_api_filter_proto_msgTypes, + }.Build() + File_backend_api_filter_proto = out.File + file_backend_api_filter_proto_rawDesc = nil + file_backend_api_filter_proto_goTypes = nil + file_backend_api_filter_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // DummyFilterServiceClient is the client API for DummyFilterService service. // @@ -515,10 +731,10 @@ type DummyFilterServiceClient interface { } type dummyFilterServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewDummyFilterServiceClient(cc *grpc.ClientConn) DummyFilterServiceClient { +func NewDummyFilterServiceClient(cc grpc.ClientConnInterface) DummyFilterServiceClient { return &dummyFilterServiceClient{cc} } @@ -540,7 +756,7 @@ type DummyFilterServiceServer interface { type UnimplementedDummyFilterServiceServer struct { } -func (*UnimplementedDummyFilterServiceServer) GetFilter(ctx context.Context, req *Filter) (*Filter, error) { +func (*UnimplementedDummyFilterServiceServer) GetFilter(context.Context, *Filter) (*Filter, error) { return nil, status.Errorf(codes.Unimplemented, "method GetFilter not implemented") } diff --git a/backend/api/go_client/healthz.pb.go b/backend/api/go_client/healthz.pb.go index 07309ae305..cdf4868f68 100644 --- a/backend/api/go_client/healthz.pb.go +++ b/backend/api/go_client/healthz.pb.go @@ -1,129 +1,221 @@ +// Copyright 2020 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: backend/api/healthz.proto package go_client import ( context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - empty "github.com/golang/protobuf/ptypes/empty" _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) type GetHealthzResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Returns if KFP in multi-user mode - MultiUser bool `protobuf:"varint,3,opt,name=multi_user,json=multiUser,proto3" json:"multi_user,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + MultiUser bool `protobuf:"varint,3,opt,name=multi_user,json=multiUser,proto3" json:"multi_user,omitempty"` } -func (m *GetHealthzResponse) Reset() { *m = GetHealthzResponse{} } -func (m *GetHealthzResponse) String() string { return proto.CompactTextString(m) } -func (*GetHealthzResponse) ProtoMessage() {} -func (*GetHealthzResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_499453e9dc64832b, []int{0} +func (x *GetHealthzResponse) Reset() { + *x = GetHealthzResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_healthz_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GetHealthzResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetHealthzResponse.Unmarshal(m, b) +func (x *GetHealthzResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetHealthzResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetHealthzResponse.Marshal(b, m, deterministic) + +func (*GetHealthzResponse) ProtoMessage() {} + +func (x *GetHealthzResponse) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_healthz_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *GetHealthzResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetHealthzResponse.Merge(m, src) + +// Deprecated: Use GetHealthzResponse.ProtoReflect.Descriptor instead. +func (*GetHealthzResponse) Descriptor() ([]byte, []int) { + return file_backend_api_healthz_proto_rawDescGZIP(), []int{0} } -func (m *GetHealthzResponse) XXX_Size() int { - return xxx_messageInfo_GetHealthzResponse.Size(m) + +func (x *GetHealthzResponse) GetMultiUser() bool { + if x != nil { + return x.MultiUser + } + return false } -func (m *GetHealthzResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetHealthzResponse.DiscardUnknown(m) + +var File_backend_api_healthz_proto protoreflect.FileDescriptor + +var file_backend_api_healthz_proto_rawDesc = []byte{ + 0x0a, 0x19, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, + 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x33, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x55, 0x73, 0x65, 0x72, 0x32, 0x6e, 0x0a, 0x0e, 0x48, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x7a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0a, 0x47, 0x65, 0x74, + 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, + 0x12, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x42, 0x85, 0x01, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x2f, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, + 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x92, + 0x41, 0x4d, 0x52, 0x1c, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x11, 0x12, + 0x0f, 0x0a, 0x0d, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x5a, 0x1f, 0x0a, 0x1d, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x13, 0x08, 0x02, + 0x1a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x02, 0x62, 0x0c, 0x0a, 0x0a, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x00, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } -var xxx_messageInfo_GetHealthzResponse proto.InternalMessageInfo +var ( + file_backend_api_healthz_proto_rawDescOnce sync.Once + file_backend_api_healthz_proto_rawDescData = file_backend_api_healthz_proto_rawDesc +) -func (m *GetHealthzResponse) GetMultiUser() bool { - if m != nil { - return m.MultiUser - } - return false +func file_backend_api_healthz_proto_rawDescGZIP() []byte { + file_backend_api_healthz_proto_rawDescOnce.Do(func() { + file_backend_api_healthz_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_healthz_proto_rawDescData) + }) + return file_backend_api_healthz_proto_rawDescData +} + +var file_backend_api_healthz_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_backend_api_healthz_proto_goTypes = []interface{}{ + (*GetHealthzResponse)(nil), // 0: api.GetHealthzResponse + (*emptypb.Empty)(nil), // 1: google.protobuf.Empty +} +var file_backend_api_healthz_proto_depIdxs = []int32{ + 1, // 0: api.HealthzService.GetHealthz:input_type -> google.protobuf.Empty + 0, // 1: api.HealthzService.GetHealthz:output_type -> api.GetHealthzResponse + 1, // [1:2] is the sub-list for method output_type + 0, // [0:1] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name } -func init() { - proto.RegisterType((*GetHealthzResponse)(nil), "api.GetHealthzResponse") -} - -func init() { proto.RegisterFile("backend/api/healthz.proto", fileDescriptor_499453e9dc64832b) } - -var fileDescriptor_499453e9dc64832b = []byte{ - // 337 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xc1, 0x4e, 0x32, 0x31, - 0x14, 0x85, 0x7f, 0x20, 0xe1, 0xc7, 0x2a, 0x1a, 0x6b, 0x14, 0x1d, 0x21, 0x12, 0x56, 0x2e, 0x64, - 0x1a, 0xe4, 0x09, 0x24, 0x31, 0xba, 0x71, 0x03, 0x71, 0x43, 0x4c, 0x48, 0x67, 0xb8, 0xcc, 0x34, - 0x0c, 0x6d, 0xd3, 0xde, 0x42, 0x64, 0x69, 0xe2, 0x0b, 0xe8, 0xa3, 0xf9, 0x0a, 0x3e, 0x88, 0xa1, - 0x03, 0x4a, 0xa2, 0xab, 0xa6, 0x3d, 0xf7, 0x9c, 0x7e, 0xf7, 0x90, 0xb3, 0x88, 0xc7, 0x53, 0x90, - 0x63, 0xc6, 0xb5, 0x60, 0x29, 0xf0, 0x0c, 0xd3, 0x65, 0xa8, 0x8d, 0x42, 0x45, 0x4b, 0x5c, 0x8b, - 0xa0, 0x9e, 0x28, 0x95, 0x64, 0xe0, 0x65, 0x2e, 0xa5, 0x42, 0x8e, 0x42, 0x49, 0x9b, 0x8f, 0x04, - 0xe7, 0x6b, 0xd5, 0xdf, 0x22, 0x37, 0x61, 0x30, 0xd3, 0xf8, 0xbc, 0x16, 0xaf, 0xfc, 0x11, 0xb7, - 0x13, 0x90, 0x6d, 0xbb, 0xe0, 0x49, 0x02, 0x86, 0x29, 0xed, 0xed, 0x7f, 0x44, 0xd5, 0xb6, 0x41, - 0xc0, 0x18, 0x65, 0x72, 0xa1, 0xd5, 0x25, 0xf4, 0x0e, 0xf0, 0x3e, 0x47, 0xeb, 0x83, 0xd5, 0x4a, - 0x5a, 0xa0, 0x0d, 0x42, 0x66, 0x2e, 0x43, 0x31, 0x72, 0x16, 0xcc, 0x69, 0xa9, 0x59, 0xb8, 0xac, - 0xf4, 0x77, 0xfc, 0xcb, 0xa3, 0x05, 0x73, 0x2d, 0xc9, 0xfe, 0xda, 0x31, 0x00, 0x33, 0x17, 0x31, - 0xd0, 0x27, 0x42, 0x7e, 0x62, 0xe8, 0x49, 0x98, 0x93, 0x87, 0x1b, 0xf2, 0xf0, 0x76, 0x45, 0x1e, - 0xd4, 0x42, 0xae, 0x45, 0xf8, 0xfb, 0xbf, 0x56, 0xe3, 0xe5, 0xe3, 0xf3, 0xbd, 0x58, 0xa3, 0xc7, - 0x2b, 0x3e, 0xcb, 0xe6, 0x9d, 0x08, 0x90, 0x77, 0x36, 0x8d, 0xf5, 0x5e, 0x0b, 0x6f, 0x37, 0x0f, - 0xfd, 0x3a, 0xf9, 0x3f, 0x86, 0x09, 0x77, 0x19, 0xd2, 0x43, 0x7a, 0x40, 0xaa, 0xc1, 0xae, 0x8f, - 0x1b, 0x20, 0x47, 0x67, 0x87, 0x17, 0xa4, 0x41, 0xca, 0x3d, 0xe0, 0x06, 0x0c, 0x3d, 0xaa, 0x14, - 0x83, 0x2a, 0x77, 0x98, 0x2a, 0x23, 0x96, 0xbe, 0x87, 0x66, 0x31, 0xda, 0x23, 0xe4, 0x7b, 0xe0, - 0xdf, 0xb0, 0x9b, 0x08, 0x4c, 0x5d, 0x14, 0xc6, 0x6a, 0xc6, 0xa6, 0x2e, 0x82, 0x49, 0xa6, 0x16, - 0x4c, 0x0b, 0x0d, 0x99, 0x90, 0x60, 0xd9, 0x76, 0x5d, 0x89, 0x1a, 0xc5, 0x99, 0x00, 0x89, 0x51, - 0xd9, 0xef, 0xd3, 0xfd, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x8a, 0x04, 0x2d, 0x10, 0xd7, 0x01, 0x00, - 0x00, +func init() { file_backend_api_healthz_proto_init() } +func file_backend_api_healthz_proto_init() { + if File_backend_api_healthz_proto != nil { + return + } + file_backend_api_error_proto_init() + if !protoimpl.UnsafeEnabled { + file_backend_api_healthz_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetHealthzResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_healthz_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_backend_api_healthz_proto_goTypes, + DependencyIndexes: file_backend_api_healthz_proto_depIdxs, + MessageInfos: file_backend_api_healthz_proto_msgTypes, + }.Build() + File_backend_api_healthz_proto = out.File + file_backend_api_healthz_proto_rawDesc = nil + file_backend_api_healthz_proto_goTypes = nil + file_backend_api_healthz_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // HealthzServiceClient is the client API for HealthzService service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type HealthzServiceClient interface { // Get healthz data. - GetHealthz(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetHealthzResponse, error) + GetHealthz(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*GetHealthzResponse, error) } type healthzServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewHealthzServiceClient(cc *grpc.ClientConn) HealthzServiceClient { +func NewHealthzServiceClient(cc grpc.ClientConnInterface) HealthzServiceClient { return &healthzServiceClient{cc} } -func (c *healthzServiceClient) GetHealthz(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetHealthzResponse, error) { +func (c *healthzServiceClient) GetHealthz(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*GetHealthzResponse, error) { out := new(GetHealthzResponse) err := c.cc.Invoke(ctx, "/api.HealthzService/GetHealthz", in, out, opts...) if err != nil { @@ -135,14 +227,14 @@ func (c *healthzServiceClient) GetHealthz(ctx context.Context, in *empty.Empty, // HealthzServiceServer is the server API for HealthzService service. type HealthzServiceServer interface { // Get healthz data. - GetHealthz(context.Context, *empty.Empty) (*GetHealthzResponse, error) + GetHealthz(context.Context, *emptypb.Empty) (*GetHealthzResponse, error) } // UnimplementedHealthzServiceServer can be embedded to have forward compatible implementations. type UnimplementedHealthzServiceServer struct { } -func (*UnimplementedHealthzServiceServer) GetHealthz(ctx context.Context, req *empty.Empty) (*GetHealthzResponse, error) { +func (*UnimplementedHealthzServiceServer) GetHealthz(context.Context, *emptypb.Empty) (*GetHealthzResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetHealthz not implemented") } @@ -151,7 +243,7 @@ func RegisterHealthzServiceServer(s *grpc.Server, srv HealthzServiceServer) { } func _HealthzService_GetHealthz_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) + in := new(emptypb.Empty) if err := dec(in); err != nil { return nil, err } @@ -163,7 +255,7 @@ func _HealthzService_GetHealthz_Handler(srv interface{}, ctx context.Context, de FullMethod: "/api.HealthzService/GetHealthz", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(HealthzServiceServer).GetHealthz(ctx, req.(*empty.Empty)) + return srv.(HealthzServiceServer).GetHealthz(ctx, req.(*emptypb.Empty)) } return interceptor(ctx, in, info, handler) } diff --git a/backend/api/go_client/healthz.pb.gw.go b/backend/api/go_client/healthz.pb.gw.go index 5b9fcb28ef..26c9823fae 100644 --- a/backend/api/go_client/healthz.pb.gw.go +++ b/backend/api/go_client/healthz.pb.gw.go @@ -14,13 +14,13 @@ import ( "net/http" "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/emptypb" ) var _ codes.Code @@ -30,7 +30,7 @@ var _ = runtime.String var _ = utilities.NewDoubleArray func request_HealthzService_GetHealthz_0(ctx context.Context, marshaler runtime.Marshaler, client HealthzServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := client.GetHealthz(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) diff --git a/backend/api/go_client/job.pb.go b/backend/api/go_client/job.pb.go index 1912b61a36..7158c54867 100644 --- a/backend/api/go_client/job.pb.go +++ b/backend/api/go_client/job.pb.go @@ -1,32 +1,46 @@ +// Copyright 2018 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: backend/api/job.proto package go_client import ( context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - empty "github.com/golang/protobuf/ptypes/empty" - timestamp "github.com/golang/protobuf/ptypes/timestamp" _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) // Required input. type Job_Mode int32 @@ -38,107 +52,148 @@ const ( Job_DISABLED Job_Mode = 2 ) -var Job_Mode_name = map[int32]string{ - 0: "UNKNOWN_MODE", - 1: "ENABLED", - 2: "DISABLED", -} +// Enum value maps for Job_Mode. +var ( + Job_Mode_name = map[int32]string{ + 0: "UNKNOWN_MODE", + 1: "ENABLED", + 2: "DISABLED", + } + Job_Mode_value = map[string]int32{ + "UNKNOWN_MODE": 0, + "ENABLED": 1, + "DISABLED": 2, + } +) -var Job_Mode_value = map[string]int32{ - "UNKNOWN_MODE": 0, - "ENABLED": 1, - "DISABLED": 2, +func (x Job_Mode) Enum() *Job_Mode { + p := new(Job_Mode) + *p = x + return p } func (x Job_Mode) String() string { - return proto.EnumName(Job_Mode_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (Job_Mode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_03bbe6c301716cc7, []int{10, 0} +func (Job_Mode) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_job_proto_enumTypes[0].Descriptor() } -type CreateJobRequest struct { - // The job to be created - Job *Job `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (Job_Mode) Type() protoreflect.EnumType { + return &file_backend_api_job_proto_enumTypes[0] } -func (m *CreateJobRequest) Reset() { *m = CreateJobRequest{} } -func (m *CreateJobRequest) String() string { return proto.CompactTextString(m) } -func (*CreateJobRequest) ProtoMessage() {} -func (*CreateJobRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_03bbe6c301716cc7, []int{0} +func (x Job_Mode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (m *CreateJobRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CreateJobRequest.Unmarshal(m, b) +// Deprecated: Use Job_Mode.Descriptor instead. +func (Job_Mode) EnumDescriptor() ([]byte, []int) { + return file_backend_api_job_proto_rawDescGZIP(), []int{10, 0} } -func (m *CreateJobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CreateJobRequest.Marshal(b, m, deterministic) + +type CreateJobRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The job to be created + Job *Job `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"` } -func (m *CreateJobRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateJobRequest.Merge(m, src) + +func (x *CreateJobRequest) Reset() { + *x = CreateJobRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_job_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *CreateJobRequest) XXX_Size() int { - return xxx_messageInfo_CreateJobRequest.Size(m) + +func (x *CreateJobRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateJobRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateJobRequest.DiscardUnknown(m) + +func (*CreateJobRequest) ProtoMessage() {} + +func (x *CreateJobRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_job_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_CreateJobRequest proto.InternalMessageInfo +// Deprecated: Use CreateJobRequest.ProtoReflect.Descriptor instead. +func (*CreateJobRequest) Descriptor() ([]byte, []int) { + return file_backend_api_job_proto_rawDescGZIP(), []int{0} +} -func (m *CreateJobRequest) GetJob() *Job { - if m != nil { - return m.Job +func (x *CreateJobRequest) GetJob() *Job { + if x != nil { + return x.Job } return nil } type GetJobRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the job to be retrieved - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *GetJobRequest) Reset() { *m = GetJobRequest{} } -func (m *GetJobRequest) String() string { return proto.CompactTextString(m) } -func (*GetJobRequest) ProtoMessage() {} -func (*GetJobRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_03bbe6c301716cc7, []int{1} +func (x *GetJobRequest) Reset() { + *x = GetJobRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_job_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GetJobRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetJobRequest.Unmarshal(m, b) -} -func (m *GetJobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetJobRequest.Marshal(b, m, deterministic) -} -func (m *GetJobRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetJobRequest.Merge(m, src) +func (x *GetJobRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetJobRequest) XXX_Size() int { - return xxx_messageInfo_GetJobRequest.Size(m) -} -func (m *GetJobRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetJobRequest.DiscardUnknown(m) + +func (*GetJobRequest) ProtoMessage() {} + +func (x *GetJobRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_job_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_GetJobRequest proto.InternalMessageInfo +// Deprecated: Use GetJobRequest.ProtoReflect.Descriptor instead. +func (*GetJobRequest) Descriptor() ([]byte, []int) { + return file_backend_api_job_proto_rawDescGZIP(), []int{1} +} -func (m *GetJobRequest) GetId() string { - if m != nil { - return m.Id +func (x *GetJobRequest) GetId() string { + if x != nil { + return x.Id } return "" } type ListJobsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // A page token to request the next page of results. The token is acquried // from the nextPageToken field of the response from the previous // ListJobs call or can be omitted when fetching the first page. @@ -155,423 +210,466 @@ type ListJobsRequest struct { // resource_reference_key.type=EXPERIMENT&resource_reference_key.id=123 ResourceReferenceKey *ResourceKey `protobuf:"bytes,4,opt,name=resource_reference_key,json=resourceReferenceKey,proto3" json:"resource_reference_key,omitempty"` // A url-encoded, JSON-serialized Filter protocol buffer (see - // [filter.proto](https://github.com/kubeflow/pipelines/ - // blob/master/backend/api/filter.proto)). - Filter string `protobuf:"bytes,5,opt,name=filter,proto3" json:"filter,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). + Filter string `protobuf:"bytes,5,opt,name=filter,proto3" json:"filter,omitempty"` } -func (m *ListJobsRequest) Reset() { *m = ListJobsRequest{} } -func (m *ListJobsRequest) String() string { return proto.CompactTextString(m) } -func (*ListJobsRequest) ProtoMessage() {} -func (*ListJobsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_03bbe6c301716cc7, []int{2} +func (x *ListJobsRequest) Reset() { + *x = ListJobsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_job_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ListJobsRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListJobsRequest.Unmarshal(m, b) +func (x *ListJobsRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListJobsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListJobsRequest.Marshal(b, m, deterministic) -} -func (m *ListJobsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListJobsRequest.Merge(m, src) -} -func (m *ListJobsRequest) XXX_Size() int { - return xxx_messageInfo_ListJobsRequest.Size(m) -} -func (m *ListJobsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListJobsRequest.DiscardUnknown(m) + +func (*ListJobsRequest) ProtoMessage() {} + +func (x *ListJobsRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_job_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ListJobsRequest proto.InternalMessageInfo +// Deprecated: Use ListJobsRequest.ProtoReflect.Descriptor instead. +func (*ListJobsRequest) Descriptor() ([]byte, []int) { + return file_backend_api_job_proto_rawDescGZIP(), []int{2} +} -func (m *ListJobsRequest) GetPageToken() string { - if m != nil { - return m.PageToken +func (x *ListJobsRequest) GetPageToken() string { + if x != nil { + return x.PageToken } return "" } -func (m *ListJobsRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize +func (x *ListJobsRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize } return 0 } -func (m *ListJobsRequest) GetSortBy() string { - if m != nil { - return m.SortBy +func (x *ListJobsRequest) GetSortBy() string { + if x != nil { + return x.SortBy } return "" } -func (m *ListJobsRequest) GetResourceReferenceKey() *ResourceKey { - if m != nil { - return m.ResourceReferenceKey +func (x *ListJobsRequest) GetResourceReferenceKey() *ResourceKey { + if x != nil { + return x.ResourceReferenceKey } return nil } -func (m *ListJobsRequest) GetFilter() string { - if m != nil { - return m.Filter +func (x *ListJobsRequest) GetFilter() string { + if x != nil { + return x.Filter } return "" } type ListJobsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // A list of jobs returned. Jobs []*Job `protobuf:"bytes,1,rep,name=jobs,proto3" json:"jobs,omitempty"` // The total number of jobs for the given query. TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` // The token to list the next page of jobs. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` } -func (m *ListJobsResponse) Reset() { *m = ListJobsResponse{} } -func (m *ListJobsResponse) String() string { return proto.CompactTextString(m) } -func (*ListJobsResponse) ProtoMessage() {} -func (*ListJobsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_03bbe6c301716cc7, []int{3} +func (x *ListJobsResponse) Reset() { + *x = ListJobsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_job_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ListJobsResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListJobsResponse.Unmarshal(m, b) -} -func (m *ListJobsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListJobsResponse.Marshal(b, m, deterministic) +func (x *ListJobsResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListJobsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListJobsResponse.Merge(m, src) -} -func (m *ListJobsResponse) XXX_Size() int { - return xxx_messageInfo_ListJobsResponse.Size(m) -} -func (m *ListJobsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListJobsResponse.DiscardUnknown(m) + +func (*ListJobsResponse) ProtoMessage() {} + +func (x *ListJobsResponse) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_job_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ListJobsResponse proto.InternalMessageInfo +// Deprecated: Use ListJobsResponse.ProtoReflect.Descriptor instead. +func (*ListJobsResponse) Descriptor() ([]byte, []int) { + return file_backend_api_job_proto_rawDescGZIP(), []int{3} +} -func (m *ListJobsResponse) GetJobs() []*Job { - if m != nil { - return m.Jobs +func (x *ListJobsResponse) GetJobs() []*Job { + if x != nil { + return x.Jobs } return nil } -func (m *ListJobsResponse) GetTotalSize() int32 { - if m != nil { - return m.TotalSize +func (x *ListJobsResponse) GetTotalSize() int32 { + if x != nil { + return x.TotalSize } return 0 } -func (m *ListJobsResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken +func (x *ListJobsResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken } return "" } type DeleteJobRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the job to be deleted - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *DeleteJobRequest) Reset() { *m = DeleteJobRequest{} } -func (m *DeleteJobRequest) String() string { return proto.CompactTextString(m) } -func (*DeleteJobRequest) ProtoMessage() {} -func (*DeleteJobRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_03bbe6c301716cc7, []int{4} +func (x *DeleteJobRequest) Reset() { + *x = DeleteJobRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_job_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *DeleteJobRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteJobRequest.Unmarshal(m, b) -} -func (m *DeleteJobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteJobRequest.Marshal(b, m, deterministic) -} -func (m *DeleteJobRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteJobRequest.Merge(m, src) +func (x *DeleteJobRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *DeleteJobRequest) XXX_Size() int { - return xxx_messageInfo_DeleteJobRequest.Size(m) -} -func (m *DeleteJobRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteJobRequest.DiscardUnknown(m) + +func (*DeleteJobRequest) ProtoMessage() {} + +func (x *DeleteJobRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_job_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_DeleteJobRequest proto.InternalMessageInfo +// Deprecated: Use DeleteJobRequest.ProtoReflect.Descriptor instead. +func (*DeleteJobRequest) Descriptor() ([]byte, []int) { + return file_backend_api_job_proto_rawDescGZIP(), []int{4} +} -func (m *DeleteJobRequest) GetId() string { - if m != nil { - return m.Id +func (x *DeleteJobRequest) GetId() string { + if x != nil { + return x.Id } return "" } type EnableJobRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the job to be enabled - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *EnableJobRequest) Reset() { *m = EnableJobRequest{} } -func (m *EnableJobRequest) String() string { return proto.CompactTextString(m) } -func (*EnableJobRequest) ProtoMessage() {} -func (*EnableJobRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_03bbe6c301716cc7, []int{5} +func (x *EnableJobRequest) Reset() { + *x = EnableJobRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_job_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *EnableJobRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_EnableJobRequest.Unmarshal(m, b) -} -func (m *EnableJobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_EnableJobRequest.Marshal(b, m, deterministic) -} -func (m *EnableJobRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_EnableJobRequest.Merge(m, src) +func (x *EnableJobRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *EnableJobRequest) XXX_Size() int { - return xxx_messageInfo_EnableJobRequest.Size(m) -} -func (m *EnableJobRequest) XXX_DiscardUnknown() { - xxx_messageInfo_EnableJobRequest.DiscardUnknown(m) + +func (*EnableJobRequest) ProtoMessage() {} + +func (x *EnableJobRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_job_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_EnableJobRequest proto.InternalMessageInfo +// Deprecated: Use EnableJobRequest.ProtoReflect.Descriptor instead. +func (*EnableJobRequest) Descriptor() ([]byte, []int) { + return file_backend_api_job_proto_rawDescGZIP(), []int{5} +} -func (m *EnableJobRequest) GetId() string { - if m != nil { - return m.Id +func (x *EnableJobRequest) GetId() string { + if x != nil { + return x.Id } return "" } type DisableJobRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the job to be disabled - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *DisableJobRequest) Reset() { *m = DisableJobRequest{} } -func (m *DisableJobRequest) String() string { return proto.CompactTextString(m) } -func (*DisableJobRequest) ProtoMessage() {} -func (*DisableJobRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_03bbe6c301716cc7, []int{6} +func (x *DisableJobRequest) Reset() { + *x = DisableJobRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_job_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *DisableJobRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DisableJobRequest.Unmarshal(m, b) -} -func (m *DisableJobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DisableJobRequest.Marshal(b, m, deterministic) -} -func (m *DisableJobRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DisableJobRequest.Merge(m, src) +func (x *DisableJobRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *DisableJobRequest) XXX_Size() int { - return xxx_messageInfo_DisableJobRequest.Size(m) -} -func (m *DisableJobRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DisableJobRequest.DiscardUnknown(m) + +func (*DisableJobRequest) ProtoMessage() {} + +func (x *DisableJobRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_job_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_DisableJobRequest proto.InternalMessageInfo +// Deprecated: Use DisableJobRequest.ProtoReflect.Descriptor instead. +func (*DisableJobRequest) Descriptor() ([]byte, []int) { + return file_backend_api_job_proto_rawDescGZIP(), []int{6} +} -func (m *DisableJobRequest) GetId() string { - if m != nil { - return m.Id +func (x *DisableJobRequest) GetId() string { + if x != nil { + return x.Id } return "" } // CronSchedule allow scheduling the job with unix-like cron type CronSchedule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The start time of the cron job - StartTime *timestamp.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + StartTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` // The end time of the cron job - EndTime *timestamp.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` + EndTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` // The cron string. For details how to compose a cron, visit // ttps://en.wikipedia.org/wiki/Cron - Cron string `protobuf:"bytes,3,opt,name=cron,proto3" json:"cron,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Cron string `protobuf:"bytes,3,opt,name=cron,proto3" json:"cron,omitempty"` } -func (m *CronSchedule) Reset() { *m = CronSchedule{} } -func (m *CronSchedule) String() string { return proto.CompactTextString(m) } -func (*CronSchedule) ProtoMessage() {} -func (*CronSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_03bbe6c301716cc7, []int{7} +func (x *CronSchedule) Reset() { + *x = CronSchedule{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_job_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *CronSchedule) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CronSchedule.Unmarshal(m, b) -} -func (m *CronSchedule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CronSchedule.Marshal(b, m, deterministic) +func (x *CronSchedule) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CronSchedule) XXX_Merge(src proto.Message) { - xxx_messageInfo_CronSchedule.Merge(m, src) -} -func (m *CronSchedule) XXX_Size() int { - return xxx_messageInfo_CronSchedule.Size(m) -} -func (m *CronSchedule) XXX_DiscardUnknown() { - xxx_messageInfo_CronSchedule.DiscardUnknown(m) + +func (*CronSchedule) ProtoMessage() {} + +func (x *CronSchedule) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_job_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_CronSchedule proto.InternalMessageInfo +// Deprecated: Use CronSchedule.ProtoReflect.Descriptor instead. +func (*CronSchedule) Descriptor() ([]byte, []int) { + return file_backend_api_job_proto_rawDescGZIP(), []int{7} +} -func (m *CronSchedule) GetStartTime() *timestamp.Timestamp { - if m != nil { - return m.StartTime +func (x *CronSchedule) GetStartTime() *timestamppb.Timestamp { + if x != nil { + return x.StartTime } return nil } -func (m *CronSchedule) GetEndTime() *timestamp.Timestamp { - if m != nil { - return m.EndTime +func (x *CronSchedule) GetEndTime() *timestamppb.Timestamp { + if x != nil { + return x.EndTime } return nil } -func (m *CronSchedule) GetCron() string { - if m != nil { - return m.Cron +func (x *CronSchedule) GetCron() string { + if x != nil { + return x.Cron } return "" } // PeriodicSchedule allow scheduling the job periodically with certain interval type PeriodicSchedule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The start time of the periodic job - StartTime *timestamp.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + StartTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` // The end time of the periodic job - EndTime *timestamp.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` + EndTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` // The time interval between the starting time of consecutive jobs - IntervalSecond int64 `protobuf:"varint,3,opt,name=interval_second,json=intervalSecond,proto3" json:"interval_second,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + IntervalSecond int64 `protobuf:"varint,3,opt,name=interval_second,json=intervalSecond,proto3" json:"interval_second,omitempty"` } -func (m *PeriodicSchedule) Reset() { *m = PeriodicSchedule{} } -func (m *PeriodicSchedule) String() string { return proto.CompactTextString(m) } -func (*PeriodicSchedule) ProtoMessage() {} -func (*PeriodicSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_03bbe6c301716cc7, []int{8} +func (x *PeriodicSchedule) Reset() { + *x = PeriodicSchedule{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_job_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PeriodicSchedule) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PeriodicSchedule.Unmarshal(m, b) -} -func (m *PeriodicSchedule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PeriodicSchedule.Marshal(b, m, deterministic) -} -func (m *PeriodicSchedule) XXX_Merge(src proto.Message) { - xxx_messageInfo_PeriodicSchedule.Merge(m, src) -} -func (m *PeriodicSchedule) XXX_Size() int { - return xxx_messageInfo_PeriodicSchedule.Size(m) +func (x *PeriodicSchedule) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PeriodicSchedule) XXX_DiscardUnknown() { - xxx_messageInfo_PeriodicSchedule.DiscardUnknown(m) + +func (*PeriodicSchedule) ProtoMessage() {} + +func (x *PeriodicSchedule) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_job_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PeriodicSchedule proto.InternalMessageInfo +// Deprecated: Use PeriodicSchedule.ProtoReflect.Descriptor instead. +func (*PeriodicSchedule) Descriptor() ([]byte, []int) { + return file_backend_api_job_proto_rawDescGZIP(), []int{8} +} -func (m *PeriodicSchedule) GetStartTime() *timestamp.Timestamp { - if m != nil { - return m.StartTime +func (x *PeriodicSchedule) GetStartTime() *timestamppb.Timestamp { + if x != nil { + return x.StartTime } return nil } -func (m *PeriodicSchedule) GetEndTime() *timestamp.Timestamp { - if m != nil { - return m.EndTime +func (x *PeriodicSchedule) GetEndTime() *timestamppb.Timestamp { + if x != nil { + return x.EndTime } return nil } -func (m *PeriodicSchedule) GetIntervalSecond() int64 { - if m != nil { - return m.IntervalSecond +func (x *PeriodicSchedule) GetIntervalSecond() int64 { + if x != nil { + return x.IntervalSecond } return 0 } // Trigger defines what starts a pipeline run. type Trigger struct { - // Types that are valid to be assigned to Trigger: + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Trigger: // *Trigger_CronSchedule // *Trigger_PeriodicSchedule - Trigger isTrigger_Trigger `protobuf_oneof:"trigger"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Trigger isTrigger_Trigger `protobuf_oneof:"trigger"` } -func (m *Trigger) Reset() { *m = Trigger{} } -func (m *Trigger) String() string { return proto.CompactTextString(m) } -func (*Trigger) ProtoMessage() {} -func (*Trigger) Descriptor() ([]byte, []int) { - return fileDescriptor_03bbe6c301716cc7, []int{9} +func (x *Trigger) Reset() { + *x = Trigger{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_job_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Trigger) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Trigger.Unmarshal(m, b) -} -func (m *Trigger) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Trigger.Marshal(b, m, deterministic) -} -func (m *Trigger) XXX_Merge(src proto.Message) { - xxx_messageInfo_Trigger.Merge(m, src) -} -func (m *Trigger) XXX_Size() int { - return xxx_messageInfo_Trigger.Size(m) -} -func (m *Trigger) XXX_DiscardUnknown() { - xxx_messageInfo_Trigger.DiscardUnknown(m) +func (x *Trigger) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_Trigger proto.InternalMessageInfo +func (*Trigger) ProtoMessage() {} -type isTrigger_Trigger interface { - isTrigger_Trigger() -} - -type Trigger_CronSchedule struct { - CronSchedule *CronSchedule `protobuf:"bytes,1,opt,name=cron_schedule,json=cronSchedule,proto3,oneof"` +func (x *Trigger) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_job_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type Trigger_PeriodicSchedule struct { - PeriodicSchedule *PeriodicSchedule `protobuf:"bytes,2,opt,name=periodic_schedule,json=periodicSchedule,proto3,oneof"` +// Deprecated: Use Trigger.ProtoReflect.Descriptor instead. +func (*Trigger) Descriptor() ([]byte, []int) { + return file_backend_api_job_proto_rawDescGZIP(), []int{9} } -func (*Trigger_CronSchedule) isTrigger_Trigger() {} - -func (*Trigger_PeriodicSchedule) isTrigger_Trigger() {} - func (m *Trigger) GetTrigger() isTrigger_Trigger { if m != nil { return m.Trigger @@ -579,29 +677,41 @@ func (m *Trigger) GetTrigger() isTrigger_Trigger { return nil } -func (m *Trigger) GetCronSchedule() *CronSchedule { - if x, ok := m.GetTrigger().(*Trigger_CronSchedule); ok { +func (x *Trigger) GetCronSchedule() *CronSchedule { + if x, ok := x.GetTrigger().(*Trigger_CronSchedule); ok { return x.CronSchedule } return nil } -func (m *Trigger) GetPeriodicSchedule() *PeriodicSchedule { - if x, ok := m.GetTrigger().(*Trigger_PeriodicSchedule); ok { +func (x *Trigger) GetPeriodicSchedule() *PeriodicSchedule { + if x, ok := x.GetTrigger().(*Trigger_PeriodicSchedule); ok { return x.PeriodicSchedule } return nil } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*Trigger) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*Trigger_CronSchedule)(nil), - (*Trigger_PeriodicSchedule)(nil), - } +type isTrigger_Trigger interface { + isTrigger_Trigger() } +type Trigger_CronSchedule struct { + CronSchedule *CronSchedule `protobuf:"bytes,1,opt,name=cron_schedule,json=cronSchedule,proto3,oneof"` +} + +type Trigger_PeriodicSchedule struct { + PeriodicSchedule *PeriodicSchedule `protobuf:"bytes,2,opt,name=periodic_schedule,json=periodicSchedule,proto3,oneof"` +} + +func (*Trigger_CronSchedule) isTrigger_Trigger() {} + +func (*Trigger_PeriodicSchedule) isTrigger_Trigger() {} + type Job struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Output. Unique run ID. Generated by API server. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Required input field. Job name provided by user. Not unique. @@ -624,9 +734,9 @@ type Job struct { Trigger *Trigger `protobuf:"bytes,7,opt,name=trigger,proto3" json:"trigger,omitempty"` Mode Job_Mode `protobuf:"varint,8,opt,name=mode,proto3,enum=api.Job_Mode" json:"mode,omitempty"` // Output. The time this job is created. - CreatedAt *timestamp.Timestamp `protobuf:"bytes,9,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Output. The last time this job is updated. - UpdatedAt *timestamp.Timestamp `protobuf:"bytes,10,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // Output. The status of the job. // One of [Enable, Disable, Error] Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` @@ -639,242 +749,555 @@ type Job struct { // Optional input field. Whether the job should catch up if behind schedule. // If true, the job will only schedule the latest interval if behind schedule. // If false, the job will catch up on each past interval. - NoCatchup bool `protobuf:"varint,17,opt,name=no_catchup,json=noCatchup,proto3" json:"no_catchup,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NoCatchup bool `protobuf:"varint,17,opt,name=no_catchup,json=noCatchup,proto3" json:"no_catchup,omitempty"` } -func (m *Job) Reset() { *m = Job{} } -func (m *Job) String() string { return proto.CompactTextString(m) } -func (*Job) ProtoMessage() {} -func (*Job) Descriptor() ([]byte, []int) { - return fileDescriptor_03bbe6c301716cc7, []int{10} +func (x *Job) Reset() { + *x = Job{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_job_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Job) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Job.Unmarshal(m, b) -} -func (m *Job) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Job.Marshal(b, m, deterministic) +func (x *Job) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Job) XXX_Merge(src proto.Message) { - xxx_messageInfo_Job.Merge(m, src) -} -func (m *Job) XXX_Size() int { - return xxx_messageInfo_Job.Size(m) -} -func (m *Job) XXX_DiscardUnknown() { - xxx_messageInfo_Job.DiscardUnknown(m) + +func (*Job) ProtoMessage() {} + +func (x *Job) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_job_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Job proto.InternalMessageInfo +// Deprecated: Use Job.ProtoReflect.Descriptor instead. +func (*Job) Descriptor() ([]byte, []int) { + return file_backend_api_job_proto_rawDescGZIP(), []int{10} +} -func (m *Job) GetId() string { - if m != nil { - return m.Id +func (x *Job) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *Job) GetName() string { - if m != nil { - return m.Name +func (x *Job) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *Job) GetDescription() string { - if m != nil { - return m.Description +func (x *Job) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *Job) GetPipelineSpec() *PipelineSpec { - if m != nil { - return m.PipelineSpec +func (x *Job) GetPipelineSpec() *PipelineSpec { + if x != nil { + return x.PipelineSpec } return nil } -func (m *Job) GetResourceReferences() []*ResourceReference { - if m != nil { - return m.ResourceReferences +func (x *Job) GetResourceReferences() []*ResourceReference { + if x != nil { + return x.ResourceReferences } return nil } -func (m *Job) GetServiceAccount() string { - if m != nil { - return m.ServiceAccount +func (x *Job) GetServiceAccount() string { + if x != nil { + return x.ServiceAccount } return "" } -func (m *Job) GetMaxConcurrency() int64 { - if m != nil { - return m.MaxConcurrency +func (x *Job) GetMaxConcurrency() int64 { + if x != nil { + return x.MaxConcurrency } return 0 } -func (m *Job) GetTrigger() *Trigger { - if m != nil { - return m.Trigger +func (x *Job) GetTrigger() *Trigger { + if x != nil { + return x.Trigger } return nil } -func (m *Job) GetMode() Job_Mode { - if m != nil { - return m.Mode +func (x *Job) GetMode() Job_Mode { + if x != nil { + return x.Mode } return Job_UNKNOWN_MODE } -func (m *Job) GetCreatedAt() *timestamp.Timestamp { - if m != nil { - return m.CreatedAt +func (x *Job) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt } return nil } -func (m *Job) GetUpdatedAt() *timestamp.Timestamp { - if m != nil { - return m.UpdatedAt +func (x *Job) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt } return nil } -func (m *Job) GetStatus() string { - if m != nil { - return m.Status +func (x *Job) GetStatus() string { + if x != nil { + return x.Status } return "" } -func (m *Job) GetError() string { - if m != nil { - return m.Error +func (x *Job) GetError() string { + if x != nil { + return x.Error } return "" } -func (m *Job) GetEnabled() bool { - if m != nil { - return m.Enabled +func (x *Job) GetEnabled() bool { + if x != nil { + return x.Enabled } return false } -func (m *Job) GetNoCatchup() bool { - if m != nil { - return m.NoCatchup +func (x *Job) GetNoCatchup() bool { + if x != nil { + return x.NoCatchup } return false } -func init() { - proto.RegisterEnum("api.Job_Mode", Job_Mode_name, Job_Mode_value) - proto.RegisterType((*CreateJobRequest)(nil), "api.CreateJobRequest") - proto.RegisterType((*GetJobRequest)(nil), "api.GetJobRequest") - proto.RegisterType((*ListJobsRequest)(nil), "api.ListJobsRequest") - proto.RegisterType((*ListJobsResponse)(nil), "api.ListJobsResponse") - proto.RegisterType((*DeleteJobRequest)(nil), "api.DeleteJobRequest") - proto.RegisterType((*EnableJobRequest)(nil), "api.EnableJobRequest") - proto.RegisterType((*DisableJobRequest)(nil), "api.DisableJobRequest") - proto.RegisterType((*CronSchedule)(nil), "api.CronSchedule") - proto.RegisterType((*PeriodicSchedule)(nil), "api.PeriodicSchedule") - proto.RegisterType((*Trigger)(nil), "api.Trigger") - proto.RegisterType((*Job)(nil), "api.Job") -} - -func init() { proto.RegisterFile("backend/api/job.proto", fileDescriptor_03bbe6c301716cc7) } - -var fileDescriptor_03bbe6c301716cc7 = []byte{ - // 1147 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0xdd, 0x6e, 0x1b, 0xc5, - 0x17, 0x8f, 0x3f, 0x12, 0xdb, 0x27, 0x76, 0xe2, 0x4c, 0x93, 0x74, 0xff, 0x6e, 0xfb, 0x8f, 0xbb, - 0xa0, 0x36, 0x42, 0xd4, 0x56, 0x5b, 0x81, 0x80, 0xbb, 0x24, 0x0e, 0x2d, 0x6d, 0x93, 0x56, 0xeb, - 0x22, 0xa4, 0x72, 0xb1, 0x9a, 0xdd, 0x3d, 0x71, 0xa6, 0xb1, 0x77, 0x96, 0x99, 0xd9, 0xb6, 0x0e, - 0xe2, 0x06, 0x89, 0x17, 0x00, 0x5e, 0x80, 0x07, 0xe0, 0x35, 0x78, 0x01, 0x5e, 0x81, 0xb7, 0xe0, - 0x06, 0xcd, 0xec, 0xac, 0xe3, 0x8f, 0x86, 0x5c, 0x72, 0x65, 0x9f, 0xdf, 0xfc, 0xce, 0xcc, 0xf9, - 0x3e, 0x0b, 0x5b, 0x01, 0x0d, 0xcf, 0x30, 0x8e, 0xba, 0x34, 0x61, 0xdd, 0xd7, 0x3c, 0xe8, 0x24, - 0x82, 0x2b, 0x4e, 0x4a, 0x34, 0x61, 0xad, 0x9b, 0x03, 0xce, 0x07, 0x43, 0x34, 0x47, 0x34, 0x8e, - 0xb9, 0xa2, 0x8a, 0xf1, 0x58, 0x66, 0x94, 0xd6, 0x8e, 0x3d, 0x35, 0x52, 0x90, 0x9e, 0x74, 0x15, - 0x1b, 0xa1, 0x54, 0x74, 0x94, 0x58, 0xc2, 0x8d, 0x79, 0x02, 0x8e, 0x12, 0x35, 0xce, 0xb5, 0xa7, - 0xdf, 0x4d, 0x58, 0x82, 0x43, 0x16, 0xa3, 0x2f, 0x13, 0x0c, 0x2d, 0xe1, 0xc3, 0x69, 0x82, 0x40, - 0xc9, 0x53, 0x11, 0xa2, 0x2f, 0xf0, 0x04, 0x05, 0xc6, 0x21, 0x5a, 0xd6, 0xc7, 0xe6, 0x27, 0xbc, - 0x37, 0xc0, 0xf8, 0x9e, 0x7c, 0x4b, 0x07, 0x03, 0x14, 0x5d, 0x9e, 0x18, 0x33, 0xdf, 0x63, 0xf2, - 0xf5, 0xe9, 0x3b, 0x51, 0x08, 0x2e, 0xb2, 0x03, 0xb7, 0x03, 0xcd, 0x03, 0x81, 0x54, 0xe1, 0x13, - 0x1e, 0x78, 0xf8, 0x5d, 0x8a, 0x52, 0x91, 0x16, 0x94, 0x5e, 0xf3, 0xc0, 0x29, 0xb4, 0x0b, 0xbb, - 0xab, 0x0f, 0xaa, 0x1d, 0x9a, 0xb0, 0x8e, 0x3e, 0xd5, 0xa0, 0xbb, 0x03, 0x8d, 0x47, 0xa8, 0xa6, - 0xc8, 0x6b, 0x50, 0x64, 0x91, 0xe1, 0xd6, 0xbc, 0x22, 0x8b, 0xdc, 0x3f, 0x0a, 0xb0, 0xfe, 0x8c, - 0x49, 0x4d, 0x91, 0x39, 0xe7, 0x16, 0x40, 0x42, 0x07, 0xe8, 0x2b, 0x7e, 0x86, 0xb1, 0xe5, 0xd6, - 0x34, 0xf2, 0x52, 0x03, 0xe4, 0x06, 0x18, 0xc1, 0x97, 0xec, 0x1c, 0x9d, 0x62, 0xbb, 0xb0, 0xbb, - 0xec, 0x55, 0x35, 0xd0, 0x67, 0xe7, 0x48, 0xae, 0x43, 0x45, 0x72, 0xa1, 0xfc, 0x60, 0xec, 0x94, - 0x8c, 0xe2, 0x8a, 0x16, 0xf7, 0xc7, 0xe4, 0x4b, 0xd8, 0x5e, 0x0c, 0x8e, 0x7f, 0x86, 0x63, 0xa7, - 0x6c, 0x0c, 0x6f, 0x1a, 0xc3, 0x3d, 0x4b, 0x79, 0x8a, 0x63, 0x6f, 0x33, 0xe7, 0x7b, 0x39, 0xfd, - 0x29, 0x8e, 0xc9, 0x36, 0xac, 0x9c, 0xb0, 0xa1, 0x42, 0xe1, 0x2c, 0x67, 0xf7, 0x67, 0x92, 0xfb, - 0x16, 0x9a, 0x17, 0x7e, 0xc8, 0x84, 0xc7, 0x12, 0xc9, 0x4d, 0x28, 0xbf, 0xe6, 0x81, 0x74, 0x0a, - 0xed, 0xd2, 0x4c, 0x68, 0x0c, 0xaa, 0xdd, 0x54, 0x5c, 0xd1, 0x61, 0xe6, 0x48, 0xc9, 0x38, 0x52, - 0x33, 0x88, 0xf1, 0xe4, 0x0e, 0xac, 0xc7, 0xf8, 0x4e, 0xf9, 0x53, 0xa1, 0x28, 0x9a, 0x17, 0x1b, - 0x1a, 0x7e, 0x91, 0x87, 0xc3, 0x75, 0xa1, 0xd9, 0xc3, 0x21, 0xce, 0xa4, 0x64, 0x3e, 0xca, 0x2e, - 0x34, 0x0f, 0x63, 0x1a, 0x0c, 0xff, 0x8d, 0xf3, 0x01, 0x6c, 0xf4, 0x98, 0xbc, 0x82, 0xf4, 0x6b, - 0x01, 0xea, 0x07, 0x82, 0xc7, 0xfd, 0xf0, 0x14, 0xa3, 0x74, 0x88, 0xe4, 0x73, 0x00, 0xa9, 0xa8, - 0x50, 0xbe, 0x2e, 0x6a, 0x5b, 0x03, 0xad, 0x4e, 0x56, 0xd0, 0x9d, 0xbc, 0xa0, 0x3b, 0x2f, 0xf3, - 0x8a, 0xf7, 0x6a, 0x86, 0xad, 0x65, 0xf2, 0x09, 0x54, 0x31, 0x8e, 0x32, 0xc5, 0xe2, 0x95, 0x8a, - 0x15, 0x8c, 0x23, 0xa3, 0x46, 0xa0, 0x1c, 0x0a, 0x1e, 0xdb, 0xf4, 0x9a, 0xff, 0xee, 0xef, 0x05, - 0x68, 0xbe, 0x40, 0xc1, 0x78, 0xc4, 0xc2, 0xff, 0xd0, 0xb4, 0xbb, 0xb0, 0xce, 0x62, 0x85, 0xe2, - 0x8d, 0x4e, 0x2a, 0x86, 0x3c, 0x8e, 0x8c, 0x95, 0x25, 0x6f, 0x2d, 0x87, 0xfb, 0x06, 0xd5, 0x61, - 0xac, 0xbc, 0x14, 0x4c, 0x77, 0x21, 0xf9, 0x0c, 0x1a, 0xda, 0x07, 0x5f, 0x5a, 0xbb, 0xad, 0xa5, - 0x1b, 0xa6, 0x5a, 0xa6, 0x63, 0xfd, 0x78, 0xc9, 0xab, 0x87, 0xd3, 0xb1, 0xef, 0xc1, 0x46, 0x62, - 0x9d, 0xbe, 0xd0, 0xce, 0xcc, 0xdd, 0x32, 0xda, 0xf3, 0x21, 0x79, 0xbc, 0xe4, 0x35, 0x93, 0x39, - 0x6c, 0xbf, 0x06, 0x15, 0x95, 0x99, 0xe2, 0xfe, 0x5d, 0x86, 0xd2, 0x13, 0x1e, 0xcc, 0x67, 0x5d, - 0x87, 0x3c, 0xa6, 0x36, 0x14, 0x35, 0xcf, 0xfc, 0x27, 0x6d, 0x58, 0x8d, 0x50, 0x86, 0x82, 0x99, - 0x21, 0x62, 0xb3, 0x31, 0x0d, 0x91, 0x4f, 0xa1, 0x31, 0x33, 0xaf, 0x6c, 0xa3, 0x65, 0x8e, 0xbd, - 0xb0, 0x27, 0xfd, 0x04, 0x43, 0xaf, 0x9e, 0x4c, 0x49, 0xe4, 0x11, 0x5c, 0x5b, 0xec, 0x54, 0xe9, - 0x2c, 0x9b, 0x26, 0xda, 0x9e, 0x69, 0xd3, 0x49, 0x67, 0x7a, 0x64, 0xa1, 0x59, 0xa5, 0x4e, 0x87, - 0x44, 0xf1, 0x86, 0x85, 0xe8, 0xd3, 0x30, 0xe4, 0x69, 0xac, 0x1c, 0x62, 0xcc, 0x5c, 0xb3, 0xf0, - 0x5e, 0x86, 0x6a, 0xe2, 0x88, 0xbe, 0xf3, 0x43, 0x1e, 0x87, 0xa9, 0xd0, 0xca, 0x63, 0x67, 0x25, - 0xcb, 0xdb, 0x88, 0xbe, 0x3b, 0xb8, 0x40, 0xc9, 0x9d, 0x49, 0xac, 0x9c, 0x8a, 0x71, 0xa6, 0x6e, - 0xcc, 0xb1, 0xa9, 0xf4, 0xf2, 0x43, 0x72, 0x1b, 0xca, 0x23, 0x1e, 0xa1, 0x53, 0x6d, 0x17, 0x76, - 0xd7, 0x1e, 0x34, 0xf2, 0xc6, 0xef, 0x1c, 0xf1, 0x08, 0x3d, 0x73, 0xa4, 0xab, 0x33, 0x34, 0x93, - 0x34, 0xf2, 0xa9, 0x72, 0x6a, 0x57, 0x57, 0xa7, 0x65, 0xef, 0x29, 0xad, 0x9a, 0x26, 0x51, 0xae, - 0x0a, 0x57, 0xab, 0x5a, 0xf6, 0x9e, 0xd2, 0xd3, 0x4b, 0x2a, 0xaa, 0x52, 0xe9, 0xac, 0xda, 0xe9, - 0x68, 0x24, 0xb2, 0x09, 0xcb, 0x66, 0xcc, 0x3b, 0x75, 0x03, 0x67, 0x02, 0x71, 0xa0, 0x82, 0x66, - 0x6c, 0x44, 0x4e, 0xb3, 0x5d, 0xd8, 0xad, 0x7a, 0xb9, 0xa8, 0x67, 0x57, 0xcc, 0xfd, 0x90, 0xaa, - 0xf0, 0x34, 0x4d, 0x9c, 0x0d, 0x73, 0x58, 0x8b, 0xf9, 0x41, 0x06, 0xb8, 0x0f, 0xa1, 0xac, 0x5d, - 0x25, 0x4d, 0xa8, 0x7f, 0x7d, 0xfc, 0xf4, 0xf8, 0xf9, 0x37, 0xc7, 0xfe, 0xd1, 0xf3, 0xde, 0x61, - 0x73, 0x89, 0xac, 0x42, 0xe5, 0xf0, 0x78, 0x6f, 0xff, 0xd9, 0x61, 0xaf, 0x59, 0x20, 0x75, 0xa8, - 0xf6, 0xbe, 0xea, 0x67, 0x52, 0xf1, 0xc1, 0x6f, 0x65, 0x80, 0x27, 0x3c, 0xe8, 0x67, 0xb9, 0x21, - 0x47, 0x50, 0x9b, 0xac, 0x1a, 0xb2, 0x65, 0xbb, 0x61, 0x76, 0xf5, 0xb4, 0x26, 0x23, 0xd5, 0xdd, - 0xf9, 0xf1, 0xcf, 0xbf, 0x7e, 0x29, 0xfe, 0xcf, 0x25, 0x7a, 0x65, 0xc9, 0xee, 0x9b, 0xfb, 0x01, - 0x2a, 0x7a, 0x5f, 0x2f, 0x6a, 0xf9, 0x85, 0xde, 0x44, 0xe4, 0x11, 0xac, 0x64, 0x9b, 0x88, 0x10, - 0xa3, 0x34, 0xb3, 0x96, 0x16, 0x2f, 0x22, 0xd7, 0x17, 0x2f, 0xea, 0x7e, 0xcf, 0xa2, 0x1f, 0x48, - 0x1f, 0xaa, 0xf9, 0xa0, 0x27, 0x9b, 0x46, 0x6d, 0x6e, 0x7f, 0xb5, 0xb6, 0xe6, 0xd0, 0x6c, 0x1b, - 0xb8, 0x2d, 0x73, 0xf3, 0x26, 0x79, 0x8f, 0x89, 0x24, 0x80, 0xda, 0x64, 0x40, 0x5b, 0x67, 0xe7, - 0x07, 0x76, 0x6b, 0x7b, 0x21, 0xc5, 0x87, 0xfa, 0x3b, 0xc1, 0xbd, 0x63, 0xee, 0x6d, 0xbb, 0xff, - 0xbf, 0xc4, 0xe2, 0x6e, 0x96, 0x34, 0x82, 0x00, 0x17, 0x03, 0x9e, 0x64, 0x8d, 0xb4, 0x30, 0xf1, - 0x2f, 0x7d, 0xe5, 0xae, 0x79, 0xe5, 0xb6, 0xbb, 0x73, 0xd9, 0x2b, 0x51, 0x76, 0x15, 0xf9, 0x16, - 0x6a, 0x93, 0x7d, 0x64, 0x5d, 0x99, 0xdf, 0x4f, 0x97, 0x3e, 0x62, 0x83, 0xff, 0xd1, 0x65, 0xc1, - 0xdf, 0xff, 0xa9, 0xf0, 0xf3, 0xde, 0x91, 0x77, 0x13, 0x2a, 0x11, 0x9e, 0xd0, 0x74, 0xa8, 0xc8, - 0x06, 0x59, 0x87, 0x46, 0x6b, 0xd5, 0x3c, 0xd3, 0x37, 0xb5, 0xfc, 0x6a, 0x07, 0x6e, 0xc1, 0xca, - 0x3e, 0x52, 0x81, 0x82, 0x5c, 0xab, 0x16, 0x5b, 0x0d, 0x9a, 0xaa, 0x53, 0x2e, 0xd8, 0xb9, 0xf9, - 0xc4, 0x69, 0x17, 0x83, 0x3a, 0xc0, 0x84, 0xb0, 0xf4, 0xea, 0xe1, 0x80, 0xa9, 0xd3, 0x34, 0xe8, - 0x84, 0x7c, 0xd4, 0x3d, 0x4b, 0x03, 0x3c, 0x19, 0xf2, 0xb7, 0x93, 0x0f, 0x2d, 0xd9, 0x9d, 0xfe, - 0x12, 0x1a, 0x70, 0x3f, 0x1c, 0x32, 0x8c, 0x55, 0xb0, 0x62, 0x0c, 0x7f, 0xf8, 0x4f, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x68, 0xc4, 0x54, 0x3d, 0x16, 0x0a, 0x00, 0x00, +var File_backend_api_job_proto protoreflect.FileDescriptor + +var file_backend_api_job_proto_rawDesc = []byte{ + 0x0a, 0x15, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6a, 0x6f, + 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, 0x1c, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, + 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, + 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x2c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, 0x67, + 0x67, 0x65, 0x72, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x62, + 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2e, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x03, 0x6a, 0x6f, + 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, + 0x62, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x22, 0x1f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc6, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, + 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, + 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, + 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, + 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, + 0x12, 0x46, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, + 0x65, 0x79, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x22, 0x77, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x04, 0x6a, 0x6f, + 0x62, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, + 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x22, 0x0a, 0x10, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x22, 0x0a, + 0x10, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x23, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x94, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x6f, 0x6e, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x72, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x72, 0x6f, 0x6e, 0x22, 0xad, 0x01, + 0x0a, 0x10, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, + 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x22, 0x94, 0x01, + 0x0a, 0x07, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x0d, 0x63, 0x72, 0x6f, + 0x6e, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x63, 0x72, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x12, 0x44, 0x0a, 0x11, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x5f, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x10, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, + 0x63, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x74, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x22, 0xfb, 0x04, 0x0a, 0x03, 0x4a, 0x6f, 0x62, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x47, 0x0a, 0x13, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, + 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x26, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x21, 0x0a, + 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, + 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x6e, 0x6f, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x75, 0x70, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x43, 0x61, 0x74, 0x63, 0x68, 0x75, 0x70, 0x22, 0x33, 0x0a, + 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x41, 0x42, 0x4c, + 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, + 0x10, 0x02, 0x32, 0xa1, 0x04, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x15, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x08, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x22, + 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x3a, 0x03, 0x6a, 0x6f, 0x62, + 0x12, 0x47, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x12, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x08, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, + 0x12, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x6a, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x53, 0x0a, 0x08, 0x4c, 0x69, 0x73, + 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x61, 0x70, 0x69, + 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x12, 0x62, + 0x0a, 0x09, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x15, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x20, 0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x12, 0x65, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4a, 0x6f, 0x62, + 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4a, 0x6f, + 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x2f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x5b, 0x0a, 0x09, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, + 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6a, 0x6f, 0x62, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x42, 0x85, 0x01, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x70, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x92, 0x41, + 0x4d, 0x52, 0x1c, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x11, 0x12, 0x0f, + 0x0a, 0x0d, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5a, + 0x1f, 0x0a, 0x1d, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x13, 0x08, 0x02, 0x1a, + 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, + 0x62, 0x0c, 0x0a, 0x0a, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x00, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_job_proto_rawDescOnce sync.Once + file_backend_api_job_proto_rawDescData = file_backend_api_job_proto_rawDesc +) + +func file_backend_api_job_proto_rawDescGZIP() []byte { + file_backend_api_job_proto_rawDescOnce.Do(func() { + file_backend_api_job_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_job_proto_rawDescData) + }) + return file_backend_api_job_proto_rawDescData +} + +var file_backend_api_job_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_backend_api_job_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_backend_api_job_proto_goTypes = []interface{}{ + (Job_Mode)(0), // 0: api.Job.Mode + (*CreateJobRequest)(nil), // 1: api.CreateJobRequest + (*GetJobRequest)(nil), // 2: api.GetJobRequest + (*ListJobsRequest)(nil), // 3: api.ListJobsRequest + (*ListJobsResponse)(nil), // 4: api.ListJobsResponse + (*DeleteJobRequest)(nil), // 5: api.DeleteJobRequest + (*EnableJobRequest)(nil), // 6: api.EnableJobRequest + (*DisableJobRequest)(nil), // 7: api.DisableJobRequest + (*CronSchedule)(nil), // 8: api.CronSchedule + (*PeriodicSchedule)(nil), // 9: api.PeriodicSchedule + (*Trigger)(nil), // 10: api.Trigger + (*Job)(nil), // 11: api.Job + (*ResourceKey)(nil), // 12: api.ResourceKey + (*timestamppb.Timestamp)(nil), // 13: google.protobuf.Timestamp + (*PipelineSpec)(nil), // 14: api.PipelineSpec + (*ResourceReference)(nil), // 15: api.ResourceReference + (*emptypb.Empty)(nil), // 16: google.protobuf.Empty +} +var file_backend_api_job_proto_depIdxs = []int32{ + 11, // 0: api.CreateJobRequest.job:type_name -> api.Job + 12, // 1: api.ListJobsRequest.resource_reference_key:type_name -> api.ResourceKey + 11, // 2: api.ListJobsResponse.jobs:type_name -> api.Job + 13, // 3: api.CronSchedule.start_time:type_name -> google.protobuf.Timestamp + 13, // 4: api.CronSchedule.end_time:type_name -> google.protobuf.Timestamp + 13, // 5: api.PeriodicSchedule.start_time:type_name -> google.protobuf.Timestamp + 13, // 6: api.PeriodicSchedule.end_time:type_name -> google.protobuf.Timestamp + 8, // 7: api.Trigger.cron_schedule:type_name -> api.CronSchedule + 9, // 8: api.Trigger.periodic_schedule:type_name -> api.PeriodicSchedule + 14, // 9: api.Job.pipeline_spec:type_name -> api.PipelineSpec + 15, // 10: api.Job.resource_references:type_name -> api.ResourceReference + 10, // 11: api.Job.trigger:type_name -> api.Trigger + 0, // 12: api.Job.mode:type_name -> api.Job.Mode + 13, // 13: api.Job.created_at:type_name -> google.protobuf.Timestamp + 13, // 14: api.Job.updated_at:type_name -> google.protobuf.Timestamp + 1, // 15: api.JobService.CreateJob:input_type -> api.CreateJobRequest + 2, // 16: api.JobService.GetJob:input_type -> api.GetJobRequest + 3, // 17: api.JobService.ListJobs:input_type -> api.ListJobsRequest + 6, // 18: api.JobService.EnableJob:input_type -> api.EnableJobRequest + 7, // 19: api.JobService.DisableJob:input_type -> api.DisableJobRequest + 5, // 20: api.JobService.DeleteJob:input_type -> api.DeleteJobRequest + 11, // 21: api.JobService.CreateJob:output_type -> api.Job + 11, // 22: api.JobService.GetJob:output_type -> api.Job + 4, // 23: api.JobService.ListJobs:output_type -> api.ListJobsResponse + 16, // 24: api.JobService.EnableJob:output_type -> google.protobuf.Empty + 16, // 25: api.JobService.DisableJob:output_type -> google.protobuf.Empty + 16, // 26: api.JobService.DeleteJob:output_type -> google.protobuf.Empty + 21, // [21:27] is the sub-list for method output_type + 15, // [15:21] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name +} + +func init() { file_backend_api_job_proto_init() } +func file_backend_api_job_proto_init() { + if File_backend_api_job_proto != nil { + return + } + file_backend_api_pipeline_spec_proto_init() + file_backend_api_resource_reference_proto_init() + file_backend_api_error_proto_init() + if !protoimpl.UnsafeEnabled { + file_backend_api_job_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateJobRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_job_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetJobRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_job_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListJobsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_job_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListJobsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_job_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteJobRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_job_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EnableJobRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_job_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DisableJobRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_job_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CronSchedule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_job_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PeriodicSchedule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_job_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Trigger); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_job_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Job); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_backend_api_job_proto_msgTypes[9].OneofWrappers = []interface{}{ + (*Trigger_CronSchedule)(nil), + (*Trigger_PeriodicSchedule)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_job_proto_rawDesc, + NumEnums: 1, + NumMessages: 11, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_backend_api_job_proto_goTypes, + DependencyIndexes: file_backend_api_job_proto_depIdxs, + EnumInfos: file_backend_api_job_proto_enumTypes, + MessageInfos: file_backend_api_job_proto_msgTypes, + }.Build() + File_backend_api_job_proto = out.File + file_backend_api_job_proto_rawDesc = nil + file_backend_api_job_proto_goTypes = nil + file_backend_api_job_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // JobServiceClient is the client API for JobService service. // @@ -887,18 +1310,18 @@ type JobServiceClient interface { // Finds all jobs. ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) // Restarts a job that was previously stopped. All runs associated with the job will continue. - EnableJob(ctx context.Context, in *EnableJobRequest, opts ...grpc.CallOption) (*empty.Empty, error) + EnableJob(ctx context.Context, in *EnableJobRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Stops a job and all its associated runs. The job is not deleted. - DisableJob(ctx context.Context, in *DisableJobRequest, opts ...grpc.CallOption) (*empty.Empty, error) + DisableJob(ctx context.Context, in *DisableJobRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Deletes a job. - DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*empty.Empty, error) + DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) } type jobServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewJobServiceClient(cc *grpc.ClientConn) JobServiceClient { +func NewJobServiceClient(cc grpc.ClientConnInterface) JobServiceClient { return &jobServiceClient{cc} } @@ -929,8 +1352,8 @@ func (c *jobServiceClient) ListJobs(ctx context.Context, in *ListJobsRequest, op return out, nil } -func (c *jobServiceClient) EnableJob(ctx context.Context, in *EnableJobRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *jobServiceClient) EnableJob(ctx context.Context, in *EnableJobRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.JobService/EnableJob", in, out, opts...) if err != nil { return nil, err @@ -938,8 +1361,8 @@ func (c *jobServiceClient) EnableJob(ctx context.Context, in *EnableJobRequest, return out, nil } -func (c *jobServiceClient) DisableJob(ctx context.Context, in *DisableJobRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *jobServiceClient) DisableJob(ctx context.Context, in *DisableJobRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.JobService/DisableJob", in, out, opts...) if err != nil { return nil, err @@ -947,8 +1370,8 @@ func (c *jobServiceClient) DisableJob(ctx context.Context, in *DisableJobRequest return out, nil } -func (c *jobServiceClient) DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *jobServiceClient) DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.JobService/DeleteJob", in, out, opts...) if err != nil { return nil, err @@ -965,33 +1388,33 @@ type JobServiceServer interface { // Finds all jobs. ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error) // Restarts a job that was previously stopped. All runs associated with the job will continue. - EnableJob(context.Context, *EnableJobRequest) (*empty.Empty, error) + EnableJob(context.Context, *EnableJobRequest) (*emptypb.Empty, error) // Stops a job and all its associated runs. The job is not deleted. - DisableJob(context.Context, *DisableJobRequest) (*empty.Empty, error) + DisableJob(context.Context, *DisableJobRequest) (*emptypb.Empty, error) // Deletes a job. - DeleteJob(context.Context, *DeleteJobRequest) (*empty.Empty, error) + DeleteJob(context.Context, *DeleteJobRequest) (*emptypb.Empty, error) } // UnimplementedJobServiceServer can be embedded to have forward compatible implementations. type UnimplementedJobServiceServer struct { } -func (*UnimplementedJobServiceServer) CreateJob(ctx context.Context, req *CreateJobRequest) (*Job, error) { +func (*UnimplementedJobServiceServer) CreateJob(context.Context, *CreateJobRequest) (*Job, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateJob not implemented") } -func (*UnimplementedJobServiceServer) GetJob(ctx context.Context, req *GetJobRequest) (*Job, error) { +func (*UnimplementedJobServiceServer) GetJob(context.Context, *GetJobRequest) (*Job, error) { return nil, status.Errorf(codes.Unimplemented, "method GetJob not implemented") } -func (*UnimplementedJobServiceServer) ListJobs(ctx context.Context, req *ListJobsRequest) (*ListJobsResponse, error) { +func (*UnimplementedJobServiceServer) ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListJobs not implemented") } -func (*UnimplementedJobServiceServer) EnableJob(ctx context.Context, req *EnableJobRequest) (*empty.Empty, error) { +func (*UnimplementedJobServiceServer) EnableJob(context.Context, *EnableJobRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method EnableJob not implemented") } -func (*UnimplementedJobServiceServer) DisableJob(ctx context.Context, req *DisableJobRequest) (*empty.Empty, error) { +func (*UnimplementedJobServiceServer) DisableJob(context.Context, *DisableJobRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DisableJob not implemented") } -func (*UnimplementedJobServiceServer) DeleteJob(ctx context.Context, req *DeleteJobRequest) (*empty.Empty, error) { +func (*UnimplementedJobServiceServer) DeleteJob(context.Context, *DeleteJobRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteJob not implemented") } diff --git a/backend/api/go_client/parameter.pb.go b/backend/api/go_client/parameter.pb.go index a9d0e04b28..2761d663c8 100644 --- a/backend/api/go_client/parameter.pb.go +++ b/backend/api/go_client/parameter.pb.go @@ -1,88 +1,168 @@ +// Copyright 2018 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: backend/api/parameter.proto package go_client import ( - fmt "fmt" - proto "github.com/golang/protobuf/proto" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) type Parameter struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Parameter) Reset() { *m = Parameter{} } -func (m *Parameter) String() string { return proto.CompactTextString(m) } -func (*Parameter) ProtoMessage() {} -func (*Parameter) Descriptor() ([]byte, []int) { - return fileDescriptor_6c6f9f24a0c0798d, []int{0} + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } -func (m *Parameter) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Parameter.Unmarshal(m, b) -} -func (m *Parameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Parameter.Marshal(b, m, deterministic) -} -func (m *Parameter) XXX_Merge(src proto.Message) { - xxx_messageInfo_Parameter.Merge(m, src) +func (x *Parameter) Reset() { + *x = Parameter{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_parameter_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Parameter) XXX_Size() int { - return xxx_messageInfo_Parameter.Size(m) + +func (x *Parameter) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Parameter) XXX_DiscardUnknown() { - xxx_messageInfo_Parameter.DiscardUnknown(m) + +func (*Parameter) ProtoMessage() {} + +func (x *Parameter) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_parameter_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Parameter proto.InternalMessageInfo +// Deprecated: Use Parameter.ProtoReflect.Descriptor instead. +func (*Parameter) Descriptor() ([]byte, []int) { + return file_backend_api_parameter_proto_rawDescGZIP(), []int{0} +} -func (m *Parameter) GetName() string { - if m != nil { - return m.Name +func (x *Parameter) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *Parameter) GetValue() string { - if m != nil { - return m.Value +func (x *Parameter) GetValue() string { + if x != nil { + return x.Value } return "" } -func init() { - proto.RegisterType((*Parameter)(nil), "api.Parameter") +var File_backend_api_parameter_proto protoreflect.FileDescriptor + +var file_backend_api_parameter_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, + 0x70, 0x69, 0x22, 0x35, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, + 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_parameter_proto_rawDescOnce sync.Once + file_backend_api_parameter_proto_rawDescData = file_backend_api_parameter_proto_rawDesc +) + +func file_backend_api_parameter_proto_rawDescGZIP() []byte { + file_backend_api_parameter_proto_rawDescOnce.Do(func() { + file_backend_api_parameter_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_parameter_proto_rawDescData) + }) + return file_backend_api_parameter_proto_rawDescData +} + +var file_backend_api_parameter_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_backend_api_parameter_proto_goTypes = []interface{}{ + (*Parameter)(nil), // 0: api.Parameter +} +var file_backend_api_parameter_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name } -func init() { proto.RegisterFile("backend/api/parameter.proto", fileDescriptor_6c6f9f24a0c0798d) } - -var fileDescriptor_6c6f9f24a0c0798d = []byte{ - // 147 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4e, 0x4a, 0x4c, 0xce, - 0x4e, 0xcd, 0x4b, 0xd1, 0x4f, 0x2c, 0xc8, 0xd4, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x4d, 0x2d, 0x49, - 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x4e, 0x2c, 0xc8, 0x54, 0x32, 0xe5, 0xe2, - 0x0c, 0x80, 0x89, 0x0b, 0x09, 0x71, 0xb1, 0xe4, 0x25, 0xe6, 0xa6, 0x4a, 0x30, 0x2a, 0x30, 0x6a, - 0x70, 0x06, 0x81, 0xd9, 0x42, 0x22, 0x5c, 0xac, 0x65, 0x89, 0x39, 0xa5, 0xa9, 0x12, 0x4c, 0x60, - 0x41, 0x08, 0xc7, 0xc9, 0x34, 0xca, 0x38, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, - 0x57, 0x3f, 0xbb, 0x34, 0x29, 0x35, 0x2d, 0x27, 0xbf, 0x5c, 0xbf, 0x20, 0xb3, 0x20, 0x35, 0x27, - 0x33, 0x2f, 0xb5, 0x58, 0x1f, 0xd9, 0xe2, 0xf4, 0xfc, 0xf8, 0xe4, 0x9c, 0xcc, 0xd4, 0xbc, 0x92, - 0x24, 0x36, 0xb0, 0xcd, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc4, 0x47, 0x98, 0xfd, 0x98, - 0x00, 0x00, 0x00, +func init() { file_backend_api_parameter_proto_init() } +func file_backend_api_parameter_proto_init() { + if File_backend_api_parameter_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_backend_api_parameter_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Parameter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_parameter_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_backend_api_parameter_proto_goTypes, + DependencyIndexes: file_backend_api_parameter_proto_depIdxs, + MessageInfos: file_backend_api_parameter_proto_msgTypes, + }.Build() + File_backend_api_parameter_proto = out.File + file_backend_api_parameter_proto_rawDesc = nil + file_backend_api_parameter_proto_goTypes = nil + file_backend_api_parameter_proto_depIdxs = nil } diff --git a/backend/api/go_client/pipeline.pb.go b/backend/api/go_client/pipeline.pb.go index 5080add378..ea40ddbb4c 100644 --- a/backend/api/go_client/pipeline.pb.go +++ b/backend/api/go_client/pipeline.pb.go @@ -1,69 +1,91 @@ +// Copyright 2018 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: backend/api/pipeline.proto package go_client import ( context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - empty "github.com/golang/protobuf/ptypes/empty" - timestamp "github.com/golang/protobuf/ptypes/timestamp" _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) type Url struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // URL of the pipeline definition or the pipeline version definition. - PipelineUrl string `protobuf:"bytes,1,opt,name=pipeline_url,json=pipelineUrl,proto3" json:"pipeline_url,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + PipelineUrl string `protobuf:"bytes,1,opt,name=pipeline_url,json=pipelineUrl,proto3" json:"pipeline_url,omitempty"` } -func (m *Url) Reset() { *m = Url{} } -func (m *Url) String() string { return proto.CompactTextString(m) } -func (*Url) ProtoMessage() {} -func (*Url) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{0} +func (x *Url) Reset() { + *x = Url{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Url) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Url.Unmarshal(m, b) -} -func (m *Url) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Url.Marshal(b, m, deterministic) -} -func (m *Url) XXX_Merge(src proto.Message) { - xxx_messageInfo_Url.Merge(m, src) +func (x *Url) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Url) XXX_Size() int { - return xxx_messageInfo_Url.Size(m) -} -func (m *Url) XXX_DiscardUnknown() { - xxx_messageInfo_Url.DiscardUnknown(m) + +func (*Url) ProtoMessage() {} + +func (x *Url) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Url proto.InternalMessageInfo +// Deprecated: Use Url.ProtoReflect.Descriptor instead. +func (*Url) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{0} +} -func (m *Url) GetPipelineUrl() string { - if m != nil { - return m.PipelineUrl +func (x *Url) GetPipelineUrl() string { + if x != nil { + return x.PipelineUrl } return "" } @@ -72,134 +94,162 @@ func (m *Url) GetPipelineUrl() string { // and optionally a pipeline name. If name is not provided, file name is used as // pipeline name by default. Maximum size of 32MB is supported. type CreatePipelineRequest struct { - Pipeline *Pipeline `protobuf:"bytes,1,opt,name=pipeline,proto3" json:"pipeline,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *CreatePipelineRequest) Reset() { *m = CreatePipelineRequest{} } -func (m *CreatePipelineRequest) String() string { return proto.CompactTextString(m) } -func (*CreatePipelineRequest) ProtoMessage() {} -func (*CreatePipelineRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{1} + Pipeline *Pipeline `protobuf:"bytes,1,opt,name=pipeline,proto3" json:"pipeline,omitempty"` } -func (m *CreatePipelineRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CreatePipelineRequest.Unmarshal(m, b) -} -func (m *CreatePipelineRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CreatePipelineRequest.Marshal(b, m, deterministic) -} -func (m *CreatePipelineRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreatePipelineRequest.Merge(m, src) +func (x *CreatePipelineRequest) Reset() { + *x = CreatePipelineRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *CreatePipelineRequest) XXX_Size() int { - return xxx_messageInfo_CreatePipelineRequest.Size(m) + +func (x *CreatePipelineRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreatePipelineRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreatePipelineRequest.DiscardUnknown(m) + +func (*CreatePipelineRequest) ProtoMessage() {} + +func (x *CreatePipelineRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_CreatePipelineRequest proto.InternalMessageInfo +// Deprecated: Use CreatePipelineRequest.ProtoReflect.Descriptor instead. +func (*CreatePipelineRequest) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{1} +} -func (m *CreatePipelineRequest) GetPipeline() *Pipeline { - if m != nil { - return m.Pipeline +func (x *CreatePipelineRequest) GetPipeline() *Pipeline { + if x != nil { + return x.Pipeline } return nil } type UpdatePipelineDefaultVersionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the pipeline to be updated. PipelineId string `protobuf:"bytes,1,opt,name=pipeline_id,json=pipelineId,proto3" json:"pipeline_id,omitempty"` // The ID of the default version. - VersionId string `protobuf:"bytes,2,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + VersionId string `protobuf:"bytes,2,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` } -func (m *UpdatePipelineDefaultVersionRequest) Reset() { *m = UpdatePipelineDefaultVersionRequest{} } -func (m *UpdatePipelineDefaultVersionRequest) String() string { return proto.CompactTextString(m) } -func (*UpdatePipelineDefaultVersionRequest) ProtoMessage() {} -func (*UpdatePipelineDefaultVersionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{2} +func (x *UpdatePipelineDefaultVersionRequest) Reset() { + *x = UpdatePipelineDefaultVersionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *UpdatePipelineDefaultVersionRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UpdatePipelineDefaultVersionRequest.Unmarshal(m, b) +func (x *UpdatePipelineDefaultVersionRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdatePipelineDefaultVersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UpdatePipelineDefaultVersionRequest.Marshal(b, m, deterministic) -} -func (m *UpdatePipelineDefaultVersionRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdatePipelineDefaultVersionRequest.Merge(m, src) -} -func (m *UpdatePipelineDefaultVersionRequest) XXX_Size() int { - return xxx_messageInfo_UpdatePipelineDefaultVersionRequest.Size(m) -} -func (m *UpdatePipelineDefaultVersionRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdatePipelineDefaultVersionRequest.DiscardUnknown(m) + +func (*UpdatePipelineDefaultVersionRequest) ProtoMessage() {} + +func (x *UpdatePipelineDefaultVersionRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_UpdatePipelineDefaultVersionRequest proto.InternalMessageInfo +// Deprecated: Use UpdatePipelineDefaultVersionRequest.ProtoReflect.Descriptor instead. +func (*UpdatePipelineDefaultVersionRequest) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{2} +} -func (m *UpdatePipelineDefaultVersionRequest) GetPipelineId() string { - if m != nil { - return m.PipelineId +func (x *UpdatePipelineDefaultVersionRequest) GetPipelineId() string { + if x != nil { + return x.PipelineId } return "" } -func (m *UpdatePipelineDefaultVersionRequest) GetVersionId() string { - if m != nil { - return m.VersionId +func (x *UpdatePipelineDefaultVersionRequest) GetVersionId() string { + if x != nil { + return x.VersionId } return "" } type GetPipelineRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the pipeline to be retrieved. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *GetPipelineRequest) Reset() { *m = GetPipelineRequest{} } -func (m *GetPipelineRequest) String() string { return proto.CompactTextString(m) } -func (*GetPipelineRequest) ProtoMessage() {} -func (*GetPipelineRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{3} +func (x *GetPipelineRequest) Reset() { + *x = GetPipelineRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GetPipelineRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetPipelineRequest.Unmarshal(m, b) -} -func (m *GetPipelineRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetPipelineRequest.Marshal(b, m, deterministic) +func (x *GetPipelineRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetPipelineRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetPipelineRequest.Merge(m, src) -} -func (m *GetPipelineRequest) XXX_Size() int { - return xxx_messageInfo_GetPipelineRequest.Size(m) -} -func (m *GetPipelineRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetPipelineRequest.DiscardUnknown(m) + +func (*GetPipelineRequest) ProtoMessage() {} + +func (x *GetPipelineRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_GetPipelineRequest proto.InternalMessageInfo +// Deprecated: Use GetPipelineRequest.ProtoReflect.Descriptor instead. +func (*GetPipelineRequest) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{3} +} -func (m *GetPipelineRequest) GetId() string { - if m != nil { - return m.Id +func (x *GetPipelineRequest) GetId() string { + if x != nil { + return x.Id } return "" } type ListPipelinesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // A page token to request the next page of results. The token is acquried // from the nextPageToken field of the response from the previous // ListPipelines call. @@ -212,378 +262,441 @@ type ListPipelinesRequest struct { // Ascending by default. SortBy string `protobuf:"bytes,3,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"` // A url-encoded, JSON-serialized Filter protocol buffer (see - // [filter.proto](https://github.com/kubeflow/pipelines/ - // blob/master/backend/api/filter.proto)). + // [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). Filter string `protobuf:"bytes,4,opt,name=filter,proto3" json:"filter,omitempty"` // What resource reference to filter on. // For Pipeline, the only valid resource type is Namespace. An sample query string could be // resource_reference_key.type=NAMESPACE&resource_reference_key.id=ns1 ResourceReferenceKey *ResourceKey `protobuf:"bytes,5,opt,name=resource_reference_key,json=resourceReferenceKey,proto3" json:"resource_reference_key,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` } -func (m *ListPipelinesRequest) Reset() { *m = ListPipelinesRequest{} } -func (m *ListPipelinesRequest) String() string { return proto.CompactTextString(m) } -func (*ListPipelinesRequest) ProtoMessage() {} -func (*ListPipelinesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{4} +func (x *ListPipelinesRequest) Reset() { + *x = ListPipelinesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ListPipelinesRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListPipelinesRequest.Unmarshal(m, b) -} -func (m *ListPipelinesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListPipelinesRequest.Marshal(b, m, deterministic) -} -func (m *ListPipelinesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListPipelinesRequest.Merge(m, src) -} -func (m *ListPipelinesRequest) XXX_Size() int { - return xxx_messageInfo_ListPipelinesRequest.Size(m) +func (x *ListPipelinesRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListPipelinesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListPipelinesRequest.DiscardUnknown(m) + +func (*ListPipelinesRequest) ProtoMessage() {} + +func (x *ListPipelinesRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ListPipelinesRequest proto.InternalMessageInfo +// Deprecated: Use ListPipelinesRequest.ProtoReflect.Descriptor instead. +func (*ListPipelinesRequest) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{4} +} -func (m *ListPipelinesRequest) GetPageToken() string { - if m != nil { - return m.PageToken +func (x *ListPipelinesRequest) GetPageToken() string { + if x != nil { + return x.PageToken } return "" } -func (m *ListPipelinesRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize +func (x *ListPipelinesRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize } return 0 } -func (m *ListPipelinesRequest) GetSortBy() string { - if m != nil { - return m.SortBy +func (x *ListPipelinesRequest) GetSortBy() string { + if x != nil { + return x.SortBy } return "" } -func (m *ListPipelinesRequest) GetFilter() string { - if m != nil { - return m.Filter +func (x *ListPipelinesRequest) GetFilter() string { + if x != nil { + return x.Filter } return "" } -func (m *ListPipelinesRequest) GetResourceReferenceKey() *ResourceKey { - if m != nil { - return m.ResourceReferenceKey +func (x *ListPipelinesRequest) GetResourceReferenceKey() *ResourceKey { + if x != nil { + return x.ResourceReferenceKey } return nil } type ListPipelinesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Pipelines []*Pipeline `protobuf:"bytes,1,rep,name=pipelines,proto3" json:"pipelines,omitempty"` // The total number of pipelines for the given query. TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` // The token to list the next page of pipelines. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` } -func (m *ListPipelinesResponse) Reset() { *m = ListPipelinesResponse{} } -func (m *ListPipelinesResponse) String() string { return proto.CompactTextString(m) } -func (*ListPipelinesResponse) ProtoMessage() {} -func (*ListPipelinesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{5} +func (x *ListPipelinesResponse) Reset() { + *x = ListPipelinesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ListPipelinesResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListPipelinesResponse.Unmarshal(m, b) -} -func (m *ListPipelinesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListPipelinesResponse.Marshal(b, m, deterministic) +func (x *ListPipelinesResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListPipelinesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListPipelinesResponse.Merge(m, src) -} -func (m *ListPipelinesResponse) XXX_Size() int { - return xxx_messageInfo_ListPipelinesResponse.Size(m) -} -func (m *ListPipelinesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListPipelinesResponse.DiscardUnknown(m) + +func (*ListPipelinesResponse) ProtoMessage() {} + +func (x *ListPipelinesResponse) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ListPipelinesResponse proto.InternalMessageInfo +// Deprecated: Use ListPipelinesResponse.ProtoReflect.Descriptor instead. +func (*ListPipelinesResponse) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{5} +} -func (m *ListPipelinesResponse) GetPipelines() []*Pipeline { - if m != nil { - return m.Pipelines +func (x *ListPipelinesResponse) GetPipelines() []*Pipeline { + if x != nil { + return x.Pipelines } return nil } -func (m *ListPipelinesResponse) GetTotalSize() int32 { - if m != nil { - return m.TotalSize +func (x *ListPipelinesResponse) GetTotalSize() int32 { + if x != nil { + return x.TotalSize } return 0 } -func (m *ListPipelinesResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken +func (x *ListPipelinesResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken } return "" } type DeletePipelineRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the pipeline to be deleted. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *DeletePipelineRequest) Reset() { *m = DeletePipelineRequest{} } -func (m *DeletePipelineRequest) String() string { return proto.CompactTextString(m) } -func (*DeletePipelineRequest) ProtoMessage() {} -func (*DeletePipelineRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{6} +func (x *DeletePipelineRequest) Reset() { + *x = DeletePipelineRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *DeletePipelineRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeletePipelineRequest.Unmarshal(m, b) -} -func (m *DeletePipelineRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeletePipelineRequest.Marshal(b, m, deterministic) -} -func (m *DeletePipelineRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeletePipelineRequest.Merge(m, src) +func (x *DeletePipelineRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *DeletePipelineRequest) XXX_Size() int { - return xxx_messageInfo_DeletePipelineRequest.Size(m) -} -func (m *DeletePipelineRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DeletePipelineRequest.DiscardUnknown(m) + +func (*DeletePipelineRequest) ProtoMessage() {} + +func (x *DeletePipelineRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_DeletePipelineRequest proto.InternalMessageInfo +// Deprecated: Use DeletePipelineRequest.ProtoReflect.Descriptor instead. +func (*DeletePipelineRequest) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{6} +} -func (m *DeletePipelineRequest) GetId() string { - if m != nil { - return m.Id +func (x *DeletePipelineRequest) GetId() string { + if x != nil { + return x.Id } return "" } type GetTemplateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the pipeline whose template is to be retrieved. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *GetTemplateRequest) Reset() { *m = GetTemplateRequest{} } -func (m *GetTemplateRequest) String() string { return proto.CompactTextString(m) } -func (*GetTemplateRequest) ProtoMessage() {} -func (*GetTemplateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{7} +func (x *GetTemplateRequest) Reset() { + *x = GetTemplateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GetTemplateRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetTemplateRequest.Unmarshal(m, b) -} -func (m *GetTemplateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetTemplateRequest.Marshal(b, m, deterministic) -} -func (m *GetTemplateRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetTemplateRequest.Merge(m, src) -} -func (m *GetTemplateRequest) XXX_Size() int { - return xxx_messageInfo_GetTemplateRequest.Size(m) +func (x *GetTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetTemplateRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetTemplateRequest.DiscardUnknown(m) + +func (*GetTemplateRequest) ProtoMessage() {} + +func (x *GetTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_GetTemplateRequest proto.InternalMessageInfo +// Deprecated: Use GetTemplateRequest.ProtoReflect.Descriptor instead. +func (*GetTemplateRequest) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{7} +} -func (m *GetTemplateRequest) GetId() string { - if m != nil { - return m.Id +func (x *GetTemplateRequest) GetId() string { + if x != nil { + return x.Id } return "" } type GetTemplateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The template of the pipeline specified in a GetTemplate request, or of a // pipeline version specified in a GetPipelinesVersionTemplate request. - Template string `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Template string `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` } -func (m *GetTemplateResponse) Reset() { *m = GetTemplateResponse{} } -func (m *GetTemplateResponse) String() string { return proto.CompactTextString(m) } -func (*GetTemplateResponse) ProtoMessage() {} -func (*GetTemplateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{8} +func (x *GetTemplateResponse) Reset() { + *x = GetTemplateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GetTemplateResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetTemplateResponse.Unmarshal(m, b) -} -func (m *GetTemplateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetTemplateResponse.Marshal(b, m, deterministic) +func (x *GetTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetTemplateResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetTemplateResponse.Merge(m, src) -} -func (m *GetTemplateResponse) XXX_Size() int { - return xxx_messageInfo_GetTemplateResponse.Size(m) -} -func (m *GetTemplateResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetTemplateResponse.DiscardUnknown(m) + +func (*GetTemplateResponse) ProtoMessage() {} + +func (x *GetTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_GetTemplateResponse proto.InternalMessageInfo +// Deprecated: Use GetTemplateResponse.ProtoReflect.Descriptor instead. +func (*GetTemplateResponse) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{8} +} -func (m *GetTemplateResponse) GetTemplate() string { - if m != nil { - return m.Template +func (x *GetTemplateResponse) GetTemplate() string { + if x != nil { + return x.Template } return "" } type GetPipelineVersionTemplateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the pipeline version whose template is to be retrieved. - VersionId string `protobuf:"bytes,1,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + VersionId string `protobuf:"bytes,1,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` } -func (m *GetPipelineVersionTemplateRequest) Reset() { *m = GetPipelineVersionTemplateRequest{} } -func (m *GetPipelineVersionTemplateRequest) String() string { return proto.CompactTextString(m) } -func (*GetPipelineVersionTemplateRequest) ProtoMessage() {} -func (*GetPipelineVersionTemplateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{9} +func (x *GetPipelineVersionTemplateRequest) Reset() { + *x = GetPipelineVersionTemplateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GetPipelineVersionTemplateRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetPipelineVersionTemplateRequest.Unmarshal(m, b) -} -func (m *GetPipelineVersionTemplateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetPipelineVersionTemplateRequest.Marshal(b, m, deterministic) -} -func (m *GetPipelineVersionTemplateRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetPipelineVersionTemplateRequest.Merge(m, src) -} -func (m *GetPipelineVersionTemplateRequest) XXX_Size() int { - return xxx_messageInfo_GetPipelineVersionTemplateRequest.Size(m) +func (x *GetPipelineVersionTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetPipelineVersionTemplateRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetPipelineVersionTemplateRequest.DiscardUnknown(m) + +func (*GetPipelineVersionTemplateRequest) ProtoMessage() {} + +func (x *GetPipelineVersionTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_GetPipelineVersionTemplateRequest proto.InternalMessageInfo +// Deprecated: Use GetPipelineVersionTemplateRequest.ProtoReflect.Descriptor instead. +func (*GetPipelineVersionTemplateRequest) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{9} +} -func (m *GetPipelineVersionTemplateRequest) GetVersionId() string { - if m != nil { - return m.VersionId +func (x *GetPipelineVersionTemplateRequest) GetVersionId() string { + if x != nil { + return x.VersionId } return "" } type CreatePipelineVersionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // ResourceReference inside PipelineVersion specifies the pipeline that this // version belongs to. - Version *PipelineVersion `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Version *PipelineVersion `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` } -func (m *CreatePipelineVersionRequest) Reset() { *m = CreatePipelineVersionRequest{} } -func (m *CreatePipelineVersionRequest) String() string { return proto.CompactTextString(m) } -func (*CreatePipelineVersionRequest) ProtoMessage() {} -func (*CreatePipelineVersionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{10} +func (x *CreatePipelineVersionRequest) Reset() { + *x = CreatePipelineVersionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *CreatePipelineVersionRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CreatePipelineVersionRequest.Unmarshal(m, b) -} -func (m *CreatePipelineVersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CreatePipelineVersionRequest.Marshal(b, m, deterministic) -} -func (m *CreatePipelineVersionRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreatePipelineVersionRequest.Merge(m, src) +func (x *CreatePipelineVersionRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreatePipelineVersionRequest) XXX_Size() int { - return xxx_messageInfo_CreatePipelineVersionRequest.Size(m) -} -func (m *CreatePipelineVersionRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreatePipelineVersionRequest.DiscardUnknown(m) + +func (*CreatePipelineVersionRequest) ProtoMessage() {} + +func (x *CreatePipelineVersionRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_CreatePipelineVersionRequest proto.InternalMessageInfo +// Deprecated: Use CreatePipelineVersionRequest.ProtoReflect.Descriptor instead. +func (*CreatePipelineVersionRequest) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{10} +} -func (m *CreatePipelineVersionRequest) GetVersion() *PipelineVersion { - if m != nil { - return m.Version +func (x *CreatePipelineVersionRequest) GetVersion() *PipelineVersion { + if x != nil { + return x.Version } return nil } type GetPipelineVersionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the pipeline version to be retrieved. - VersionId string `protobuf:"bytes,1,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + VersionId string `protobuf:"bytes,1,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` } -func (m *GetPipelineVersionRequest) Reset() { *m = GetPipelineVersionRequest{} } -func (m *GetPipelineVersionRequest) String() string { return proto.CompactTextString(m) } -func (*GetPipelineVersionRequest) ProtoMessage() {} -func (*GetPipelineVersionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{11} +func (x *GetPipelineVersionRequest) Reset() { + *x = GetPipelineVersionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GetPipelineVersionRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetPipelineVersionRequest.Unmarshal(m, b) -} -func (m *GetPipelineVersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetPipelineVersionRequest.Marshal(b, m, deterministic) +func (x *GetPipelineVersionRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetPipelineVersionRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetPipelineVersionRequest.Merge(m, src) -} -func (m *GetPipelineVersionRequest) XXX_Size() int { - return xxx_messageInfo_GetPipelineVersionRequest.Size(m) -} -func (m *GetPipelineVersionRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetPipelineVersionRequest.DiscardUnknown(m) + +func (*GetPipelineVersionRequest) ProtoMessage() {} + +func (x *GetPipelineVersionRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_GetPipelineVersionRequest proto.InternalMessageInfo +// Deprecated: Use GetPipelineVersionRequest.ProtoReflect.Descriptor instead. +func (*GetPipelineVersionRequest) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{11} +} -func (m *GetPipelineVersionRequest) GetVersionId() string { - if m != nil { - return m.VersionId +func (x *GetPipelineVersionRequest) GetVersionId() string { + if x != nil { + return x.VersionId } return "" } type ListPipelineVersionsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // ResourceKey specifies the pipeline whose versions are to be listed. ResourceKey *ResourceKey `protobuf:"bytes,1,opt,name=resource_key,json=resourceKey,proto3" json:"resource_key,omitempty"` // The number of pipeline versions to be listed per page. If there are more @@ -599,174 +712,198 @@ type ListPipelineVersionsRequest struct { SortBy string `protobuf:"bytes,4,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"` // A base-64 encoded, JSON-serialized Filter protocol buffer (see // filter.proto). - Filter string `protobuf:"bytes,5,opt,name=filter,proto3" json:"filter,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Filter string `protobuf:"bytes,5,opt,name=filter,proto3" json:"filter,omitempty"` } -func (m *ListPipelineVersionsRequest) Reset() { *m = ListPipelineVersionsRequest{} } -func (m *ListPipelineVersionsRequest) String() string { return proto.CompactTextString(m) } -func (*ListPipelineVersionsRequest) ProtoMessage() {} -func (*ListPipelineVersionsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{12} +func (x *ListPipelineVersionsRequest) Reset() { + *x = ListPipelineVersionsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ListPipelineVersionsRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListPipelineVersionsRequest.Unmarshal(m, b) -} -func (m *ListPipelineVersionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListPipelineVersionsRequest.Marshal(b, m, deterministic) -} -func (m *ListPipelineVersionsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListPipelineVersionsRequest.Merge(m, src) -} -func (m *ListPipelineVersionsRequest) XXX_Size() int { - return xxx_messageInfo_ListPipelineVersionsRequest.Size(m) +func (x *ListPipelineVersionsRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListPipelineVersionsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListPipelineVersionsRequest.DiscardUnknown(m) + +func (*ListPipelineVersionsRequest) ProtoMessage() {} + +func (x *ListPipelineVersionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ListPipelineVersionsRequest proto.InternalMessageInfo +// Deprecated: Use ListPipelineVersionsRequest.ProtoReflect.Descriptor instead. +func (*ListPipelineVersionsRequest) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{12} +} -func (m *ListPipelineVersionsRequest) GetResourceKey() *ResourceKey { - if m != nil { - return m.ResourceKey +func (x *ListPipelineVersionsRequest) GetResourceKey() *ResourceKey { + if x != nil { + return x.ResourceKey } return nil } -func (m *ListPipelineVersionsRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize +func (x *ListPipelineVersionsRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize } return 0 } -func (m *ListPipelineVersionsRequest) GetPageToken() string { - if m != nil { - return m.PageToken +func (x *ListPipelineVersionsRequest) GetPageToken() string { + if x != nil { + return x.PageToken } return "" } -func (m *ListPipelineVersionsRequest) GetSortBy() string { - if m != nil { - return m.SortBy +func (x *ListPipelineVersionsRequest) GetSortBy() string { + if x != nil { + return x.SortBy } return "" } -func (m *ListPipelineVersionsRequest) GetFilter() string { - if m != nil { - return m.Filter +func (x *ListPipelineVersionsRequest) GetFilter() string { + if x != nil { + return x.Filter } return "" } type ListPipelineVersionsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Versions []*PipelineVersion `protobuf:"bytes,1,rep,name=versions,proto3" json:"versions,omitempty"` // The token to list the next page of pipeline versions. NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` // The total number of pipeline versions for the given query. - TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` } -func (m *ListPipelineVersionsResponse) Reset() { *m = ListPipelineVersionsResponse{} } -func (m *ListPipelineVersionsResponse) String() string { return proto.CompactTextString(m) } -func (*ListPipelineVersionsResponse) ProtoMessage() {} -func (*ListPipelineVersionsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{13} +func (x *ListPipelineVersionsResponse) Reset() { + *x = ListPipelineVersionsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ListPipelineVersionsResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListPipelineVersionsResponse.Unmarshal(m, b) -} -func (m *ListPipelineVersionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListPipelineVersionsResponse.Marshal(b, m, deterministic) +func (x *ListPipelineVersionsResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListPipelineVersionsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListPipelineVersionsResponse.Merge(m, src) -} -func (m *ListPipelineVersionsResponse) XXX_Size() int { - return xxx_messageInfo_ListPipelineVersionsResponse.Size(m) -} -func (m *ListPipelineVersionsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListPipelineVersionsResponse.DiscardUnknown(m) + +func (*ListPipelineVersionsResponse) ProtoMessage() {} + +func (x *ListPipelineVersionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ListPipelineVersionsResponse proto.InternalMessageInfo +// Deprecated: Use ListPipelineVersionsResponse.ProtoReflect.Descriptor instead. +func (*ListPipelineVersionsResponse) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{13} +} -func (m *ListPipelineVersionsResponse) GetVersions() []*PipelineVersion { - if m != nil { - return m.Versions +func (x *ListPipelineVersionsResponse) GetVersions() []*PipelineVersion { + if x != nil { + return x.Versions } return nil } -func (m *ListPipelineVersionsResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken +func (x *ListPipelineVersionsResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken } return "" } -func (m *ListPipelineVersionsResponse) GetTotalSize() int32 { - if m != nil { - return m.TotalSize +func (x *ListPipelineVersionsResponse) GetTotalSize() int32 { + if x != nil { + return x.TotalSize } return 0 } type DeletePipelineVersionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the pipeline version to be deleted. - VersionId string `protobuf:"bytes,1,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + VersionId string `protobuf:"bytes,1,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` } -func (m *DeletePipelineVersionRequest) Reset() { *m = DeletePipelineVersionRequest{} } -func (m *DeletePipelineVersionRequest) String() string { return proto.CompactTextString(m) } -func (*DeletePipelineVersionRequest) ProtoMessage() {} -func (*DeletePipelineVersionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{14} +func (x *DeletePipelineVersionRequest) Reset() { + *x = DeletePipelineVersionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *DeletePipelineVersionRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeletePipelineVersionRequest.Unmarshal(m, b) -} -func (m *DeletePipelineVersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeletePipelineVersionRequest.Marshal(b, m, deterministic) -} -func (m *DeletePipelineVersionRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeletePipelineVersionRequest.Merge(m, src) -} -func (m *DeletePipelineVersionRequest) XXX_Size() int { - return xxx_messageInfo_DeletePipelineVersionRequest.Size(m) +func (x *DeletePipelineVersionRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *DeletePipelineVersionRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DeletePipelineVersionRequest.DiscardUnknown(m) + +func (*DeletePipelineVersionRequest) ProtoMessage() {} + +func (x *DeletePipelineVersionRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_DeletePipelineVersionRequest proto.InternalMessageInfo +// Deprecated: Use DeletePipelineVersionRequest.ProtoReflect.Descriptor instead. +func (*DeletePipelineVersionRequest) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{14} +} -func (m *DeletePipelineVersionRequest) GetVersionId() string { - if m != nil { - return m.VersionId +func (x *DeletePipelineVersionRequest) GetVersionId() string { + if x != nil { + return x.VersionId } return "" } type Pipeline struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Output. Unique pipeline ID. Generated by API server. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Output. The time this pipeline is created. - CreatedAt *timestamp.Timestamp `protobuf:"bytes,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Optional input field. Pipeline name provided by user. If not specified, // file name is used as pipeline name. Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` @@ -793,107 +930,115 @@ type Pipeline struct { DefaultVersion *PipelineVersion `protobuf:"bytes,8,opt,name=default_version,json=defaultVersion,proto3" json:"default_version,omitempty"` // Input field. Specify which resource this pipeline belongs to. // For Pipeline, the only valid resource reference is a single Namespace. - ResourceReferences []*ResourceReference `protobuf:"bytes,9,rep,name=resource_references,json=resourceReferences,proto3" json:"resource_references,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ResourceReferences []*ResourceReference `protobuf:"bytes,9,rep,name=resource_references,json=resourceReferences,proto3" json:"resource_references,omitempty"` } -func (m *Pipeline) Reset() { *m = Pipeline{} } -func (m *Pipeline) String() string { return proto.CompactTextString(m) } -func (*Pipeline) ProtoMessage() {} -func (*Pipeline) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{15} +func (x *Pipeline) Reset() { + *x = Pipeline{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Pipeline) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Pipeline.Unmarshal(m, b) -} -func (m *Pipeline) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Pipeline.Marshal(b, m, deterministic) +func (x *Pipeline) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Pipeline) XXX_Merge(src proto.Message) { - xxx_messageInfo_Pipeline.Merge(m, src) -} -func (m *Pipeline) XXX_Size() int { - return xxx_messageInfo_Pipeline.Size(m) -} -func (m *Pipeline) XXX_DiscardUnknown() { - xxx_messageInfo_Pipeline.DiscardUnknown(m) + +func (*Pipeline) ProtoMessage() {} + +func (x *Pipeline) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Pipeline proto.InternalMessageInfo +// Deprecated: Use Pipeline.ProtoReflect.Descriptor instead. +func (*Pipeline) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{15} +} -func (m *Pipeline) GetId() string { - if m != nil { - return m.Id +func (x *Pipeline) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *Pipeline) GetCreatedAt() *timestamp.Timestamp { - if m != nil { - return m.CreatedAt +func (x *Pipeline) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt } return nil } -func (m *Pipeline) GetName() string { - if m != nil { - return m.Name +func (x *Pipeline) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *Pipeline) GetDescription() string { - if m != nil { - return m.Description +func (x *Pipeline) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *Pipeline) GetParameters() []*Parameter { - if m != nil { - return m.Parameters +func (x *Pipeline) GetParameters() []*Parameter { + if x != nil { + return x.Parameters } return nil } -func (m *Pipeline) GetUrl() *Url { - if m != nil { - return m.Url +func (x *Pipeline) GetUrl() *Url { + if x != nil { + return x.Url } return nil } -func (m *Pipeline) GetError() string { - if m != nil { - return m.Error +func (x *Pipeline) GetError() string { + if x != nil { + return x.Error } return "" } -func (m *Pipeline) GetDefaultVersion() *PipelineVersion { - if m != nil { - return m.DefaultVersion +func (x *Pipeline) GetDefaultVersion() *PipelineVersion { + if x != nil { + return x.DefaultVersion } return nil } -func (m *Pipeline) GetResourceReferences() []*ResourceReference { - if m != nil { - return m.ResourceReferences +func (x *Pipeline) GetResourceReferences() []*ResourceReference { + if x != nil { + return x.ResourceReferences } return nil } type PipelineVersion struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Output. Unique version ID. Generated by API server. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Optional input field. Version name provided by user. Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Output. The time this pipeline version is created. - CreatedAt *timestamp.Timestamp `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Output. The input parameters for this pipeline. Parameters []*Parameter `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty"` // Input. Optional. Pipeline version code source. @@ -904,199 +1049,671 @@ type PipelineVersion struct { PackageUrl *Url `protobuf:"bytes,6,opt,name=package_url,json=packageUrl,proto3" json:"package_url,omitempty"` // Input field. Specify which resource this pipeline version belongs to. // For Experiment, the only valid resource reference is a single Namespace. - ResourceReferences []*ResourceReference `protobuf:"bytes,7,rep,name=resource_references,json=resourceReferences,proto3" json:"resource_references,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ResourceReferences []*ResourceReference `protobuf:"bytes,7,rep,name=resource_references,json=resourceReferences,proto3" json:"resource_references,omitempty"` + // Input. Optional. Description for the pipeline version. + Description string `protobuf:"bytes,8,opt,name=description,proto3" json:"description,omitempty"` } -func (m *PipelineVersion) Reset() { *m = PipelineVersion{} } -func (m *PipelineVersion) String() string { return proto.CompactTextString(m) } -func (*PipelineVersion) ProtoMessage() {} -func (*PipelineVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_f11ac7285c35cf45, []int{16} +func (x *PipelineVersion) Reset() { + *x = PipelineVersion{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PipelineVersion) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PipelineVersion.Unmarshal(m, b) -} -func (m *PipelineVersion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PipelineVersion.Marshal(b, m, deterministic) -} -func (m *PipelineVersion) XXX_Merge(src proto.Message) { - xxx_messageInfo_PipelineVersion.Merge(m, src) -} -func (m *PipelineVersion) XXX_Size() int { - return xxx_messageInfo_PipelineVersion.Size(m) +func (x *PipelineVersion) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PipelineVersion) XXX_DiscardUnknown() { - xxx_messageInfo_PipelineVersion.DiscardUnknown(m) + +func (*PipelineVersion) ProtoMessage() {} + +func (x *PipelineVersion) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PipelineVersion proto.InternalMessageInfo +// Deprecated: Use PipelineVersion.ProtoReflect.Descriptor instead. +func (*PipelineVersion) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_proto_rawDescGZIP(), []int{16} +} -func (m *PipelineVersion) GetId() string { - if m != nil { - return m.Id +func (x *PipelineVersion) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *PipelineVersion) GetName() string { - if m != nil { - return m.Name +func (x *PipelineVersion) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *PipelineVersion) GetCreatedAt() *timestamp.Timestamp { - if m != nil { - return m.CreatedAt +func (x *PipelineVersion) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt } return nil } -func (m *PipelineVersion) GetParameters() []*Parameter { - if m != nil { - return m.Parameters +func (x *PipelineVersion) GetParameters() []*Parameter { + if x != nil { + return x.Parameters } return nil } -func (m *PipelineVersion) GetCodeSourceUrl() string { - if m != nil { - return m.CodeSourceUrl +func (x *PipelineVersion) GetCodeSourceUrl() string { + if x != nil { + return x.CodeSourceUrl } return "" } -func (m *PipelineVersion) GetPackageUrl() *Url { - if m != nil { - return m.PackageUrl +func (x *PipelineVersion) GetPackageUrl() *Url { + if x != nil { + return x.PackageUrl } return nil } -func (m *PipelineVersion) GetResourceReferences() []*ResourceReference { - if m != nil { - return m.ResourceReferences +func (x *PipelineVersion) GetResourceReferences() []*ResourceReference { + if x != nil { + return x.ResourceReferences } return nil } -func init() { - proto.RegisterType((*Url)(nil), "api.Url") - proto.RegisterType((*CreatePipelineRequest)(nil), "api.CreatePipelineRequest") - proto.RegisterType((*UpdatePipelineDefaultVersionRequest)(nil), "api.UpdatePipelineDefaultVersionRequest") - proto.RegisterType((*GetPipelineRequest)(nil), "api.GetPipelineRequest") - proto.RegisterType((*ListPipelinesRequest)(nil), "api.ListPipelinesRequest") - proto.RegisterType((*ListPipelinesResponse)(nil), "api.ListPipelinesResponse") - proto.RegisterType((*DeletePipelineRequest)(nil), "api.DeletePipelineRequest") - proto.RegisterType((*GetTemplateRequest)(nil), "api.GetTemplateRequest") - proto.RegisterType((*GetTemplateResponse)(nil), "api.GetTemplateResponse") - proto.RegisterType((*GetPipelineVersionTemplateRequest)(nil), "api.GetPipelineVersionTemplateRequest") - proto.RegisterType((*CreatePipelineVersionRequest)(nil), "api.CreatePipelineVersionRequest") - proto.RegisterType((*GetPipelineVersionRequest)(nil), "api.GetPipelineVersionRequest") - proto.RegisterType((*ListPipelineVersionsRequest)(nil), "api.ListPipelineVersionsRequest") - proto.RegisterType((*ListPipelineVersionsResponse)(nil), "api.ListPipelineVersionsResponse") - proto.RegisterType((*DeletePipelineVersionRequest)(nil), "api.DeletePipelineVersionRequest") - proto.RegisterType((*Pipeline)(nil), "api.Pipeline") - proto.RegisterType((*PipelineVersion)(nil), "api.PipelineVersion") -} - -func init() { proto.RegisterFile("backend/api/pipeline.proto", fileDescriptor_f11ac7285c35cf45) } - -var fileDescriptor_f11ac7285c35cf45 = []byte{ - // 1272 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x57, 0xdf, 0x6e, 0x1b, 0xc5, - 0x17, 0xfe, 0xad, 0x9d, 0x38, 0xf6, 0x71, 0x9d, 0xfc, 0x98, 0xa6, 0x89, 0xbb, 0x71, 0x9a, 0x64, - 0x1b, 0xa5, 0x49, 0x68, 0xed, 0x26, 0x41, 0x08, 0x22, 0x15, 0xa9, 0x26, 0x50, 0x95, 0x02, 0xaa, - 0x9c, 0x84, 0x8b, 0x72, 0xb1, 0x5a, 0x7b, 0x8f, 0xdd, 0x25, 0xeb, 0xdd, 0x65, 0x76, 0x9c, 0xe2, - 0x54, 0x91, 0x50, 0x05, 0x02, 0x89, 0x3b, 0xb8, 0xe0, 0x8e, 0x27, 0xe0, 0x11, 0x90, 0x78, 0x00, - 0x2e, 0x79, 0x05, 0x5e, 0x81, 0x7b, 0xb4, 0xb3, 0x33, 0x9b, 0xfd, 0x63, 0x3b, 0xc9, 0x95, 0x3d, - 0x67, 0xbe, 0xd9, 0x73, 0xce, 0x77, 0xbe, 0x3d, 0x67, 0x16, 0xd4, 0xb6, 0xd1, 0x39, 0x41, 0xc7, - 0x6c, 0x18, 0x9e, 0xd5, 0xf0, 0x2c, 0x0f, 0x6d, 0xcb, 0xc1, 0xba, 0x47, 0x5d, 0xe6, 0x92, 0xbc, - 0xe1, 0x59, 0x6a, 0xad, 0xe7, 0xba, 0x3d, 0x1b, 0xf9, 0xbe, 0xe1, 0x38, 0x2e, 0x33, 0x98, 0xe5, - 0x3a, 0x7e, 0x08, 0x51, 0x57, 0xc4, 0x2e, 0x5f, 0xb5, 0x07, 0xdd, 0x06, 0xb3, 0xfa, 0xe8, 0x33, - 0xa3, 0xef, 0x09, 0xc0, 0x52, 0x1a, 0x80, 0x7d, 0x8f, 0x0d, 0xc5, 0xe6, 0x62, 0xdc, 0x39, 0x52, - 0xea, 0x52, 0x79, 0x2a, 0x11, 0x95, 0x41, 0x8d, 0x3e, 0x32, 0x94, 0x9b, 0xeb, 0xf1, 0x4d, 0x8a, - 0xbe, 0x3b, 0xa0, 0x1d, 0xd4, 0x29, 0x76, 0x91, 0xa2, 0xd3, 0x11, 0xc1, 0xab, 0xf7, 0xf9, 0x4f, - 0xe7, 0x41, 0x0f, 0x9d, 0x07, 0xfe, 0x2b, 0xa3, 0xd7, 0x43, 0xda, 0x70, 0x3d, 0x1e, 0x7b, 0x36, - 0x0f, 0x6d, 0x13, 0xf2, 0xc7, 0xd4, 0x26, 0x6b, 0x70, 0x43, 0x72, 0xa0, 0x0f, 0xa8, 0x5d, 0x55, - 0x56, 0x95, 0xcd, 0x52, 0xab, 0x2c, 0x6d, 0xc7, 0xd4, 0xd6, 0x9a, 0x70, 0xeb, 0x43, 0x8a, 0x06, - 0xc3, 0xe7, 0xc2, 0xd8, 0xc2, 0xaf, 0x07, 0xe8, 0x33, 0xb2, 0x05, 0x45, 0x89, 0xe3, 0xe7, 0xca, - 0xbb, 0x95, 0xba, 0xe1, 0x59, 0xf5, 0x08, 0x17, 0x6d, 0x6b, 0x08, 0x77, 0x8f, 0x3d, 0x33, 0xf6, - 0x8c, 0x03, 0xec, 0x1a, 0x03, 0x9b, 0x7d, 0x81, 0xd4, 0xb7, 0x5c, 0x47, 0x3e, 0x71, 0x05, 0x22, - 0xcf, 0xba, 0x65, 0x8a, 0x60, 0x40, 0x9a, 0x9e, 0x9a, 0x64, 0x19, 0xe0, 0x34, 0x3c, 0x12, 0xec, - 0xe7, 0xf8, 0x7e, 0x49, 0x58, 0x9e, 0x9a, 0xda, 0x3a, 0x90, 0x27, 0xc8, 0xd2, 0x71, 0xce, 0x42, - 0x2e, 0x7a, 0x58, 0xce, 0x32, 0xb5, 0xbf, 0x14, 0x98, 0xff, 0xd4, 0xf2, 0x23, 0x9c, 0x2f, 0x81, - 0xcb, 0x00, 0x9e, 0xd1, 0x43, 0x9d, 0xb9, 0x27, 0xe8, 0x88, 0x03, 0xa5, 0xc0, 0x72, 0x14, 0x18, - 0xc8, 0x12, 0xf0, 0x85, 0xee, 0x5b, 0x67, 0xc8, 0x7d, 0x4f, 0xb7, 0x8a, 0x81, 0xe1, 0xd0, 0x3a, - 0x43, 0xb2, 0x08, 0x33, 0xbe, 0x4b, 0x99, 0xde, 0x1e, 0x56, 0xf3, 0xfc, 0x60, 0x21, 0x58, 0x36, - 0x87, 0x64, 0x01, 0x0a, 0x5d, 0xcb, 0x66, 0x48, 0xab, 0x53, 0xa1, 0x3d, 0x5c, 0x91, 0x8f, 0x61, - 0x21, 0x5b, 0x4a, 0xfd, 0x04, 0x87, 0xd5, 0x69, 0xce, 0xe5, 0xff, 0x39, 0x97, 0x2d, 0x01, 0x79, - 0x86, 0xc3, 0xd6, 0xbc, 0xc4, 0xb7, 0x24, 0xfc, 0x19, 0x0e, 0xb5, 0x9f, 0x14, 0xb8, 0x95, 0xca, - 0xc6, 0xf7, 0x5c, 0xc7, 0x47, 0xf2, 0x36, 0x94, 0x24, 0x75, 0x7e, 0x55, 0x59, 0xcd, 0x67, 0x0b, - 0x74, 0xb1, 0x1f, 0xe4, 0xce, 0x5c, 0x66, 0xd8, 0x61, 0x76, 0x79, 0x9e, 0x5d, 0x89, 0x5b, 0x78, - 0x7a, 0x1b, 0x30, 0xe7, 0xe0, 0x37, 0x4c, 0x8f, 0xf1, 0x13, 0xb2, 0x5f, 0x09, 0xcc, 0xcf, 0x25, - 0x47, 0xda, 0x3d, 0xb8, 0x75, 0x80, 0x36, 0x66, 0xc5, 0x92, 0x2e, 0x42, 0x58, 0xaa, 0x23, 0xec, - 0x7b, 0xb6, 0xc1, 0xc6, 0xa2, 0x76, 0xe0, 0x66, 0x02, 0x25, 0x32, 0x53, 0xa1, 0xc8, 0x84, 0x4d, - 0x80, 0xa3, 0xb5, 0xd6, 0x84, 0xb5, 0x98, 0x06, 0x84, 0xc0, 0xd2, 0x7e, 0x92, 0x3a, 0x52, 0xd2, - 0x3a, 0xfa, 0x1c, 0x6a, 0x49, 0xc9, 0xa7, 0x74, 0x5a, 0x87, 0x19, 0x01, 0x16, 0xc2, 0x9f, 0x4f, - 0xf0, 0x2a, 0xd1, 0x12, 0xa4, 0xed, 0xc3, 0xed, 0x6c, 0x4c, 0x57, 0x8c, 0xe5, 0x4f, 0x05, 0x96, - 0xe2, 0xf5, 0x15, 0xa7, 0x23, 0xd1, 0xee, 0xc1, 0x8d, 0x48, 0x47, 0x81, 0x7a, 0x94, 0x31, 0xea, - 0x29, 0xd3, 0x8b, 0xc5, 0x64, 0x29, 0x27, 0x5f, 0x83, 0x7c, 0xfa, 0x35, 0x88, 0x29, 0x7d, 0x6a, - 0x8c, 0xd2, 0xa7, 0xe3, 0x4a, 0xd7, 0x7e, 0x55, 0xa0, 0x36, 0x3a, 0x03, 0x51, 0xce, 0x87, 0x50, - 0x14, 0xf9, 0x4a, 0x9d, 0x8e, 0xe6, 0x33, 0x42, 0x5d, 0x55, 0x8e, 0x97, 0xa8, 0x5a, 0x7b, 0x04, - 0xb5, 0xa4, 0x5a, 0xaf, 0x57, 0x9a, 0x7f, 0x73, 0x50, 0x94, 0x27, 0xd3, 0xd2, 0x25, 0xef, 0x03, - 0x74, 0xb8, 0x86, 0x4c, 0xdd, 0x60, 0x3c, 0xba, 0xf2, 0xae, 0x5a, 0x0f, 0x87, 0x43, 0x5d, 0x0e, - 0x87, 0xfa, 0x91, 0x9c, 0x1e, 0xad, 0x92, 0x40, 0x3f, 0x66, 0x84, 0xc0, 0x94, 0x63, 0xf4, 0x51, - 0x50, 0xcf, 0xff, 0x93, 0x55, 0x28, 0x9b, 0xe8, 0x77, 0xa8, 0xc5, 0x3b, 0xba, 0x60, 0x3e, 0x6e, - 0x22, 0xf5, 0xa0, 0x6c, 0x62, 0x70, 0xf8, 0xd5, 0x69, 0xce, 0xe3, 0x6c, 0xc8, 0xa3, 0x34, 0xb7, - 0x62, 0x08, 0xa2, 0x42, 0x3e, 0xe8, 0xf8, 0x33, 0x3c, 0xb2, 0x22, 0x07, 0x1e, 0x53, 0xbb, 0x15, - 0x18, 0xc9, 0x3c, 0x4c, 0xf3, 0xe9, 0x54, 0x2d, 0x70, 0x3f, 0xe1, 0x82, 0x3c, 0x82, 0x39, 0x33, - 0xec, 0xdb, 0xba, 0x94, 0x7f, 0x71, 0x82, 0xfc, 0x67, 0xcd, 0x44, 0x93, 0x27, 0x4f, 0xe0, 0x66, - 0xb6, 0xe3, 0xf9, 0xd5, 0x12, 0x8f, 0x74, 0x21, 0x21, 0xd8, 0xa8, 0xc3, 0xb5, 0x48, 0xa6, 0xe9, - 0xf9, 0xda, 0x1f, 0x39, 0x98, 0x4b, 0x39, 0xcb, 0xd0, 0x2f, 0x39, 0xcc, 0xc5, 0x38, 0x4c, 0x96, - 0x24, 0x7f, 0x9d, 0x92, 0x24, 0xc9, 0x9d, 0xba, 0x94, 0xdc, 0x0d, 0x98, 0xeb, 0xb8, 0x26, 0xea, - 0x22, 0xdd, 0x80, 0xe8, 0xf0, 0xa5, 0xa8, 0x04, 0xe6, 0x43, 0x6e, 0x0d, 0xe6, 0xef, 0x16, 0x94, - 0x3d, 0xa3, 0x73, 0x12, 0xc8, 0x38, 0xc0, 0x14, 0x52, 0xc5, 0x00, 0xb1, 0x19, 0x40, 0xc7, 0xd0, - 0x37, 0x73, 0x5d, 0xfa, 0x76, 0x7f, 0x28, 0x5f, 0xd0, 0x77, 0x88, 0xf4, 0xd4, 0xea, 0x20, 0xe9, - 0xc2, 0x6c, 0xb2, 0xe3, 0x11, 0x95, 0x3f, 0x71, 0xe4, 0xe4, 0x57, 0x93, 0x63, 0x44, 0xdb, 0x7a, - 0xf3, 0xf7, 0x3f, 0xbf, 0xe4, 0xee, 0x6a, 0x8b, 0xc1, 0x05, 0xc5, 0x6f, 0x9c, 0xee, 0xb4, 0x91, - 0x19, 0x3b, 0xd1, 0xe5, 0xca, 0xdf, 0x8f, 0x2e, 0x02, 0xe4, 0x4b, 0x28, 0xc7, 0x3a, 0x21, 0x59, - 0xe4, 0x0f, 0xca, 0xce, 0xec, 0xb4, 0x87, 0x75, 0xee, 0xe1, 0x0e, 0xa9, 0x8d, 0xf1, 0xd0, 0x78, - 0x6d, 0x99, 0xe7, 0xa4, 0x07, 0x95, 0xc4, 0x24, 0x24, 0xb7, 0xf9, 0x53, 0x46, 0xcd, 0x7a, 0x55, - 0x1d, 0xb5, 0x15, 0xf6, 0x23, 0x6d, 0x85, 0x7b, 0xbb, 0x4d, 0xc6, 0xe5, 0x43, 0xbe, 0x82, 0xd9, - 0x64, 0xdf, 0x10, 0x6c, 0x8d, 0x1c, 0x7d, 0xea, 0x42, 0x46, 0x62, 0x1f, 0x05, 0x57, 0x42, 0x99, - 0xd4, 0xf6, 0xe4, 0xa4, 0x3c, 0xce, 0x98, 0x1c, 0x60, 0x17, 0x8c, 0xa5, 0x46, 0x9a, 0x5a, 0xcd, - 0x6e, 0x88, 0x74, 0xea, 0xdc, 0xcf, 0x26, 0xd9, 0x98, 0xe4, 0xa7, 0x21, 0x07, 0xa8, 0x4f, 0xde, - 0x28, 0xe9, 0x1b, 0x9f, 0x7c, 0xc9, 0xd6, 0x46, 0x68, 0x22, 0xd9, 0x32, 0xd5, 0x91, 0xad, 0x40, - 0x7b, 0xc8, 0x43, 0xd8, 0xd6, 0x56, 0x46, 0x87, 0x20, 0xdb, 0x89, 0xbf, 0x2f, 0x47, 0x26, 0xf9, - 0x56, 0x49, 0xdc, 0xe5, 0x64, 0x04, 0x77, 0xd2, 0x82, 0xb9, 0x92, 0xfb, 0x77, 0xb8, 0xfb, 0x3a, - 0xb9, 0x7f, 0x89, 0xfb, 0xc6, 0xeb, 0x8b, 0x76, 0x7f, 0x4e, 0xbe, 0x4b, 0xdd, 0x13, 0xe5, 0xdc, - 0x22, 0xab, 0x19, 0xed, 0xa4, 0x86, 0xb2, 0xba, 0x36, 0x01, 0x21, 0xaa, 0x72, 0x8f, 0xc7, 0xb4, - 0x46, 0x2e, 0xa3, 0x84, 0xfc, 0xa8, 0xa4, 0xef, 0x54, 0xc9, 0x72, 0x4c, 0x9a, 0x60, 0x63, 0xb5, - 0x27, 0x18, 0xd9, 0xbe, 0x1e, 0x23, 0xbf, 0x29, 0xa0, 0x8e, 0xbf, 0x5c, 0x91, 0x8d, 0x31, 0xc5, - 0xb9, 0xba, 0x54, 0x3f, 0xe0, 0x61, 0xbd, 0x47, 0xde, 0xbd, 0x4e, 0x58, 0x31, 0xe9, 0xfe, 0xae, - 0x40, 0x6d, 0xd2, 0x87, 0x06, 0xd9, 0x0c, 0x5b, 0xeb, 0xe5, 0xdf, 0x22, 0x63, 0x99, 0xfb, 0x84, - 0x87, 0x78, 0xa0, 0x35, 0xc7, 0xbe, 0x4d, 0xb1, 0x4f, 0x98, 0xf3, 0x46, 0x6a, 0x60, 0x26, 0x02, - 0x6f, 0x7e, 0xaf, 0xfc, 0xfc, 0xf8, 0xb3, 0x56, 0x0d, 0x66, 0x04, 0x8a, 0xbc, 0x45, 0xe6, 0xa0, - 0xa2, 0x96, 0x79, 0x90, 0x87, 0xcc, 0x60, 0x03, 0xff, 0xc5, 0x0a, 0x2c, 0x43, 0xa1, 0x89, 0x06, - 0x45, 0x4a, 0x6e, 0x16, 0x73, 0x6a, 0xc5, 0x18, 0xb0, 0x97, 0x2e, 0xb5, 0xce, 0xf8, 0xe7, 0xdc, - 0x6a, 0xae, 0x7d, 0x03, 0x20, 0x02, 0xfc, 0xef, 0xc5, 0x5e, 0xcf, 0x62, 0x2f, 0x07, 0xed, 0x7a, - 0xc7, 0xed, 0x37, 0x4e, 0x06, 0x6d, 0xec, 0xda, 0xee, 0xab, 0x58, 0x70, 0xf1, 0x2f, 0xc9, 0x9e, - 0xab, 0x77, 0x6c, 0x0b, 0x1d, 0xd6, 0x2e, 0xf0, 0x1c, 0xf7, 0xfe, 0x0b, 0x00, 0x00, 0xff, 0xff, - 0x75, 0x92, 0xcc, 0x35, 0x1c, 0x0f, 0x00, 0x00, +func (x *PipelineVersion) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +var File_backend_api_pipeline_proto protoreflect.FileDescriptor + +var file_backend_api_pipeline_proto_rawDesc = []byte{ + 0x0a, 0x1a, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, + 0x69, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x62, + 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x28, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x12, 0x21, + 0x0a, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x72, + 0x6c, 0x22, 0x42, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x08, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x08, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x65, 0x0a, 0x23, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, + 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x12, + 0x47, 0x65, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x22, 0xcb, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, + 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, + 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, + 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, + 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4b, 0x65, 0x79, + 0x22, 0x8b, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x09, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x09, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, + 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x27, + 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x24, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x31, 0x0a, + 0x13, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x22, 0x42, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x22, 0xbf, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x33, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x22, 0x97, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, + 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x3d, 0x0a, 0x1c, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xf5, 0x02, 0x0a, 0x08, + 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x0a, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x0a, 0x03, 0x75, 0x72, 0x6c, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x72, 0x6c, + 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3d, 0x0a, 0x0f, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x13, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x73, 0x22, 0xde, 0x02, 0x0a, 0x0f, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2e, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x63, 0x6f, 0x64, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x29, + 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x72, 0x6c, 0x52, 0x0a, 0x70, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x47, 0x0a, 0x13, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x12, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x87, 0x0b, 0x0a, 0x0f, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x66, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x17, 0x2f, + 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x3a, 0x08, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x12, 0x5b, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x12, + 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, + 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x67, 0x0a, + 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x19, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, + 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x6a, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1e, 0x2a, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0x70, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x61, + 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, + 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x3a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x80, 0x01, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, + 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x84, 0x01, 0x0a, + 0x14, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, + 0x2a, 0x2c, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, + 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x26, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x12, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, + 0xac, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x4a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x22, 0x42, 0x2f, 0x61, 0x70, 0x69, + 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x42, 0x85, + 0x01, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, + 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x5f, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x92, 0x41, 0x4d, 0x52, 0x1c, 0x0a, 0x07, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x12, 0x11, 0x12, 0x0f, 0x0a, 0x0d, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5a, 0x1f, 0x0a, 0x1d, 0x0a, 0x06, 0x42, 0x65, 0x61, + 0x72, 0x65, 0x72, 0x12, 0x13, 0x08, 0x02, 0x1a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, 0x62, 0x0c, 0x0a, 0x0a, 0x0a, 0x06, 0x42, 0x65, + 0x61, 0x72, 0x65, 0x72, 0x12, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_pipeline_proto_rawDescOnce sync.Once + file_backend_api_pipeline_proto_rawDescData = file_backend_api_pipeline_proto_rawDesc +) + +func file_backend_api_pipeline_proto_rawDescGZIP() []byte { + file_backend_api_pipeline_proto_rawDescOnce.Do(func() { + file_backend_api_pipeline_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_pipeline_proto_rawDescData) + }) + return file_backend_api_pipeline_proto_rawDescData +} + +var file_backend_api_pipeline_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_backend_api_pipeline_proto_goTypes = []interface{}{ + (*Url)(nil), // 0: api.Url + (*CreatePipelineRequest)(nil), // 1: api.CreatePipelineRequest + (*UpdatePipelineDefaultVersionRequest)(nil), // 2: api.UpdatePipelineDefaultVersionRequest + (*GetPipelineRequest)(nil), // 3: api.GetPipelineRequest + (*ListPipelinesRequest)(nil), // 4: api.ListPipelinesRequest + (*ListPipelinesResponse)(nil), // 5: api.ListPipelinesResponse + (*DeletePipelineRequest)(nil), // 6: api.DeletePipelineRequest + (*GetTemplateRequest)(nil), // 7: api.GetTemplateRequest + (*GetTemplateResponse)(nil), // 8: api.GetTemplateResponse + (*GetPipelineVersionTemplateRequest)(nil), // 9: api.GetPipelineVersionTemplateRequest + (*CreatePipelineVersionRequest)(nil), // 10: api.CreatePipelineVersionRequest + (*GetPipelineVersionRequest)(nil), // 11: api.GetPipelineVersionRequest + (*ListPipelineVersionsRequest)(nil), // 12: api.ListPipelineVersionsRequest + (*ListPipelineVersionsResponse)(nil), // 13: api.ListPipelineVersionsResponse + (*DeletePipelineVersionRequest)(nil), // 14: api.DeletePipelineVersionRequest + (*Pipeline)(nil), // 15: api.Pipeline + (*PipelineVersion)(nil), // 16: api.PipelineVersion + (*ResourceKey)(nil), // 17: api.ResourceKey + (*timestamppb.Timestamp)(nil), // 18: google.protobuf.Timestamp + (*Parameter)(nil), // 19: api.Parameter + (*ResourceReference)(nil), // 20: api.ResourceReference + (*emptypb.Empty)(nil), // 21: google.protobuf.Empty +} +var file_backend_api_pipeline_proto_depIdxs = []int32{ + 15, // 0: api.CreatePipelineRequest.pipeline:type_name -> api.Pipeline + 17, // 1: api.ListPipelinesRequest.resource_reference_key:type_name -> api.ResourceKey + 15, // 2: api.ListPipelinesResponse.pipelines:type_name -> api.Pipeline + 16, // 3: api.CreatePipelineVersionRequest.version:type_name -> api.PipelineVersion + 17, // 4: api.ListPipelineVersionsRequest.resource_key:type_name -> api.ResourceKey + 16, // 5: api.ListPipelineVersionsResponse.versions:type_name -> api.PipelineVersion + 18, // 6: api.Pipeline.created_at:type_name -> google.protobuf.Timestamp + 19, // 7: api.Pipeline.parameters:type_name -> api.Parameter + 0, // 8: api.Pipeline.url:type_name -> api.Url + 16, // 9: api.Pipeline.default_version:type_name -> api.PipelineVersion + 20, // 10: api.Pipeline.resource_references:type_name -> api.ResourceReference + 18, // 11: api.PipelineVersion.created_at:type_name -> google.protobuf.Timestamp + 19, // 12: api.PipelineVersion.parameters:type_name -> api.Parameter + 0, // 13: api.PipelineVersion.package_url:type_name -> api.Url + 20, // 14: api.PipelineVersion.resource_references:type_name -> api.ResourceReference + 1, // 15: api.PipelineService.CreatePipeline:input_type -> api.CreatePipelineRequest + 3, // 16: api.PipelineService.GetPipeline:input_type -> api.GetPipelineRequest + 4, // 17: api.PipelineService.ListPipelines:input_type -> api.ListPipelinesRequest + 6, // 18: api.PipelineService.DeletePipeline:input_type -> api.DeletePipelineRequest + 7, // 19: api.PipelineService.GetTemplate:input_type -> api.GetTemplateRequest + 10, // 20: api.PipelineService.CreatePipelineVersion:input_type -> api.CreatePipelineVersionRequest + 11, // 21: api.PipelineService.GetPipelineVersion:input_type -> api.GetPipelineVersionRequest + 12, // 22: api.PipelineService.ListPipelineVersions:input_type -> api.ListPipelineVersionsRequest + 14, // 23: api.PipelineService.DeletePipelineVersion:input_type -> api.DeletePipelineVersionRequest + 9, // 24: api.PipelineService.GetPipelineVersionTemplate:input_type -> api.GetPipelineVersionTemplateRequest + 2, // 25: api.PipelineService.UpdatePipelineDefaultVersion:input_type -> api.UpdatePipelineDefaultVersionRequest + 15, // 26: api.PipelineService.CreatePipeline:output_type -> api.Pipeline + 15, // 27: api.PipelineService.GetPipeline:output_type -> api.Pipeline + 5, // 28: api.PipelineService.ListPipelines:output_type -> api.ListPipelinesResponse + 21, // 29: api.PipelineService.DeletePipeline:output_type -> google.protobuf.Empty + 8, // 30: api.PipelineService.GetTemplate:output_type -> api.GetTemplateResponse + 16, // 31: api.PipelineService.CreatePipelineVersion:output_type -> api.PipelineVersion + 16, // 32: api.PipelineService.GetPipelineVersion:output_type -> api.PipelineVersion + 13, // 33: api.PipelineService.ListPipelineVersions:output_type -> api.ListPipelineVersionsResponse + 21, // 34: api.PipelineService.DeletePipelineVersion:output_type -> google.protobuf.Empty + 8, // 35: api.PipelineService.GetPipelineVersionTemplate:output_type -> api.GetTemplateResponse + 21, // 36: api.PipelineService.UpdatePipelineDefaultVersion:output_type -> google.protobuf.Empty + 26, // [26:37] is the sub-list for method output_type + 15, // [15:26] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name +} + +func init() { file_backend_api_pipeline_proto_init() } +func file_backend_api_pipeline_proto_init() { + if File_backend_api_pipeline_proto != nil { + return + } + file_backend_api_error_proto_init() + file_backend_api_parameter_proto_init() + file_backend_api_resource_reference_proto_init() + if !protoimpl.UnsafeEnabled { + file_backend_api_pipeline_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Url); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreatePipelineRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdatePipelineDefaultVersionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetPipelineRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListPipelinesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListPipelinesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeletePipelineRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTemplateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTemplateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetPipelineVersionTemplateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreatePipelineVersionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetPipelineVersionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListPipelineVersionsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListPipelineVersionsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeletePipelineVersionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Pipeline); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_pipeline_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PipelineVersion); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_pipeline_proto_rawDesc, + NumEnums: 0, + NumMessages: 17, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_backend_api_pipeline_proto_goTypes, + DependencyIndexes: file_backend_api_pipeline_proto_depIdxs, + MessageInfos: file_backend_api_pipeline_proto_msgTypes, + }.Build() + File_backend_api_pipeline_proto = out.File + file_backend_api_pipeline_proto_rawDesc = nil + file_backend_api_pipeline_proto_goTypes = nil + file_backend_api_pipeline_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // PipelineServiceClient is the client API for PipelineService service. // @@ -1109,7 +1726,7 @@ type PipelineServiceClient interface { // Finds all pipelines. ListPipelines(ctx context.Context, in *ListPipelinesRequest, opts ...grpc.CallOption) (*ListPipelinesResponse, error) // Deletes a pipeline and its pipeline versions. - DeletePipeline(ctx context.Context, in *DeletePipelineRequest, opts ...grpc.CallOption) (*empty.Empty, error) + DeletePipeline(ctx context.Context, in *DeletePipelineRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Returns a single YAML template that contains the description, parameters, and metadata associated with the pipeline provided. GetTemplate(ctx context.Context, in *GetTemplateRequest, opts ...grpc.CallOption) (*GetTemplateResponse, error) // Adds a pipeline version to the specified pipeline. @@ -1124,18 +1741,18 @@ type PipelineServiceClient interface { // remaining pipeline versions, the pipeline will have no default version. // Examines the run_service_api.ipynb notebook to learn more about creating a // run using a pipeline version (https://github.com/kubeflow/pipelines/blob/master/tools/benchmarks/run_service_api.ipynb). - DeletePipelineVersion(ctx context.Context, in *DeletePipelineVersionRequest, opts ...grpc.CallOption) (*empty.Empty, error) + DeletePipelineVersion(ctx context.Context, in *DeletePipelineVersionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Returns a YAML template that contains the specified pipeline version's description, parameters and metadata. GetPipelineVersionTemplate(ctx context.Context, in *GetPipelineVersionTemplateRequest, opts ...grpc.CallOption) (*GetTemplateResponse, error) // Update the default pipeline version of a specific pipeline. - UpdatePipelineDefaultVersion(ctx context.Context, in *UpdatePipelineDefaultVersionRequest, opts ...grpc.CallOption) (*empty.Empty, error) + UpdatePipelineDefaultVersion(ctx context.Context, in *UpdatePipelineDefaultVersionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) } type pipelineServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewPipelineServiceClient(cc *grpc.ClientConn) PipelineServiceClient { +func NewPipelineServiceClient(cc grpc.ClientConnInterface) PipelineServiceClient { return &pipelineServiceClient{cc} } @@ -1166,8 +1783,8 @@ func (c *pipelineServiceClient) ListPipelines(ctx context.Context, in *ListPipel return out, nil } -func (c *pipelineServiceClient) DeletePipeline(ctx context.Context, in *DeletePipelineRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *pipelineServiceClient) DeletePipeline(ctx context.Context, in *DeletePipelineRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.PipelineService/DeletePipeline", in, out, opts...) if err != nil { return nil, err @@ -1211,8 +1828,8 @@ func (c *pipelineServiceClient) ListPipelineVersions(ctx context.Context, in *Li return out, nil } -func (c *pipelineServiceClient) DeletePipelineVersion(ctx context.Context, in *DeletePipelineVersionRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *pipelineServiceClient) DeletePipelineVersion(ctx context.Context, in *DeletePipelineVersionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.PipelineService/DeletePipelineVersion", in, out, opts...) if err != nil { return nil, err @@ -1229,8 +1846,8 @@ func (c *pipelineServiceClient) GetPipelineVersionTemplate(ctx context.Context, return out, nil } -func (c *pipelineServiceClient) UpdatePipelineDefaultVersion(ctx context.Context, in *UpdatePipelineDefaultVersionRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *pipelineServiceClient) UpdatePipelineDefaultVersion(ctx context.Context, in *UpdatePipelineDefaultVersionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.PipelineService/UpdatePipelineDefaultVersion", in, out, opts...) if err != nil { return nil, err @@ -1247,7 +1864,7 @@ type PipelineServiceServer interface { // Finds all pipelines. ListPipelines(context.Context, *ListPipelinesRequest) (*ListPipelinesResponse, error) // Deletes a pipeline and its pipeline versions. - DeletePipeline(context.Context, *DeletePipelineRequest) (*empty.Empty, error) + DeletePipeline(context.Context, *DeletePipelineRequest) (*emptypb.Empty, error) // Returns a single YAML template that contains the description, parameters, and metadata associated with the pipeline provided. GetTemplate(context.Context, *GetTemplateRequest) (*GetTemplateResponse, error) // Adds a pipeline version to the specified pipeline. @@ -1262,48 +1879,48 @@ type PipelineServiceServer interface { // remaining pipeline versions, the pipeline will have no default version. // Examines the run_service_api.ipynb notebook to learn more about creating a // run using a pipeline version (https://github.com/kubeflow/pipelines/blob/master/tools/benchmarks/run_service_api.ipynb). - DeletePipelineVersion(context.Context, *DeletePipelineVersionRequest) (*empty.Empty, error) + DeletePipelineVersion(context.Context, *DeletePipelineVersionRequest) (*emptypb.Empty, error) // Returns a YAML template that contains the specified pipeline version's description, parameters and metadata. GetPipelineVersionTemplate(context.Context, *GetPipelineVersionTemplateRequest) (*GetTemplateResponse, error) // Update the default pipeline version of a specific pipeline. - UpdatePipelineDefaultVersion(context.Context, *UpdatePipelineDefaultVersionRequest) (*empty.Empty, error) + UpdatePipelineDefaultVersion(context.Context, *UpdatePipelineDefaultVersionRequest) (*emptypb.Empty, error) } // UnimplementedPipelineServiceServer can be embedded to have forward compatible implementations. type UnimplementedPipelineServiceServer struct { } -func (*UnimplementedPipelineServiceServer) CreatePipeline(ctx context.Context, req *CreatePipelineRequest) (*Pipeline, error) { +func (*UnimplementedPipelineServiceServer) CreatePipeline(context.Context, *CreatePipelineRequest) (*Pipeline, error) { return nil, status.Errorf(codes.Unimplemented, "method CreatePipeline not implemented") } -func (*UnimplementedPipelineServiceServer) GetPipeline(ctx context.Context, req *GetPipelineRequest) (*Pipeline, error) { +func (*UnimplementedPipelineServiceServer) GetPipeline(context.Context, *GetPipelineRequest) (*Pipeline, error) { return nil, status.Errorf(codes.Unimplemented, "method GetPipeline not implemented") } -func (*UnimplementedPipelineServiceServer) ListPipelines(ctx context.Context, req *ListPipelinesRequest) (*ListPipelinesResponse, error) { +func (*UnimplementedPipelineServiceServer) ListPipelines(context.Context, *ListPipelinesRequest) (*ListPipelinesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListPipelines not implemented") } -func (*UnimplementedPipelineServiceServer) DeletePipeline(ctx context.Context, req *DeletePipelineRequest) (*empty.Empty, error) { +func (*UnimplementedPipelineServiceServer) DeletePipeline(context.Context, *DeletePipelineRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeletePipeline not implemented") } -func (*UnimplementedPipelineServiceServer) GetTemplate(ctx context.Context, req *GetTemplateRequest) (*GetTemplateResponse, error) { +func (*UnimplementedPipelineServiceServer) GetTemplate(context.Context, *GetTemplateRequest) (*GetTemplateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetTemplate not implemented") } -func (*UnimplementedPipelineServiceServer) CreatePipelineVersion(ctx context.Context, req *CreatePipelineVersionRequest) (*PipelineVersion, error) { +func (*UnimplementedPipelineServiceServer) CreatePipelineVersion(context.Context, *CreatePipelineVersionRequest) (*PipelineVersion, error) { return nil, status.Errorf(codes.Unimplemented, "method CreatePipelineVersion not implemented") } -func (*UnimplementedPipelineServiceServer) GetPipelineVersion(ctx context.Context, req *GetPipelineVersionRequest) (*PipelineVersion, error) { +func (*UnimplementedPipelineServiceServer) GetPipelineVersion(context.Context, *GetPipelineVersionRequest) (*PipelineVersion, error) { return nil, status.Errorf(codes.Unimplemented, "method GetPipelineVersion not implemented") } -func (*UnimplementedPipelineServiceServer) ListPipelineVersions(ctx context.Context, req *ListPipelineVersionsRequest) (*ListPipelineVersionsResponse, error) { +func (*UnimplementedPipelineServiceServer) ListPipelineVersions(context.Context, *ListPipelineVersionsRequest) (*ListPipelineVersionsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListPipelineVersions not implemented") } -func (*UnimplementedPipelineServiceServer) DeletePipelineVersion(ctx context.Context, req *DeletePipelineVersionRequest) (*empty.Empty, error) { +func (*UnimplementedPipelineServiceServer) DeletePipelineVersion(context.Context, *DeletePipelineVersionRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeletePipelineVersion not implemented") } -func (*UnimplementedPipelineServiceServer) GetPipelineVersionTemplate(ctx context.Context, req *GetPipelineVersionTemplateRequest) (*GetTemplateResponse, error) { +func (*UnimplementedPipelineServiceServer) GetPipelineVersionTemplate(context.Context, *GetPipelineVersionTemplateRequest) (*GetTemplateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetPipelineVersionTemplate not implemented") } -func (*UnimplementedPipelineServiceServer) UpdatePipelineDefaultVersion(ctx context.Context, req *UpdatePipelineDefaultVersionRequest) (*empty.Empty, error) { +func (*UnimplementedPipelineServiceServer) UpdatePipelineDefaultVersion(context.Context, *UpdatePipelineDefaultVersionRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdatePipelineDefaultVersion not implemented") } diff --git a/backend/api/go_client/pipeline_spec.pb.go b/backend/api/go_client/pipeline_spec.pb.go index 984d83f449..560d859e0a 100644 --- a/backend/api/go_client/pipeline_spec.pb.go +++ b/backend/api/go_client/pipeline_spec.pb.go @@ -1,26 +1,44 @@ +// Copyright 2018 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: backend/api/pipeline_spec.proto package go_client import ( - fmt "fmt" - proto "github.com/golang/protobuf/proto" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) type PipelineSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Optional input field. The ID of the pipeline user uploaded before. PipelineId string `protobuf:"bytes,1,opt,name=pipeline_id,json=pipelineId,proto3" json:"pipeline_id,omitempty"` // Optional output field. The name of the pipeline. @@ -34,93 +52,166 @@ type PipelineSpec struct { // The parameter user provide to inject to the pipeline JSON. // If a default value of a parameter exist in the JSON, // the value user provided here will replace. - Parameters []*Parameter `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Parameters []*Parameter `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty"` } -func (m *PipelineSpec) Reset() { *m = PipelineSpec{} } -func (m *PipelineSpec) String() string { return proto.CompactTextString(m) } -func (*PipelineSpec) ProtoMessage() {} -func (*PipelineSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c55e79247db888, []int{0} +func (x *PipelineSpec) Reset() { + *x = PipelineSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_pipeline_spec_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PipelineSpec) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PipelineSpec.Unmarshal(m, b) +func (x *PipelineSpec) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PipelineSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PipelineSpec.Marshal(b, m, deterministic) -} -func (m *PipelineSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_PipelineSpec.Merge(m, src) -} -func (m *PipelineSpec) XXX_Size() int { - return xxx_messageInfo_PipelineSpec.Size(m) -} -func (m *PipelineSpec) XXX_DiscardUnknown() { - xxx_messageInfo_PipelineSpec.DiscardUnknown(m) + +func (*PipelineSpec) ProtoMessage() {} + +func (x *PipelineSpec) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_pipeline_spec_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PipelineSpec proto.InternalMessageInfo +// Deprecated: Use PipelineSpec.ProtoReflect.Descriptor instead. +func (*PipelineSpec) Descriptor() ([]byte, []int) { + return file_backend_api_pipeline_spec_proto_rawDescGZIP(), []int{0} +} -func (m *PipelineSpec) GetPipelineId() string { - if m != nil { - return m.PipelineId +func (x *PipelineSpec) GetPipelineId() string { + if x != nil { + return x.PipelineId } return "" } -func (m *PipelineSpec) GetPipelineName() string { - if m != nil { - return m.PipelineName +func (x *PipelineSpec) GetPipelineName() string { + if x != nil { + return x.PipelineName } return "" } -func (m *PipelineSpec) GetWorkflowManifest() string { - if m != nil { - return m.WorkflowManifest +func (x *PipelineSpec) GetWorkflowManifest() string { + if x != nil { + return x.WorkflowManifest } return "" } -func (m *PipelineSpec) GetPipelineManifest() string { - if m != nil { - return m.PipelineManifest +func (x *PipelineSpec) GetPipelineManifest() string { + if x != nil { + return x.PipelineManifest } return "" } -func (m *PipelineSpec) GetParameters() []*Parameter { - if m != nil { - return m.Parameters +func (x *PipelineSpec) GetParameters() []*Parameter { + if x != nil { + return x.Parameters } return nil } -func init() { - proto.RegisterType((*PipelineSpec)(nil), "api.PipelineSpec") +var File_backend_api_pipeline_spec_proto protoreflect.FileDescriptor + +var file_backend_api_pipeline_spec_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, + 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4d, 0x61, 0x6e, 0x69, + 0x66, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x67, 0x6f, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_pipeline_spec_proto_rawDescOnce sync.Once + file_backend_api_pipeline_spec_proto_rawDescData = file_backend_api_pipeline_spec_proto_rawDesc +) + +func file_backend_api_pipeline_spec_proto_rawDescGZIP() []byte { + file_backend_api_pipeline_spec_proto_rawDescOnce.Do(func() { + file_backend_api_pipeline_spec_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_pipeline_spec_proto_rawDescData) + }) + return file_backend_api_pipeline_spec_proto_rawDescData } -func init() { proto.RegisterFile("backend/api/pipeline_spec.proto", fileDescriptor_d2c55e79247db888) } - -var fileDescriptor_d2c55e79247db888 = []byte{ - // 236 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0xd0, 0xc1, 0x4a, 0xc3, 0x40, - 0x10, 0x06, 0x60, 0x62, 0x54, 0x70, 0x5a, 0x45, 0x73, 0x0a, 0x7a, 0x68, 0xd1, 0x4b, 0x41, 0xd8, - 0x80, 0xc5, 0x17, 0xf0, 0xe6, 0x41, 0x29, 0xf5, 0xe6, 0x25, 0x4c, 0x36, 0xd3, 0x3a, 0x24, 0xbb, - 0x3b, 0x24, 0x5b, 0xfa, 0xb6, 0x3e, 0x8b, 0x34, 0xed, 0x2e, 0xf1, 0xfa, 0xcf, 0xb7, 0xb3, 0xcc, - 0x0f, 0xb3, 0x0a, 0x75, 0x43, 0xb6, 0x2e, 0x50, 0xb8, 0x10, 0x16, 0x6a, 0xd9, 0x52, 0xd9, 0x0b, - 0x69, 0x25, 0x9d, 0xf3, 0x2e, 0x4b, 0x51, 0xf8, 0xfe, 0xe1, 0x9f, 0xc2, 0x0e, 0x0d, 0x79, 0xea, - 0x8e, 0xe2, 0xf1, 0x37, 0x81, 0xe9, 0xea, 0xf4, 0xf2, 0x4b, 0x48, 0x67, 0x33, 0x98, 0xc4, 0x4d, - 0x5c, 0xe7, 0xc9, 0x3c, 0x59, 0x5c, 0xad, 0x21, 0x44, 0xef, 0x75, 0xf6, 0x04, 0xd7, 0x11, 0x58, - 0x34, 0x94, 0x5f, 0x0c, 0x64, 0x1a, 0xc2, 0x4f, 0x34, 0x94, 0x3d, 0xc3, 0xdd, 0xde, 0x75, 0xcd, - 0xa6, 0x75, 0xfb, 0xd2, 0xa0, 0xe5, 0x0d, 0xf5, 0x3e, 0x3f, 0x1b, 0xe0, 0x6d, 0x18, 0x7c, 0x9c, - 0xf2, 0x03, 0x8e, 0x1b, 0x23, 0x4e, 0x8f, 0x38, 0x0c, 0x22, 0x56, 0x00, 0xf1, 0x86, 0x3e, 0x3f, - 0x9f, 0xa7, 0x8b, 0xc9, 0xcb, 0x8d, 0x42, 0x61, 0xb5, 0x0a, 0xf1, 0x7a, 0x24, 0xde, 0x5e, 0xbf, - 0x97, 0x5b, 0xf6, 0x3f, 0xbb, 0x4a, 0x69, 0x67, 0x8a, 0x66, 0x57, 0xd1, 0xe1, 0xef, 0xd8, 0x56, - 0x5f, 0x8c, 0xdb, 0xd9, 0xba, 0x52, 0xb7, 0x4c, 0xd6, 0x57, 0x97, 0x43, 0x3d, 0xcb, 0xbf, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xeb, 0x6c, 0x41, 0xaf, 0x63, 0x01, 0x00, 0x00, +var file_backend_api_pipeline_spec_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_backend_api_pipeline_spec_proto_goTypes = []interface{}{ + (*PipelineSpec)(nil), // 0: api.PipelineSpec + (*Parameter)(nil), // 1: api.Parameter +} +var file_backend_api_pipeline_spec_proto_depIdxs = []int32{ + 1, // 0: api.PipelineSpec.parameters:type_name -> api.Parameter + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_backend_api_pipeline_spec_proto_init() } +func file_backend_api_pipeline_spec_proto_init() { + if File_backend_api_pipeline_spec_proto != nil { + return + } + file_backend_api_parameter_proto_init() + if !protoimpl.UnsafeEnabled { + file_backend_api_pipeline_spec_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PipelineSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_pipeline_spec_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_backend_api_pipeline_spec_proto_goTypes, + DependencyIndexes: file_backend_api_pipeline_spec_proto_depIdxs, + MessageInfos: file_backend_api_pipeline_spec_proto_msgTypes, + }.Build() + File_backend_api_pipeline_spec_proto = out.File + file_backend_api_pipeline_spec_proto_rawDesc = nil + file_backend_api_pipeline_spec_proto_goTypes = nil + file_backend_api_pipeline_spec_proto_depIdxs = nil } diff --git a/backend/api/go_client/report.pb.go b/backend/api/go_client/report.pb.go index 8b20e8b645..2b4c207378 100644 --- a/backend/api/go_client/report.pb.go +++ b/backend/api/go_client/report.pb.go @@ -1,168 +1,289 @@ +// Copyright 2018 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: backend/api/report.proto package go_client import ( context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - empty "github.com/golang/protobuf/ptypes/empty" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) type ReportWorkflowRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Workflow is a workflow custom resource marshalled into a json string. - Workflow string `protobuf:"bytes,1,opt,name=workflow,proto3" json:"workflow,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Workflow string `protobuf:"bytes,1,opt,name=workflow,proto3" json:"workflow,omitempty"` } -func (m *ReportWorkflowRequest) Reset() { *m = ReportWorkflowRequest{} } -func (m *ReportWorkflowRequest) String() string { return proto.CompactTextString(m) } -func (*ReportWorkflowRequest) ProtoMessage() {} -func (*ReportWorkflowRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_cf464d903a9c793e, []int{0} +func (x *ReportWorkflowRequest) Reset() { + *x = ReportWorkflowRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_report_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ReportWorkflowRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ReportWorkflowRequest.Unmarshal(m, b) +func (x *ReportWorkflowRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ReportWorkflowRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ReportWorkflowRequest.Marshal(b, m, deterministic) -} -func (m *ReportWorkflowRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ReportWorkflowRequest.Merge(m, src) -} -func (m *ReportWorkflowRequest) XXX_Size() int { - return xxx_messageInfo_ReportWorkflowRequest.Size(m) -} -func (m *ReportWorkflowRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ReportWorkflowRequest.DiscardUnknown(m) + +func (*ReportWorkflowRequest) ProtoMessage() {} + +func (x *ReportWorkflowRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_report_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ReportWorkflowRequest proto.InternalMessageInfo +// Deprecated: Use ReportWorkflowRequest.ProtoReflect.Descriptor instead. +func (*ReportWorkflowRequest) Descriptor() ([]byte, []int) { + return file_backend_api_report_proto_rawDescGZIP(), []int{0} +} -func (m *ReportWorkflowRequest) GetWorkflow() string { - if m != nil { - return m.Workflow +func (x *ReportWorkflowRequest) GetWorkflow() string { + if x != nil { + return x.Workflow } return "" } type ReportScheduledWorkflowRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // ScheduledWorkflow a ScheduledWorkflow resource marshalled into a json string. - ScheduledWorkflow string `protobuf:"bytes,1,opt,name=scheduled_workflow,json=scheduledWorkflow,proto3" json:"scheduled_workflow,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ScheduledWorkflow string `protobuf:"bytes,1,opt,name=scheduled_workflow,json=scheduledWorkflow,proto3" json:"scheduled_workflow,omitempty"` } -func (m *ReportScheduledWorkflowRequest) Reset() { *m = ReportScheduledWorkflowRequest{} } -func (m *ReportScheduledWorkflowRequest) String() string { return proto.CompactTextString(m) } -func (*ReportScheduledWorkflowRequest) ProtoMessage() {} -func (*ReportScheduledWorkflowRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_cf464d903a9c793e, []int{1} +func (x *ReportScheduledWorkflowRequest) Reset() { + *x = ReportScheduledWorkflowRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_report_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ReportScheduledWorkflowRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ReportScheduledWorkflowRequest.Unmarshal(m, b) +func (x *ReportScheduledWorkflowRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ReportScheduledWorkflowRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ReportScheduledWorkflowRequest.Marshal(b, m, deterministic) + +func (*ReportScheduledWorkflowRequest) ProtoMessage() {} + +func (x *ReportScheduledWorkflowRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_report_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *ReportScheduledWorkflowRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ReportScheduledWorkflowRequest.Merge(m, src) + +// Deprecated: Use ReportScheduledWorkflowRequest.ProtoReflect.Descriptor instead. +func (*ReportScheduledWorkflowRequest) Descriptor() ([]byte, []int) { + return file_backend_api_report_proto_rawDescGZIP(), []int{1} } -func (m *ReportScheduledWorkflowRequest) XXX_Size() int { - return xxx_messageInfo_ReportScheduledWorkflowRequest.Size(m) + +func (x *ReportScheduledWorkflowRequest) GetScheduledWorkflow() string { + if x != nil { + return x.ScheduledWorkflow + } + return "" } -func (m *ReportScheduledWorkflowRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ReportScheduledWorkflowRequest.DiscardUnknown(m) + +var File_backend_api_report_proto protoreflect.FileDescriptor + +var file_backend_api_report_proto_rawDesc = []byte{ + 0x0a, 0x18, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x33, 0x0a, 0x15, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, + 0x4f, 0x0a, 0x1e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x5f, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x32, 0x97, 0x02, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, + 0x22, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x3a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x12, 0x94, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, + 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3c, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x36, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x3a, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x64, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, + 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, + 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } -var xxx_messageInfo_ReportScheduledWorkflowRequest proto.InternalMessageInfo +var ( + file_backend_api_report_proto_rawDescOnce sync.Once + file_backend_api_report_proto_rawDescData = file_backend_api_report_proto_rawDesc +) -func (m *ReportScheduledWorkflowRequest) GetScheduledWorkflow() string { - if m != nil { - return m.ScheduledWorkflow - } - return "" +func file_backend_api_report_proto_rawDescGZIP() []byte { + file_backend_api_report_proto_rawDescOnce.Do(func() { + file_backend_api_report_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_report_proto_rawDescData) + }) + return file_backend_api_report_proto_rawDescData +} + +var file_backend_api_report_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_backend_api_report_proto_goTypes = []interface{}{ + (*ReportWorkflowRequest)(nil), // 0: api.ReportWorkflowRequest + (*ReportScheduledWorkflowRequest)(nil), // 1: api.ReportScheduledWorkflowRequest + (*emptypb.Empty)(nil), // 2: google.protobuf.Empty +} +var file_backend_api_report_proto_depIdxs = []int32{ + 0, // 0: api.ReportService.ReportWorkflow:input_type -> api.ReportWorkflowRequest + 1, // 1: api.ReportService.ReportScheduledWorkflow:input_type -> api.ReportScheduledWorkflowRequest + 2, // 2: api.ReportService.ReportWorkflow:output_type -> google.protobuf.Empty + 2, // 3: api.ReportService.ReportScheduledWorkflow:output_type -> google.protobuf.Empty + 2, // [2:4] is the sub-list for method output_type + 0, // [0:2] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name } -func init() { - proto.RegisterType((*ReportWorkflowRequest)(nil), "api.ReportWorkflowRequest") - proto.RegisterType((*ReportScheduledWorkflowRequest)(nil), "api.ReportScheduledWorkflowRequest") -} - -func init() { proto.RegisterFile("backend/api/report.proto", fileDescriptor_cf464d903a9c793e) } - -var fileDescriptor_cf464d903a9c793e = []byte{ - // 310 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcf, 0x4a, 0xc3, 0x40, - 0x10, 0x87, 0x69, 0x05, 0xd1, 0x05, 0x05, 0x17, 0xb4, 0x25, 0x8a, 0x94, 0xf4, 0xa2, 0x07, 0x77, - 0xa9, 0x45, 0x0f, 0xe2, 0x49, 0xf0, 0x2c, 0xd4, 0x83, 0xe0, 0xa5, 0xec, 0xa6, 0xd3, 0x74, 0x69, - 0xba, 0xb3, 0x66, 0x37, 0x2d, 0x5e, 0x7d, 0x05, 0x05, 0x1f, 0xcc, 0x57, 0xf0, 0x41, 0x24, 0x7f, - 0x6d, 0x43, 0x73, 0x9c, 0xf9, 0x65, 0x26, 0xdf, 0x37, 0x2c, 0xe9, 0x4a, 0x11, 0xcc, 0x41, 0x4f, - 0xb8, 0x30, 0x8a, 0xc7, 0x60, 0x30, 0x76, 0xcc, 0xc4, 0xe8, 0x90, 0xee, 0x08, 0xa3, 0xbc, 0xb3, - 0x10, 0x31, 0x8c, 0x20, 0x4b, 0x85, 0xd6, 0xe8, 0x84, 0x53, 0xa8, 0x6d, 0xfe, 0x89, 0x77, 0x5a, - 0xa4, 0x59, 0x25, 0x93, 0x29, 0x87, 0x85, 0x71, 0xef, 0x79, 0xe8, 0x0f, 0xc9, 0xf1, 0x28, 0xdb, - 0xf7, 0x82, 0xf1, 0x7c, 0x1a, 0xe1, 0x6a, 0x04, 0x6f, 0x09, 0x58, 0x47, 0x3d, 0xb2, 0xb7, 0x2a, - 0x5a, 0xdd, 0x56, 0xaf, 0x75, 0xb1, 0x3f, 0xaa, 0x6a, 0xff, 0x89, 0x9c, 0xe7, 0x43, 0xcf, 0xc1, - 0x0c, 0x26, 0x49, 0x04, 0x93, 0xfa, 0xf4, 0x15, 0xa1, 0xb6, 0xcc, 0xc6, 0xb5, 0x3d, 0x47, 0xb6, - 0x3e, 0x75, 0xfd, 0xdd, 0x26, 0x07, 0xc5, 0x46, 0x88, 0x97, 0x2a, 0x00, 0x8a, 0xe4, 0x70, 0x93, - 0x8b, 0x7a, 0x4c, 0x18, 0xc5, 0xb6, 0xc2, 0x7a, 0x27, 0x2c, 0x77, 0x64, 0xa5, 0x23, 0x7b, 0x4c, - 0x1d, 0xfd, 0xcb, 0x8f, 0x9f, 0xdf, 0xcf, 0x76, 0xdf, 0xef, 0xa4, 0xa7, 0xb1, 0x7c, 0x39, 0x90, - 0xe0, 0xc4, 0x80, 0x97, 0x40, 0xf6, 0xae, 0x72, 0xa2, 0x5f, 0x2d, 0xd2, 0x69, 0x90, 0xa2, 0xfd, - 0xb5, 0x5f, 0x37, 0x29, 0x37, 0x32, 0xdc, 0x67, 0x0c, 0xb7, 0x7e, 0x6f, 0x93, 0xa1, 0x3a, 0xc2, - 0x3f, 0xcc, 0x96, 0x93, 0x3d, 0xdc, 0xbc, 0x0e, 0x43, 0xe5, 0x66, 0x89, 0x64, 0x01, 0x2e, 0xf8, - 0x3c, 0x91, 0x90, 0xb6, 0xb9, 0x51, 0x06, 0x22, 0xa5, 0xc1, 0xf2, 0xf5, 0x97, 0x11, 0xe2, 0x38, - 0x88, 0x14, 0x68, 0x27, 0x77, 0x33, 0x88, 0xe1, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x12, 0xe5, - 0x5d, 0x89, 0x39, 0x02, 0x00, 0x00, +func init() { file_backend_api_report_proto_init() } +func file_backend_api_report_proto_init() { + if File_backend_api_report_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_backend_api_report_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReportWorkflowRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_report_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReportScheduledWorkflowRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_report_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_backend_api_report_proto_goTypes, + DependencyIndexes: file_backend_api_report_proto_depIdxs, + MessageInfos: file_backend_api_report_proto_msgTypes, + }.Build() + File_backend_api_report_proto = out.File + file_backend_api_report_proto_rawDesc = nil + file_backend_api_report_proto_goTypes = nil + file_backend_api_report_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // ReportServiceClient is the client API for ReportService service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type ReportServiceClient interface { - ReportWorkflow(ctx context.Context, in *ReportWorkflowRequest, opts ...grpc.CallOption) (*empty.Empty, error) - ReportScheduledWorkflow(ctx context.Context, in *ReportScheduledWorkflowRequest, opts ...grpc.CallOption) (*empty.Empty, error) + ReportWorkflow(ctx context.Context, in *ReportWorkflowRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + ReportScheduledWorkflow(ctx context.Context, in *ReportScheduledWorkflowRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) } type reportServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewReportServiceClient(cc *grpc.ClientConn) ReportServiceClient { +func NewReportServiceClient(cc grpc.ClientConnInterface) ReportServiceClient { return &reportServiceClient{cc} } -func (c *reportServiceClient) ReportWorkflow(ctx context.Context, in *ReportWorkflowRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *reportServiceClient) ReportWorkflow(ctx context.Context, in *ReportWorkflowRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.ReportService/ReportWorkflow", in, out, opts...) if err != nil { return nil, err @@ -170,8 +291,8 @@ func (c *reportServiceClient) ReportWorkflow(ctx context.Context, in *ReportWork return out, nil } -func (c *reportServiceClient) ReportScheduledWorkflow(ctx context.Context, in *ReportScheduledWorkflowRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *reportServiceClient) ReportScheduledWorkflow(ctx context.Context, in *ReportScheduledWorkflowRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.ReportService/ReportScheduledWorkflow", in, out, opts...) if err != nil { return nil, err @@ -181,18 +302,18 @@ func (c *reportServiceClient) ReportScheduledWorkflow(ctx context.Context, in *R // ReportServiceServer is the server API for ReportService service. type ReportServiceServer interface { - ReportWorkflow(context.Context, *ReportWorkflowRequest) (*empty.Empty, error) - ReportScheduledWorkflow(context.Context, *ReportScheduledWorkflowRequest) (*empty.Empty, error) + ReportWorkflow(context.Context, *ReportWorkflowRequest) (*emptypb.Empty, error) + ReportScheduledWorkflow(context.Context, *ReportScheduledWorkflowRequest) (*emptypb.Empty, error) } // UnimplementedReportServiceServer can be embedded to have forward compatible implementations. type UnimplementedReportServiceServer struct { } -func (*UnimplementedReportServiceServer) ReportWorkflow(ctx context.Context, req *ReportWorkflowRequest) (*empty.Empty, error) { +func (*UnimplementedReportServiceServer) ReportWorkflow(context.Context, *ReportWorkflowRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method ReportWorkflow not implemented") } -func (*UnimplementedReportServiceServer) ReportScheduledWorkflow(ctx context.Context, req *ReportScheduledWorkflowRequest) (*empty.Empty, error) { +func (*UnimplementedReportServiceServer) ReportScheduledWorkflow(context.Context, *ReportScheduledWorkflowRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method ReportScheduledWorkflow not implemented") } diff --git a/backend/api/go_client/resource_reference.pb.go b/backend/api/go_client/resource_reference.pb.go index e1a90c5659..4fd6143903 100644 --- a/backend/api/go_client/resource_reference.pb.go +++ b/backend/api/go_client/resource_reference.pb.go @@ -1,24 +1,38 @@ +// Copyright 2018 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: backend/api/resource_reference.proto package go_client import ( - fmt "fmt" - proto "github.com/golang/protobuf/proto" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) type ResourceType int32 @@ -31,30 +45,51 @@ const ( ResourceType_NAMESPACE ResourceType = 5 ) -var ResourceType_name = map[int32]string{ - 0: "UNKNOWN_RESOURCE_TYPE", - 1: "EXPERIMENT", - 2: "JOB", - 3: "PIPELINE", - 4: "PIPELINE_VERSION", - 5: "NAMESPACE", -} +// Enum value maps for ResourceType. +var ( + ResourceType_name = map[int32]string{ + 0: "UNKNOWN_RESOURCE_TYPE", + 1: "EXPERIMENT", + 2: "JOB", + 3: "PIPELINE", + 4: "PIPELINE_VERSION", + 5: "NAMESPACE", + } + ResourceType_value = map[string]int32{ + "UNKNOWN_RESOURCE_TYPE": 0, + "EXPERIMENT": 1, + "JOB": 2, + "PIPELINE": 3, + "PIPELINE_VERSION": 4, + "NAMESPACE": 5, + } +) -var ResourceType_value = map[string]int32{ - "UNKNOWN_RESOURCE_TYPE": 0, - "EXPERIMENT": 1, - "JOB": 2, - "PIPELINE": 3, - "PIPELINE_VERSION": 4, - "NAMESPACE": 5, +func (x ResourceType) Enum() *ResourceType { + p := new(ResourceType) + *p = x + return p } func (x ResourceType) String() string { - return proto.EnumName(ResourceType_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } +func (ResourceType) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_resource_reference_proto_enumTypes[0].Descriptor() +} + +func (ResourceType) Type() protoreflect.EnumType { + return &file_backend_api_resource_reference_proto_enumTypes[0] +} + +func (x ResourceType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ResourceType.Descriptor instead. func (ResourceType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_465b210f45a041b3, []int{0} + return file_backend_api_resource_reference_proto_rawDescGZIP(), []int{0} } type Relationship int32 @@ -65,166 +100,284 @@ const ( Relationship_CREATOR Relationship = 2 ) -var Relationship_name = map[int32]string{ - 0: "UNKNOWN_RELATIONSHIP", - 1: "OWNER", - 2: "CREATOR", -} +// Enum value maps for Relationship. +var ( + Relationship_name = map[int32]string{ + 0: "UNKNOWN_RELATIONSHIP", + 1: "OWNER", + 2: "CREATOR", + } + Relationship_value = map[string]int32{ + "UNKNOWN_RELATIONSHIP": 0, + "OWNER": 1, + "CREATOR": 2, + } +) -var Relationship_value = map[string]int32{ - "UNKNOWN_RELATIONSHIP": 0, - "OWNER": 1, - "CREATOR": 2, +func (x Relationship) Enum() *Relationship { + p := new(Relationship) + *p = x + return p } func (x Relationship) String() string { - return proto.EnumName(Relationship_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Relationship) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_resource_reference_proto_enumTypes[1].Descriptor() +} + +func (Relationship) Type() protoreflect.EnumType { + return &file_backend_api_resource_reference_proto_enumTypes[1] } +func (x Relationship) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Relationship.Descriptor instead. func (Relationship) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_465b210f45a041b3, []int{1} + return file_backend_api_resource_reference_proto_rawDescGZIP(), []int{1} } type ResourceKey struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The type of the resource that referred to. Type ResourceType `protobuf:"varint,1,opt,name=type,proto3,enum=api.ResourceType" json:"type,omitempty"` // The ID of the resource that referred to. - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` } -func (m *ResourceKey) Reset() { *m = ResourceKey{} } -func (m *ResourceKey) String() string { return proto.CompactTextString(m) } -func (*ResourceKey) ProtoMessage() {} -func (*ResourceKey) Descriptor() ([]byte, []int) { - return fileDescriptor_465b210f45a041b3, []int{0} +func (x *ResourceKey) Reset() { + *x = ResourceKey{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_resource_reference_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ResourceKey) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ResourceKey.Unmarshal(m, b) -} -func (m *ResourceKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ResourceKey.Marshal(b, m, deterministic) -} -func (m *ResourceKey) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResourceKey.Merge(m, src) +func (x *ResourceKey) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ResourceKey) XXX_Size() int { - return xxx_messageInfo_ResourceKey.Size(m) -} -func (m *ResourceKey) XXX_DiscardUnknown() { - xxx_messageInfo_ResourceKey.DiscardUnknown(m) + +func (*ResourceKey) ProtoMessage() {} + +func (x *ResourceKey) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_resource_reference_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ResourceKey proto.InternalMessageInfo +// Deprecated: Use ResourceKey.ProtoReflect.Descriptor instead. +func (*ResourceKey) Descriptor() ([]byte, []int) { + return file_backend_api_resource_reference_proto_rawDescGZIP(), []int{0} +} -func (m *ResourceKey) GetType() ResourceType { - if m != nil { - return m.Type +func (x *ResourceKey) GetType() ResourceType { + if x != nil { + return x.Type } return ResourceType_UNKNOWN_RESOURCE_TYPE } -func (m *ResourceKey) GetId() string { - if m != nil { - return m.Id +func (x *ResourceKey) GetId() string { + if x != nil { + return x.Id } return "" } type ResourceReference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Key *ResourceKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` // The name of the resource that referred to. Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` // Required field. The relationship from referred resource to the object. - Relationship Relationship `protobuf:"varint,2,opt,name=relationship,proto3,enum=api.Relationship" json:"relationship,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Relationship Relationship `protobuf:"varint,2,opt,name=relationship,proto3,enum=api.Relationship" json:"relationship,omitempty"` } -func (m *ResourceReference) Reset() { *m = ResourceReference{} } -func (m *ResourceReference) String() string { return proto.CompactTextString(m) } -func (*ResourceReference) ProtoMessage() {} -func (*ResourceReference) Descriptor() ([]byte, []int) { - return fileDescriptor_465b210f45a041b3, []int{1} +func (x *ResourceReference) Reset() { + *x = ResourceReference{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_resource_reference_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ResourceReference) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ResourceReference.Unmarshal(m, b) -} -func (m *ResourceReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ResourceReference.Marshal(b, m, deterministic) -} -func (m *ResourceReference) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResourceReference.Merge(m, src) +func (x *ResourceReference) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ResourceReference) XXX_Size() int { - return xxx_messageInfo_ResourceReference.Size(m) -} -func (m *ResourceReference) XXX_DiscardUnknown() { - xxx_messageInfo_ResourceReference.DiscardUnknown(m) + +func (*ResourceReference) ProtoMessage() {} + +func (x *ResourceReference) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_resource_reference_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ResourceReference proto.InternalMessageInfo +// Deprecated: Use ResourceReference.ProtoReflect.Descriptor instead. +func (*ResourceReference) Descriptor() ([]byte, []int) { + return file_backend_api_resource_reference_proto_rawDescGZIP(), []int{1} +} -func (m *ResourceReference) GetKey() *ResourceKey { - if m != nil { - return m.Key +func (x *ResourceReference) GetKey() *ResourceKey { + if x != nil { + return x.Key } return nil } -func (m *ResourceReference) GetName() string { - if m != nil { - return m.Name +func (x *ResourceReference) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *ResourceReference) GetRelationship() Relationship { - if m != nil { - return m.Relationship +func (x *ResourceReference) GetRelationship() Relationship { + if x != nil { + return x.Relationship } return Relationship_UNKNOWN_RELATIONSHIP } -func init() { - proto.RegisterEnum("api.ResourceType", ResourceType_name, ResourceType_value) - proto.RegisterEnum("api.Relationship", Relationship_name, Relationship_value) - proto.RegisterType((*ResourceKey)(nil), "api.ResourceKey") - proto.RegisterType((*ResourceReference)(nil), "api.ResourceReference") -} - -func init() { - proto.RegisterFile("backend/api/resource_reference.proto", fileDescriptor_465b210f45a041b3) -} - -var fileDescriptor_465b210f45a041b3 = []byte{ - // 366 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x91, 0xc1, 0x6b, 0x9c, 0x40, - 0x14, 0xc6, 0xa3, 0x6e, 0x9a, 0xee, 0xdb, 0xed, 0x32, 0x79, 0xa4, 0x60, 0x6f, 0x61, 0x69, 0x21, - 0xe4, 0xa0, 0x90, 0x90, 0x7b, 0xcd, 0x76, 0xa0, 0x76, 0x93, 0x51, 0x46, 0xd3, 0xb4, 0xbd, 0x88, - 0xba, 0x2f, 0xc9, 0xb0, 0x46, 0x07, 0x57, 0x29, 0x5e, 0xfb, 0x97, 0x97, 0x48, 0xc4, 0xec, 0x6d, - 0x86, 0xdf, 0xc7, 0xf7, 0xfb, 0xe0, 0xc1, 0xe7, 0x2c, 0xcd, 0xb7, 0x54, 0x6e, 0xdc, 0x54, 0x2b, - 0xb7, 0xa6, 0x5d, 0xd5, 0xd6, 0x39, 0x25, 0x35, 0x3d, 0x50, 0x4d, 0x65, 0x4e, 0x8e, 0xae, 0xab, - 0xa6, 0x42, 0x2b, 0xd5, 0x6a, 0xf9, 0x0d, 0x66, 0xf2, 0x35, 0xb0, 0xa6, 0x0e, 0xbf, 0xc0, 0xa4, - 0xe9, 0x34, 0xd9, 0xc6, 0xa9, 0x71, 0xb6, 0xb8, 0x38, 0x76, 0x52, 0xad, 0x9c, 0x81, 0xc7, 0x9d, - 0x26, 0xd9, 0x63, 0x5c, 0x80, 0xa9, 0x36, 0xb6, 0x79, 0x6a, 0x9c, 0x4d, 0xa5, 0xa9, 0x36, 0xcb, - 0x7f, 0x06, 0x1c, 0x0f, 0x31, 0x39, 0x68, 0x70, 0x09, 0xd6, 0x96, 0xba, 0xbe, 0x6b, 0x76, 0xc1, - 0xf6, 0xba, 0xd6, 0xd4, 0xc9, 0x17, 0x88, 0x08, 0x93, 0x32, 0x7d, 0x26, 0xdb, 0xea, 0xbb, 0xfa, - 0x37, 0x5e, 0xc1, 0xbc, 0xa6, 0x22, 0x6d, 0x54, 0x55, 0xee, 0x9e, 0x94, 0xee, 0x3d, 0xe3, 0x98, - 0x11, 0xc8, 0xbd, 0xd8, 0x79, 0x0b, 0xf3, 0xb7, 0x53, 0xf1, 0x13, 0x7c, 0xbc, 0x13, 0x6b, 0x11, - 0xdc, 0x8b, 0x44, 0xf2, 0x28, 0xb8, 0x93, 0x2b, 0x9e, 0xc4, 0xbf, 0x43, 0xce, 0x0e, 0x70, 0x01, - 0xc0, 0x7f, 0x85, 0x5c, 0xfa, 0xb7, 0x5c, 0xc4, 0xcc, 0xc0, 0x23, 0xb0, 0x7e, 0x04, 0xd7, 0xcc, - 0xc4, 0x39, 0xbc, 0x0f, 0xfd, 0x90, 0xdf, 0xf8, 0x82, 0x33, 0x0b, 0x4f, 0x80, 0x0d, 0xbf, 0xe4, - 0x27, 0x97, 0x91, 0x1f, 0x08, 0x36, 0xc1, 0x0f, 0x30, 0x15, 0xde, 0x2d, 0x8f, 0x42, 0x6f, 0xc5, - 0xd9, 0xe1, 0xf9, 0xd7, 0x17, 0xed, 0x38, 0x03, 0x6d, 0x38, 0x19, 0xb5, 0x37, 0x5e, 0xec, 0x07, - 0x22, 0xfa, 0xee, 0x87, 0xec, 0x00, 0xa7, 0x70, 0x18, 0xdc, 0x0b, 0x2e, 0x99, 0x81, 0x33, 0x38, - 0x5a, 0x49, 0xee, 0xc5, 0x81, 0x64, 0xe6, 0xf5, 0xd5, 0x9f, 0xcb, 0x47, 0xd5, 0x3c, 0xb5, 0x99, - 0x93, 0x57, 0xcf, 0xee, 0xb6, 0xcd, 0xe8, 0xa1, 0xa8, 0xfe, 0xba, 0x5a, 0x69, 0x2a, 0x54, 0x49, - 0x3b, 0xf7, 0xed, 0x39, 0x1f, 0xab, 0x24, 0x2f, 0x14, 0x95, 0x4d, 0xf6, 0xae, 0x3f, 0xe3, 0xe5, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x58, 0x92, 0x1b, 0xee, 0x01, 0x00, 0x00, +var File_backend_api_resource_reference_proto protoreflect.FileDescriptor + +var file_backend_api_resource_reference_proto_rawDesc = []byte{ + 0x0a, 0x24, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x22, 0x44, 0x0a, 0x0b, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x82, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x35, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x2a, 0x75, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, + 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x10, + 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4a, 0x4f, 0x42, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x49, + 0x50, 0x45, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x49, 0x50, 0x45, + 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, 0x0d, + 0x0a, 0x09, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x05, 0x2a, 0x40, 0x0a, + 0x0c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x12, 0x18, 0x0a, + 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x53, 0x48, 0x49, 0x50, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x57, 0x4e, 0x45, 0x52, + 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x52, 0x45, 0x41, 0x54, 0x4f, 0x52, 0x10, 0x02, 0x42, + 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, + 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x5f, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_resource_reference_proto_rawDescOnce sync.Once + file_backend_api_resource_reference_proto_rawDescData = file_backend_api_resource_reference_proto_rawDesc +) + +func file_backend_api_resource_reference_proto_rawDescGZIP() []byte { + file_backend_api_resource_reference_proto_rawDescOnce.Do(func() { + file_backend_api_resource_reference_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_resource_reference_proto_rawDescData) + }) + return file_backend_api_resource_reference_proto_rawDescData +} + +var file_backend_api_resource_reference_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_backend_api_resource_reference_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_backend_api_resource_reference_proto_goTypes = []interface{}{ + (ResourceType)(0), // 0: api.ResourceType + (Relationship)(0), // 1: api.Relationship + (*ResourceKey)(nil), // 2: api.ResourceKey + (*ResourceReference)(nil), // 3: api.ResourceReference +} +var file_backend_api_resource_reference_proto_depIdxs = []int32{ + 0, // 0: api.ResourceKey.type:type_name -> api.ResourceType + 2, // 1: api.ResourceReference.key:type_name -> api.ResourceKey + 1, // 2: api.ResourceReference.relationship:type_name -> api.Relationship + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_backend_api_resource_reference_proto_init() } +func file_backend_api_resource_reference_proto_init() { + if File_backend_api_resource_reference_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_backend_api_resource_reference_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_resource_reference_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceReference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_resource_reference_proto_rawDesc, + NumEnums: 2, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_backend_api_resource_reference_proto_goTypes, + DependencyIndexes: file_backend_api_resource_reference_proto_depIdxs, + EnumInfos: file_backend_api_resource_reference_proto_enumTypes, + MessageInfos: file_backend_api_resource_reference_proto_msgTypes, + }.Build() + File_backend_api_resource_reference_proto = out.File + file_backend_api_resource_reference_proto_rawDesc = nil + file_backend_api_resource_reference_proto_goTypes = nil + file_backend_api_resource_reference_proto_depIdxs = nil } diff --git a/backend/api/go_client/run.pb.go b/backend/api/go_client/run.pb.go index 68765364f2..d43872fe46 100644 --- a/backend/api/go_client/run.pb.go +++ b/backend/api/go_client/run.pb.go @@ -1,32 +1,46 @@ +// Copyright 2018 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: backend/api/run.proto package go_client import ( context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - empty "github.com/golang/protobuf/ptypes/empty" - timestamp "github.com/golang/protobuf/ptypes/timestamp" _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) type Run_StorageState int32 @@ -35,22 +49,43 @@ const ( Run_STORAGESTATE_ARCHIVED Run_StorageState = 1 ) -var Run_StorageState_name = map[int32]string{ - 0: "STORAGESTATE_AVAILABLE", - 1: "STORAGESTATE_ARCHIVED", -} +// Enum value maps for Run_StorageState. +var ( + Run_StorageState_name = map[int32]string{ + 0: "STORAGESTATE_AVAILABLE", + 1: "STORAGESTATE_ARCHIVED", + } + Run_StorageState_value = map[string]int32{ + "STORAGESTATE_AVAILABLE": 0, + "STORAGESTATE_ARCHIVED": 1, + } +) -var Run_StorageState_value = map[string]int32{ - "STORAGESTATE_AVAILABLE": 0, - "STORAGESTATE_ARCHIVED": 1, +func (x Run_StorageState) Enum() *Run_StorageState { + p := new(Run_StorageState) + *p = x + return p } func (x Run_StorageState) String() string { - return proto.EnumName(Run_StorageState_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Run_StorageState) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_run_proto_enumTypes[0].Descriptor() } +func (Run_StorageState) Type() protoreflect.EnumType { + return &file_backend_api_run_proto_enumTypes[0] +} + +func (x Run_StorageState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Run_StorageState.Descriptor instead. func (Run_StorageState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{9, 0} + return file_backend_api_run_proto_rawDescGZIP(), []int{9, 0} } type RunMetric_Format int32 @@ -64,24 +99,45 @@ const ( RunMetric_PERCENTAGE RunMetric_Format = 2 ) -var RunMetric_Format_name = map[int32]string{ - 0: "UNSPECIFIED", - 1: "RAW", - 2: "PERCENTAGE", -} +// Enum value maps for RunMetric_Format. +var ( + RunMetric_Format_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "RAW", + 2: "PERCENTAGE", + } + RunMetric_Format_value = map[string]int32{ + "UNSPECIFIED": 0, + "RAW": 1, + "PERCENTAGE": 2, + } +) -var RunMetric_Format_value = map[string]int32{ - "UNSPECIFIED": 0, - "RAW": 1, - "PERCENTAGE": 2, +func (x RunMetric_Format) Enum() *RunMetric_Format { + p := new(RunMetric_Format) + *p = x + return p } func (x RunMetric_Format) String() string { - return proto.EnumName(RunMetric_Format_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } +func (RunMetric_Format) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_run_proto_enumTypes[1].Descriptor() +} + +func (RunMetric_Format) Type() protoreflect.EnumType { + return &file_backend_api_run_proto_enumTypes[1] +} + +func (x RunMetric_Format) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RunMetric_Format.Descriptor instead. func (RunMetric_Format) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{12, 0} + return file_backend_api_run_proto_rawDescGZIP(), []int{12, 0} } type ReportRunMetricsResponse_ReportRunMetricResult_Status int32 @@ -99,110 +155,151 @@ const ( ReportRunMetricsResponse_ReportRunMetricResult_INTERNAL_ERROR ReportRunMetricsResponse_ReportRunMetricResult_Status = 4 ) -var ReportRunMetricsResponse_ReportRunMetricResult_Status_name = map[int32]string{ - 0: "UNSPECIFIED", - 1: "OK", - 2: "INVALID_ARGUMENT", - 3: "DUPLICATE_REPORTING", - 4: "INTERNAL_ERROR", -} +// Enum value maps for ReportRunMetricsResponse_ReportRunMetricResult_Status. +var ( + ReportRunMetricsResponse_ReportRunMetricResult_Status_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "OK", + 2: "INVALID_ARGUMENT", + 3: "DUPLICATE_REPORTING", + 4: "INTERNAL_ERROR", + } + ReportRunMetricsResponse_ReportRunMetricResult_Status_value = map[string]int32{ + "UNSPECIFIED": 0, + "OK": 1, + "INVALID_ARGUMENT": 2, + "DUPLICATE_REPORTING": 3, + "INTERNAL_ERROR": 4, + } +) -var ReportRunMetricsResponse_ReportRunMetricResult_Status_value = map[string]int32{ - "UNSPECIFIED": 0, - "OK": 1, - "INVALID_ARGUMENT": 2, - "DUPLICATE_REPORTING": 3, - "INTERNAL_ERROR": 4, +func (x ReportRunMetricsResponse_ReportRunMetricResult_Status) Enum() *ReportRunMetricsResponse_ReportRunMetricResult_Status { + p := new(ReportRunMetricsResponse_ReportRunMetricResult_Status) + *p = x + return p } func (x ReportRunMetricsResponse_ReportRunMetricResult_Status) String() string { - return proto.EnumName(ReportRunMetricsResponse_ReportRunMetricResult_Status_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (ReportRunMetricsResponse_ReportRunMetricResult_Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{14, 0, 0} +func (ReportRunMetricsResponse_ReportRunMetricResult_Status) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_run_proto_enumTypes[2].Descriptor() } -type CreateRunRequest struct { - Run *Run `protobuf:"bytes,1,opt,name=run,proto3" json:"run,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (ReportRunMetricsResponse_ReportRunMetricResult_Status) Type() protoreflect.EnumType { + return &file_backend_api_run_proto_enumTypes[2] } -func (m *CreateRunRequest) Reset() { *m = CreateRunRequest{} } -func (m *CreateRunRequest) String() string { return proto.CompactTextString(m) } -func (*CreateRunRequest) ProtoMessage() {} -func (*CreateRunRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{0} +func (x ReportRunMetricsResponse_ReportRunMetricResult_Status) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (m *CreateRunRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CreateRunRequest.Unmarshal(m, b) +// Deprecated: Use ReportRunMetricsResponse_ReportRunMetricResult_Status.Descriptor instead. +func (ReportRunMetricsResponse_ReportRunMetricResult_Status) EnumDescriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{14, 0, 0} } -func (m *CreateRunRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CreateRunRequest.Marshal(b, m, deterministic) + +type CreateRunRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Run *Run `protobuf:"bytes,1,opt,name=run,proto3" json:"run,omitempty"` } -func (m *CreateRunRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateRunRequest.Merge(m, src) + +func (x *CreateRunRequest) Reset() { + *x = CreateRunRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *CreateRunRequest) XXX_Size() int { - return xxx_messageInfo_CreateRunRequest.Size(m) + +func (x *CreateRunRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateRunRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateRunRequest.DiscardUnknown(m) + +func (*CreateRunRequest) ProtoMessage() {} + +func (x *CreateRunRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_CreateRunRequest proto.InternalMessageInfo +// Deprecated: Use CreateRunRequest.ProtoReflect.Descriptor instead. +func (*CreateRunRequest) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{0} +} -func (m *CreateRunRequest) GetRun() *Run { - if m != nil { - return m.Run +func (x *CreateRunRequest) GetRun() *Run { + if x != nil { + return x.Run } return nil } type GetRunRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the run to be retrieved. - RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` } -func (m *GetRunRequest) Reset() { *m = GetRunRequest{} } -func (m *GetRunRequest) String() string { return proto.CompactTextString(m) } -func (*GetRunRequest) ProtoMessage() {} -func (*GetRunRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{1} +func (x *GetRunRequest) Reset() { + *x = GetRunRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GetRunRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetRunRequest.Unmarshal(m, b) -} -func (m *GetRunRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetRunRequest.Marshal(b, m, deterministic) -} -func (m *GetRunRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetRunRequest.Merge(m, src) +func (x *GetRunRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetRunRequest) XXX_Size() int { - return xxx_messageInfo_GetRunRequest.Size(m) -} -func (m *GetRunRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetRunRequest.DiscardUnknown(m) + +func (*GetRunRequest) ProtoMessage() {} + +func (x *GetRunRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_GetRunRequest proto.InternalMessageInfo +// Deprecated: Use GetRunRequest.ProtoReflect.Descriptor instead. +func (*GetRunRequest) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{1} +} -func (m *GetRunRequest) GetRunId() string { - if m != nil { - return m.RunId +func (x *GetRunRequest) GetRunId() string { + if x != nil { + return x.RunId } return "" } type ListRunsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // A page token to request the next page of results. The token is acquried // from the nextPageToken field of the response from the previous // ListRuns call or can be omitted when fetching the first page. @@ -219,332 +316,387 @@ type ListRunsRequest struct { // resource_reference_key.type=EXPERIMENT&resource_reference_key.id=123 ResourceReferenceKey *ResourceKey `protobuf:"bytes,4,opt,name=resource_reference_key,json=resourceReferenceKey,proto3" json:"resource_reference_key,omitempty"` // A url-encoded, JSON-serialized Filter protocol buffer (see - // [filter.proto](https://github.com/kubeflow/pipelines/ - // blob/master/backend/api/filter.proto)). - Filter string `protobuf:"bytes,5,opt,name=filter,proto3" json:"filter,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). + Filter string `protobuf:"bytes,5,opt,name=filter,proto3" json:"filter,omitempty"` } -func (m *ListRunsRequest) Reset() { *m = ListRunsRequest{} } -func (m *ListRunsRequest) String() string { return proto.CompactTextString(m) } -func (*ListRunsRequest) ProtoMessage() {} -func (*ListRunsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{2} +func (x *ListRunsRequest) Reset() { + *x = ListRunsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ListRunsRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListRunsRequest.Unmarshal(m, b) -} -func (m *ListRunsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListRunsRequest.Marshal(b, m, deterministic) -} -func (m *ListRunsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListRunsRequest.Merge(m, src) +func (x *ListRunsRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListRunsRequest) XXX_Size() int { - return xxx_messageInfo_ListRunsRequest.Size(m) -} -func (m *ListRunsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListRunsRequest.DiscardUnknown(m) + +func (*ListRunsRequest) ProtoMessage() {} + +func (x *ListRunsRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ListRunsRequest proto.InternalMessageInfo +// Deprecated: Use ListRunsRequest.ProtoReflect.Descriptor instead. +func (*ListRunsRequest) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{2} +} -func (m *ListRunsRequest) GetPageToken() string { - if m != nil { - return m.PageToken +func (x *ListRunsRequest) GetPageToken() string { + if x != nil { + return x.PageToken } return "" } -func (m *ListRunsRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize +func (x *ListRunsRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize } return 0 } -func (m *ListRunsRequest) GetSortBy() string { - if m != nil { - return m.SortBy +func (x *ListRunsRequest) GetSortBy() string { + if x != nil { + return x.SortBy } return "" } -func (m *ListRunsRequest) GetResourceReferenceKey() *ResourceKey { - if m != nil { - return m.ResourceReferenceKey +func (x *ListRunsRequest) GetResourceReferenceKey() *ResourceKey { + if x != nil { + return x.ResourceReferenceKey } return nil } -func (m *ListRunsRequest) GetFilter() string { - if m != nil { - return m.Filter +func (x *ListRunsRequest) GetFilter() string { + if x != nil { + return x.Filter } return "" } type TerminateRunRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the run to be terminated. - RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` } -func (m *TerminateRunRequest) Reset() { *m = TerminateRunRequest{} } -func (m *TerminateRunRequest) String() string { return proto.CompactTextString(m) } -func (*TerminateRunRequest) ProtoMessage() {} -func (*TerminateRunRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{3} +func (x *TerminateRunRequest) Reset() { + *x = TerminateRunRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *TerminateRunRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_TerminateRunRequest.Unmarshal(m, b) -} -func (m *TerminateRunRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_TerminateRunRequest.Marshal(b, m, deterministic) +func (x *TerminateRunRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *TerminateRunRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_TerminateRunRequest.Merge(m, src) -} -func (m *TerminateRunRequest) XXX_Size() int { - return xxx_messageInfo_TerminateRunRequest.Size(m) -} -func (m *TerminateRunRequest) XXX_DiscardUnknown() { - xxx_messageInfo_TerminateRunRequest.DiscardUnknown(m) + +func (*TerminateRunRequest) ProtoMessage() {} + +func (x *TerminateRunRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_TerminateRunRequest proto.InternalMessageInfo +// Deprecated: Use TerminateRunRequest.ProtoReflect.Descriptor instead. +func (*TerminateRunRequest) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{3} +} -func (m *TerminateRunRequest) GetRunId() string { - if m != nil { - return m.RunId +func (x *TerminateRunRequest) GetRunId() string { + if x != nil { + return x.RunId } return "" } type RetryRunRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the run to be retried. - RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` } -func (m *RetryRunRequest) Reset() { *m = RetryRunRequest{} } -func (m *RetryRunRequest) String() string { return proto.CompactTextString(m) } -func (*RetryRunRequest) ProtoMessage() {} -func (*RetryRunRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{4} +func (x *RetryRunRequest) Reset() { + *x = RetryRunRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RetryRunRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RetryRunRequest.Unmarshal(m, b) -} -func (m *RetryRunRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RetryRunRequest.Marshal(b, m, deterministic) -} -func (m *RetryRunRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_RetryRunRequest.Merge(m, src) +func (x *RetryRunRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RetryRunRequest) XXX_Size() int { - return xxx_messageInfo_RetryRunRequest.Size(m) -} -func (m *RetryRunRequest) XXX_DiscardUnknown() { - xxx_messageInfo_RetryRunRequest.DiscardUnknown(m) + +func (*RetryRunRequest) ProtoMessage() {} + +func (x *RetryRunRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_RetryRunRequest proto.InternalMessageInfo +// Deprecated: Use RetryRunRequest.ProtoReflect.Descriptor instead. +func (*RetryRunRequest) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{4} +} -func (m *RetryRunRequest) GetRunId() string { - if m != nil { - return m.RunId +func (x *RetryRunRequest) GetRunId() string { + if x != nil { + return x.RunId } return "" } type ListRunsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Runs []*Run `protobuf:"bytes,1,rep,name=runs,proto3" json:"runs,omitempty"` // The total number of runs for the given query. TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` // The token to list the next page of runs. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` } -func (m *ListRunsResponse) Reset() { *m = ListRunsResponse{} } -func (m *ListRunsResponse) String() string { return proto.CompactTextString(m) } -func (*ListRunsResponse) ProtoMessage() {} -func (*ListRunsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{5} +func (x *ListRunsResponse) Reset() { + *x = ListRunsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ListRunsResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListRunsResponse.Unmarshal(m, b) -} -func (m *ListRunsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListRunsResponse.Marshal(b, m, deterministic) -} -func (m *ListRunsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListRunsResponse.Merge(m, src) +func (x *ListRunsResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListRunsResponse) XXX_Size() int { - return xxx_messageInfo_ListRunsResponse.Size(m) -} -func (m *ListRunsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListRunsResponse.DiscardUnknown(m) + +func (*ListRunsResponse) ProtoMessage() {} + +func (x *ListRunsResponse) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ListRunsResponse proto.InternalMessageInfo +// Deprecated: Use ListRunsResponse.ProtoReflect.Descriptor instead. +func (*ListRunsResponse) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{5} +} -func (m *ListRunsResponse) GetRuns() []*Run { - if m != nil { - return m.Runs +func (x *ListRunsResponse) GetRuns() []*Run { + if x != nil { + return x.Runs } return nil } -func (m *ListRunsResponse) GetTotalSize() int32 { - if m != nil { - return m.TotalSize +func (x *ListRunsResponse) GetTotalSize() int32 { + if x != nil { + return x.TotalSize } return 0 } -func (m *ListRunsResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken +func (x *ListRunsResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken } return "" } type ArchiveRunRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the run to be archived. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *ArchiveRunRequest) Reset() { *m = ArchiveRunRequest{} } -func (m *ArchiveRunRequest) String() string { return proto.CompactTextString(m) } -func (*ArchiveRunRequest) ProtoMessage() {} -func (*ArchiveRunRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{6} +func (x *ArchiveRunRequest) Reset() { + *x = ArchiveRunRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ArchiveRunRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ArchiveRunRequest.Unmarshal(m, b) -} -func (m *ArchiveRunRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ArchiveRunRequest.Marshal(b, m, deterministic) -} -func (m *ArchiveRunRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ArchiveRunRequest.Merge(m, src) -} -func (m *ArchiveRunRequest) XXX_Size() int { - return xxx_messageInfo_ArchiveRunRequest.Size(m) +func (x *ArchiveRunRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ArchiveRunRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ArchiveRunRequest.DiscardUnknown(m) + +func (*ArchiveRunRequest) ProtoMessage() {} + +func (x *ArchiveRunRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ArchiveRunRequest proto.InternalMessageInfo +// Deprecated: Use ArchiveRunRequest.ProtoReflect.Descriptor instead. +func (*ArchiveRunRequest) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{6} +} -func (m *ArchiveRunRequest) GetId() string { - if m != nil { - return m.Id +func (x *ArchiveRunRequest) GetId() string { + if x != nil { + return x.Id } return "" } type UnarchiveRunRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the run to be restored. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *UnarchiveRunRequest) Reset() { *m = UnarchiveRunRequest{} } -func (m *UnarchiveRunRequest) String() string { return proto.CompactTextString(m) } -func (*UnarchiveRunRequest) ProtoMessage() {} -func (*UnarchiveRunRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{7} +func (x *UnarchiveRunRequest) Reset() { + *x = UnarchiveRunRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *UnarchiveRunRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UnarchiveRunRequest.Unmarshal(m, b) -} -func (m *UnarchiveRunRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UnarchiveRunRequest.Marshal(b, m, deterministic) +func (x *UnarchiveRunRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UnarchiveRunRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UnarchiveRunRequest.Merge(m, src) -} -func (m *UnarchiveRunRequest) XXX_Size() int { - return xxx_messageInfo_UnarchiveRunRequest.Size(m) -} -func (m *UnarchiveRunRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UnarchiveRunRequest.DiscardUnknown(m) + +func (*UnarchiveRunRequest) ProtoMessage() {} + +func (x *UnarchiveRunRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_UnarchiveRunRequest proto.InternalMessageInfo +// Deprecated: Use UnarchiveRunRequest.ProtoReflect.Descriptor instead. +func (*UnarchiveRunRequest) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{7} +} -func (m *UnarchiveRunRequest) GetId() string { - if m != nil { - return m.Id +func (x *UnarchiveRunRequest) GetId() string { + if x != nil { + return x.Id } return "" } type DeleteRunRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The ID of the run to be deleted. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *DeleteRunRequest) Reset() { *m = DeleteRunRequest{} } -func (m *DeleteRunRequest) String() string { return proto.CompactTextString(m) } -func (*DeleteRunRequest) ProtoMessage() {} -func (*DeleteRunRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{8} +func (x *DeleteRunRequest) Reset() { + *x = DeleteRunRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *DeleteRunRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteRunRequest.Unmarshal(m, b) +func (x *DeleteRunRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *DeleteRunRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteRunRequest.Marshal(b, m, deterministic) -} -func (m *DeleteRunRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteRunRequest.Merge(m, src) -} -func (m *DeleteRunRequest) XXX_Size() int { - return xxx_messageInfo_DeleteRunRequest.Size(m) -} -func (m *DeleteRunRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteRunRequest.DiscardUnknown(m) + +func (*DeleteRunRequest) ProtoMessage() {} + +func (x *DeleteRunRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_DeleteRunRequest proto.InternalMessageInfo +// Deprecated: Use DeleteRunRequest.ProtoReflect.Descriptor instead. +func (*DeleteRunRequest) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{8} +} -func (m *DeleteRunRequest) GetId() string { - if m != nil { - return m.Id +func (x *DeleteRunRequest) GetId() string { + if x != nil { + return x.Id } return "" } type Run struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Output. Unique run ID. Generated by API server. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Required input field. Name provided by user, @@ -564,14 +716,14 @@ type Run struct { // Optional input field. Specify which Kubernetes service account this run uses. ServiceAccount string `protobuf:"bytes,14,opt,name=service_account,json=serviceAccount,proto3" json:"service_account,omitempty"` // Output. The time that the run created. - CreatedAt *timestamp.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Output. When this run is scheduled to run. This could be different from // created_at. For example, if a run is from a backfilling job that was // supposed to run 2 month ago, the scheduled_at is 2 month ago, // v.s. created_at is the current time. - ScheduledAt *timestamp.Timestamp `protobuf:"bytes,7,opt,name=scheduled_at,json=scheduledAt,proto3" json:"scheduled_at,omitempty"` + ScheduledAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=scheduled_at,json=scheduledAt,proto3" json:"scheduled_at,omitempty"` // Output. The time this run is finished. - FinishedAt *timestamp.Timestamp `protobuf:"bytes,13,opt,name=finished_at,json=finishedAt,proto3" json:"finished_at,omitempty"` + FinishedAt *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=finished_at,json=finishedAt,proto3" json:"finished_at,omitempty"` // Output. The status of the run. // One of [Pending, Running, Succeeded, Skipped, Failed, Error] Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` @@ -581,227 +733,251 @@ type Run struct { Error string `protobuf:"bytes,12,opt,name=error,proto3" json:"error,omitempty"` // Output. The metrics of the run. The metrics are reported by ReportMetrics // API. - Metrics []*RunMetric `protobuf:"bytes,9,rep,name=metrics,proto3" json:"metrics,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Metrics []*RunMetric `protobuf:"bytes,9,rep,name=metrics,proto3" json:"metrics,omitempty"` } -func (m *Run) Reset() { *m = Run{} } -func (m *Run) String() string { return proto.CompactTextString(m) } -func (*Run) ProtoMessage() {} -func (*Run) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{9} +func (x *Run) Reset() { + *x = Run{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Run) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Run.Unmarshal(m, b) -} -func (m *Run) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Run.Marshal(b, m, deterministic) -} -func (m *Run) XXX_Merge(src proto.Message) { - xxx_messageInfo_Run.Merge(m, src) +func (x *Run) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Run) XXX_Size() int { - return xxx_messageInfo_Run.Size(m) -} -func (m *Run) XXX_DiscardUnknown() { - xxx_messageInfo_Run.DiscardUnknown(m) + +func (*Run) ProtoMessage() {} + +func (x *Run) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Run proto.InternalMessageInfo +// Deprecated: Use Run.ProtoReflect.Descriptor instead. +func (*Run) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{9} +} -func (m *Run) GetId() string { - if m != nil { - return m.Id +func (x *Run) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *Run) GetName() string { - if m != nil { - return m.Name +func (x *Run) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *Run) GetStorageState() Run_StorageState { - if m != nil { - return m.StorageState +func (x *Run) GetStorageState() Run_StorageState { + if x != nil { + return x.StorageState } return Run_STORAGESTATE_AVAILABLE } -func (m *Run) GetDescription() string { - if m != nil { - return m.Description +func (x *Run) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *Run) GetPipelineSpec() *PipelineSpec { - if m != nil { - return m.PipelineSpec +func (x *Run) GetPipelineSpec() *PipelineSpec { + if x != nil { + return x.PipelineSpec } return nil } -func (m *Run) GetResourceReferences() []*ResourceReference { - if m != nil { - return m.ResourceReferences +func (x *Run) GetResourceReferences() []*ResourceReference { + if x != nil { + return x.ResourceReferences } return nil } -func (m *Run) GetServiceAccount() string { - if m != nil { - return m.ServiceAccount +func (x *Run) GetServiceAccount() string { + if x != nil { + return x.ServiceAccount } return "" } -func (m *Run) GetCreatedAt() *timestamp.Timestamp { - if m != nil { - return m.CreatedAt +func (x *Run) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt } return nil } -func (m *Run) GetScheduledAt() *timestamp.Timestamp { - if m != nil { - return m.ScheduledAt +func (x *Run) GetScheduledAt() *timestamppb.Timestamp { + if x != nil { + return x.ScheduledAt } return nil } -func (m *Run) GetFinishedAt() *timestamp.Timestamp { - if m != nil { - return m.FinishedAt +func (x *Run) GetFinishedAt() *timestamppb.Timestamp { + if x != nil { + return x.FinishedAt } return nil } -func (m *Run) GetStatus() string { - if m != nil { - return m.Status +func (x *Run) GetStatus() string { + if x != nil { + return x.Status } return "" } -func (m *Run) GetError() string { - if m != nil { - return m.Error +func (x *Run) GetError() string { + if x != nil { + return x.Error } return "" } -func (m *Run) GetMetrics() []*RunMetric { - if m != nil { - return m.Metrics +func (x *Run) GetMetrics() []*RunMetric { + if x != nil { + return x.Metrics } return nil } type PipelineRuntime struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Output. The runtime JSON manifest of the pipeline, including the status // of pipeline steps and fields need for UI visualization etc. PipelineManifest string `protobuf:"bytes,10,opt,name=pipeline_manifest,json=pipelineManifest,proto3" json:"pipeline_manifest,omitempty"` // Output. The runtime JSON manifest of the argo workflow. // This is deprecated after pipeline_runtime_manifest is in use. - WorkflowManifest string `protobuf:"bytes,11,opt,name=workflow_manifest,json=workflowManifest,proto3" json:"workflow_manifest,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + WorkflowManifest string `protobuf:"bytes,11,opt,name=workflow_manifest,json=workflowManifest,proto3" json:"workflow_manifest,omitempty"` } -func (m *PipelineRuntime) Reset() { *m = PipelineRuntime{} } -func (m *PipelineRuntime) String() string { return proto.CompactTextString(m) } -func (*PipelineRuntime) ProtoMessage() {} -func (*PipelineRuntime) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{10} +func (x *PipelineRuntime) Reset() { + *x = PipelineRuntime{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PipelineRuntime) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PipelineRuntime.Unmarshal(m, b) -} -func (m *PipelineRuntime) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PipelineRuntime.Marshal(b, m, deterministic) -} -func (m *PipelineRuntime) XXX_Merge(src proto.Message) { - xxx_messageInfo_PipelineRuntime.Merge(m, src) -} -func (m *PipelineRuntime) XXX_Size() int { - return xxx_messageInfo_PipelineRuntime.Size(m) +func (x *PipelineRuntime) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PipelineRuntime) XXX_DiscardUnknown() { - xxx_messageInfo_PipelineRuntime.DiscardUnknown(m) + +func (*PipelineRuntime) ProtoMessage() {} + +func (x *PipelineRuntime) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PipelineRuntime proto.InternalMessageInfo +// Deprecated: Use PipelineRuntime.ProtoReflect.Descriptor instead. +func (*PipelineRuntime) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{10} +} -func (m *PipelineRuntime) GetPipelineManifest() string { - if m != nil { - return m.PipelineManifest +func (x *PipelineRuntime) GetPipelineManifest() string { + if x != nil { + return x.PipelineManifest } return "" } -func (m *PipelineRuntime) GetWorkflowManifest() string { - if m != nil { - return m.WorkflowManifest +func (x *PipelineRuntime) GetWorkflowManifest() string { + if x != nil { + return x.WorkflowManifest } return "" } type RunDetail struct { - Run *Run `protobuf:"bytes,1,opt,name=run,proto3" json:"run,omitempty"` - PipelineRuntime *PipelineRuntime `protobuf:"bytes,2,opt,name=pipeline_runtime,json=pipelineRuntime,proto3" json:"pipeline_runtime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *RunDetail) Reset() { *m = RunDetail{} } -func (m *RunDetail) String() string { return proto.CompactTextString(m) } -func (*RunDetail) ProtoMessage() {} -func (*RunDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{11} + Run *Run `protobuf:"bytes,1,opt,name=run,proto3" json:"run,omitempty"` + PipelineRuntime *PipelineRuntime `protobuf:"bytes,2,opt,name=pipeline_runtime,json=pipelineRuntime,proto3" json:"pipeline_runtime,omitempty"` } -func (m *RunDetail) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RunDetail.Unmarshal(m, b) -} -func (m *RunDetail) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RunDetail.Marshal(b, m, deterministic) -} -func (m *RunDetail) XXX_Merge(src proto.Message) { - xxx_messageInfo_RunDetail.Merge(m, src) +func (x *RunDetail) Reset() { + *x = RunDetail{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RunDetail) XXX_Size() int { - return xxx_messageInfo_RunDetail.Size(m) + +func (x *RunDetail) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RunDetail) XXX_DiscardUnknown() { - xxx_messageInfo_RunDetail.DiscardUnknown(m) + +func (*RunDetail) ProtoMessage() {} + +func (x *RunDetail) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_RunDetail proto.InternalMessageInfo +// Deprecated: Use RunDetail.ProtoReflect.Descriptor instead. +func (*RunDetail) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{11} +} -func (m *RunDetail) GetRun() *Run { - if m != nil { - return m.Run +func (x *RunDetail) GetRun() *Run { + if x != nil { + return x.Run } return nil } -func (m *RunDetail) GetPipelineRuntime() *PipelineRuntime { - if m != nil { - return m.PipelineRuntime +func (x *RunDetail) GetPipelineRuntime() *PipelineRuntime { + if x != nil { + return x.PipelineRuntime } return nil } type RunMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Required. The user defined name of the metric. It must between 1 and 63 // characters long and must conform to the following regular expression: // `[a-z]([-a-z0-9]*[a-z0-9])?`. @@ -811,65 +987,59 @@ type RunMetric struct { // are considerd as duplicate. Only the first reporting will be recorded. Max // length is 128. NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` - // Types that are valid to be assigned to Value: + // Types that are assignable to Value: // *RunMetric_NumberValue Value isRunMetric_Value `protobuf_oneof:"value"` // The display format of metric. - Format RunMetric_Format `protobuf:"varint,4,opt,name=format,proto3,enum=api.RunMetric_Format" json:"format,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Format RunMetric_Format `protobuf:"varint,4,opt,name=format,proto3,enum=api.RunMetric_Format" json:"format,omitempty"` } -func (m *RunMetric) Reset() { *m = RunMetric{} } -func (m *RunMetric) String() string { return proto.CompactTextString(m) } -func (*RunMetric) ProtoMessage() {} -func (*RunMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{12} +func (x *RunMetric) Reset() { + *x = RunMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RunMetric) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RunMetric.Unmarshal(m, b) -} -func (m *RunMetric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RunMetric.Marshal(b, m, deterministic) -} -func (m *RunMetric) XXX_Merge(src proto.Message) { - xxx_messageInfo_RunMetric.Merge(m, src) -} -func (m *RunMetric) XXX_Size() int { - return xxx_messageInfo_RunMetric.Size(m) -} -func (m *RunMetric) XXX_DiscardUnknown() { - xxx_messageInfo_RunMetric.DiscardUnknown(m) +func (x *RunMetric) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_RunMetric proto.InternalMessageInfo +func (*RunMetric) ProtoMessage() {} -func (m *RunMetric) GetName() string { - if m != nil { - return m.Name +func (x *RunMetric) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (m *RunMetric) GetNodeId() string { - if m != nil { - return m.NodeId - } - return "" +// Deprecated: Use RunMetric.ProtoReflect.Descriptor instead. +func (*RunMetric) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{12} } -type isRunMetric_Value interface { - isRunMetric_Value() +func (x *RunMetric) GetName() string { + if x != nil { + return x.Name + } + return "" } -type RunMetric_NumberValue struct { - NumberValue float64 `protobuf:"fixed64,3,opt,name=number_value,json=numberValue,proto3,oneof"` +func (x *RunMetric) GetNodeId() string { + if x != nil { + return x.NodeId + } + return "" } -func (*RunMetric_NumberValue) isRunMetric_Value() {} - func (m *RunMetric) GetValue() isRunMetric_Value { if m != nil { return m.Value @@ -877,420 +1047,911 @@ func (m *RunMetric) GetValue() isRunMetric_Value { return nil } -func (m *RunMetric) GetNumberValue() float64 { - if x, ok := m.GetValue().(*RunMetric_NumberValue); ok { +func (x *RunMetric) GetNumberValue() float64 { + if x, ok := x.GetValue().(*RunMetric_NumberValue); ok { return x.NumberValue } return 0 } -func (m *RunMetric) GetFormat() RunMetric_Format { - if m != nil { - return m.Format +func (x *RunMetric) GetFormat() RunMetric_Format { + if x != nil { + return x.Format } return RunMetric_UNSPECIFIED } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*RunMetric) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*RunMetric_NumberValue)(nil), - } +type isRunMetric_Value interface { + isRunMetric_Value() } +type RunMetric_NumberValue struct { + // The number value of the metric. + NumberValue float64 `protobuf:"fixed64,3,opt,name=number_value,json=numberValue,proto3,oneof"` +} + +func (*RunMetric_NumberValue) isRunMetric_Value() {} + type ReportRunMetricsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Required. The parent run ID of the metric. RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` // List of metrics to report. - Metrics []*RunMetric `protobuf:"bytes,2,rep,name=metrics,proto3" json:"metrics,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Metrics []*RunMetric `protobuf:"bytes,2,rep,name=metrics,proto3" json:"metrics,omitempty"` } -func (m *ReportRunMetricsRequest) Reset() { *m = ReportRunMetricsRequest{} } -func (m *ReportRunMetricsRequest) String() string { return proto.CompactTextString(m) } -func (*ReportRunMetricsRequest) ProtoMessage() {} -func (*ReportRunMetricsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{13} +func (x *ReportRunMetricsRequest) Reset() { + *x = ReportRunMetricsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ReportRunMetricsRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ReportRunMetricsRequest.Unmarshal(m, b) +func (x *ReportRunMetricsRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ReportRunMetricsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ReportRunMetricsRequest.Marshal(b, m, deterministic) -} -func (m *ReportRunMetricsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ReportRunMetricsRequest.Merge(m, src) -} -func (m *ReportRunMetricsRequest) XXX_Size() int { - return xxx_messageInfo_ReportRunMetricsRequest.Size(m) -} -func (m *ReportRunMetricsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ReportRunMetricsRequest.DiscardUnknown(m) + +func (*ReportRunMetricsRequest) ProtoMessage() {} + +func (x *ReportRunMetricsRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ReportRunMetricsRequest proto.InternalMessageInfo +// Deprecated: Use ReportRunMetricsRequest.ProtoReflect.Descriptor instead. +func (*ReportRunMetricsRequest) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{13} +} -func (m *ReportRunMetricsRequest) GetRunId() string { - if m != nil { - return m.RunId +func (x *ReportRunMetricsRequest) GetRunId() string { + if x != nil { + return x.RunId } return "" } -func (m *ReportRunMetricsRequest) GetMetrics() []*RunMetric { - if m != nil { - return m.Metrics +func (x *ReportRunMetricsRequest) GetMetrics() []*RunMetric { + if x != nil { + return x.Metrics } return nil } type ReportRunMetricsResponse struct { - Results []*ReportRunMetricsResponse_ReportRunMetricResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ReportRunMetricsResponse) Reset() { *m = ReportRunMetricsResponse{} } -func (m *ReportRunMetricsResponse) String() string { return proto.CompactTextString(m) } -func (*ReportRunMetricsResponse) ProtoMessage() {} -func (*ReportRunMetricsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{14} + Results []*ReportRunMetricsResponse_ReportRunMetricResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` } -func (m *ReportRunMetricsResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ReportRunMetricsResponse.Unmarshal(m, b) -} -func (m *ReportRunMetricsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ReportRunMetricsResponse.Marshal(b, m, deterministic) -} -func (m *ReportRunMetricsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ReportRunMetricsResponse.Merge(m, src) -} -func (m *ReportRunMetricsResponse) XXX_Size() int { - return xxx_messageInfo_ReportRunMetricsResponse.Size(m) +func (x *ReportRunMetricsResponse) Reset() { + *x = ReportRunMetricsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ReportRunMetricsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ReportRunMetricsResponse.DiscardUnknown(m) + +func (x *ReportRunMetricsResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_ReportRunMetricsResponse proto.InternalMessageInfo +func (*ReportRunMetricsResponse) ProtoMessage() {} -func (m *ReportRunMetricsResponse) GetResults() []*ReportRunMetricsResponse_ReportRunMetricResult { - if m != nil { - return m.Results +func (x *ReportRunMetricsResponse) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -type ReportRunMetricsResponse_ReportRunMetricResult struct { - // Output. The name of the metric. - MetricName string `protobuf:"bytes,1,opt,name=metric_name,json=metricName,proto3" json:"metric_name,omitempty"` - // Output. The ID of the node which reports the metric. - MetricNodeId string `protobuf:"bytes,2,opt,name=metric_node_id,json=metricNodeId,proto3" json:"metric_node_id,omitempty"` - // Output. The status of the metric reporting. - Status ReportRunMetricsResponse_ReportRunMetricResult_Status `protobuf:"varint,3,opt,name=status,proto3,enum=api.ReportRunMetricsResponse_ReportRunMetricResult_Status" json:"status,omitempty"` - // Output. The detailed message of the error of the reporting. - Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +// Deprecated: Use ReportRunMetricsResponse.ProtoReflect.Descriptor instead. +func (*ReportRunMetricsResponse) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{14} } -func (m *ReportRunMetricsResponse_ReportRunMetricResult) Reset() { - *m = ReportRunMetricsResponse_ReportRunMetricResult{} -} -func (m *ReportRunMetricsResponse_ReportRunMetricResult) String() string { - return proto.CompactTextString(m) -} -func (*ReportRunMetricsResponse_ReportRunMetricResult) ProtoMessage() {} -func (*ReportRunMetricsResponse_ReportRunMetricResult) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{14, 0} +func (x *ReportRunMetricsResponse) GetResults() []*ReportRunMetricsResponse_ReportRunMetricResult { + if x != nil { + return x.Results + } + return nil } -func (m *ReportRunMetricsResponse_ReportRunMetricResult) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ReportRunMetricsResponse_ReportRunMetricResult.Unmarshal(m, b) -} -func (m *ReportRunMetricsResponse_ReportRunMetricResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ReportRunMetricsResponse_ReportRunMetricResult.Marshal(b, m, deterministic) -} -func (m *ReportRunMetricsResponse_ReportRunMetricResult) XXX_Merge(src proto.Message) { - xxx_messageInfo_ReportRunMetricsResponse_ReportRunMetricResult.Merge(m, src) +type ReadArtifactRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the run. + RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` + // The ID of the running node. + NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + // The name of the artifact. + ArtifactName string `protobuf:"bytes,3,opt,name=artifact_name,json=artifactName,proto3" json:"artifact_name,omitempty"` } -func (m *ReportRunMetricsResponse_ReportRunMetricResult) XXX_Size() int { - return xxx_messageInfo_ReportRunMetricsResponse_ReportRunMetricResult.Size(m) + +func (x *ReadArtifactRequest) Reset() { + *x = ReadArtifactRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ReportRunMetricsResponse_ReportRunMetricResult) XXX_DiscardUnknown() { - xxx_messageInfo_ReportRunMetricsResponse_ReportRunMetricResult.DiscardUnknown(m) + +func (x *ReadArtifactRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_ReportRunMetricsResponse_ReportRunMetricResult proto.InternalMessageInfo +func (*ReadArtifactRequest) ProtoMessage() {} -func (m *ReportRunMetricsResponse_ReportRunMetricResult) GetMetricName() string { - if m != nil { - return m.MetricName +func (x *ReadArtifactRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (m *ReportRunMetricsResponse_ReportRunMetricResult) GetMetricNodeId() string { - if m != nil { - return m.MetricNodeId +// Deprecated: Use ReadArtifactRequest.ProtoReflect.Descriptor instead. +func (*ReadArtifactRequest) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{15} +} + +func (x *ReadArtifactRequest) GetRunId() string { + if x != nil { + return x.RunId } return "" } -func (m *ReportRunMetricsResponse_ReportRunMetricResult) GetStatus() ReportRunMetricsResponse_ReportRunMetricResult_Status { - if m != nil { - return m.Status +func (x *ReadArtifactRequest) GetNodeId() string { + if x != nil { + return x.NodeId } - return ReportRunMetricsResponse_ReportRunMetricResult_UNSPECIFIED + return "" } -func (m *ReportRunMetricsResponse_ReportRunMetricResult) GetMessage() string { - if m != nil { - return m.Message +func (x *ReadArtifactRequest) GetArtifactName() string { + if x != nil { + return x.ArtifactName } return "" } -type ReadArtifactRequest struct { - // The ID of the run. - RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - // The ID of the running node. - NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` - // The name of the artifact. - ArtifactName string `protobuf:"bytes,3,opt,name=artifact_name,json=artifactName,proto3" json:"artifact_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} +type ReadArtifactResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ReadArtifactRequest) Reset() { *m = ReadArtifactRequest{} } -func (m *ReadArtifactRequest) String() string { return proto.CompactTextString(m) } -func (*ReadArtifactRequest) ProtoMessage() {} -func (*ReadArtifactRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{15} + // The bytes of the artifact content. + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` } -func (m *ReadArtifactRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ReadArtifactRequest.Unmarshal(m, b) -} -func (m *ReadArtifactRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ReadArtifactRequest.Marshal(b, m, deterministic) -} -func (m *ReadArtifactRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ReadArtifactRequest.Merge(m, src) -} -func (m *ReadArtifactRequest) XXX_Size() int { - return xxx_messageInfo_ReadArtifactRequest.Size(m) +func (x *ReadArtifactResponse) Reset() { + *x = ReadArtifactResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ReadArtifactRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ReadArtifactRequest.DiscardUnknown(m) + +func (x *ReadArtifactResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_ReadArtifactRequest proto.InternalMessageInfo +func (*ReadArtifactResponse) ProtoMessage() {} -func (m *ReadArtifactRequest) GetRunId() string { - if m != nil { - return m.RunId +func (x *ReadArtifactResponse) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (m *ReadArtifactRequest) GetNodeId() string { - if m != nil { - return m.NodeId - } - return "" +// Deprecated: Use ReadArtifactResponse.ProtoReflect.Descriptor instead. +func (*ReadArtifactResponse) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{16} } -func (m *ReadArtifactRequest) GetArtifactName() string { - if m != nil { - return m.ArtifactName +func (x *ReadArtifactResponse) GetData() []byte { + if x != nil { + return x.Data } - return "" + return nil } -type ReadArtifactResponse struct { - // The bytes of the artifact content. - Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type ReportRunMetricsResponse_ReportRunMetricResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Output. The name of the metric. + MetricName string `protobuf:"bytes,1,opt,name=metric_name,json=metricName,proto3" json:"metric_name,omitempty"` + // Output. The ID of the node which reports the metric. + MetricNodeId string `protobuf:"bytes,2,opt,name=metric_node_id,json=metricNodeId,proto3" json:"metric_node_id,omitempty"` + // Output. The status of the metric reporting. + Status ReportRunMetricsResponse_ReportRunMetricResult_Status `protobuf:"varint,3,opt,name=status,proto3,enum=api.ReportRunMetricsResponse_ReportRunMetricResult_Status" json:"status,omitempty"` + // Output. The detailed message of the error of the reporting. + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` } -func (m *ReadArtifactResponse) Reset() { *m = ReadArtifactResponse{} } -func (m *ReadArtifactResponse) String() string { return proto.CompactTextString(m) } -func (*ReadArtifactResponse) ProtoMessage() {} -func (*ReadArtifactResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_50e61ed8e40fd87e, []int{16} +func (x *ReportRunMetricsResponse_ReportRunMetricResult) Reset() { + *x = ReportRunMetricsResponse_ReportRunMetricResult{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_run_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ReadArtifactResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ReadArtifactResponse.Unmarshal(m, b) +func (x *ReportRunMetricsResponse_ReportRunMetricResult) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ReadArtifactResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ReadArtifactResponse.Marshal(b, m, deterministic) + +func (*ReportRunMetricsResponse_ReportRunMetricResult) ProtoMessage() {} + +func (x *ReportRunMetricsResponse_ReportRunMetricResult) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_run_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *ReadArtifactResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ReadArtifactResponse.Merge(m, src) + +// Deprecated: Use ReportRunMetricsResponse_ReportRunMetricResult.ProtoReflect.Descriptor instead. +func (*ReportRunMetricsResponse_ReportRunMetricResult) Descriptor() ([]byte, []int) { + return file_backend_api_run_proto_rawDescGZIP(), []int{14, 0} } -func (m *ReadArtifactResponse) XXX_Size() int { - return xxx_messageInfo_ReadArtifactResponse.Size(m) + +func (x *ReportRunMetricsResponse_ReportRunMetricResult) GetMetricName() string { + if x != nil { + return x.MetricName + } + return "" } -func (m *ReadArtifactResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ReadArtifactResponse.DiscardUnknown(m) + +func (x *ReportRunMetricsResponse_ReportRunMetricResult) GetMetricNodeId() string { + if x != nil { + return x.MetricNodeId + } + return "" } -var xxx_messageInfo_ReadArtifactResponse proto.InternalMessageInfo +func (x *ReportRunMetricsResponse_ReportRunMetricResult) GetStatus() ReportRunMetricsResponse_ReportRunMetricResult_Status { + if x != nil { + return x.Status + } + return ReportRunMetricsResponse_ReportRunMetricResult_UNSPECIFIED +} -func (m *ReadArtifactResponse) GetData() []byte { - if m != nil { - return m.Data +func (x *ReportRunMetricsResponse_ReportRunMetricResult) GetMessage() string { + if x != nil { + return x.Message } - return nil + return "" } -func init() { - proto.RegisterEnum("api.Run_StorageState", Run_StorageState_name, Run_StorageState_value) - proto.RegisterEnum("api.RunMetric_Format", RunMetric_Format_name, RunMetric_Format_value) - proto.RegisterEnum("api.ReportRunMetricsResponse_ReportRunMetricResult_Status", ReportRunMetricsResponse_ReportRunMetricResult_Status_name, ReportRunMetricsResponse_ReportRunMetricResult_Status_value) - proto.RegisterType((*CreateRunRequest)(nil), "api.CreateRunRequest") - proto.RegisterType((*GetRunRequest)(nil), "api.GetRunRequest") - proto.RegisterType((*ListRunsRequest)(nil), "api.ListRunsRequest") - proto.RegisterType((*TerminateRunRequest)(nil), "api.TerminateRunRequest") - proto.RegisterType((*RetryRunRequest)(nil), "api.RetryRunRequest") - proto.RegisterType((*ListRunsResponse)(nil), "api.ListRunsResponse") - proto.RegisterType((*ArchiveRunRequest)(nil), "api.ArchiveRunRequest") - proto.RegisterType((*UnarchiveRunRequest)(nil), "api.UnarchiveRunRequest") - proto.RegisterType((*DeleteRunRequest)(nil), "api.DeleteRunRequest") - proto.RegisterType((*Run)(nil), "api.Run") - proto.RegisterType((*PipelineRuntime)(nil), "api.PipelineRuntime") - proto.RegisterType((*RunDetail)(nil), "api.RunDetail") - proto.RegisterType((*RunMetric)(nil), "api.RunMetric") - proto.RegisterType((*ReportRunMetricsRequest)(nil), "api.ReportRunMetricsRequest") - proto.RegisterType((*ReportRunMetricsResponse)(nil), "api.ReportRunMetricsResponse") - proto.RegisterType((*ReportRunMetricsResponse_ReportRunMetricResult)(nil), "api.ReportRunMetricsResponse.ReportRunMetricResult") - proto.RegisterType((*ReadArtifactRequest)(nil), "api.ReadArtifactRequest") - proto.RegisterType((*ReadArtifactResponse)(nil), "api.ReadArtifactResponse") -} - -func init() { proto.RegisterFile("backend/api/run.proto", fileDescriptor_50e61ed8e40fd87e) } - -var fileDescriptor_50e61ed8e40fd87e = []byte{ - // 1580 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xcd, 0x6e, 0xe3, 0xc8, - 0x11, 0x36, 0x25, 0x5b, 0xb2, 0x4a, 0x7f, 0x74, 0xfb, 0x8f, 0xa3, 0xb1, 0x61, 0x2f, 0xbd, 0xbb, - 0xe3, 0x9d, 0xac, 0x25, 0xac, 0x27, 0x08, 0x10, 0x07, 0x41, 0x40, 0xdb, 0x1a, 0xaf, 0x32, 0xb6, - 0xec, 0xb4, 0x64, 0x07, 0x98, 0x1c, 0x08, 0x8a, 0x6a, 0xc9, 0x8c, 0x25, 0x92, 0xe9, 0x6e, 0xda, - 0xf1, 0x0c, 0xe6, 0x12, 0x60, 0x91, 0x7b, 0x72, 0xc8, 0x2d, 0x0f, 0xb1, 0x0f, 0x11, 0x20, 0xe7, - 0xbc, 0x42, 0x1e, 0x64, 0xc1, 0x6e, 0x52, 0x43, 0xfd, 0x58, 0x06, 0xf6, 0x24, 0x75, 0xd5, 0xd7, - 0x55, 0xc5, 0xaa, 0xfa, 0x8a, 0x45, 0x58, 0xef, 0x58, 0xf6, 0x1d, 0x71, 0xbb, 0x35, 0xcb, 0x77, - 0x6a, 0x34, 0x70, 0xab, 0x3e, 0xf5, 0xb8, 0x87, 0xd2, 0x96, 0xef, 0x54, 0x36, 0x93, 0x3a, 0x42, - 0xa9, 0x47, 0xa5, 0xb6, 0xf2, 0xb2, 0xef, 0x79, 0xfd, 0x01, 0xa9, 0x89, 0x53, 0x27, 0xe8, 0xd5, - 0xc8, 0xd0, 0xe7, 0x8f, 0x91, 0x72, 0x2b, 0x52, 0x86, 0x97, 0x2c, 0xd7, 0xf5, 0xb8, 0xc5, 0x1d, - 0xcf, 0x65, 0x91, 0x76, 0x67, 0xf2, 0x2a, 0x77, 0x86, 0x84, 0x71, 0x6b, 0xe8, 0xc7, 0x80, 0xa4, - 0x53, 0xdf, 0xf1, 0xc9, 0xc0, 0x71, 0x89, 0xc9, 0x7c, 0x62, 0x47, 0x80, 0x2f, 0xc7, 0x22, 0x26, - 0xcc, 0x0b, 0xa8, 0x4d, 0x4c, 0x4a, 0x7a, 0x84, 0x12, 0xd7, 0x26, 0x11, 0xea, 0x5b, 0xf1, 0x63, - 0x1f, 0xf4, 0x89, 0x7b, 0xc0, 0x1e, 0xac, 0x7e, 0x9f, 0xd0, 0x9a, 0xe7, 0x8b, 0x48, 0xa6, 0xa3, - 0xd2, 0xab, 0xa0, 0x9e, 0x50, 0x62, 0x71, 0x82, 0x03, 0x17, 0x93, 0xbf, 0x04, 0x84, 0x71, 0x54, - 0x81, 0x34, 0x0d, 0x5c, 0x4d, 0xd9, 0x55, 0xf6, 0xf3, 0x87, 0xcb, 0x55, 0xcb, 0x77, 0xaa, 0xa1, - 0x36, 0x14, 0xea, 0x5f, 0x43, 0xf1, 0x8c, 0xf0, 0x04, 0x78, 0x1d, 0x32, 0x34, 0x70, 0x4d, 0xa7, - 0x2b, 0xf0, 0x39, 0xbc, 0x44, 0x03, 0xb7, 0xd1, 0xd5, 0xff, 0xa3, 0x40, 0xf9, 0xdc, 0x61, 0x21, - 0x92, 0xc5, 0xd0, 0x6d, 0x00, 0xdf, 0xea, 0x13, 0x93, 0x7b, 0x77, 0xc4, 0x8d, 0xe0, 0xb9, 0x50, - 0xd2, 0x0e, 0x05, 0xe8, 0x25, 0x88, 0x83, 0xc9, 0x9c, 0x0f, 0x44, 0x4b, 0xed, 0x2a, 0xfb, 0x4b, - 0x78, 0x39, 0x14, 0xb4, 0x9c, 0x0f, 0x04, 0x6d, 0x42, 0x96, 0x79, 0x94, 0x9b, 0x9d, 0x47, 0x2d, - 0x2d, 0x2e, 0x66, 0xc2, 0xe3, 0xf1, 0x23, 0x7a, 0x0b, 0x1b, 0xd3, 0xa9, 0x30, 0xef, 0xc8, 0xa3, - 0xb6, 0x28, 0xe2, 0x57, 0x65, 0xfc, 0x11, 0xe4, 0x1d, 0x79, 0xc4, 0x6b, 0x31, 0x1e, 0xc7, 0xf0, - 0x77, 0xe4, 0x11, 0x6d, 0x40, 0xa6, 0xe7, 0x0c, 0x38, 0xa1, 0xda, 0x92, 0xb4, 0x2f, 0x4f, 0xfa, - 0xb7, 0xb0, 0xda, 0x26, 0x74, 0xe8, 0xb8, 0xe3, 0x39, 0x7a, 0xe2, 0xb1, 0xf7, 0xa1, 0x8c, 0x09, - 0xa7, 0x8f, 0xcf, 0x23, 0x1f, 0x40, 0xfd, 0x9c, 0x1f, 0xe6, 0x7b, 0x2e, 0x23, 0x68, 0x0b, 0x16, - 0x69, 0xe0, 0x32, 0x4d, 0xd9, 0x4d, 0x8f, 0x65, 0x5e, 0x48, 0xc3, 0xf4, 0x71, 0x8f, 0x5b, 0x03, - 0x99, 0xa0, 0xb4, 0x48, 0x50, 0x4e, 0x48, 0x44, 0x86, 0xbe, 0x86, 0xb2, 0x4b, 0xfe, 0xca, 0xcd, - 0x44, 0x8a, 0x53, 0xc2, 0x61, 0x31, 0x14, 0x5f, 0xc5, 0x69, 0xd6, 0xf7, 0x60, 0xc5, 0xa0, 0xf6, - 0xad, 0x73, 0x9f, 0x7c, 0x9c, 0x12, 0xa4, 0x46, 0x01, 0xa6, 0x9c, 0xae, 0xfe, 0x15, 0xac, 0x5e, - 0xbb, 0xd6, 0xb3, 0x30, 0x1d, 0xd4, 0x53, 0x32, 0x20, 0x7c, 0x1e, 0xe6, 0xef, 0x4b, 0x90, 0xc6, - 0x81, 0x3b, 0x29, 0x47, 0x08, 0x16, 0x5d, 0x6b, 0x48, 0xa2, 0x20, 0xc5, 0x7f, 0x74, 0x04, 0x45, - 0xc6, 0x3d, 0x2a, 0xba, 0x80, 0x5b, 0x9c, 0x68, 0xb0, 0xab, 0xec, 0x97, 0x0e, 0xd7, 0xe3, 0x4c, - 0x54, 0x5b, 0x52, 0xdb, 0x0a, 0x95, 0xb8, 0xc0, 0x12, 0x27, 0xb4, 0x0b, 0xf9, 0x2e, 0x61, 0x36, - 0x75, 0x44, 0xaf, 0x47, 0x5d, 0x92, 0x14, 0xa1, 0x5f, 0x41, 0x71, 0x8c, 0x56, 0x51, 0x87, 0xac, - 0x08, 0xeb, 0x57, 0x91, 0xa6, 0xe5, 0x13, 0x1b, 0x17, 0xfc, 0xc4, 0x09, 0x9d, 0xc1, 0xea, 0x74, - 0x8b, 0x31, 0x6d, 0x49, 0x54, 0x69, 0x63, 0xac, 0xbf, 0x46, 0x2d, 0x85, 0xd1, 0x54, 0x97, 0x31, - 0xf4, 0x0a, 0xca, 0x8c, 0xd0, 0x7b, 0xc7, 0x26, 0xa6, 0x65, 0xdb, 0x5e, 0xe0, 0x72, 0xad, 0x24, - 0xc2, 0x2c, 0x45, 0x62, 0x43, 0x4a, 0xd1, 0xaf, 0x01, 0x6c, 0xc1, 0xca, 0xae, 0x69, 0x71, 0x2d, - 0x23, 0xc2, 0xac, 0x54, 0xe5, 0x00, 0xa9, 0xc6, 0x03, 0xa4, 0xda, 0x8e, 0x07, 0x08, 0xce, 0x45, - 0x68, 0x83, 0xa3, 0xdf, 0x42, 0x81, 0xd9, 0xb7, 0xa4, 0x1b, 0x0c, 0xe4, 0xe5, 0xec, 0xb3, 0x97, - 0xf3, 0x23, 0xbc, 0xc1, 0xd1, 0x6f, 0x20, 0xdf, 0x73, 0x5c, 0x87, 0xdd, 0xca, 0xdb, 0xc5, 0x67, - 0x6f, 0x43, 0x0c, 0x37, 0x78, 0xc8, 0xa1, 0xb0, 0x6c, 0x01, 0xd3, 0x96, 0x23, 0x8e, 0x8a, 0x13, - 0x5a, 0x83, 0x25, 0x31, 0x44, 0xb5, 0x82, 0x64, 0x80, 0x38, 0xa0, 0x7d, 0xc8, 0x0e, 0x09, 0xa7, - 0x8e, 0xcd, 0xb4, 0x9c, 0x48, 0x65, 0x29, 0x2e, 0xf3, 0x85, 0x10, 0xe3, 0x58, 0xad, 0xd7, 0xa1, - 0x90, 0x2c, 0x3c, 0xaa, 0xc0, 0x46, 0xab, 0x7d, 0x89, 0x8d, 0xb3, 0x7a, 0xab, 0x6d, 0xb4, 0xeb, - 0xa6, 0x71, 0x63, 0x34, 0xce, 0x8d, 0xe3, 0xf3, 0xba, 0xba, 0x80, 0x5e, 0xc0, 0xfa, 0xb8, 0x0e, - 0x9f, 0x7c, 0xdf, 0xb8, 0xa9, 0x9f, 0xaa, 0x8a, 0x7e, 0x07, 0xe5, 0xb8, 0xca, 0x38, 0x70, 0xc3, - 0xf1, 0x8b, 0x7e, 0x01, 0x2b, 0xa3, 0x96, 0x18, 0x5a, 0xae, 0xd3, 0x23, 0x8c, 0x8b, 0xa6, 0xcb, - 0x61, 0x35, 0x56, 0x5c, 0x44, 0xf2, 0x10, 0xfc, 0xe0, 0xd1, 0xbb, 0xde, 0xc0, 0x7b, 0xf8, 0x0c, - 0xce, 0x4b, 0x70, 0xac, 0x88, 0xc1, 0xfa, 0x2d, 0xe4, 0x70, 0xe0, 0x9e, 0x12, 0x6e, 0x39, 0x83, - 0x79, 0x13, 0x15, 0xfd, 0x0e, 0x46, 0x9e, 0x4c, 0x2a, 0xc3, 0x12, 0x9c, 0xc8, 0x1f, 0xae, 0x8d, - 0x35, 0x66, 0x14, 0x32, 0x2e, 0xfb, 0xe3, 0x02, 0xfd, 0xbf, 0x8a, 0x70, 0x25, 0x93, 0x36, 0xa2, - 0x95, 0x92, 0xa0, 0xd5, 0x26, 0x64, 0x5d, 0xaf, 0x4b, 0xc2, 0x19, 0x24, 0xd9, 0x96, 0x09, 0x8f, - 0x8d, 0x2e, 0xda, 0x83, 0x82, 0x1b, 0x0c, 0x3b, 0x84, 0x9a, 0xf7, 0xd6, 0x20, 0x90, 0x43, 0x45, - 0xf9, 0x7e, 0x01, 0xe7, 0xa5, 0xf4, 0x26, 0x14, 0xa2, 0x03, 0xc8, 0xf4, 0x3c, 0x3a, 0xb4, 0xb8, - 0xe0, 0x4b, 0x82, 0x8d, 0xd2, 0x63, 0xf5, 0xad, 0x50, 0xe2, 0x08, 0xa4, 0x1f, 0x42, 0x46, 0x4a, - 0x50, 0x19, 0xf2, 0xd7, 0xcd, 0xd6, 0x55, 0xfd, 0xa4, 0xf1, 0xb6, 0x51, 0x3f, 0x55, 0x17, 0x50, - 0x16, 0xd2, 0xd8, 0xf8, 0xa3, 0xaa, 0xa0, 0x12, 0xc0, 0x55, 0x1d, 0x9f, 0xd4, 0x9b, 0x6d, 0xe3, - 0xac, 0xae, 0xa6, 0x8e, 0xb3, 0xb0, 0x24, 0x02, 0xd0, 0xdf, 0xc3, 0x26, 0x26, 0xbe, 0x47, 0xf9, - 0xc8, 0x3c, 0x9b, 0x3f, 0x47, 0x93, 0x5d, 0x94, 0x9a, 0xdf, 0x45, 0xff, 0x4e, 0x83, 0x36, 0x6d, - 0x3c, 0x1a, 0xbd, 0x17, 0x90, 0xa5, 0x84, 0x05, 0x03, 0x1e, 0x4f, 0xdf, 0x37, 0x11, 0xaf, 0x67, - 0xe3, 0x27, 0x15, 0x58, 0xdc, 0xc5, 0xb1, 0x8d, 0xca, 0x8f, 0x29, 0x58, 0x9f, 0x09, 0x41, 0x3b, - 0x90, 0x97, 0x01, 0x99, 0x89, 0x32, 0x81, 0x14, 0x35, 0xc3, 0x62, 0x7d, 0x09, 0xa5, 0x18, 0x30, - 0x56, 0xb3, 0x42, 0x84, 0x91, 0x95, 0xc3, 0x23, 0xaa, 0xa5, 0x45, 0x51, 0x8e, 0x7e, 0x46, 0xb8, - 0xd5, 0x96, 0xb0, 0x30, 0xa2, 0xa9, 0x16, 0xa6, 0x92, 0x31, 0xab, 0x4f, 0x44, 0xa5, 0x73, 0x38, - 0x3e, 0xea, 0x5d, 0xc8, 0x48, 0xec, 0x74, 0x4d, 0x33, 0x90, 0xba, 0x7c, 0xa7, 0x2a, 0x68, 0x0d, - 0xd4, 0x46, 0xf3, 0xc6, 0x38, 0x6f, 0x9c, 0x9a, 0x06, 0x3e, 0xbb, 0xbe, 0xa8, 0x37, 0xdb, 0x6a, - 0x0a, 0x6d, 0xc2, 0xea, 0xe9, 0xf5, 0xd5, 0x79, 0xe3, 0x24, 0xa4, 0x22, 0xae, 0x5f, 0x5d, 0xe2, - 0x76, 0xa3, 0x79, 0xa6, 0xa6, 0x11, 0x82, 0x52, 0xa3, 0xd9, 0xae, 0xe3, 0xa6, 0x71, 0x6e, 0xd6, - 0x31, 0xbe, 0xc4, 0xea, 0xa2, 0xfe, 0x67, 0x58, 0xc5, 0xc4, 0xea, 0x1a, 0x94, 0x3b, 0x3d, 0xcb, - 0xe6, 0xcf, 0x14, 0x7e, 0x4e, 0x53, 0x17, 0xad, 0xc8, 0x84, 0xcc, 0xb1, 0x7c, 0x15, 0x14, 0x62, - 0x61, 0x98, 0x65, 0xfd, 0x35, 0xac, 0x8d, 0xfb, 0x8a, 0xfa, 0x00, 0xc1, 0x62, 0xd7, 0xe2, 0x96, - 0x70, 0x55, 0xc0, 0xe2, 0xff, 0xe1, 0x8f, 0xcb, 0x00, 0x38, 0x70, 0x5b, 0x72, 0x46, 0xa3, 0x16, - 0xe4, 0x46, 0x2b, 0x13, 0x92, 0x64, 0x98, 0x5c, 0xa1, 0x2a, 0xa3, 0x26, 0x94, 0x03, 0x40, 0xdf, - 0xf9, 0xdb, 0xff, 0xfe, 0xff, 0xcf, 0xd4, 0x0b, 0x1d, 0x85, 0xbb, 0x1b, 0xab, 0xdd, 0x7f, 0xd7, - 0x21, 0xdc, 0xfa, 0x2e, 0x5c, 0x3b, 0xd9, 0x91, 0x98, 0x02, 0x7f, 0x80, 0x8c, 0xdc, 0xab, 0x10, - 0x12, 0x57, 0xc7, 0x96, 0xac, 0x29, 0x73, 0x7b, 0xc2, 0xdc, 0x36, 0x7a, 0x39, 0x6d, 0xae, 0xf6, - 0x51, 0x26, 0xeb, 0x13, 0x6a, 0xc1, 0x72, 0xbc, 0x61, 0x20, 0x39, 0x4a, 0x26, 0x16, 0xb2, 0xca, - 0xfa, 0x84, 0x54, 0xe6, 0x40, 0xaf, 0x08, 0xeb, 0x6b, 0x68, 0x46, 0xb0, 0x88, 0x00, 0x7c, 0xde, - 0x1e, 0x90, 0x7c, 0xf9, 0x4d, 0xad, 0x13, 0x95, 0x8d, 0xa9, 0x17, 0x46, 0x3d, 0xdc, 0x93, 0xf5, - 0x57, 0xc2, 0xf2, 0x17, 0xfa, 0xce, 0xac, 0xb8, 0x9d, 0xee, 0xa7, 0xa3, 0x68, 0xe5, 0x40, 0x77, - 0x50, 0x48, 0xee, 0x1f, 0x48, 0x13, 0x8e, 0x66, 0xac, 0x24, 0x4f, 0xba, 0xfa, 0x46, 0xb8, 0xda, - 0xd3, 0xbf, 0x78, 0xca, 0x55, 0x10, 0x1b, 0x43, 0x7f, 0x82, 0xdc, 0x68, 0x8b, 0x89, 0x0a, 0x3a, - 0xb9, 0xd5, 0x3c, 0xe9, 0x26, 0x2a, 0xec, 0xeb, 0xcd, 0x27, 0xdc, 0xa0, 0x1f, 0x14, 0x50, 0x27, - 0x69, 0x89, 0xb6, 0x9e, 0x60, 0xab, 0xf4, 0xb5, 0x3d, 0x97, 0xcb, 0xfa, 0x2f, 0x85, 0xcb, 0xaa, - 0xfe, 0xcd, 0x9c, 0xe2, 0x1f, 0x51, 0x71, 0x3b, 0xba, 0x7a, 0xa4, 0xbc, 0x46, 0xff, 0x52, 0xa0, - 0x90, 0xec, 0xf8, 0x28, 0xa5, 0x33, 0x08, 0x57, 0x79, 0x31, 0x43, 0x13, 0xf9, 0xc6, 0xc2, 0xf7, - 0x39, 0xfa, 0xfd, 0x1c, 0xdf, 0xb5, 0x90, 0x87, 0xac, 0xf6, 0x31, 0x62, 0xe7, 0xa7, 0x5a, 0x4c, - 0x3c, 0x56, 0xfb, 0x38, 0x46, 0xcc, 0x30, 0x4a, 0xab, 0x8b, 0x3c, 0x28, 0x24, 0x37, 0xec, 0x28, - 0xb0, 0x19, 0x4b, 0xf7, 0x93, 0x45, 0x38, 0x10, 0x51, 0xbd, 0xd2, 0xbf, 0x9a, 0x17, 0x15, 0x8f, - 0x0d, 0x22, 0x1b, 0x96, 0xe3, 0x25, 0x3d, 0x22, 0xc6, 0xc4, 0xce, 0xfe, 0xf3, 0x9a, 0x2a, 0x76, - 0x44, 0x43, 0x63, 0xc7, 0x3f, 0x28, 0xff, 0x30, 0x2e, 0xf0, 0x16, 0x64, 0xbb, 0xa4, 0x67, 0x85, - 0x83, 0x7f, 0x05, 0x95, 0xa1, 0x58, 0xc9, 0x0b, 0x7f, 0x72, 0x98, 0xbe, 0xdf, 0x81, 0x6d, 0xc8, - 0x1c, 0x13, 0x8b, 0x12, 0x8a, 0x56, 0x97, 0x53, 0x95, 0xa2, 0x15, 0xf0, 0x5b, 0x8f, 0x3a, 0x1f, - 0xc4, 0x27, 0xda, 0x6e, 0xaa, 0x53, 0x00, 0x18, 0x01, 0x16, 0xde, 0xbf, 0xe9, 0x3b, 0xfc, 0x36, - 0xe8, 0x54, 0x6d, 0x6f, 0x58, 0xbb, 0x0b, 0x3a, 0x24, 0xdc, 0x37, 0x46, 0x1f, 0x8a, 0xac, 0x96, - 0xfc, 0x3a, 0xec, 0x7b, 0xa6, 0x3d, 0x70, 0x88, 0xcb, 0x3b, 0x19, 0xf1, 0x08, 0x6f, 0x7e, 0x0a, - 0x00, 0x00, 0xff, 0xff, 0xd6, 0x6b, 0x76, 0xde, 0xef, 0x0e, 0x00, 0x00, +var File_backend_api_run_proto protoreflect.FileDescriptor + +var file_backend_api_run_proto_rawDesc = []byte{ + 0x0a, 0x15, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x75, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, 0x17, 0x62, 0x61, + 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x24, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2e, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x03, 0x72, 0x75, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x75, + 0x6e, 0x52, 0x03, 0x72, 0x75, 0x6e, 0x22, 0x26, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x22, 0xc6, + 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x17, + 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x46, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, + 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x13, 0x54, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, + 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x72, 0x75, 0x6e, 0x49, 0x64, 0x22, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x52, 0x75, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x22, + 0x77, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x08, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x75, 0x6e, 0x52, 0x04, 0x72, 0x75, 0x6e, + 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, + 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x23, 0x0a, 0x11, 0x41, 0x72, 0x63, 0x68, + 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x25, 0x0a, + 0x13, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x22, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x75, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x87, 0x05, 0x0a, 0x03, 0x52, 0x75, 0x6e, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x52, 0x75, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x47, 0x0a, 0x13, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0a, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x12, 0x28, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x45, 0x0a, 0x0c, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x53, + 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, + 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x54, 0x4f, 0x52, 0x41, + 0x47, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, + 0x10, 0x01, 0x22, 0x6b, 0x0a, 0x0f, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, + 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, + 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x22, + 0x68, 0x0a, 0x09, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x03, + 0x72, 0x75, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x52, 0x75, 0x6e, 0x52, 0x03, 0x72, 0x75, 0x6e, 0x12, 0x3f, 0x0a, 0x10, 0x70, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x0f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xc9, 0x01, 0x0a, 0x09, 0x52, 0x75, + 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, + 0x64, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x32, 0x0a, 0x06, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x41, 0x57, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, + 0x50, 0x45, 0x52, 0x43, 0x45, 0x4e, 0x54, 0x41, 0x47, 0x45, 0x10, 0x02, 0x42, 0x07, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5a, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, + 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x15, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, + 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x22, 0x9e, 0x03, 0x0a, 0x18, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, + 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x1a, 0xb2, 0x02, + 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x52, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3a, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x64, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x01, 0x12, + 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, + 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x55, 0x50, 0x4c, 0x49, 0x43, 0x41, + 0x54, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x12, + 0x0a, 0x0e, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x10, 0x04, 0x22, 0x6a, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x75, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, + 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x72, 0x74, + 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x2a, + 0x0a, 0x14, 0x52, 0x65, 0x61, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0xb2, 0x08, 0x0a, 0x0a, 0x52, + 0x75, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x53, 0x0a, 0x09, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x1f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x3a, 0x03, 0x72, 0x75, 0x6e, 0x12, 0x51, + 0x0a, 0x06, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x12, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, + 0x65, 0x74, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x23, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, + 0x7d, 0x12, 0x53, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x14, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x14, 0x12, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x12, 0x65, 0x0a, 0x0a, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, + 0x65, 0x52, 0x75, 0x6e, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, + 0x76, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1f, 0x2f, 0x61, + 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0x6b, 0x0a, + 0x0c, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x12, 0x18, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x3a, 0x75, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0x5b, 0x0a, 0x09, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, + 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x75, + 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x85, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x1c, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2e, 0x22, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x72, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x3a, 0x01, 0x2a, 0x12, + 0x97, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x52, 0x65, 0x61, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x12, 0x4a, 0x2f, + 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x75, 0x6e, + 0x73, 0x2f, 0x7b, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, + 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x72, 0x65, 0x61, 0x64, 0x12, 0x6f, 0x0a, 0x0c, 0x54, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2d, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x27, 0x22, 0x25, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x08, 0x52, 0x65, + 0x74, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x74, + 0x72, 0x79, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x21, 0x2f, 0x61, + 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, + 0x2f, 0x7b, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x42, + 0x85, 0x01, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, + 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, + 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x92, 0x41, 0x4d, 0x52, 0x1c, 0x0a, 0x07, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x11, 0x12, 0x0f, 0x0a, 0x0d, 0x1a, 0x0b, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5a, 0x1f, 0x0a, 0x1d, 0x0a, 0x06, 0x42, 0x65, + 0x61, 0x72, 0x65, 0x72, 0x12, 0x13, 0x08, 0x02, 0x1a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, 0x62, 0x0c, 0x0a, 0x0a, 0x0a, 0x06, 0x42, + 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_run_proto_rawDescOnce sync.Once + file_backend_api_run_proto_rawDescData = file_backend_api_run_proto_rawDesc +) + +func file_backend_api_run_proto_rawDescGZIP() []byte { + file_backend_api_run_proto_rawDescOnce.Do(func() { + file_backend_api_run_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_run_proto_rawDescData) + }) + return file_backend_api_run_proto_rawDescData +} + +var file_backend_api_run_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_backend_api_run_proto_msgTypes = make([]protoimpl.MessageInfo, 18) +var file_backend_api_run_proto_goTypes = []interface{}{ + (Run_StorageState)(0), // 0: api.Run.StorageState + (RunMetric_Format)(0), // 1: api.RunMetric.Format + (ReportRunMetricsResponse_ReportRunMetricResult_Status)(0), // 2: api.ReportRunMetricsResponse.ReportRunMetricResult.Status + (*CreateRunRequest)(nil), // 3: api.CreateRunRequest + (*GetRunRequest)(nil), // 4: api.GetRunRequest + (*ListRunsRequest)(nil), // 5: api.ListRunsRequest + (*TerminateRunRequest)(nil), // 6: api.TerminateRunRequest + (*RetryRunRequest)(nil), // 7: api.RetryRunRequest + (*ListRunsResponse)(nil), // 8: api.ListRunsResponse + (*ArchiveRunRequest)(nil), // 9: api.ArchiveRunRequest + (*UnarchiveRunRequest)(nil), // 10: api.UnarchiveRunRequest + (*DeleteRunRequest)(nil), // 11: api.DeleteRunRequest + (*Run)(nil), // 12: api.Run + (*PipelineRuntime)(nil), // 13: api.PipelineRuntime + (*RunDetail)(nil), // 14: api.RunDetail + (*RunMetric)(nil), // 15: api.RunMetric + (*ReportRunMetricsRequest)(nil), // 16: api.ReportRunMetricsRequest + (*ReportRunMetricsResponse)(nil), // 17: api.ReportRunMetricsResponse + (*ReadArtifactRequest)(nil), // 18: api.ReadArtifactRequest + (*ReadArtifactResponse)(nil), // 19: api.ReadArtifactResponse + (*ReportRunMetricsResponse_ReportRunMetricResult)(nil), // 20: api.ReportRunMetricsResponse.ReportRunMetricResult + (*ResourceKey)(nil), // 21: api.ResourceKey + (*PipelineSpec)(nil), // 22: api.PipelineSpec + (*ResourceReference)(nil), // 23: api.ResourceReference + (*timestamppb.Timestamp)(nil), // 24: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 25: google.protobuf.Empty +} +var file_backend_api_run_proto_depIdxs = []int32{ + 12, // 0: api.CreateRunRequest.run:type_name -> api.Run + 21, // 1: api.ListRunsRequest.resource_reference_key:type_name -> api.ResourceKey + 12, // 2: api.ListRunsResponse.runs:type_name -> api.Run + 0, // 3: api.Run.storage_state:type_name -> api.Run.StorageState + 22, // 4: api.Run.pipeline_spec:type_name -> api.PipelineSpec + 23, // 5: api.Run.resource_references:type_name -> api.ResourceReference + 24, // 6: api.Run.created_at:type_name -> google.protobuf.Timestamp + 24, // 7: api.Run.scheduled_at:type_name -> google.protobuf.Timestamp + 24, // 8: api.Run.finished_at:type_name -> google.protobuf.Timestamp + 15, // 9: api.Run.metrics:type_name -> api.RunMetric + 12, // 10: api.RunDetail.run:type_name -> api.Run + 13, // 11: api.RunDetail.pipeline_runtime:type_name -> api.PipelineRuntime + 1, // 12: api.RunMetric.format:type_name -> api.RunMetric.Format + 15, // 13: api.ReportRunMetricsRequest.metrics:type_name -> api.RunMetric + 20, // 14: api.ReportRunMetricsResponse.results:type_name -> api.ReportRunMetricsResponse.ReportRunMetricResult + 2, // 15: api.ReportRunMetricsResponse.ReportRunMetricResult.status:type_name -> api.ReportRunMetricsResponse.ReportRunMetricResult.Status + 3, // 16: api.RunService.CreateRun:input_type -> api.CreateRunRequest + 4, // 17: api.RunService.GetRun:input_type -> api.GetRunRequest + 5, // 18: api.RunService.ListRuns:input_type -> api.ListRunsRequest + 9, // 19: api.RunService.ArchiveRun:input_type -> api.ArchiveRunRequest + 10, // 20: api.RunService.UnarchiveRun:input_type -> api.UnarchiveRunRequest + 11, // 21: api.RunService.DeleteRun:input_type -> api.DeleteRunRequest + 16, // 22: api.RunService.ReportRunMetrics:input_type -> api.ReportRunMetricsRequest + 18, // 23: api.RunService.ReadArtifact:input_type -> api.ReadArtifactRequest + 6, // 24: api.RunService.TerminateRun:input_type -> api.TerminateRunRequest + 7, // 25: api.RunService.RetryRun:input_type -> api.RetryRunRequest + 14, // 26: api.RunService.CreateRun:output_type -> api.RunDetail + 14, // 27: api.RunService.GetRun:output_type -> api.RunDetail + 8, // 28: api.RunService.ListRuns:output_type -> api.ListRunsResponse + 25, // 29: api.RunService.ArchiveRun:output_type -> google.protobuf.Empty + 25, // 30: api.RunService.UnarchiveRun:output_type -> google.protobuf.Empty + 25, // 31: api.RunService.DeleteRun:output_type -> google.protobuf.Empty + 17, // 32: api.RunService.ReportRunMetrics:output_type -> api.ReportRunMetricsResponse + 19, // 33: api.RunService.ReadArtifact:output_type -> api.ReadArtifactResponse + 25, // 34: api.RunService.TerminateRun:output_type -> google.protobuf.Empty + 25, // 35: api.RunService.RetryRun:output_type -> google.protobuf.Empty + 26, // [26:36] is the sub-list for method output_type + 16, // [16:26] is the sub-list for method input_type + 16, // [16:16] is the sub-list for extension type_name + 16, // [16:16] is the sub-list for extension extendee + 0, // [0:16] is the sub-list for field type_name +} + +func init() { file_backend_api_run_proto_init() } +func file_backend_api_run_proto_init() { + if File_backend_api_run_proto != nil { + return + } + file_backend_api_error_proto_init() + file_backend_api_pipeline_spec_proto_init() + file_backend_api_resource_reference_proto_init() + if !protoimpl.UnsafeEnabled { + file_backend_api_run_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateRunRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetRunRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListRunsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TerminateRunRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RetryRunRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListRunsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ArchiveRunRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnarchiveRunRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteRunRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Run); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PipelineRuntime); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RunDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RunMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReportRunMetricsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReportRunMetricsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReadArtifactRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReadArtifactResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_run_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReportRunMetricsResponse_ReportRunMetricResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_backend_api_run_proto_msgTypes[12].OneofWrappers = []interface{}{ + (*RunMetric_NumberValue)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_run_proto_rawDesc, + NumEnums: 3, + NumMessages: 18, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_backend_api_run_proto_goTypes, + DependencyIndexes: file_backend_api_run_proto_depIdxs, + EnumInfos: file_backend_api_run_proto_enumTypes, + MessageInfos: file_backend_api_run_proto_msgTypes, + }.Build() + File_backend_api_run_proto = out.File + file_backend_api_run_proto_rawDesc = nil + file_backend_api_run_proto_goTypes = nil + file_backend_api_run_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // RunServiceClient is the client API for RunService service. // @@ -1303,11 +1964,11 @@ type RunServiceClient interface { // Finds all runs. ListRuns(ctx context.Context, in *ListRunsRequest, opts ...grpc.CallOption) (*ListRunsResponse, error) // Archives a run. - ArchiveRun(ctx context.Context, in *ArchiveRunRequest, opts ...grpc.CallOption) (*empty.Empty, error) + ArchiveRun(ctx context.Context, in *ArchiveRunRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Restores an archived run. - UnarchiveRun(ctx context.Context, in *UnarchiveRunRequest, opts ...grpc.CallOption) (*empty.Empty, error) + UnarchiveRun(ctx context.Context, in *UnarchiveRunRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Deletes a run. - DeleteRun(ctx context.Context, in *DeleteRunRequest, opts ...grpc.CallOption) (*empty.Empty, error) + DeleteRun(ctx context.Context, in *DeleteRunRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // ReportRunMetrics reports metrics of a run. Each metric is reported in its // own transaction, so this API accepts partial failures. Metric can be // uniquely identified by (run_id, node_id, name). Duplicate reporting will be @@ -1316,16 +1977,16 @@ type RunServiceClient interface { // Finds a run's artifact data. ReadArtifact(ctx context.Context, in *ReadArtifactRequest, opts ...grpc.CallOption) (*ReadArtifactResponse, error) // Terminates an active run. - TerminateRun(ctx context.Context, in *TerminateRunRequest, opts ...grpc.CallOption) (*empty.Empty, error) + TerminateRun(ctx context.Context, in *TerminateRunRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Re-initiates a failed or terminated run. - RetryRun(ctx context.Context, in *RetryRunRequest, opts ...grpc.CallOption) (*empty.Empty, error) + RetryRun(ctx context.Context, in *RetryRunRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) } type runServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewRunServiceClient(cc *grpc.ClientConn) RunServiceClient { +func NewRunServiceClient(cc grpc.ClientConnInterface) RunServiceClient { return &runServiceClient{cc} } @@ -1356,8 +2017,8 @@ func (c *runServiceClient) ListRuns(ctx context.Context, in *ListRunsRequest, op return out, nil } -func (c *runServiceClient) ArchiveRun(ctx context.Context, in *ArchiveRunRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *runServiceClient) ArchiveRun(ctx context.Context, in *ArchiveRunRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.RunService/ArchiveRun", in, out, opts...) if err != nil { return nil, err @@ -1365,8 +2026,8 @@ func (c *runServiceClient) ArchiveRun(ctx context.Context, in *ArchiveRunRequest return out, nil } -func (c *runServiceClient) UnarchiveRun(ctx context.Context, in *UnarchiveRunRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *runServiceClient) UnarchiveRun(ctx context.Context, in *UnarchiveRunRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.RunService/UnarchiveRun", in, out, opts...) if err != nil { return nil, err @@ -1374,8 +2035,8 @@ func (c *runServiceClient) UnarchiveRun(ctx context.Context, in *UnarchiveRunReq return out, nil } -func (c *runServiceClient) DeleteRun(ctx context.Context, in *DeleteRunRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *runServiceClient) DeleteRun(ctx context.Context, in *DeleteRunRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.RunService/DeleteRun", in, out, opts...) if err != nil { return nil, err @@ -1401,8 +2062,8 @@ func (c *runServiceClient) ReadArtifact(ctx context.Context, in *ReadArtifactReq return out, nil } -func (c *runServiceClient) TerminateRun(ctx context.Context, in *TerminateRunRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *runServiceClient) TerminateRun(ctx context.Context, in *TerminateRunRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.RunService/TerminateRun", in, out, opts...) if err != nil { return nil, err @@ -1410,8 +2071,8 @@ func (c *runServiceClient) TerminateRun(ctx context.Context, in *TerminateRunReq return out, nil } -func (c *runServiceClient) RetryRun(ctx context.Context, in *RetryRunRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *runServiceClient) RetryRun(ctx context.Context, in *RetryRunRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/api.RunService/RetryRun", in, out, opts...) if err != nil { return nil, err @@ -1428,11 +2089,11 @@ type RunServiceServer interface { // Finds all runs. ListRuns(context.Context, *ListRunsRequest) (*ListRunsResponse, error) // Archives a run. - ArchiveRun(context.Context, *ArchiveRunRequest) (*empty.Empty, error) + ArchiveRun(context.Context, *ArchiveRunRequest) (*emptypb.Empty, error) // Restores an archived run. - UnarchiveRun(context.Context, *UnarchiveRunRequest) (*empty.Empty, error) + UnarchiveRun(context.Context, *UnarchiveRunRequest) (*emptypb.Empty, error) // Deletes a run. - DeleteRun(context.Context, *DeleteRunRequest) (*empty.Empty, error) + DeleteRun(context.Context, *DeleteRunRequest) (*emptypb.Empty, error) // ReportRunMetrics reports metrics of a run. Each metric is reported in its // own transaction, so this API accepts partial failures. Metric can be // uniquely identified by (run_id, node_id, name). Duplicate reporting will be @@ -1441,43 +2102,43 @@ type RunServiceServer interface { // Finds a run's artifact data. ReadArtifact(context.Context, *ReadArtifactRequest) (*ReadArtifactResponse, error) // Terminates an active run. - TerminateRun(context.Context, *TerminateRunRequest) (*empty.Empty, error) + TerminateRun(context.Context, *TerminateRunRequest) (*emptypb.Empty, error) // Re-initiates a failed or terminated run. - RetryRun(context.Context, *RetryRunRequest) (*empty.Empty, error) + RetryRun(context.Context, *RetryRunRequest) (*emptypb.Empty, error) } // UnimplementedRunServiceServer can be embedded to have forward compatible implementations. type UnimplementedRunServiceServer struct { } -func (*UnimplementedRunServiceServer) CreateRun(ctx context.Context, req *CreateRunRequest) (*RunDetail, error) { +func (*UnimplementedRunServiceServer) CreateRun(context.Context, *CreateRunRequest) (*RunDetail, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateRun not implemented") } -func (*UnimplementedRunServiceServer) GetRun(ctx context.Context, req *GetRunRequest) (*RunDetail, error) { +func (*UnimplementedRunServiceServer) GetRun(context.Context, *GetRunRequest) (*RunDetail, error) { return nil, status.Errorf(codes.Unimplemented, "method GetRun not implemented") } -func (*UnimplementedRunServiceServer) ListRuns(ctx context.Context, req *ListRunsRequest) (*ListRunsResponse, error) { +func (*UnimplementedRunServiceServer) ListRuns(context.Context, *ListRunsRequest) (*ListRunsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListRuns not implemented") } -func (*UnimplementedRunServiceServer) ArchiveRun(ctx context.Context, req *ArchiveRunRequest) (*empty.Empty, error) { +func (*UnimplementedRunServiceServer) ArchiveRun(context.Context, *ArchiveRunRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method ArchiveRun not implemented") } -func (*UnimplementedRunServiceServer) UnarchiveRun(ctx context.Context, req *UnarchiveRunRequest) (*empty.Empty, error) { +func (*UnimplementedRunServiceServer) UnarchiveRun(context.Context, *UnarchiveRunRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method UnarchiveRun not implemented") } -func (*UnimplementedRunServiceServer) DeleteRun(ctx context.Context, req *DeleteRunRequest) (*empty.Empty, error) { +func (*UnimplementedRunServiceServer) DeleteRun(context.Context, *DeleteRunRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteRun not implemented") } -func (*UnimplementedRunServiceServer) ReportRunMetrics(ctx context.Context, req *ReportRunMetricsRequest) (*ReportRunMetricsResponse, error) { +func (*UnimplementedRunServiceServer) ReportRunMetrics(context.Context, *ReportRunMetricsRequest) (*ReportRunMetricsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ReportRunMetrics not implemented") } -func (*UnimplementedRunServiceServer) ReadArtifact(ctx context.Context, req *ReadArtifactRequest) (*ReadArtifactResponse, error) { +func (*UnimplementedRunServiceServer) ReadArtifact(context.Context, *ReadArtifactRequest) (*ReadArtifactResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ReadArtifact not implemented") } -func (*UnimplementedRunServiceServer) TerminateRun(ctx context.Context, req *TerminateRunRequest) (*empty.Empty, error) { +func (*UnimplementedRunServiceServer) TerminateRun(context.Context, *TerminateRunRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method TerminateRun not implemented") } -func (*UnimplementedRunServiceServer) RetryRun(ctx context.Context, req *RetryRunRequest) (*empty.Empty, error) { +func (*UnimplementedRunServiceServer) RetryRun(context.Context, *RetryRunRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method RetryRun not implemented") } diff --git a/backend/api/go_client/task.pb.go b/backend/api/go_client/task.pb.go new file mode 100644 index 0000000000..6a2f08c360 --- /dev/null +++ b/backend/api/go_client/task.pb.go @@ -0,0 +1,666 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: backend/api/task.proto + +package go_client + +import ( + context "context" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Task struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Output. Unique task ID. Generated by API server. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Optional input field. The Namespace to which this pipeline task belongs. + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + // Required input field. The PipelineName to which this pipeline task belongs. + // Namespace will be encoded in the PipelineName. + // "namespace/${namespace}/pipeline/${pipelineName}" for namespaced pipelines + // "pipeline/${pipelineName}" for shared pipelines + PipelineName string `protobuf:"bytes,3,opt,name=pipelineName,proto3" json:"pipelineName,omitempty"` + // Required input field.The ID of the PipelineRun that the PipelineTask belongs to. + RunId string `protobuf:"bytes,4,opt,name=runId,proto3" json:"runId,omitempty"` + // Required input field. The ID of the MLMD execution associated with the PipelineTask. + MlmdExecutionID string `protobuf:"bytes,5,opt,name=mlmdExecutionID,proto3" json:"mlmdExecutionID,omitempty"` + // Required input field. The time this task is created. + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + // Optional input field. The time this task is finished. + FinishedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=finished_at,json=finishedAt,proto3" json:"finished_at,omitempty"` + // Required input field. + Fingerprint string `protobuf:"bytes,8,opt,name=fingerprint,proto3" json:"fingerprint,omitempty"` +} + +func (x *Task) Reset() { + *x = Task{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_task_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Task) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Task) ProtoMessage() {} + +func (x *Task) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_task_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Task.ProtoReflect.Descriptor instead. +func (*Task) Descriptor() ([]byte, []int) { + return file_backend_api_task_proto_rawDescGZIP(), []int{0} +} + +func (x *Task) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Task) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *Task) GetPipelineName() string { + if x != nil { + return x.PipelineName + } + return "" +} + +func (x *Task) GetRunId() string { + if x != nil { + return x.RunId + } + return "" +} + +func (x *Task) GetMlmdExecutionID() string { + if x != nil { + return x.MlmdExecutionID + } + return "" +} + +func (x *Task) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *Task) GetFinishedAt() *timestamppb.Timestamp { + if x != nil { + return x.FinishedAt + } + return nil +} + +func (x *Task) GetFingerprint() string { + if x != nil { + return x.Fingerprint + } + return "" +} + +type CreateTaskRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Task *Task `protobuf:"bytes,1,opt,name=task,proto3" json:"task,omitempty"` +} + +func (x *CreateTaskRequest) Reset() { + *x = CreateTaskRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_task_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTaskRequest) ProtoMessage() {} + +func (x *CreateTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_task_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTaskRequest.ProtoReflect.Descriptor instead. +func (*CreateTaskRequest) Descriptor() ([]byte, []int) { + return file_backend_api_task_proto_rawDescGZIP(), []int{1} +} + +func (x *CreateTaskRequest) GetTask() *Task { + if x != nil { + return x.Task + } + return nil +} + +type ListTasksRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A page token to request the next page of results. The token is acquried + // from the nextPageToken field of the response from the previous + // ListExperiment call or can be omitted when fetching the first page. + PageToken string `protobuf:"bytes,1,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` + // The number of experiments to be listed per page. If there are more + // experiments than this number, the response message will contain a + // nextPageToken field you can use to fetch the next page. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // Can be format of "field_name", "field_name asc" or "field_name desc" + // Ascending by default. + SortBy string `protobuf:"bytes,3,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"` + // What resource reference to filter on. + // E.g. If listing tasks for an pipeline run, the query string would be + // resource_reference_key.type="PIPELINE"&resource_reference_key.id=123 + ResourceReferenceKey *ResourceKey `protobuf:"bytes,4,opt,name=resource_reference_key,json=resourceReferenceKey,proto3" json:"resource_reference_key,omitempty"` + // A url-encoded, JSON-serialized Filter protocol buffer (see + // [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). + Filter string `protobuf:"bytes,5,opt,name=filter,proto3" json:"filter,omitempty"` +} + +func (x *ListTasksRequest) Reset() { + *x = ListTasksRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_task_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTasksRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTasksRequest) ProtoMessage() {} + +func (x *ListTasksRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_task_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTasksRequest.ProtoReflect.Descriptor instead. +func (*ListTasksRequest) Descriptor() ([]byte, []int) { + return file_backend_api_task_proto_rawDescGZIP(), []int{2} +} + +func (x *ListTasksRequest) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +func (x *ListTasksRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListTasksRequest) GetSortBy() string { + if x != nil { + return x.SortBy + } + return "" +} + +func (x *ListTasksRequest) GetResourceReferenceKey() *ResourceKey { + if x != nil { + return x.ResourceReferenceKey + } + return nil +} + +func (x *ListTasksRequest) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +type ListTasksResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A list of tasks returned. + Tasks []*Task `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` + // The token to list the next page of experiments. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` + // The total number of experiments for the given query. + TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` +} + +func (x *ListTasksResponse) Reset() { + *x = ListTasksResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_task_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTasksResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTasksResponse) ProtoMessage() {} + +func (x *ListTasksResponse) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_task_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTasksResponse.ProtoReflect.Descriptor instead. +func (*ListTasksResponse) Descriptor() ([]byte, []int) { + return file_backend_api_task_proto_rawDescGZIP(), []int{3} +} + +func (x *ListTasksResponse) GetTasks() []*Task { + if x != nil { + return x.Tasks + } + return nil +} + +func (x *ListTasksResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + +func (x *ListTasksResponse) GetTotalSize() int32 { + if x != nil { + return x.TotalSize + } + return 0 +} + +var File_backend_api_task_proto protoreflect.FileDescriptor + +var file_backend_api_task_proto_rawDesc = []byte{ + 0x0a, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x61, + 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, 0x1c, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x62, 0x61, + 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xb2, 0x02, 0x0a, 0x04, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, + 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x6d, 0x6c, 0x6d, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x6c, + 0x6d, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x39, 0x0a, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x69, + 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x66, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x65, 0x64, 0x41, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, + 0x72, 0x69, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x69, 0x6e, 0x67, + 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x22, 0x32, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x04, + 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x22, 0xc7, 0x01, 0x0a, 0x10, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, + 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x17, 0x0a, 0x07, + 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x46, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, + 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x7b, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, + 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x05, 0x74, 0x61, + 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x54, 0x61, 0x73, 0x6b, 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, + 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, + 0x7a, 0x65, 0x32, 0xbc, 0x01, 0x0a, 0x0b, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x53, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x09, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, + 0x61, 0x73, 0x6b, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x14, 0x2f, 0x61, 0x70, + 0x69, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, + 0x73, 0x3a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x58, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x61, 0x73, 0x6b, 0x73, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, + 0x69, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, + 0x73, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, + 0x6f, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_task_proto_rawDescOnce sync.Once + file_backend_api_task_proto_rawDescData = file_backend_api_task_proto_rawDesc +) + +func file_backend_api_task_proto_rawDescGZIP() []byte { + file_backend_api_task_proto_rawDescOnce.Do(func() { + file_backend_api_task_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_task_proto_rawDescData) + }) + return file_backend_api_task_proto_rawDescData +} + +var file_backend_api_task_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_backend_api_task_proto_goTypes = []interface{}{ + (*Task)(nil), // 0: api.Task + (*CreateTaskRequest)(nil), // 1: api.CreateTaskRequest + (*ListTasksRequest)(nil), // 2: api.ListTasksRequest + (*ListTasksResponse)(nil), // 3: api.ListTasksResponse + (*timestamppb.Timestamp)(nil), // 4: google.protobuf.Timestamp + (*ResourceKey)(nil), // 5: api.ResourceKey +} +var file_backend_api_task_proto_depIdxs = []int32{ + 4, // 0: api.Task.created_at:type_name -> google.protobuf.Timestamp + 4, // 1: api.Task.finished_at:type_name -> google.protobuf.Timestamp + 0, // 2: api.CreateTaskRequest.task:type_name -> api.Task + 5, // 3: api.ListTasksRequest.resource_reference_key:type_name -> api.ResourceKey + 0, // 4: api.ListTasksResponse.tasks:type_name -> api.Task + 1, // 5: api.TaskService.CreateTask:input_type -> api.CreateTaskRequest + 2, // 6: api.TaskService.ListTasks:input_type -> api.ListTasksRequest + 0, // 7: api.TaskService.CreateTask:output_type -> api.Task + 3, // 8: api.TaskService.ListTasks:output_type -> api.ListTasksResponse + 7, // [7:9] is the sub-list for method output_type + 5, // [5:7] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_backend_api_task_proto_init() } +func file_backend_api_task_proto_init() { + if File_backend_api_task_proto != nil { + return + } + file_backend_api_resource_reference_proto_init() + if !protoimpl.UnsafeEnabled { + file_backend_api_task_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Task); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_task_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_task_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTasksRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_task_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTasksResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_task_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_backend_api_task_proto_goTypes, + DependencyIndexes: file_backend_api_task_proto_depIdxs, + MessageInfos: file_backend_api_task_proto_msgTypes, + }.Build() + File_backend_api_task_proto = out.File + file_backend_api_task_proto_rawDesc = nil + file_backend_api_task_proto_goTypes = nil + file_backend_api_task_proto_depIdxs = nil +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConnInterface + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion6 + +// TaskServiceClient is the client API for TaskService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type TaskServiceClient interface { + // Creates a new task. + CreateTask(ctx context.Context, in *CreateTaskRequest, opts ...grpc.CallOption) (*Task, error) + // Finds all tasks. Supports pagination, and sorting on certain fields. + ListTasks(ctx context.Context, in *ListTasksRequest, opts ...grpc.CallOption) (*ListTasksResponse, error) +} + +type taskServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewTaskServiceClient(cc grpc.ClientConnInterface) TaskServiceClient { + return &taskServiceClient{cc} +} + +func (c *taskServiceClient) CreateTask(ctx context.Context, in *CreateTaskRequest, opts ...grpc.CallOption) (*Task, error) { + out := new(Task) + err := c.cc.Invoke(ctx, "/api.TaskService/CreateTask", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskServiceClient) ListTasks(ctx context.Context, in *ListTasksRequest, opts ...grpc.CallOption) (*ListTasksResponse, error) { + out := new(ListTasksResponse) + err := c.cc.Invoke(ctx, "/api.TaskService/ListTasks", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// TaskServiceServer is the server API for TaskService service. +type TaskServiceServer interface { + // Creates a new task. + CreateTask(context.Context, *CreateTaskRequest) (*Task, error) + // Finds all tasks. Supports pagination, and sorting on certain fields. + ListTasks(context.Context, *ListTasksRequest) (*ListTasksResponse, error) +} + +// UnimplementedTaskServiceServer can be embedded to have forward compatible implementations. +type UnimplementedTaskServiceServer struct { +} + +func (*UnimplementedTaskServiceServer) CreateTask(context.Context, *CreateTaskRequest) (*Task, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateTask not implemented") +} +func (*UnimplementedTaskServiceServer) ListTasks(context.Context, *ListTasksRequest) (*ListTasksResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListTasks not implemented") +} + +func RegisterTaskServiceServer(s *grpc.Server, srv TaskServiceServer) { + s.RegisterService(&_TaskService_serviceDesc, srv) +} + +func _TaskService_CreateTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServiceServer).CreateTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.TaskService/CreateTask", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServiceServer).CreateTask(ctx, req.(*CreateTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TaskService_ListTasks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTasksRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServiceServer).ListTasks(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.TaskService/ListTasks", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServiceServer).ListTasks(ctx, req.(*ListTasksRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _TaskService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "api.TaskService", + HandlerType: (*TaskServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateTask", + Handler: _TaskService_CreateTask_Handler, + }, + { + MethodName: "ListTasks", + Handler: _TaskService_ListTasks_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "backend/api/task.proto", +} diff --git a/backend/api/go_client/task.pb.gw.go b/backend/api/go_client/task.pb.gw.go new file mode 100644 index 0000000000..91f2953afb --- /dev/null +++ b/backend/api/go_client/task.pb.gw.go @@ -0,0 +1,156 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: backend/api/task.proto + +/* +Package go_client is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package go_client + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/status" +) + +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray + +func request_TaskService_CreateTask_0(ctx context.Context, marshaler runtime.Marshaler, client TaskServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTaskRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Task); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateTask(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_TaskService_ListTasks_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_TaskService_ListTasks_0(ctx context.Context, marshaler runtime.Marshaler, client TaskServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListTasksRequest + var metadata runtime.ServerMetadata + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_TaskService_ListTasks_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListTasks(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +// RegisterTaskServiceHandlerFromEndpoint is same as RegisterTaskServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterTaskServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterTaskServiceHandler(ctx, mux, conn) +} + +// RegisterTaskServiceHandler registers the http handlers for service TaskService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterTaskServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterTaskServiceHandlerClient(ctx, mux, NewTaskServiceClient(conn)) +} + +// RegisterTaskServiceHandlerClient registers the http handlers for service TaskService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "TaskServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "TaskServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "TaskServiceClient" to call the correct interceptors. +func RegisterTaskServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client TaskServiceClient) error { + + mux.Handle("POST", pattern_TaskService_CreateTask_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TaskService_CreateTask_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_TaskService_CreateTask_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_TaskService_ListTasks_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TaskService_ListTasks_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_TaskService_ListTasks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_TaskService_CreateTask_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"apis", "v1alpha1", "tasks"}, "")) + + pattern_TaskService_ListTasks_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"apis", "v1alpha1", "tasks"}, "")) +) + +var ( + forward_TaskService_CreateTask_0 = runtime.ForwardResponseMessage + + forward_TaskService_ListTasks_0 = runtime.ForwardResponseMessage +) diff --git a/backend/api/go_client/visualization.pb.go b/backend/api/go_client/visualization.pb.go index 5e339b4cf7..c922f44c91 100644 --- a/backend/api/go_client/visualization.pb.go +++ b/backend/api/go_client/visualization.pb.go @@ -1,30 +1,44 @@ +// Copyright 2019 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 // source: backend/api/visualization.proto package go_client import ( context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) // Type of visualization to be generated. // This is required when creating the pipeline through CreateVisualization @@ -39,81 +53,114 @@ const ( Visualization_CUSTOM Visualization_Type = 4 ) -var Visualization_Type_name = map[int32]string{ - 0: "ROC_CURVE", - 1: "TFDV", - 2: "TFMA", - 3: "TABLE", - 4: "CUSTOM", -} +// Enum value maps for Visualization_Type. +var ( + Visualization_Type_name = map[int32]string{ + 0: "ROC_CURVE", + 1: "TFDV", + 2: "TFMA", + 3: "TABLE", + 4: "CUSTOM", + } + Visualization_Type_value = map[string]int32{ + "ROC_CURVE": 0, + "TFDV": 1, + "TFMA": 2, + "TABLE": 3, + "CUSTOM": 4, + } +) -var Visualization_Type_value = map[string]int32{ - "ROC_CURVE": 0, - "TFDV": 1, - "TFMA": 2, - "TABLE": 3, - "CUSTOM": 4, +func (x Visualization_Type) Enum() *Visualization_Type { + p := new(Visualization_Type) + *p = x + return p } func (x Visualization_Type) String() string { - return proto.EnumName(Visualization_Type_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Visualization_Type) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_visualization_proto_enumTypes[0].Descriptor() } +func (Visualization_Type) Type() protoreflect.EnumType { + return &file_backend_api_visualization_proto_enumTypes[0] +} + +func (x Visualization_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Visualization_Type.Descriptor instead. func (Visualization_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e22487dd6aa91c3b, []int{1, 0} + return file_backend_api_visualization_proto_rawDescGZIP(), []int{1, 0} } // Create visualization by providing the type of visualization that is desired // and input data paths. Input dat paths are assumed to be unique and are used // for determining output path. type CreateVisualizationRequest struct { - Visualization *Visualization `protobuf:"bytes,1,opt,name=visualization,proto3" json:"visualization,omitempty"` - Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *CreateVisualizationRequest) Reset() { *m = CreateVisualizationRequest{} } -func (m *CreateVisualizationRequest) String() string { return proto.CompactTextString(m) } -func (*CreateVisualizationRequest) ProtoMessage() {} -func (*CreateVisualizationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e22487dd6aa91c3b, []int{0} + Visualization *Visualization `protobuf:"bytes,1,opt,name=visualization,proto3" json:"visualization,omitempty"` + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` } -func (m *CreateVisualizationRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CreateVisualizationRequest.Unmarshal(m, b) -} -func (m *CreateVisualizationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CreateVisualizationRequest.Marshal(b, m, deterministic) -} -func (m *CreateVisualizationRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateVisualizationRequest.Merge(m, src) +func (x *CreateVisualizationRequest) Reset() { + *x = CreateVisualizationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_visualization_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *CreateVisualizationRequest) XXX_Size() int { - return xxx_messageInfo_CreateVisualizationRequest.Size(m) + +func (x *CreateVisualizationRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateVisualizationRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateVisualizationRequest.DiscardUnknown(m) + +func (*CreateVisualizationRequest) ProtoMessage() {} + +func (x *CreateVisualizationRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_visualization_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_CreateVisualizationRequest proto.InternalMessageInfo +// Deprecated: Use CreateVisualizationRequest.ProtoReflect.Descriptor instead. +func (*CreateVisualizationRequest) Descriptor() ([]byte, []int) { + return file_backend_api_visualization_proto_rawDescGZIP(), []int{0} +} -func (m *CreateVisualizationRequest) GetVisualization() *Visualization { - if m != nil { - return m.Visualization +func (x *CreateVisualizationRequest) GetVisualization() *Visualization { + if x != nil { + return x.Visualization } return nil } -func (m *CreateVisualizationRequest) GetNamespace() string { - if m != nil { - return m.Namespace +func (x *CreateVisualizationRequest) GetNamespace() string { + if x != nil { + return x.Namespace } return "" } type Visualization struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Type Visualization_Type `protobuf:"varint,1,opt,name=type,proto3,enum=api.Visualization_Type" json:"type,omitempty"` // Path pattern of input data to be used during generation of visualizations. // This is required when creating the pipeline through CreateVisualization @@ -129,122 +176,222 @@ type Visualization struct { // In case any error happens when generating visualizations, only // visualization ID and the error message are returned. Client has the // flexibility of choosing how to handle the error. - Error string `protobuf:"bytes,5,opt,name=error,proto3" json:"error,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Error string `protobuf:"bytes,5,opt,name=error,proto3" json:"error,omitempty"` } -func (m *Visualization) Reset() { *m = Visualization{} } -func (m *Visualization) String() string { return proto.CompactTextString(m) } -func (*Visualization) ProtoMessage() {} -func (*Visualization) Descriptor() ([]byte, []int) { - return fileDescriptor_e22487dd6aa91c3b, []int{1} +func (x *Visualization) Reset() { + *x = Visualization{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_visualization_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Visualization) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Visualization.Unmarshal(m, b) -} -func (m *Visualization) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Visualization.Marshal(b, m, deterministic) -} -func (m *Visualization) XXX_Merge(src proto.Message) { - xxx_messageInfo_Visualization.Merge(m, src) +func (x *Visualization) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Visualization) XXX_Size() int { - return xxx_messageInfo_Visualization.Size(m) -} -func (m *Visualization) XXX_DiscardUnknown() { - xxx_messageInfo_Visualization.DiscardUnknown(m) + +func (*Visualization) ProtoMessage() {} + +func (x *Visualization) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_visualization_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Visualization proto.InternalMessageInfo +// Deprecated: Use Visualization.ProtoReflect.Descriptor instead. +func (*Visualization) Descriptor() ([]byte, []int) { + return file_backend_api_visualization_proto_rawDescGZIP(), []int{1} +} -func (m *Visualization) GetType() Visualization_Type { - if m != nil { - return m.Type +func (x *Visualization) GetType() Visualization_Type { + if x != nil { + return x.Type } return Visualization_ROC_CURVE } -func (m *Visualization) GetSource() string { - if m != nil { - return m.Source +func (x *Visualization) GetSource() string { + if x != nil { + return x.Source } return "" } -func (m *Visualization) GetArguments() string { - if m != nil { - return m.Arguments +func (x *Visualization) GetArguments() string { + if x != nil { + return x.Arguments } return "" } -func (m *Visualization) GetHtml() string { - if m != nil { - return m.Html +func (x *Visualization) GetHtml() string { + if x != nil { + return x.Html } return "" } -func (m *Visualization) GetError() string { - if m != nil { - return m.Error +func (x *Visualization) GetError() string { + if x != nil { + return x.Error } return "" } -func init() { - proto.RegisterEnum("api.Visualization_Type", Visualization_Type_name, Visualization_Type_value) - proto.RegisterType((*CreateVisualizationRequest)(nil), "api.CreateVisualizationRequest") - proto.RegisterType((*Visualization)(nil), "api.Visualization") -} - -func init() { proto.RegisterFile("backend/api/visualization.proto", fileDescriptor_e22487dd6aa91c3b) } - -var fileDescriptor_e22487dd6aa91c3b = []byte{ - // 482 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x52, 0xc1, 0x6e, 0xd3, 0x40, - 0x10, 0xad, 0x13, 0x27, 0x34, 0x53, 0x02, 0x61, 0x5b, 0x51, 0xcb, 0x0a, 0x4a, 0xe4, 0x53, 0x24, - 0xa8, 0xad, 0xa6, 0x17, 0xe0, 0x02, 0x49, 0x28, 0x27, 0xa2, 0x4a, 0x4e, 0x9a, 0x43, 0x2f, 0xd5, - 0xda, 0x9d, 0x3a, 0xab, 0x3a, 0xde, 0x65, 0x77, 0x9d, 0xaa, 0x20, 0x2e, 0x48, 0x9c, 0xb8, 0xc1, - 0x2f, 0xf0, 0x47, 0xdc, 0x39, 0xf1, 0x21, 0x28, 0x9b, 0x28, 0xc4, 0x6a, 0x7b, 0xf2, 0xee, 0xec, - 0x9b, 0xf7, 0xc6, 0x6f, 0x1e, 0xb4, 0x22, 0x1a, 0x5f, 0x61, 0x76, 0x11, 0x50, 0xc1, 0x82, 0x39, - 0x53, 0x39, 0x4d, 0xd9, 0x27, 0xaa, 0x19, 0xcf, 0x7c, 0x21, 0xb9, 0xe6, 0xa4, 0x4c, 0x05, 0x73, - 0x9b, 0x09, 0xe7, 0x49, 0x8a, 0x06, 0x44, 0xb3, 0x8c, 0x6b, 0x83, 0x50, 0x4b, 0x88, 0xbb, 0xbf, - 0xc9, 0x81, 0x52, 0x72, 0xb9, 0x7a, 0x78, 0x61, 0x3e, 0xf1, 0x41, 0x82, 0xd9, 0x81, 0xba, 0xa6, - 0x49, 0x82, 0x32, 0xe0, 0xc2, 0xb4, 0xde, 0xa6, 0xf1, 0x34, 0xb8, 0x03, 0x89, 0x54, 0xe3, 0x64, - 0x73, 0x8c, 0x10, 0x3f, 0xe6, 0xa8, 0x34, 0x79, 0x09, 0xf5, 0xc2, 0x78, 0x8e, 0xd5, 0xb6, 0x3a, - 0x3b, 0x5d, 0xe2, 0x53, 0xc1, 0xfc, 0x62, 0x47, 0x11, 0x48, 0x9a, 0x50, 0xcb, 0xe8, 0x0c, 0x95, - 0xa0, 0x31, 0x3a, 0xa5, 0xb6, 0xd5, 0xa9, 0x85, 0xff, 0x0b, 0xde, 0x1f, 0x0b, 0xea, 0x85, 0x76, - 0xf2, 0x1c, 0x6c, 0x7d, 0x23, 0xd0, 0x08, 0x3c, 0xea, 0xee, 0xdf, 0x16, 0xf0, 0xc7, 0x37, 0x02, - 0x43, 0x03, 0x22, 0x4f, 0xa1, 0xaa, 0x78, 0x2e, 0xd7, 0xcc, 0xab, 0xdb, 0x42, 0x94, 0xca, 0x24, - 0x9f, 0x61, 0xa6, 0x95, 0x53, 0x5e, 0x8a, 0xae, 0x0b, 0x84, 0x80, 0x3d, 0xd5, 0xb3, 0xd4, 0xb1, - 0xcd, 0x83, 0x39, 0x93, 0x3d, 0xa8, 0x18, 0xef, 0x9c, 0x8a, 0x29, 0x2e, 0x2f, 0xde, 0x5b, 0xb0, - 0x17, 0x6a, 0xa4, 0x0e, 0xb5, 0xf0, 0x64, 0x70, 0x3e, 0x38, 0x0d, 0x27, 0xc7, 0x8d, 0x2d, 0xb2, - 0x0d, 0xf6, 0xf8, 0xfd, 0xbb, 0x49, 0xc3, 0x5a, 0x9e, 0x86, 0xbd, 0x46, 0x89, 0xd4, 0xa0, 0x32, - 0xee, 0xf5, 0x3f, 0x1c, 0x37, 0xca, 0x04, 0xa0, 0x3a, 0x38, 0x1d, 0x8d, 0x4f, 0x86, 0x0d, 0xbb, - 0xfb, 0xcb, 0x82, 0xbd, 0xc2, 0xf8, 0x23, 0x94, 0x73, 0x16, 0x23, 0xf9, 0x6e, 0xc1, 0xee, 0x1d, - 0x86, 0x93, 0x96, 0xf9, 0xe3, 0xfb, 0x57, 0xe1, 0xde, 0xe1, 0xb9, 0xf7, 0xe6, 0xeb, 0xef, 0xbf, - 0x3f, 0x4b, 0xaf, 0xbc, 0xce, 0x22, 0x04, 0x2a, 0x98, 0x1f, 0x46, 0xa8, 0xe9, 0x61, 0x31, 0x51, - 0x2a, 0xf8, 0xbc, 0xf6, 0xfd, 0xcb, 0xeb, 0xe2, 0x96, 0xfa, 0xdf, 0xac, 0x1f, 0xbd, 0x61, 0xd8, - 0x84, 0x07, 0x17, 0x78, 0x49, 0xf3, 0x54, 0x93, 0x27, 0xe4, 0x31, 0xd4, 0xdd, 0x1d, 0xa3, 0x35, - 0xd2, 0x54, 0xe7, 0xea, 0xac, 0x05, 0xcf, 0xa0, 0xda, 0x47, 0x2a, 0x51, 0x92, 0xdd, 0xed, 0x92, - 0x5b, 0xa7, 0xb9, 0x9e, 0x72, 0xb9, 0xa2, 0x68, 0x97, 0xa2, 0x87, 0x00, 0x6b, 0xc0, 0xd6, 0xd9, - 0x51, 0xc2, 0xf4, 0x34, 0x8f, 0xfc, 0x98, 0xcf, 0x82, 0xab, 0x3c, 0xc2, 0xcb, 0x94, 0x5f, 0x07, - 0x82, 0x09, 0x4c, 0x59, 0x86, 0x2a, 0xd8, 0x4c, 0x6d, 0xc2, 0xcf, 0xe3, 0x94, 0x61, 0xa6, 0xa3, - 0xaa, 0x09, 0xe3, 0xd1, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x50, 0x9c, 0xbc, 0x19, 0x03, - 0x00, 0x00, +var File_backend_api_visualization_proto protoreflect.FileDescriptor + +var file_backend_api_visualization_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x69, + 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, + 0x72, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x74, 0x0a, 0x1a, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0d, 0x76, 0x69, 0x73, + 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x22, 0xde, 0x01, 0x0a, 0x0d, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x72, 0x67, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x67, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x74, 0x6d, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x74, 0x6d, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x40, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x4f, 0x43, 0x5f, + 0x43, 0x55, 0x52, 0x56, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x46, 0x44, 0x56, 0x10, + 0x01, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x46, 0x4d, 0x41, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x54, + 0x41, 0x42, 0x4c, 0x45, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, + 0x10, 0x04, 0x32, 0xa4, 0x01, 0x0a, 0x14, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8b, 0x01, 0x0a, 0x13, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x69, 0x73, 0x75, 0x61, + 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, + 0x22, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x3a, 0x0d, 0x76, 0x69, 0x73, 0x75, + 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x85, 0x01, 0x5a, 0x33, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, + 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, + 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x92, 0x41, 0x4d, 0x52, 0x1c, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, + 0x11, 0x12, 0x0f, 0x0a, 0x0d, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x5a, 0x1f, 0x0a, 0x1d, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x13, + 0x08, 0x02, 0x1a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x02, 0x62, 0x0c, 0x0a, 0x0a, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, + 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_visualization_proto_rawDescOnce sync.Once + file_backend_api_visualization_proto_rawDescData = file_backend_api_visualization_proto_rawDesc +) + +func file_backend_api_visualization_proto_rawDescGZIP() []byte { + file_backend_api_visualization_proto_rawDescOnce.Do(func() { + file_backend_api_visualization_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_visualization_proto_rawDescData) + }) + return file_backend_api_visualization_proto_rawDescData +} + +var file_backend_api_visualization_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_backend_api_visualization_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_backend_api_visualization_proto_goTypes = []interface{}{ + (Visualization_Type)(0), // 0: api.Visualization.Type + (*CreateVisualizationRequest)(nil), // 1: api.CreateVisualizationRequest + (*Visualization)(nil), // 2: api.Visualization +} +var file_backend_api_visualization_proto_depIdxs = []int32{ + 2, // 0: api.CreateVisualizationRequest.visualization:type_name -> api.Visualization + 0, // 1: api.Visualization.type:type_name -> api.Visualization.Type + 1, // 2: api.VisualizationService.CreateVisualization:input_type -> api.CreateVisualizationRequest + 2, // 3: api.VisualizationService.CreateVisualization:output_type -> api.Visualization + 3, // [3:4] is the sub-list for method output_type + 2, // [2:3] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_backend_api_visualization_proto_init() } +func file_backend_api_visualization_proto_init() { + if File_backend_api_visualization_proto != nil { + return + } + file_backend_api_error_proto_init() + if !protoimpl.UnsafeEnabled { + file_backend_api_visualization_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateVisualizationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_visualization_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Visualization); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_visualization_proto_rawDesc, + NumEnums: 1, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_backend_api_visualization_proto_goTypes, + DependencyIndexes: file_backend_api_visualization_proto_depIdxs, + EnumInfos: file_backend_api_visualization_proto_enumTypes, + MessageInfos: file_backend_api_visualization_proto_msgTypes, + }.Build() + File_backend_api_visualization_proto = out.File + file_backend_api_visualization_proto_rawDesc = nil + file_backend_api_visualization_proto_goTypes = nil + file_backend_api_visualization_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // VisualizationServiceClient is the client API for VisualizationService service. // @@ -254,10 +401,10 @@ type VisualizationServiceClient interface { } type visualizationServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewVisualizationServiceClient(cc *grpc.ClientConn) VisualizationServiceClient { +func NewVisualizationServiceClient(cc grpc.ClientConnInterface) VisualizationServiceClient { return &visualizationServiceClient{cc} } @@ -279,7 +426,7 @@ type VisualizationServiceServer interface { type UnimplementedVisualizationServiceServer struct { } -func (*UnimplementedVisualizationServiceServer) CreateVisualization(ctx context.Context, req *CreateVisualizationRequest) (*Visualization, error) { +func (*UnimplementedVisualizationServiceServer) CreateVisualization(context.Context, *CreateVisualizationRequest) (*Visualization, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateVisualization not implemented") } diff --git a/backend/api/go_http_client/experiment_client/experiment_service/list_experiment_parameters.go b/backend/api/go_http_client/experiment_client/experiment_service/list_experiment_parameters.go index 2fa0df54c1..1525b0bc8f 100644 --- a/backend/api/go_http_client/experiment_client/experiment_service/list_experiment_parameters.go +++ b/backend/api/go_http_client/experiment_client/experiment_service/list_experiment_parameters.go @@ -76,8 +76,7 @@ type ListExperimentParams struct { /*Filter A url-encoded, JSON-serialized Filter protocol buffer (see - [filter.proto](https://github.com/kubeflow/pipelines/ - blob/master/backend/api/filter.proto)). + [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). */ Filter *string diff --git a/backend/api/go_http_client/experiment_model/protobuf_any.go b/backend/api/go_http_client/experiment_model/protobuf_any.go index 22ddbba435..9d87904dec 100644 --- a/backend/api/go_http_client/experiment_model/protobuf_any.go +++ b/backend/api/go_http_client/experiment_model/protobuf_any.go @@ -50,10 +50,13 @@ import ( // Example 4: Pack and unpack a message in Go // // foo := &pb.Foo{...} -// any, err := ptypes.MarshalAny(foo) +// any, err := anypb.New(foo) +// if err != nil { +// ... +// } // ... // foo := &pb.Foo{} -// if err := ptypes.UnmarshalAny(any, foo); err != nil { +// if err := any.UnmarshalTo(foo); err != nil { // ... // } // diff --git a/backend/api/go_http_client/healthz_model/protobuf_any.go b/backend/api/go_http_client/healthz_model/protobuf_any.go index eb16e19030..52a0e70e64 100644 --- a/backend/api/go_http_client/healthz_model/protobuf_any.go +++ b/backend/api/go_http_client/healthz_model/protobuf_any.go @@ -50,10 +50,13 @@ import ( // Example 4: Pack and unpack a message in Go // // foo := &pb.Foo{...} -// any, err := ptypes.MarshalAny(foo) +// any, err := anypb.New(foo) +// if err != nil { +// ... +// } // ... // foo := &pb.Foo{} -// if err := ptypes.UnmarshalAny(any, foo); err != nil { +// if err := any.UnmarshalTo(foo); err != nil { // ... // } // diff --git a/backend/api/go_http_client/job_client/job_service/list_jobs_parameters.go b/backend/api/go_http_client/job_client/job_service/list_jobs_parameters.go index 46feca3fd6..d81ecd228a 100644 --- a/backend/api/go_http_client/job_client/job_service/list_jobs_parameters.go +++ b/backend/api/go_http_client/job_client/job_service/list_jobs_parameters.go @@ -76,8 +76,7 @@ type ListJobsParams struct { /*Filter A url-encoded, JSON-serialized Filter protocol buffer (see - [filter.proto](https://github.com/kubeflow/pipelines/ - blob/master/backend/api/filter.proto)). + [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). */ Filter *string diff --git a/backend/api/go_http_client/job_model/protobuf_any.go b/backend/api/go_http_client/job_model/protobuf_any.go index 692a327645..543426bef6 100644 --- a/backend/api/go_http_client/job_model/protobuf_any.go +++ b/backend/api/go_http_client/job_model/protobuf_any.go @@ -50,10 +50,13 @@ import ( // Example 4: Pack and unpack a message in Go // // foo := &pb.Foo{...} -// any, err := ptypes.MarshalAny(foo) +// any, err := anypb.New(foo) +// if err != nil { +// ... +// } // ... // foo := &pb.Foo{} -// if err := ptypes.UnmarshalAny(any, foo); err != nil { +// if err := any.UnmarshalTo(foo); err != nil { // ... // } // diff --git a/backend/api/go_http_client/pipeline_client/pipeline_service/list_pipelines_parameters.go b/backend/api/go_http_client/pipeline_client/pipeline_service/list_pipelines_parameters.go index 6192805c5c..2cea796054 100644 --- a/backend/api/go_http_client/pipeline_client/pipeline_service/list_pipelines_parameters.go +++ b/backend/api/go_http_client/pipeline_client/pipeline_service/list_pipelines_parameters.go @@ -76,8 +76,7 @@ type ListPipelinesParams struct { /*Filter A url-encoded, JSON-serialized Filter protocol buffer (see - [filter.proto](https://github.com/kubeflow/pipelines/ - blob/master/backend/api/filter.proto)). + [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). */ Filter *string diff --git a/backend/api/go_http_client/pipeline_model/api_pipeline_version.go b/backend/api/go_http_client/pipeline_model/api_pipeline_version.go index dededa5849..3324c43e5c 100644 --- a/backend/api/go_http_client/pipeline_model/api_pipeline_version.go +++ b/backend/api/go_http_client/pipeline_model/api_pipeline_version.go @@ -26,6 +26,9 @@ type APIPipelineVersion struct { // Format: date-time CreatedAt strfmt.DateTime `json:"created_at,omitempty"` + // Input. Optional. Description for the pipeline version. + Description string `json:"description,omitempty"` + // Output. Unique version ID. Generated by API server. ID string `json:"id,omitempty"` diff --git a/backend/api/go_http_client/pipeline_model/protobuf_any.go b/backend/api/go_http_client/pipeline_model/protobuf_any.go index ae8a3af8f6..10ecc3fe5a 100644 --- a/backend/api/go_http_client/pipeline_model/protobuf_any.go +++ b/backend/api/go_http_client/pipeline_model/protobuf_any.go @@ -50,10 +50,13 @@ import ( // Example 4: Pack and unpack a message in Go // // foo := &pb.Foo{...} -// any, err := ptypes.MarshalAny(foo) +// any, err := anypb.New(foo) +// if err != nil { +// ... +// } // ... // foo := &pb.Foo{} -// if err := ptypes.UnmarshalAny(any, foo); err != nil { +// if err := any.UnmarshalTo(foo); err != nil { // ... // } // diff --git a/backend/api/go_http_client/run_client/run_service/list_runs_parameters.go b/backend/api/go_http_client/run_client/run_service/list_runs_parameters.go index 83ba2d7a85..bc9f248f0d 100644 --- a/backend/api/go_http_client/run_client/run_service/list_runs_parameters.go +++ b/backend/api/go_http_client/run_client/run_service/list_runs_parameters.go @@ -76,8 +76,7 @@ type ListRunsParams struct { /*Filter A url-encoded, JSON-serialized Filter protocol buffer (see - [filter.proto](https://github.com/kubeflow/pipelines/ - blob/master/backend/api/filter.proto)). + [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). */ Filter *string diff --git a/backend/api/go_http_client/run_model/protobuf_any.go b/backend/api/go_http_client/run_model/protobuf_any.go index 55b53bc485..6d18c719ed 100644 --- a/backend/api/go_http_client/run_model/protobuf_any.go +++ b/backend/api/go_http_client/run_model/protobuf_any.go @@ -50,10 +50,13 @@ import ( // Example 4: Pack and unpack a message in Go // // foo := &pb.Foo{...} -// any, err := ptypes.MarshalAny(foo) +// any, err := anypb.New(foo) +// if err != nil { +// ... +// } // ... // foo := &pb.Foo{} -// if err := ptypes.UnmarshalAny(any, foo); err != nil { +// if err := any.UnmarshalTo(foo); err != nil { // ... // } // diff --git a/backend/api/go_http_client/visualization_model/protobuf_any.go b/backend/api/go_http_client/visualization_model/protobuf_any.go index 8b862fb9ca..a8f3909206 100644 --- a/backend/api/go_http_client/visualization_model/protobuf_any.go +++ b/backend/api/go_http_client/visualization_model/protobuf_any.go @@ -50,10 +50,13 @@ import ( // Example 4: Pack and unpack a message in Go // // foo := &pb.Foo{...} -// any, err := ptypes.MarshalAny(foo) +// any, err := anypb.New(foo) +// if err != nil { +// ... +// } // ... // foo := &pb.Foo{} -// if err := ptypes.UnmarshalAny(any, foo); err != nil { +// if err := any.UnmarshalTo(foo); err != nil { // ... // } // diff --git a/backend/api/hack/generator.sh b/backend/api/hack/generator.sh index 102bf4a4be..49bed7305f 100755 --- a/backend/api/hack/generator.sh +++ b/backend/api/hack/generator.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright 2018-2020 Google LLC +# Copyright 2018-2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/api/healthz.proto b/backend/api/healthz.proto index 82988b600c..b11cf99e22 100644 --- a/backend/api/healthz.proto +++ b/backend/api/healthz.proto @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/api/job.proto b/backend/api/job.proto index d4eab32d1c..d6e6632698 100644 --- a/backend/api/job.proto +++ b/backend/api/job.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -136,8 +136,7 @@ message ListJobsRequest { ResourceKey resource_reference_key = 4; // A url-encoded, JSON-serialized Filter protocol buffer (see - // [filter.proto](https://github.com/kubeflow/pipelines/ - // blob/master/backend/api/filter.proto)). + // [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). string filter = 5; } diff --git a/backend/api/parameter.proto b/backend/api/parameter.proto index e75812679b..21844d38f5 100644 --- a/backend/api/parameter.proto +++ b/backend/api/parameter.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/api/pipeline.proto b/backend/api/pipeline.proto index e9b8933f73..03020cd7a1 100644 --- a/backend/api/pipeline.proto +++ b/backend/api/pipeline.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -190,8 +190,7 @@ message ListPipelinesRequest { string sort_by = 3; // A url-encoded, JSON-serialized Filter protocol buffer (see - // [filter.proto](https://github.com/kubeflow/pipelines/ - // blob/master/backend/api/filter.proto)). + // [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). string filter = 4; // What resource reference to filter on. @@ -345,4 +344,7 @@ message PipelineVersion { // Input field. Specify which resource this pipeline version belongs to. // For Experiment, the only valid resource reference is a single Namespace. repeated ResourceReference resource_references = 7; + + // Input. Optional. Description for the pipeline version. + string description = 8; } diff --git a/backend/api/pipeline_spec.proto b/backend/api/pipeline_spec.proto index 5c99c11d41..e618031f5d 100644 --- a/backend/api/pipeline_spec.proto +++ b/backend/api/pipeline_spec.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/api/python_http_client/README.md b/backend/api/python_http_client/README.md index 9c8d4cb3e8..a983b546b3 100644 --- a/backend/api/python_http_client/README.md +++ b/backend/api/python_http_client/README.md @@ -3,8 +3,8 @@ This file contains REST API specification for Kubeflow Pipelines. The file is au This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -- API version: 1.5.0 -- Package version: 1.5.0 +- API version: 1.7.0 +- Package version: 1.7.0 - Build package: org.openapitools.codegen.languages.PythonClientCodegen For more information, please visit [https://www.google.com](https://www.google.com) diff --git a/backend/api/python_http_client/docs/ApiPipelineVersion.md b/backend/api/python_http_client/docs/ApiPipelineVersion.md index fea8886aad..d6d089c7e6 100644 --- a/backend/api/python_http_client/docs/ApiPipelineVersion.md +++ b/backend/api/python_http_client/docs/ApiPipelineVersion.md @@ -10,6 +10,7 @@ Name | Type | Description | Notes **code_source_url** | **str** | Input. Optional. Pipeline version code source. | [optional] **package_url** | [**ApiUrl**](ApiUrl.md) | | [optional] **resource_references** | [**list[ApiResourceReference]**](ApiResourceReference.md) | Input. Required. E.g., specify which pipeline this pipeline version belongs to. | [optional] +**description** | **str** | Input. Optional. Description for the pipeline version. | [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/backend/api/python_http_client/docs/ExperimentServiceApi.md b/backend/api/python_http_client/docs/ExperimentServiceApi.md index d1de9b8f5a..faadd9ce71 100644 --- a/backend/api/python_http_client/docs/ExperimentServiceApi.md +++ b/backend/api/python_http_client/docs/ExperimentServiceApi.md @@ -358,7 +358,7 @@ with kfp_server_api.ApiClient(configuration) as api_client: page_token = 'page_token_example' # str | A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListExperiment call or can be omitted when fetching the first page. (optional) page_size = 56 # int | The number of experiments to be listed per page. If there are more experiments than this number, the response message will contain a nextPageToken field you can use to fetch the next page. (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 url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). (optional) +filter = 'filter_example' # str | A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). (optional) resource_reference_key_type = 'UNKNOWN_RESOURCE_TYPE' # str | The type of the resource that referred to. (optional) (default to 'UNKNOWN_RESOURCE_TYPE') resource_reference_key_id = 'resource_reference_key_id_example' # str | The ID of the resource that referred to. (optional) @@ -377,7 +377,7 @@ Name | Type | Description | Notes **page_token** | **str**| A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListExperiment call or can be omitted when fetching the first page. | [optional] **page_size** | **int**| The number of experiments to be listed per page. If there are more experiments than this number, the response message will contain a nextPageToken field you can use to fetch the next page. | [optional] **sort_by** | **str**| Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. | [optional] - **filter** | **str**| A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). | [optional] + **filter** | **str**| A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). | [optional] **resource_reference_key_type** | **str**| The type of the resource that referred to. | [optional] [default to 'UNKNOWN_RESOURCE_TYPE'] **resource_reference_key_id** | **str**| The ID of the resource that referred to. | [optional] diff --git a/backend/api/python_http_client/docs/JobServiceApi.md b/backend/api/python_http_client/docs/JobServiceApi.md index 761a38a498..a0b06725e6 100644 --- a/backend/api/python_http_client/docs/JobServiceApi.md +++ b/backend/api/python_http_client/docs/JobServiceApi.md @@ -436,7 +436,7 @@ page_size = 56 # int | The number of jobs to be listed per page. If there are mo sort_by = 'sort_by_example' # str | Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\". Ascending by default. (optional) resource_reference_key_type = 'UNKNOWN_RESOURCE_TYPE' # str | The type of the resource that referred to. (optional) (default to 'UNKNOWN_RESOURCE_TYPE') resource_reference_key_id = 'resource_reference_key_id_example' # str | The ID of the resource that referred to. (optional) -filter = 'filter_example' # str | A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). (optional) +filter = 'filter_example' # str | A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). (optional) try: # Finds all jobs. @@ -455,7 +455,7 @@ Name | Type | Description | Notes **sort_by** | **str**| Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\". Ascending by default. | [optional] **resource_reference_key_type** | **str**| The type of the resource that referred to. | [optional] [default to 'UNKNOWN_RESOURCE_TYPE'] **resource_reference_key_id** | **str**| The ID of the resource that referred to. | [optional] - **filter** | **str**| A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). | [optional] + **filter** | **str**| A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). | [optional] ### Return type diff --git a/backend/api/python_http_client/docs/PipelineServiceApi.md b/backend/api/python_http_client/docs/PipelineServiceApi.md index 34e8cd3ef2..b2d9af3803 100644 --- a/backend/api/python_http_client/docs/PipelineServiceApi.md +++ b/backend/api/python_http_client/docs/PipelineServiceApi.md @@ -753,7 +753,7 @@ with kfp_server_api.ApiClient(configuration) as api_client: page_token = 'page_token_example' # str | A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListPipelines call. (optional) page_size = 56 # int | The number of pipelines to be listed per page. If there are more pipelines than this number, the response message will contain a valid value in the nextPageToken field. (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 url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). (optional) +filter = 'filter_example' # str | A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). (optional) resource_reference_key_type = 'UNKNOWN_RESOURCE_TYPE' # str | The type of the resource that referred to. (optional) (default to 'UNKNOWN_RESOURCE_TYPE') resource_reference_key_id = 'resource_reference_key_id_example' # str | The ID of the resource that referred to. (optional) @@ -769,10 +769,10 @@ resource_reference_key_id = 'resource_reference_key_id_example' # str | The ID o Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **page_token** | **str**| A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListPipelines call. | [optional] - **page_size** | **int**| The number of pipelines to be listed per page. If there are more pipelines than this number, the response message will contain a valid value in the nextPageToken field. | [optional] - **sort_by** | **str**| Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. | [optional] - **filter** | **str**| A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). | [optional] + **page_token** | **str**| A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListPipelines call. | [optional] + **page_size** | **int**| The number of pipelines to be listed per page. If there are more pipelines than this number, the response message will contain a valid value in the nextPageToken field. | [optional] + **sort_by** | **str**| Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. | [optional] + **filter** | **str**| A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). | [optional] **resource_reference_key_type** | **str**| The type of the resource that referred to. | [optional] [default to 'UNKNOWN_RESOURCE_TYPE'] **resource_reference_key_id** | **str**| The ID of the resource that referred to. | [optional] diff --git a/backend/api/python_http_client/docs/ProtobufAny.md b/backend/api/python_http_client/docs/ProtobufAny.md index 076ab6b422..27c409f0a0 100644 --- a/backend/api/python_http_client/docs/ProtobufAny.md +++ b/backend/api/python_http_client/docs/ProtobufAny.md @@ -1,6 +1,6 @@ # ProtobufAny -`Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } +`Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- diff --git a/backend/api/python_http_client/docs/RunServiceApi.md b/backend/api/python_http_client/docs/RunServiceApi.md index 5d0cae832e..6d1ba4ee1c 100644 --- a/backend/api/python_http_client/docs/RunServiceApi.md +++ b/backend/api/python_http_client/docs/RunServiceApi.md @@ -364,7 +364,7 @@ page_size = 56 # int | The number of runs to be listed per page. If there are mo sort_by = 'sort_by_example' # str | Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" (Example, \"name asc\" or \"id desc\"). Ascending by default. (optional) resource_reference_key_type = 'UNKNOWN_RESOURCE_TYPE' # str | The type of the resource that referred to. (optional) (default to 'UNKNOWN_RESOURCE_TYPE') resource_reference_key_id = 'resource_reference_key_id_example' # str | The ID of the resource that referred to. (optional) -filter = 'filter_example' # str | A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). (optional) +filter = 'filter_example' # str | A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). (optional) try: # Finds all runs. @@ -383,7 +383,7 @@ Name | Type | Description | Notes **sort_by** | **str**| Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" (Example, \"name asc\" or \"id desc\"). Ascending by default. | [optional] **resource_reference_key_type** | **str**| The type of the resource that referred to. | [optional] [default to 'UNKNOWN_RESOURCE_TYPE'] **resource_reference_key_id** | **str**| The ID of the resource that referred to. | [optional] - **filter** | **str**| A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). | [optional] + **filter** | **str**| A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). | [optional] ### Return type diff --git a/backend/api/python_http_client/kfp_server_api/__init__.py b/backend/api/python_http_client/kfp_server_api/__init__.py index 24ad999cc5..b15843b10a 100644 --- a/backend/api/python_http_client/kfp_server_api/__init__.py +++ b/backend/api/python_http_client/kfp_server_api/__init__.py @@ -14,7 +14,7 @@ from __future__ import absolute_import -__version__ = "1.5.0" +__version__ = "1.7.0" # import apis into sdk package from kfp_server_api.api.experiment_service_api import ExperimentServiceApi diff --git a/backend/api/python_http_client/kfp_server_api/api/experiment_service_api.py b/backend/api/python_http_client/kfp_server_api/api/experiment_service_api.py index cab46ce580..895f359554 100644 --- a/backend/api/python_http_client/kfp_server_api/api/experiment_service_api.py +++ b/backend/api/python_http_client/kfp_server_api/api/experiment_service_api.py @@ -543,7 +543,7 @@ def list_experiment(self, **kwargs): # noqa: E501 :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 url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). + :param filter: A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). :type filter: str :param resource_reference_key_type: The type of the resource that referred to. :type resource_reference_key_type: str @@ -581,7 +581,7 @@ def list_experiment_with_http_info(self, **kwargs): # noqa: E501 :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 url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). + :param filter: A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). :type filter: str :param resource_reference_key_type: The type of the resource that referred to. :type resource_reference_key_type: str diff --git a/backend/api/python_http_client/kfp_server_api/api/job_service_api.py b/backend/api/python_http_client/kfp_server_api/api/job_service_api.py index e6fc57624a..754b1f3ec1 100644 --- a/backend/api/python_http_client/kfp_server_api/api/job_service_api.py +++ b/backend/api/python_http_client/kfp_server_api/api/job_service_api.py @@ -669,7 +669,7 @@ def list_jobs(self, **kwargs): # noqa: E501 :type resource_reference_key_type: str :param resource_reference_key_id: The ID of the resource that referred to. :type resource_reference_key_id: str - :param filter: A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). + :param filter: A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). :type filter: str :param async_req: Whether to execute the request asynchronously. :type async_req: bool, optional @@ -707,7 +707,7 @@ def list_jobs_with_http_info(self, **kwargs): # noqa: E501 :type resource_reference_key_type: str :param resource_reference_key_id: The ID of the resource that referred to. :type resource_reference_key_id: str - :param filter: A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). + :param filter: A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). :type filter: str :param async_req: Whether to execute the request asynchronously. :type async_req: bool, optional diff --git a/backend/api/python_http_client/kfp_server_api/api/pipeline_service_api.py b/backend/api/python_http_client/kfp_server_api/api/pipeline_service_api.py index ed010fcc69..71ac817956 100644 --- a/backend/api/python_http_client/kfp_server_api/api/pipeline_service_api.py +++ b/backend/api/python_http_client/kfp_server_api/api/pipeline_service_api.py @@ -1188,7 +1188,7 @@ def list_pipelines(self, **kwargs): # noqa: E501 :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 url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). + :param filter: A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). :type filter: str :param resource_reference_key_type: The type of the resource that referred to. :type resource_reference_key_type: str @@ -1226,7 +1226,7 @@ def list_pipelines_with_http_info(self, **kwargs): # noqa: E501 :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 url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). + :param filter: A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). :type filter: str :param resource_reference_key_type: The type of the resource that referred to. :type resource_reference_key_type: str diff --git a/backend/api/python_http_client/kfp_server_api/api/run_service_api.py b/backend/api/python_http_client/kfp_server_api/api/run_service_api.py index 06010488a1..9118e779a7 100644 --- a/backend/api/python_http_client/kfp_server_api/api/run_service_api.py +++ b/backend/api/python_http_client/kfp_server_api/api/run_service_api.py @@ -547,7 +547,7 @@ def list_runs(self, **kwargs): # noqa: E501 :type resource_reference_key_type: str :param resource_reference_key_id: The ID of the resource that referred to. :type resource_reference_key_id: str - :param filter: A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). + :param filter: A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). :type filter: str :param async_req: Whether to execute the request asynchronously. :type async_req: bool, optional @@ -585,7 +585,7 @@ def list_runs_with_http_info(self, **kwargs): # noqa: E501 :type resource_reference_key_type: str :param resource_reference_key_id: The ID of the resource that referred to. :type resource_reference_key_id: str - :param filter: A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). + :param filter: A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). :type filter: str :param async_req: Whether to execute the request asynchronously. :type async_req: bool, optional diff --git a/backend/api/python_http_client/kfp_server_api/api_client.py b/backend/api/python_http_client/kfp_server_api/api_client.py index 958dc9ffc4..305b9c3347 100644 --- a/backend/api/python_http_client/kfp_server_api/api_client.py +++ b/backend/api/python_http_client/kfp_server_api/api_client.py @@ -78,7 +78,7 @@ def __init__(self, configuration=None, header_name=None, header_value=None, self.default_headers[header_name] = header_value self.cookie = cookie # Set default User-Agent. - self.user_agent = 'OpenAPI-Generator/1.5.0/python' + self.user_agent = 'OpenAPI-Generator/1.7.0/python' self.client_side_validation = configuration.client_side_validation def __enter__(self): diff --git a/backend/api/python_http_client/kfp_server_api/configuration.py b/backend/api/python_http_client/kfp_server_api/configuration.py index 5ca3dee01a..2d2073c67f 100644 --- a/backend/api/python_http_client/kfp_server_api/configuration.py +++ b/backend/api/python_http_client/kfp_server_api/configuration.py @@ -351,8 +351,8 @@ def to_debug_report(self): return "Python SDK Debug Report:\n"\ "OS: {env}\n"\ "Python Version: {pyversion}\n"\ - "Version of the API: 1.5.0\n"\ - "SDK Package Version: 1.5.0".\ + "Version of the API: 1.7.0\n"\ + "SDK Package Version: 1.7.0".\ format(env=sys.platform, pyversion=sys.version) def get_host_settings(self): diff --git a/backend/api/python_http_client/kfp_server_api/models/api_pipeline_version.py b/backend/api/python_http_client/kfp_server_api/models/api_pipeline_version.py index 5208a5c91f..3f22d46c40 100644 --- a/backend/api/python_http_client/kfp_server_api/models/api_pipeline_version.py +++ b/backend/api/python_http_client/kfp_server_api/models/api_pipeline_version.py @@ -39,7 +39,8 @@ class ApiPipelineVersion(object): 'parameters': 'list[ApiParameter]', 'code_source_url': 'str', 'package_url': 'ApiUrl', - 'resource_references': 'list[ApiResourceReference]' + 'resource_references': 'list[ApiResourceReference]', + 'description': 'str' } attribute_map = { @@ -49,10 +50,11 @@ class ApiPipelineVersion(object): 'parameters': 'parameters', 'code_source_url': 'code_source_url', 'package_url': 'package_url', - 'resource_references': 'resource_references' + 'resource_references': 'resource_references', + 'description': 'description' } - def __init__(self, id=None, name=None, created_at=None, parameters=None, code_source_url=None, package_url=None, resource_references=None, local_vars_configuration=None): # noqa: E501 + def __init__(self, id=None, name=None, created_at=None, parameters=None, code_source_url=None, package_url=None, resource_references=None, description=None, local_vars_configuration=None): # noqa: E501 """ApiPipelineVersion - a model defined in OpenAPI""" # noqa: E501 if local_vars_configuration is None: local_vars_configuration = Configuration() @@ -65,6 +67,7 @@ def __init__(self, id=None, name=None, created_at=None, parameters=None, code_so self._code_source_url = None self._package_url = None self._resource_references = None + self._description = None self.discriminator = None if id is not None: @@ -81,6 +84,8 @@ def __init__(self, id=None, name=None, created_at=None, parameters=None, code_so self.package_url = package_url if resource_references is not None: self.resource_references = resource_references + if description is not None: + self.description = description @property def id(self): @@ -241,6 +246,29 @@ def resource_references(self, resource_references): self._resource_references = resource_references + @property + def description(self): + """Gets the description of this ApiPipelineVersion. # noqa: E501 + + Input. Optional. Description for the pipeline version. # noqa: E501 + + :return: The description of this ApiPipelineVersion. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this ApiPipelineVersion. + + Input. Optional. Description for the pipeline version. # noqa: E501 + + :param description: The description of this ApiPipelineVersion. # noqa: E501 + :type description: str + """ + + self._description = description + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/backend/api/python_http_client/setup.py b/backend/api/python_http_client/setup.py index ee5590becc..b6b0bbb1fd 100644 --- a/backend/api/python_http_client/setup.py +++ b/backend/api/python_http_client/setup.py @@ -13,7 +13,7 @@ from setuptools import setup, find_packages # noqa: H301 NAME = "kfp-server-api" -VERSION = "1.5.0" +VERSION = "1.7.0" # To install the library, run the following # # python setup.py install diff --git a/backend/api/python_http_client/test/test_api_list_pipeline_versions_response.py b/backend/api/python_http_client/test/test_api_list_pipeline_versions_response.py index ab4602bbf5..def787afb5 100644 --- a/backend/api/python_http_client/test/test_api_list_pipeline_versions_response.py +++ b/backend/api/python_http_client/test/test_api_list_pipeline_versions_response.py @@ -56,7 +56,8 @@ def make_instance(self, include_optional): id = '0', ), name = '0', relationship = 'UNKNOWN_RELATIONSHIP', ) - ], ) + ], + description = '0', ) ], next_page_token = '0', total_size = 56 diff --git a/backend/api/python_http_client/test/test_api_list_pipelines_response.py b/backend/api/python_http_client/test/test_api_list_pipelines_response.py index 165deed03f..bc1b25ede9 100644 --- a/backend/api/python_http_client/test/test_api_list_pipelines_response.py +++ b/backend/api/python_http_client/test/test_api_list_pipelines_response.py @@ -61,10 +61,11 @@ def make_instance(self, include_optional): kfp_server_api.models.api_resource_reference.apiResourceReference( key = kfp_server_api.models.api_resource_key.apiResourceKey( type = 'UNKNOWN_RESOURCE_TYPE', - id = '0', ), - name = '0', + id = '0', ), + name = '0', relationship = 'UNKNOWN_RELATIONSHIP', ) - ], ), + ], + description = '0', ), resource_references = [ kfp_server_api.models.api_resource_reference.apiResourceReference( name = '0', ) diff --git a/backend/api/python_http_client/test/test_api_pipeline.py b/backend/api/python_http_client/test/test_api_pipeline.py index 07edce4468..1908eaccd1 100644 --- a/backend/api/python_http_client/test/test_api_pipeline.py +++ b/backend/api/python_http_client/test/test_api_pipeline.py @@ -64,10 +64,11 @@ def make_instance(self, include_optional): kfp_server_api.models.api_resource_reference.apiResourceReference( key = kfp_server_api.models.api_resource_key.apiResourceKey( type = 'UNKNOWN_RESOURCE_TYPE', - id = '0', ), - name = '0', + id = '0', ), + name = '0', relationship = 'UNKNOWN_RELATIONSHIP', ) - ], ), + ], + description = '0', ), resource_references = [ kfp_server_api.models.api_resource_reference.apiResourceReference( key = kfp_server_api.models.api_resource_key.apiResourceKey( diff --git a/backend/api/python_http_client/test/test_api_pipeline_version.py b/backend/api/python_http_client/test/test_api_pipeline_version.py index 1d721a07b5..60be9ac400 100644 --- a/backend/api/python_http_client/test/test_api_pipeline_version.py +++ b/backend/api/python_http_client/test/test_api_pipeline_version.py @@ -54,7 +54,8 @@ def make_instance(self, include_optional): id = '0', ), name = '0', relationship = 'UNKNOWN_RELATIONSHIP', ) - ] + ], + description = '0' ) else : return ApiPipelineVersion( diff --git a/backend/api/report.proto b/backend/api/report.proto index cef9608bdf..d72a7757f6 100644 --- a/backend/api/report.proto +++ b/backend/api/report.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/api/resource_reference.proto b/backend/api/resource_reference.proto index 27b474f2d8..315fbe0244 100644 --- a/backend/api/resource_reference.proto +++ b/backend/api/resource_reference.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/api/run.proto b/backend/api/run.proto index e1a2bf1233..6c3dea500d 100644 --- a/backend/api/run.proto +++ b/backend/api/run.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -168,8 +168,7 @@ message ListRunsRequest { ResourceKey resource_reference_key = 4; // A url-encoded, JSON-serialized Filter protocol buffer (see - // [filter.proto](https://github.com/kubeflow/pipelines/ - // blob/master/backend/api/filter.proto)). + // [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). string filter = 5; } diff --git a/backend/api/swagger/auth.swagger.json b/backend/api/swagger/auth.swagger.json index e717890a32..a57bfe01ab 100755 --- a/backend/api/swagger/auth.swagger.json +++ b/backend/api/swagger/auth.swagger.json @@ -122,7 +122,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, "securityDefinitions": { diff --git a/backend/api/swagger/experiment.swagger.json b/backend/api/swagger/experiment.swagger.json index 730f1aaf9d..5d90f0491e 100644 --- a/backend/api/swagger/experiment.swagger.json +++ b/backend/api/swagger/experiment.swagger.json @@ -58,7 +58,7 @@ }, { "name": "filter", - "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/\nblob/master/backend/api/filter.proto)).", + "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)).", "in": "query", "required": false, "type": "string" @@ -396,7 +396,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, "securityDefinitions": { diff --git a/backend/api/swagger/healthz.swagger.json b/backend/api/swagger/healthz.swagger.json index 67c4a42c04..c98b9ea3fd 100755 --- a/backend/api/swagger/healthz.swagger.json +++ b/backend/api/swagger/healthz.swagger.json @@ -81,7 +81,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, "securityDefinitions": { diff --git a/backend/api/swagger/job.swagger.json b/backend/api/swagger/job.swagger.json index 0dcf6f4bb2..e4c90db0ad 100644 --- a/backend/api/swagger/job.swagger.json +++ b/backend/api/swagger/job.swagger.json @@ -81,7 +81,7 @@ }, { "name": "filter", - "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/\nblob/master/backend/api/filter.proto)).", + "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)).", "in": "query", "required": false, "type": "string" @@ -528,7 +528,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, "securityDefinitions": { diff --git a/backend/api/swagger/kfp_api_single_file.swagger.json b/backend/api/swagger/kfp_api_single_file.swagger.json index 7034f8cad2..e04e6b7757 100644 --- a/backend/api/swagger/kfp_api_single_file.swagger.json +++ b/backend/api/swagger/kfp_api_single_file.swagger.json @@ -2,7 +2,7 @@ "swagger": "2.0", "info": { "title": "Kubeflow Pipelines API", - "version": "1.5.0", + "version": "1.7.0", "description": "This file contains REST API specification for Kubeflow Pipelines. The file is autogenerated from the swagger definition.", "contact": { "name": "google", @@ -91,7 +91,7 @@ }, { "name": "filter", - "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/\nblob/master/backend/api/filter.proto)).", + "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)).", "in": "query", "required": false, "type": "string" @@ -477,7 +477,7 @@ }, { "name": "filter", - "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/\nblob/master/backend/api/filter.proto)).", + "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)).", "in": "query", "required": false, "type": "string" @@ -689,7 +689,7 @@ }, { "name": "filter", - "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/\nblob/master/backend/api/filter.proto)).", + "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)).", "in": "query", "required": false, "type": "string" @@ -1127,7 +1127,7 @@ }, { "name": "filter", - "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/\nblob/master/backend/api/filter.proto)).", + "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)).", "in": "query", "required": false, "type": "string" @@ -1788,7 +1788,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": <string>,\n \"lastName\": <string>\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": <string>,\n \"lastName\": <string>\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "JobMode": { "type": "string", @@ -2144,6 +2144,10 @@ "$ref": "#/definitions/apiResourceReference" }, "description": "Input. Required. E.g., specify which pipeline this pipeline version belongs\nto." + }, + "description": { + "type": "string", + "description": "Input. Optional. Description for the pipeline version." } } }, diff --git a/backend/api/swagger/pipeline.swagger.json b/backend/api/swagger/pipeline.swagger.json index 9dedfb89b9..596fdcfaa9 100644 --- a/backend/api/swagger/pipeline.swagger.json +++ b/backend/api/swagger/pipeline.swagger.json @@ -261,7 +261,7 @@ }, { "name": "filter", - "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/\nblob/master/backend/api/filter.proto)).", + "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)).", "in": "query", "required": false, "type": "string" @@ -607,6 +607,10 @@ "$ref": "#/definitions/apiResourceReference" }, "description": "Input field. Specify which resource this pipeline version belongs to.\nFor Experiment, the only valid resource reference is a single Namespace." + }, + "description": { + "type": "string", + "description": "Input. Optional. Description for the pipeline version." } } }, @@ -700,7 +704,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, "securityDefinitions": { diff --git a/backend/api/swagger/run.swagger.json b/backend/api/swagger/run.swagger.json index 0fd07060df..1fbf2fdb51 100644 --- a/backend/api/swagger/run.swagger.json +++ b/backend/api/swagger/run.swagger.json @@ -81,7 +81,7 @@ }, { "name": "filter", - "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/\nblob/master/backend/api/filter.proto)).", + "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)).", "in": "query", "required": false, "type": "string" @@ -743,7 +743,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, "securityDefinitions": { diff --git a/backend/api/swagger/task.swagger.json b/backend/api/swagger/task.swagger.json new file mode 100644 index 0000000000..fe5b294837 --- /dev/null +++ b/backend/api/swagger/task.swagger.json @@ -0,0 +1,202 @@ +{ + "swagger": "2.0", + "info": { + "title": "backend/api/task.proto", + "version": "version not set" + }, + "schemes": [ + "http", + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/apis/v1alpha1/tasks": { + "get": { + "summary": "Finds all tasks. Supports pagination, and sorting on certain fields.", + "operationId": "ListTasks", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/apiListTasksResponse" + } + } + }, + "parameters": [ + { + "name": "page_token", + "description": "A page token to request the next page of results. The token is acquried\nfrom the nextPageToken field of the response from the previous\nListExperiment call or can be omitted when fetching the first page.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page_size", + "description": "The number of experiments to be listed per page. If there are more\nexperiments than this number, the response message will contain a\nnextPageToken field you can use to fetch the next page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sort_by", + "description": "Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\"\nAscending by default.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "resource_reference_key.type", + "description": "The type of the resource that referred to.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "UNKNOWN_RESOURCE_TYPE", + "EXPERIMENT", + "JOB", + "PIPELINE", + "PIPELINE_VERSION", + "NAMESPACE" + ], + "default": "UNKNOWN_RESOURCE_TYPE" + }, + { + "name": "resource_reference_key.id", + "description": "The ID of the resource that referred to.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filter", + "description": "A url-encoded, JSON-serialized Filter protocol buffer (see\n[filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)).", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "TaskService" + ] + }, + "post": { + "summary": "Creates a new task.", + "operationId": "CreateTask", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/apiTask" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/apiTask" + } + } + ], + "tags": [ + "TaskService" + ] + } + } + }, + "definitions": { + "apiListTasksResponse": { + "type": "object", + "properties": { + "tasks": { + "type": "array", + "items": { + "$ref": "#/definitions/apiTask" + }, + "description": "A list of tasks returned." + }, + "next_page_token": { + "type": "string", + "description": "The token to list the next page of experiments." + }, + "total_size": { + "type": "integer", + "format": "int32", + "description": "The total number of experiments for the given query." + } + } + }, + "apiResourceKey": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/apiResourceType", + "description": "The type of the resource that referred to." + }, + "id": { + "type": "string", + "description": "The ID of the resource that referred to." + } + } + }, + "apiResourceType": { + "type": "string", + "enum": [ + "UNKNOWN_RESOURCE_TYPE", + "EXPERIMENT", + "JOB", + "PIPELINE", + "PIPELINE_VERSION", + "NAMESPACE" + ], + "default": "UNKNOWN_RESOURCE_TYPE" + }, + "apiTask": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Output. Unique task ID. Generated by API server." + }, + "namespace": { + "type": "string", + "description": "Optional input field. The Namespace to which this pipeline task belongs." + }, + "pipelineName": { + "type": "string", + "title": "Required input field. The PipelineName to which this pipeline task belongs.\nNamespace will be encoded in the PipelineName.\n\"namespace/${namespace}/pipeline/${pipelineName}\" for namespaced pipelines\n\"pipeline/${pipelineName}\" for shared pipelines" + }, + "runId": { + "type": "string", + "description": "Required input field.The ID of the PipelineRun that the PipelineTask belongs to." + }, + "mlmdExecutionID": { + "type": "string", + "description": "Required input field. The ID of the MLMD execution associated with the PipelineTask." + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "Required input field. The time this task is created." + }, + "finished_at": { + "type": "string", + "format": "date-time", + "description": "Optional input field. The time this task is finished." + }, + "fingerprint": { + "type": "string", + "description": "Required input field." + } + } + } + } +} diff --git a/backend/api/swagger/visualization.swagger.json b/backend/api/swagger/visualization.swagger.json index 933386a39c..e8920908ee 100755 --- a/backend/api/swagger/visualization.swagger.json +++ b/backend/api/swagger/visualization.swagger.json @@ -122,7 +122,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" } }, "securityDefinitions": { diff --git a/backend/api/task.proto b/backend/api/task.proto new file mode 100644 index 0000000000..3b6e75fd92 --- /dev/null +++ b/backend/api/task.proto @@ -0,0 +1,110 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +option go_package = "github.com/kubeflow/pipelines/backend/api/go_client"; +package api; + +import "google/api/annotations.proto"; +import "google/protobuf/timestamp.proto"; +import "backend/api/resource_reference.proto"; + +message Task { + // Output. Unique task ID. Generated by API server. + string id = 1; + + // Optional input field. The Namespace to which this pipeline task belongs. + string namespace = 2; + + // Required input field. The PipelineName to which this pipeline task belongs. + // Namespace will be encoded in the PipelineName. + // "namespace/${namespace}/pipeline/${pipelineName}" for namespaced pipelines + // "pipeline/${pipelineName}" for shared pipelines + string pipelineName = 3; + + // Required input field.The ID of the PipelineRun that the PipelineTask belongs to. + string runId = 4; + + // Required input field. The ID of the MLMD execution associated with the PipelineTask. + string mlmdExecutionID = 5; + + // Required input field. The time this task is created. + google.protobuf.Timestamp created_at = 6; + + // Optional input field. The time this task is finished. + google.protobuf.Timestamp finished_at = 7; + + // Required input field. + string fingerprint = 8; +} + +service TaskService { + // Creates a new task. + rpc CreateTask(CreateTaskRequest) returns (Task) { + option (google.api.http) = { + post: "/apis/v1alpha1/tasks" + body: "task" + }; + } + + // Finds all tasks. Supports pagination, and sorting on certain fields. + rpc ListTasks(ListTasksRequest) returns (ListTasksResponse) { + option (google.api.http) = { + get: "/apis/v1alpha1/tasks" + }; + } +} + +message CreateTaskRequest { + Task task = 1; +} + +message ListTasksRequest { + // A page token to request the next page of results. The token is acquried + // from the nextPageToken field of the response from the previous + // ListExperiment call or can be omitted when fetching the first page. + string page_token = 1; + + // The number of experiments to be listed per page. If there are more + // experiments than this number, the response message will contain a + // nextPageToken field you can use to fetch the next page. + int32 page_size = 2; + + // Can be format of "field_name", "field_name asc" or "field_name desc" + // Ascending by default. + string sort_by = 3; + + // What resource reference to filter on. + // E.g. If listing tasks for an pipeline run, the query string would be + // resource_reference_key.type="PIPELINE"&resource_reference_key.id=123 + ResourceKey resource_reference_key = 4; + + // A url-encoded, JSON-serialized Filter protocol buffer (see + // [filter.proto](https://github.com/kubeflow/pipelines/blob/master/backend/api/filter.proto)). + string filter = 5; + + +} + +message ListTasksResponse { + // A list of tasks returned. + repeated Task tasks = 1; + + // The token to list the next page of experiments. + string next_page_token = 2; + + // The total number of experiments for the given query. + int32 total_size = 3; +} diff --git a/backend/api/visualization.proto b/backend/api/visualization.proto index d16ae7b6ed..fe0aa31e0b 100644 --- a/backend/api/visualization.proto +++ b/backend/api/visualization.proto @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/metadata_writer/requirements.in b/backend/metadata_writer/requirements.in index d58d897b58..0e3ab11cc8 100644 --- a/backend/metadata_writer/requirements.in +++ b/backend/metadata_writer/requirements.in @@ -1,2 +1,2 @@ kubernetes>=8.0.0,<11.0.0 -ml-metadata==0.25.1 \ No newline at end of file +ml-metadata==1.0.0 diff --git a/backend/metadata_writer/requirements.txt b/backend/metadata_writer/requirements.txt index c74006a337..7acd345306 100644 --- a/backend/metadata_writer/requirements.txt +++ b/backend/metadata_writer/requirements.txt @@ -4,27 +4,28 @@ # # pip-compile --output-file=- - # -absl-py==0.10.0 # via ml-metadata -cachetools==4.1.1 # via google-auth -certifi==2020.11.8 # via kubernetes, requests -chardet==3.0.4 # via requests -google-auth==1.23.0 # via kubernetes -grpcio==1.34.0 # via ml-metadata +absl-py==0.12.0 # via ml-metadata +attrs==20.3.0 # via ml-metadata +cachetools==4.2.2 # via google-auth +certifi==2021.5.30 # via kubernetes, requests +chardet==4.0.0 # via requests +google-auth==1.30.1 # via kubernetes +grpcio==1.38.0 # via ml-metadata idna==2.10 # via requests kubernetes==10.1.0 # via -r - -ml-metadata==0.25.1 # via -r - -oauthlib==3.1.0 # via requests-oauthlib -protobuf==3.14.0 # via ml-metadata +ml-metadata==1.0.0 # via -r - +oauthlib==3.1.1 # via requests-oauthlib +protobuf==3.17.2 # via ml-metadata pyasn1-modules==0.2.8 # via google-auth pyasn1==0.4.8 # via pyasn1-modules, rsa python-dateutil==2.8.1 # via kubernetes pyyaml==3.13 # via kubernetes requests-oauthlib==1.3.0 # via kubernetes -requests==2.25.0 # via kubernetes, requests-oauthlib -rsa==4.6 # via google-auth -six==1.15.0 # via absl-py, google-auth, grpcio, kubernetes, ml-metadata, protobuf, python-dateutil, websocket-client -urllib3==1.26.2 # via kubernetes, requests -websocket-client==0.57.0 # via kubernetes +requests==2.25.1 # via kubernetes, requests-oauthlib +rsa==4.7.2 # via google-auth +six==1.16.0 # via absl-py, google-auth, grpcio, kubernetes, ml-metadata, protobuf, python-dateutil +urllib3==1.26.5 # via kubernetes, requests +websocket-client==1.0.1 # via kubernetes # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/backend/metadata_writer/src/metadata_helpers.py b/backend/metadata_writer/src/metadata_helpers.py index b4f42f2592..f77acf0b78 100644 --- a/backend/metadata_writer/src/metadata_helpers.py +++ b/backend/metadata_writer/src/metadata_helpers.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/metadata_writer/src/metadata_writer.py b/backend/metadata_writer/src/metadata_writer.py index 89caed97b0..37f818b8ec 100644 --- a/backend/metadata_writer/src/metadata_writer.py +++ b/backend/metadata_writer/src/metadata_writer.py @@ -126,8 +126,10 @@ def artifact_to_uri(artifact: dict) -> str: def is_tfx_pod(pod) -> bool: - # Later versions of TFX pods do not match the pattern in command line, but now they have this label. - if pod.metadata.labels.get(KFP_SDK_TYPE_LABEL_KEY) == TFX_SDK_TYPE_VALUE: + # The label defaults to 'tfx', but is overridable. + # Official tfx templates override the value to 'tfx-template', so + # we loosely match the word 'tfx'. + if TFX_SDK_TYPE_VALUE in pod.metadata.labels.get(KFP_SDK_TYPE_LABEL_KEY, ''): return True main_step_name = 'step-main' if PIPELINE_RUNTIME == "tekton" else 'main' main_containers = [container for container in pod.spec.containers if container.name == main_step_name] diff --git a/backend/requirements.in b/backend/requirements.in index 51ab268638..5e2358fc7b 100644 --- a/backend/requirements.in +++ b/backend/requirements.in @@ -1 +1,2 @@ -tfx==0.27.0 +tfx==1.2.0 +kfp==1.7.1 diff --git a/backend/requirements.txt b/backend/requirements.txt index ceca4df03a..d011984bd5 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -4,163 +4,171 @@ # # pip-compile --output-file=- - # -absl-py==0.10.0 # via ml-metadata, ml-pipelines-sdk, tensorboard, tensorflow, tensorflow-cloud, tensorflow-data-validation, tensorflow-datasets, tensorflow-metadata, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl -apache-beam[gcp]==2.28.0 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl +absl-py==0.11.0 # via kfp, ml-metadata, ml-pipelines-sdk, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-metadata, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl +apache-beam[gcp]==2.31.0 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl +argcomplete==1.12.3 # via ipykernel argon2-cffi==20.1.0 # via notebook astunparse==1.6.3 # via tensorflow -async-generator==1.10 # via nbclient -attrs==20.3.0 # via jsonschema, ml-metadata, tensorflow-datasets, tfx +attrs==20.3.0 # via jsonschema, ml-metadata, tfx avro-python3==1.9.2.1 # via apache-beam backcall==0.2.0 # via ipython -bleach==3.3.0 # via nbconvert -cachetools==4.2.1 # via apache-beam, google-auth -certifi==2020.12.5 # via kubernetes, requests -cffi==1.14.5 # via argon2-cffi, google-crc32c -chardet==4.0.0 # via requests -click==7.1.2 # via tfx +bleach==4.0.0 # via nbconvert +cached-property==1.5.2 # via h5py +cachetools==4.2.2 # via apache-beam, google-auth +certifi==2021.5.30 # via kfp-server-api, kubernetes, requests +cffi==1.14.6 # via argon2-cffi, google-crc32c +charset-normalizer==2.0.4 # via requests +click==7.1.2 # via kfp, tfx +cloudpickle==1.6.0 # via kfp colorama==0.4.4 # via keras-tuner crcmod==1.7 # via apache-beam -decorator==4.4.2 # via ipython -defusedxml==0.6.0 # via nbconvert -dill==0.3.1.1 # via apache-beam, tensorflow-datasets -docker==4.4.3 # via ml-pipelines-sdk, tensorflow-cloud, tfx +debugpy==1.4.1 # via ipykernel +decorator==5.0.9 # via ipython +defusedxml==0.7.1 # via nbconvert +deprecated==1.2.12 # via kfp +dill==0.3.1.1 # via apache-beam +docker==4.4.4 # via ml-pipelines-sdk, tfx docopt==0.6.2 # via hdfs +docstring-parser==0.10 # via kfp entrypoints==0.3 # via nbconvert -fastavro==1.3.2 # via apache-beam -fasteners==0.16 # via google-apitools +fastavro==1.4.4 # via apache-beam +fasteners==0.16.3 # via google-apitools +fire==0.4.0 # via kfp flatbuffers==1.12 # via tensorflow -future==0.18.2 # via apache-beam, keras-tuner, tensorflow-datasets -gast==0.3.3 # via tensorflow -google-api-core[grpc,grpcgcp]==1.26.0 # via google-api-python-client, google-cloud-bigquery, google-cloud-bigtable, google-cloud-build, google-cloud-core, google-cloud-datastore, google-cloud-dlp, google-cloud-language, google-cloud-pubsub, google-cloud-spanner, google-cloud-videointelligence, google-cloud-vision -google-api-python-client==1.12.8 # via tensorflow-cloud, tfx, tfx-bsl -google-apitools==0.5.31 # via apache-beam -google-auth-httplib2==0.0.4 # via google-api-python-client -google-auth-oauthlib==0.4.2 # via tensorboard -google-auth==1.27.0 # via apache-beam, google-api-core, google-api-python-client, google-auth-httplib2, google-auth-oauthlib, google-cloud-core, google-cloud-storage, kubernetes, tensorboard, tensorflow-cloud -google-cloud-bigquery==1.28.0 # via apache-beam +future==0.18.2 # via apache-beam, keras-tuner +gast==0.4.0 # via tensorflow +google-api-core[grpc,grpcgcp]==1.31.2 # via google-api-python-client, google-cloud-aiplatform, google-cloud-bigquery, google-cloud-bigtable, google-cloud-core, google-cloud-datastore, google-cloud-dlp, google-cloud-language, google-cloud-pubsub, google-cloud-spanner, google-cloud-storage, google-cloud-videointelligence, google-cloud-vision +google-api-python-client==1.12.8 # via google-cloud-profiler, kfp, ml-pipelines-sdk, tfx, tfx-bsl +google-apitools==0.5.31 # via apache-beam, ml-pipelines-sdk, tfx +google-auth-httplib2==0.1.0 # via google-api-python-client, google-cloud-profiler +google-auth-oauthlib==0.4.5 # via tensorboard +google-auth==1.35.0 # via apache-beam, google-api-core, google-api-python-client, google-auth-httplib2, google-auth-oauthlib, google-cloud-core, google-cloud-profiler, google-cloud-storage, kfp, kubernetes, tensorboard +google-cloud-aiplatform==0.7.1 # via tfx +google-cloud-bigquery==2.20.0 # via apache-beam, google-cloud-aiplatform, tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl google-cloud-bigtable==1.7.0 # via apache-beam -google-cloud-build==2.0.0 # via apache-beam -google-cloud-core==1.6.0 # via apache-beam, google-cloud-bigquery, google-cloud-bigtable, google-cloud-datastore, google-cloud-spanner, google-cloud-storage +google-cloud-core==1.7.2 # via apache-beam, google-cloud-bigquery, google-cloud-bigtable, google-cloud-datastore, google-cloud-spanner, google-cloud-storage google-cloud-datastore==1.15.3 # via apache-beam google-cloud-dlp==1.0.0 # via apache-beam google-cloud-language==1.3.0 # via apache-beam +google-cloud-profiler==3.0.5 # via apache-beam google-cloud-pubsub==1.7.0 # via apache-beam google-cloud-spanner==1.19.1 # via apache-beam -google-cloud-storage==1.36.1 # via tensorflow-cloud +google-cloud-storage==1.42.0 # via google-cloud-aiplatform, kfp google-cloud-videointelligence==1.16.1 # via apache-beam google-cloud-vision==1.0.0 # via apache-beam google-crc32c==1.1.2 # via google-resumable-media google-pasta==0.2.0 # via tensorflow -google-resumable-media==1.2.0 # via google-cloud-bigquery, google-cloud-storage -googleapis-common-protos[grpc]==1.52.0 # via google-api-core, grpc-google-iam-v1, tensorflow-metadata +google-resumable-media==1.3.3 # via google-cloud-bigquery, google-cloud-storage +googleapis-common-protos[grpc]==1.53.0 # via google-api-core, grpc-google-iam-v1, tensorflow-metadata grpc-google-iam-v1==0.12.3 # via google-cloud-bigtable, google-cloud-pubsub, google-cloud-spanner grpcio-gcp==0.2.2 # via apache-beam, google-api-core -grpcio==1.32.0 # via apache-beam, google-api-core, googleapis-common-protos, grpc-google-iam-v1, grpcio-gcp, ml-metadata, tensorboard, tensorflow, tensorflow-serving-api, tfx -h5py==2.10.0 # via tensorflow +grpcio==1.34.1 # via apache-beam, google-api-core, googleapis-common-protos, grpc-google-iam-v1, grpcio-gcp, ml-metadata, tensorboard, tensorflow, tensorflow-serving-api, tfx +h5py==3.1.0 # via tensorflow hdfs==2.6.0 # via apache-beam -httplib2==0.17.4 # via apache-beam, google-api-python-client, google-apitools, google-auth-httplib2, oauth2client -idna==2.10 # via requests -importlib-metadata==3.6.0 # via jsonschema, markdown -ipykernel==5.5.0 # via ipywidgets, notebook +httplib2==0.19.1 # via apache-beam, google-api-python-client, google-apitools, google-auth-httplib2, oauth2client +idna==3.2 # via requests +importlib-metadata==4.6.4 # via argcomplete, ipykernel, jsonschema, markdown +ipykernel==6.2.0 # via ipywidgets, notebook ipython-genutils==0.2.0 # via nbformat, notebook, traitlets -ipython==7.20.0 # via ipykernel, ipywidgets, tensorflow-model-analysis +ipython==7.26.0 # via ipykernel, ipywidgets, tensorflow-model-analysis ipywidgets==7.6.3 # via tensorflow-model-analysis jedi==0.18.0 # via ipython jinja2==2.11.3 # via ml-pipelines-sdk, nbconvert, notebook, tfx joblib==0.14.1 # via scikit-learn, tensorflow-data-validation -jsonschema==3.2.0 # via nbformat -jupyter-client==6.1.11 # via ipykernel, nbclient, notebook +jsonschema==3.2.0 # via kfp, nbformat +jupyter-client==6.1.12 # via ipykernel, nbclient, notebook jupyter-core==4.7.1 # via jupyter-client, nbconvert, nbformat, notebook jupyterlab-pygments==0.1.2 # via nbconvert jupyterlab-widgets==1.0.0 # via ipywidgets +keras-nightly==2.5.0.dev2021032900 # via tensorflow keras-preprocessing==1.1.2 # via tensorflow -keras-tuner==1.0.1 # via tensorflow-cloud, tfx -kubernetes==11.0.0 # via tfx -libcst==0.3.17 # via google-cloud-build -markdown==3.3.3 # via tensorboard -markupsafe==1.1.1 # via jinja2 +keras-tuner==1.0.1 # via tfx +kfp-pipeline-spec==0.1.9 # via kfp +kfp-server-api==1.6.0 # via kfp +kfp==1.7.1 # via -r - +kubernetes==12.0.1 # via kfp, tfx +markdown==3.3.4 # via tensorboard +markupsafe==2.0.1 # via jinja2 +matplotlib-inline==0.1.2 # via ipykernel, ipython mistune==0.8.4 # via nbconvert -ml-metadata==0.27.0 # via ml-pipelines-sdk, tfx -ml-pipelines-sdk==0.27.0 # via tfx -mock==2.0.0 # via apache-beam -mypy-extensions==0.4.3 # via typing-inspect -nbclient==0.5.2 # via nbconvert -nbconvert==6.0.7 # via notebook -nbformat==5.1.2 # via ipywidgets, nbclient, nbconvert, notebook +ml-metadata==1.2.0 # via ml-pipelines-sdk, tfx +ml-pipelines-sdk==1.2.0 # via tfx +nbclient==0.5.4 # via nbconvert +nbconvert==6.1.0 # via notebook +nbformat==5.1.3 # via ipywidgets, nbclient, nbconvert, notebook nest-asyncio==1.5.1 # via nbclient -notebook==6.2.0 # via widgetsnbextension -numpy==1.19.5 # via apache-beam, h5py, keras-preprocessing, keras-tuner, opt-einsum, pandas, pyarrow, scikit-learn, scipy, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-datasets, tensorflow-hub, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl +notebook==6.4.3 # via widgetsnbextension +numpy==1.19.5 # via apache-beam, h5py, keras-preprocessing, keras-tuner, opt-einsum, pandas, pyarrow, scikit-learn, scipy, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-hub, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl oauth2client==4.1.3 # via apache-beam, google-apitools -oauthlib==3.1.0 # via requests-oauthlib +oauthlib==3.1.1 # via requests-oauthlib opt-einsum==3.3.0 # via tensorflow -packaging==20.9 # via bleach, google-api-core -pandas==1.2.2 # via tensorflow-data-validation, tensorflow-model-analysis, tfx-bsl +packaging==20.9 # via bleach, google-api-core, google-cloud-bigquery, ml-pipelines-sdk, tfx +pandas==1.3.2 # via tensorflow-data-validation, tensorflow-model-analysis, tfx-bsl pandocfilters==1.4.3 # via nbconvert -parso==0.8.1 # via jedi -pbr==5.5.1 # via mock +parso==0.8.2 # via jedi pexpect==4.8.0 # via ipython pickleshare==0.7.5 # via ipython -prometheus-client==0.9.0 # via notebook -promise==2.3 # via tensorflow-datasets -prompt-toolkit==3.0.16 # via ipython -proto-plus==1.13.0 # via google-cloud-build -protobuf==3.15.2 # via apache-beam, google-api-core, googleapis-common-protos, ml-metadata, ml-pipelines-sdk, proto-plus, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-datasets, tensorflow-hub, tensorflow-metadata, tensorflow-model-analysis, tensorflow-serving-api, tensorflow-transform, tfx, tfx-bsl +portpicker==1.4.0 # via ml-pipelines-sdk, tfx +prometheus-client==0.11.0 # via notebook +prompt-toolkit==3.0.19 # via ipython +proto-plus==1.19.0 # via google-cloud-aiplatform, google-cloud-bigquery +protobuf==3.17.3 # via apache-beam, google-api-core, google-cloud-bigquery, google-cloud-profiler, googleapis-common-protos, kfp, kfp-pipeline-spec, ml-metadata, ml-pipelines-sdk, proto-plus, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-hub, tensorflow-metadata, tensorflow-model-analysis, tensorflow-serving-api, tensorflow-transform, tfx, tfx-bsl ptyprocess==0.7.0 # via pexpect, terminado pyarrow==2.0.0 # via apache-beam, tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl pyasn1-modules==0.2.8 # via google-auth, oauth2client pyasn1==0.4.8 # via oauth2client, pyasn1-modules, rsa pycparser==2.20 # via cffi pydot==1.4.2 # via apache-beam, tensorflow-transform -pygments==2.8.0 # via ipython, jupyterlab-pygments, nbconvert -pymongo==3.11.3 # via apache-beam -pyparsing==2.4.7 # via packaging, pydot -pyrsistent==0.17.3 # via jsonschema -python-dateutil==2.8.1 # via apache-beam, jupyter-client, kubernetes, pandas +pygments==2.10.0 # via ipython, jupyterlab-pygments, nbconvert +pymongo==3.12.0 # via apache-beam +pyparsing==2.4.7 # via httplib2, packaging, pydot +pyrsistent==0.18.0 # via jsonschema +python-dateutil==2.8.2 # via apache-beam, jupyter-client, kfp-server-api, kubernetes, pandas pytz==2021.1 # via apache-beam, google-api-core, pandas -pyyaml==5.4.1 # via kubernetes, libcst, tfx -pyzmq==22.0.3 # via jupyter-client, notebook +pyyaml==5.4.1 # via kfp, kubernetes, tfx +pyzmq==22.2.1 # via jupyter-client, notebook requests-oauthlib==1.3.0 # via google-auth-oauthlib, kubernetes -requests==2.25.1 # via apache-beam, docker, google-api-core, google-cloud-storage, hdfs, keras-tuner, kubernetes, requests-oauthlib, tensorboard, tensorflow-datasets -rsa==4.7.1 # via google-auth, oauth2client -scikit-learn==0.24.1 # via keras-tuner -scipy==1.6.1 # via keras-tuner, scikit-learn, tensorflow-model-analysis -send2trash==1.5.0 # via notebook -six==1.15.0 # via absl-py, argon2-cffi, astunparse, bleach, docker, fasteners, google-api-core, google-api-python-client, google-apitools, google-auth, google-auth-httplib2, google-cloud-bigquery, google-cloud-core, google-pasta, google-resumable-media, grpcio, h5py, hdfs, jsonschema, keras-preprocessing, kubernetes, ml-metadata, ml-pipelines-sdk, mock, oauth2client, promise, protobuf, python-dateutil, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-datasets, tensorflow-hub, tensorflow-model-analysis, tensorflow-transform, tfx, websocket-client -tabulate==0.8.9 # via keras-tuner +requests-toolbelt==0.9.1 # via kfp +requests==2.26.0 # via apache-beam, docker, google-api-core, google-cloud-bigquery, google-cloud-profiler, google-cloud-storage, hdfs, keras-tuner, kubernetes, requests-oauthlib, requests-toolbelt, tensorboard +rsa==4.7.2 # via google-auth, oauth2client +scikit-learn==0.24.2 # via keras-tuner +scipy==1.7.1 # via keras-tuner, scikit-learn, tensorflow-model-analysis +send2trash==1.8.0 # via notebook +six==1.15.0 # via absl-py, argon2-cffi, astunparse, bleach, docker, fasteners, fire, google-api-core, google-api-python-client, google-apitools, google-auth, google-auth-httplib2, google-cloud-core, google-pasta, google-resumable-media, grpcio, hdfs, jsonschema, keras-preprocessing, kfp-server-api, kubernetes, ml-metadata, oauth2client, protobuf, python-dateutil, tensorflow, tensorflow-data-validation, tensorflow-model-analysis +strip-hints==0.1.10 # via kfp +tabulate==0.8.9 # via keras-tuner, kfp +tensorboard-data-server==0.6.1 # via tensorboard tensorboard-plugin-wit==1.8.0 # via tensorboard -tensorboard==2.4.1 # via tensorflow, tensorflow-cloud -tensorflow-cloud==0.1.13 # via tfx -tensorflow-data-validation==0.27.0 # via tfx -tensorflow-datasets==3.0.0 # via tensorflow-cloud -tensorflow-estimator==2.4.0 # via tensorflow -tensorflow-hub==0.9.0 # via tfx -tensorflow-metadata==0.27.0 # via tensorflow-data-validation, tensorflow-datasets, tensorflow-model-analysis, tensorflow-transform, tfx-bsl -tensorflow-model-analysis==0.27.0 # via tfx -tensorflow-serving-api==2.4.1 # via tfx, tfx-bsl -tensorflow-transform==0.27.0 # via tfx -tensorflow==2.4.1 # via tensorflow-cloud, tensorflow-data-validation, tensorflow-model-analysis, tensorflow-serving-api, tensorflow-transform, tfx, tfx-bsl -termcolor==1.1.0 # via tensorflow, tensorflow-datasets -terminado==0.9.2 # via notebook +tensorboard==2.6.0 # via tensorflow +tensorflow-data-validation==1.2.0 # via tfx +tensorflow-estimator==2.5.0 # via tensorflow +tensorflow-hub==0.12.0 # via tfx +tensorflow-metadata==1.2.0 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx-bsl +tensorflow-model-analysis==0.33.0 # via tfx +tensorflow-serving-api==2.5.1 # via tfx, tfx-bsl +tensorflow-transform==1.2.0 # via tfx +tensorflow==2.5.1 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-serving-api, tensorflow-transform, tfx, tfx-bsl +termcolor==1.1.0 # via fire, tensorflow +terminado==0.11.0 # via notebook terminaltables==3.1.0 # via keras-tuner -testpath==0.4.4 # via nbconvert -tfx-bsl==0.27.1 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx -tfx==0.27.0 # via -r - -threadpoolctl==2.1.0 # via scikit-learn +testpath==0.5.0 # via nbconvert +tfx-bsl==1.2.0 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx +tfx==1.2.0 # via -r - +threadpoolctl==2.2.0 # via scikit-learn tornado==6.1 # via ipykernel, jupyter-client, notebook, terminado -tqdm==4.57.0 # via keras-tuner, tensorflow-datasets -traitlets==5.0.5 # via ipykernel, ipython, ipywidgets, jupyter-client, jupyter-core, nbclient, nbconvert, nbformat, notebook -typing-extensions==3.7.4.3 # via apache-beam, importlib-metadata, libcst, tensorflow, typing-inspect -typing-inspect==0.6.0 # via libcst +tqdm==4.62.1 # via keras-tuner +traitlets==5.0.5 # via ipykernel, ipython, ipywidgets, jupyter-client, jupyter-core, matplotlib-inline, nbclient, nbconvert, nbformat, notebook +typing-extensions==3.7.4.3 # via apache-beam, importlib-metadata, tensorflow uritemplate==3.0.1 # via google-api-python-client -urllib3==1.26.3 # via kubernetes, requests +urllib3==1.26.6 # via kfp-server-api, kubernetes, requests wcwidth==0.2.5 # via prompt-toolkit webencodings==0.5.1 # via bleach -websocket-client==0.57.0 # via docker, kubernetes -werkzeug==1.0.1 # via tensorboard -wheel==0.36.2 # via astunparse, tensorboard, tensorflow +websocket-client==1.2.1 # via docker, kubernetes +werkzeug==2.0.1 # via tensorboard +wheel==0.37.0 # via astunparse, strip-hints, tensorboard, tensorflow widgetsnbextension==3.5.1 # via ipywidgets -wrapt==1.12.1 # via tensorflow, tensorflow-datasets -zipp==3.4.0 # via importlib-metadata +wrapt==1.12.1 # via deprecated, tensorflow +zipp==3.5.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/backend/src/agent/persistence/client/pipeline_client.go b/backend/src/agent/persistence/client/pipeline_client.go index c8c820704e..ecfab15dff 100644 --- a/backend/src/agent/persistence/client/pipeline_client.go +++ b/backend/src/agent/persistence/client/pipeline_client.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/client/pipeline_client_fake.go b/backend/src/agent/persistence/client/pipeline_client_fake.go index 9e3458ed0b..4215478948 100644 --- a/backend/src/agent/persistence/client/pipeline_client_fake.go +++ b/backend/src/agent/persistence/client/pipeline_client_fake.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/client/scheduled_workflow_client.go b/backend/src/agent/persistence/client/scheduled_workflow_client.go index 341d60ed19..bf8b2acb1c 100644 --- a/backend/src/agent/persistence/client/scheduled_workflow_client.go +++ b/backend/src/agent/persistence/client/scheduled_workflow_client.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/client/scheduled_workflow_client_fake.go b/backend/src/agent/persistence/client/scheduled_workflow_client_fake.go index b91781c289..8f036aec7b 100644 --- a/backend/src/agent/persistence/client/scheduled_workflow_client_fake.go +++ b/backend/src/agent/persistence/client/scheduled_workflow_client_fake.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/client/workflow_client.go b/backend/src/agent/persistence/client/workflow_client.go index 7922b2cdf6..ee5d67bb54 100644 --- a/backend/src/agent/persistence/client/workflow_client.go +++ b/backend/src/agent/persistence/client/workflow_client.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/client/workflow_fake.go b/backend/src/agent/persistence/client/workflow_fake.go index d37ae5b324..01f9162f93 100644 --- a/backend/src/agent/persistence/client/workflow_fake.go +++ b/backend/src/agent/persistence/client/workflow_fake.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/main.go b/backend/src/agent/persistence/main.go index 123f484d7a..a4f4df8d3a 100644 --- a/backend/src/agent/persistence/main.go +++ b/backend/src/agent/persistence/main.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/persistence_agent.go b/backend/src/agent/persistence/persistence_agent.go index e9d93c5edd..a0e9f5fe92 100644 --- a/backend/src/agent/persistence/persistence_agent.go +++ b/backend/src/agent/persistence/persistence_agent.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/worker/metrics_reporter.go b/backend/src/agent/persistence/worker/metrics_reporter.go index 9ff2a8b153..4a805af5d1 100644 --- a/backend/src/agent/persistence/worker/metrics_reporter.go +++ b/backend/src/agent/persistence/worker/metrics_reporter.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/worker/metrics_reporter_test.go b/backend/src/agent/persistence/worker/metrics_reporter_test.go index ec2dc80c15..f8e57f6003 100644 --- a/backend/src/agent/persistence/worker/metrics_reporter_test.go +++ b/backend/src/agent/persistence/worker/metrics_reporter_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/worker/persistence_worker.go b/backend/src/agent/persistence/worker/persistence_worker.go index b65194eec4..08a66dca44 100644 --- a/backend/src/agent/persistence/worker/persistence_worker.go +++ b/backend/src/agent/persistence/worker/persistence_worker.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/worker/persistence_worker_test.go b/backend/src/agent/persistence/worker/persistence_worker_test.go index 3113a591cc..cfc4ee5f13 100644 --- a/backend/src/agent/persistence/worker/persistence_worker_test.go +++ b/backend/src/agent/persistence/worker/persistence_worker_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/worker/swf_saver.go b/backend/src/agent/persistence/worker/swf_saver.go index f5fded4005..01d80dd714 100644 --- a/backend/src/agent/persistence/worker/swf_saver.go +++ b/backend/src/agent/persistence/worker/swf_saver.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/worker/swf_saver_test.go b/backend/src/agent/persistence/worker/swf_saver_test.go index c361172ff9..3d00875038 100644 --- a/backend/src/agent/persistence/worker/swf_saver_test.go +++ b/backend/src/agent/persistence/worker/swf_saver_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/worker/workflow_saver.go b/backend/src/agent/persistence/worker/workflow_saver.go index f5da8087b0..9635d02019 100644 --- a/backend/src/agent/persistence/worker/workflow_saver.go +++ b/backend/src/agent/persistence/worker/workflow_saver.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/agent/persistence/worker/workflow_saver_test.go b/backend/src/agent/persistence/worker/workflow_saver_test.go index 8cd76eb349..4209725f40 100644 --- a/backend/src/agent/persistence/worker/workflow_saver_test.go +++ b/backend/src/agent/persistence/worker/workflow_saver_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/auth/authenticator_token_review.go b/backend/src/apiserver/auth/authenticator_token_review.go index 52fa3c69b9..579cb56c64 100644 --- a/backend/src/apiserver/auth/authenticator_token_review.go +++ b/backend/src/apiserver/auth/authenticator_token_review.go @@ -17,12 +17,11 @@ package auth import ( "context" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "github.com/kubeflow/pipelines/backend/src/apiserver/client" "github.com/kubeflow/pipelines/backend/src/common/util" "github.com/pkg/errors" authv1 "k8s.io/api/authentication/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) type TokenReviewAuthenticator struct { @@ -51,7 +50,7 @@ func (tra *TokenReviewAuthenticator) GetUserIdentity(ctx context.Context) (strin return "", err } - userInfo, err := tra.doTokenReview(token) + userInfo, err := tra.doTokenReview(ctx, token) if err != nil { return "", util.Wrap(err, "Authentication failure") } @@ -75,16 +74,16 @@ func (tra *TokenReviewAuthenticator) ensureAudience(audience []string) bool { return true } -func (tra *TokenReviewAuthenticator) doTokenReview(userIdentity string) (*authv1.UserInfo, error) { +func (tra *TokenReviewAuthenticator) doTokenReview(ctx context.Context, userIdentity string) (*authv1.UserInfo, error) { review, err := tra.client.Create( - context.Background(), + ctx, &authv1.TokenReview{ Spec: authv1.TokenReviewSpec{ Token: userIdentity, Audiences: tra.audiences, }, }, - metav1.CreateOptions{}, + v1.CreateOptions{}, ) if err != nil { return nil, util.NewUnauthenticatedError(err, "Request header error: Failed to review the token provided") diff --git a/backend/src/apiserver/client/kubernetes_core_fake.go b/backend/src/apiserver/client/kubernetes_core_fake.go index 6ad43e1a1d..0801dbfeed 100644 --- a/backend/src/apiserver/client/kubernetes_core_fake.go +++ b/backend/src/apiserver/client/kubernetes_core_fake.go @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/client/minio.go b/backend/src/apiserver/client/minio.go index 682d6f6bea..ce1c009795 100644 --- a/backend/src/apiserver/client/minio.go +++ b/backend/src/apiserver/client/minio.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/client/pod_fake.go b/backend/src/apiserver/client/pod_fake.go index d23aa525ce..8ce7ddf12a 100644 --- a/backend/src/apiserver/client/pod_fake.go +++ b/backend/src/apiserver/client/pod_fake.go @@ -1,6 +1,7 @@ package client import ( + "context" "errors" "github.com/golang/glog" @@ -15,66 +16,66 @@ import ( type FakePodClient struct { } -func (FakePodClient) GetEphemeralContainers(string, v1.GetOptions) (*corev1.EphemeralContainers, error) { +func (FakePodClient) GetEphemeralContainers(context.Context, string, v1.GetOptions) (*corev1.EphemeralContainers, error) { glog.Error("This fake method is not yet implemented.") return nil, nil } -func (FakePodClient) UpdateEphemeralContainers(string, *corev1.EphemeralContainers) (*corev1.EphemeralContainers, error) { +func (FakePodClient) UpdateEphemeralContainers(context.Context, string, *corev1.EphemeralContainers, v1.UpdateOptions) (*corev1.EphemeralContainers, error) { glog.Error("This fake method is not yet implemented.") return nil, nil } -func (FakePodClient) Create(*corev1.Pod) (*corev1.Pod, error) { +func (FakePodClient) Create(context.Context, *corev1.Pod, v1.CreateOptions) (*corev1.Pod, error) { glog.Error("This fake method is not yet implemented.") return nil, nil } -func (FakePodClient) Update(*corev1.Pod) (*corev1.Pod, error) { +func (FakePodClient) Update(context.Context, *corev1.Pod, v1.UpdateOptions) (*corev1.Pod, error) { glog.Error("This fake method is not yet implemented.") return nil, nil } -func (FakePodClient) UpdateStatus(*corev1.Pod) (*corev1.Pod, error) { +func (FakePodClient) UpdateStatus(context.Context, *corev1.Pod, v1.UpdateOptions) (*corev1.Pod, error) { glog.Error("This fake method is not yet implemented.") return nil, nil } -func (FakePodClient) Delete(name string, options *v1.DeleteOptions) error { +func (FakePodClient) Delete(ctx context.Context, name string, options v1.DeleteOptions) error { return nil } -func (FakePodClient) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { +func (FakePodClient) DeleteCollection(ctx context.Context, options v1.DeleteOptions, listOptions v1.ListOptions) error { glog.Error("This fake method is not yet implemented.") return nil } -func (FakePodClient) Get(name string, options v1.GetOptions) (*corev1.Pod, error) { +func (FakePodClient) Get(ctx context.Context, name string, options v1.GetOptions) (*corev1.Pod, error) { glog.Error("This fake method is not yet implemented.") return nil, nil } -func (FakePodClient) List(opts v1.ListOptions) (*corev1.PodList, error) { +func (FakePodClient) List(ctx context.Context, opts v1.ListOptions) (*corev1.PodList, error) { glog.Error("This fake method is not yet implemented.") return nil, nil } -func (FakePodClient) Watch(opts v1.ListOptions) (watch.Interface, error) { +func (FakePodClient) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { glog.Error("This fake method is not yet implemented.") return nil, nil } -func (FakePodClient) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *corev1.Pod, err error) { +func (FakePodClient) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *corev1.Pod, err error) { glog.Error("This fake method is not yet implemented.") return nil, nil } -func (FakePodClient) Bind(binding *corev1.Binding) error { +func (FakePodClient) Bind(ctx context.Context, binding *corev1.Binding, opts v1.CreateOptions) error { glog.Error("This fake method is not yet implemented.") return nil } -func (FakePodClient) Evict(eviction *v1beta1.Eviction) error { +func (FakePodClient) Evict(ctx context.Context, eviction *v1beta1.Eviction) error { glog.Error("This fake method is not yet implemented.") return nil } @@ -84,10 +85,15 @@ func (FakePodClient) GetLogs(name string, opts *corev1.PodLogOptions) *rest.Requ return nil } +func (FakePodClient) ProxyGet(scheme, name, port, path string, params map[string]string) rest.ResponseWrapper { + glog.Error("This fake method is not yet implemented.") + return nil +} + type FakeBadPodClient struct { FakePodClient } -func (FakeBadPodClient) Delete(name string, options *v1.DeleteOptions) error { +func (FakeBadPodClient) Delete(ctx context.Context, name string, options v1.DeleteOptions) error { return errors.New("failed to delete pod") } diff --git a/backend/src/apiserver/client/scheduled_workflow_fake.go b/backend/src/apiserver/client/scheduled_workflow_fake.go index c183c8ccd6..518958d2b7 100644 --- a/backend/src/apiserver/client/scheduled_workflow_fake.go +++ b/backend/src/apiserver/client/scheduled_workflow_fake.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/client/sql.go b/backend/src/apiserver/client/sql.go index b973d8dc8d..ab58fc3435 100644 --- a/backend/src/apiserver/client/sql.go +++ b/backend/src/apiserver/client/sql.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/client/sql_test.go b/backend/src/apiserver/client/sql_test.go index 81d19cc8b5..8549d59d82 100644 --- a/backend/src/apiserver/client/sql_test.go +++ b/backend/src/apiserver/client/sql_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/client/subject_access_review.go b/backend/src/apiserver/client/subject_access_review.go index af665165d7..5e6c34eca1 100644 --- a/backend/src/apiserver/client/subject_access_review.go +++ b/backend/src/apiserver/client/subject_access_review.go @@ -22,11 +22,11 @@ import ( "github.com/golang/glog" "github.com/kubeflow/pipelines/backend/src/common/util" authzv1 "k8s.io/api/authorization/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) type SubjectAccessReviewInterface interface { - Create(ctx context.Context, sar *authzv1.SubjectAccessReview, opts metav1.CreateOptions) (result *authzv1.SubjectAccessReview, err error) + Create(ctx context.Context, sar *authzv1.SubjectAccessReview, opts v1.CreateOptions) (result *authzv1.SubjectAccessReview, err error) } func createSubjectAccessReviewClient(clientParams util.ClientParameters) (SubjectAccessReviewInterface, error) { diff --git a/backend/src/apiserver/client/subject_access_review_fake.go b/backend/src/apiserver/client/subject_access_review_fake.go index eff373ed5c..f4d4fac597 100644 --- a/backend/src/apiserver/client/subject_access_review_fake.go +++ b/backend/src/apiserver/client/subject_access_review_fake.go @@ -25,7 +25,7 @@ import ( type FakeSubjectAccessReviewClient struct { } -func (FakeSubjectAccessReviewClient) Create(ctx context.Context, auth *authzv1.SubjectAccessReview, options v1.CreateOptions) (*authzv1.SubjectAccessReview, error) { +func (FakeSubjectAccessReviewClient) Create(context.Context, *authzv1.SubjectAccessReview, v1.CreateOptions) (*authzv1.SubjectAccessReview, error) { return &authzv1.SubjectAccessReview{Status: authzv1.SubjectAccessReviewStatus{ Allowed: true, Denied: false, @@ -41,7 +41,7 @@ func NewFakeSubjectAccessReviewClient() FakeSubjectAccessReviewClient { type FakeSubjectAccessReviewClientUnauthorized struct { } -func (FakeSubjectAccessReviewClientUnauthorized) Create(ctx context.Context, auth *authzv1.SubjectAccessReview, options v1.CreateOptions) (*authzv1.SubjectAccessReview, error) { +func (FakeSubjectAccessReviewClientUnauthorized) Create(context.Context, *authzv1.SubjectAccessReview, v1.CreateOptions) (*authzv1.SubjectAccessReview, error) { return &authzv1.SubjectAccessReview{Status: authzv1.SubjectAccessReviewStatus{ Allowed: false, Denied: false, diff --git a/backend/src/apiserver/client/swf.go b/backend/src/apiserver/client/swf.go index bdeab580e5..888b3e5bb3 100644 --- a/backend/src/apiserver/client/swf.go +++ b/backend/src/apiserver/client/swf.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/client/swf_fake.go b/backend/src/apiserver/client/swf_fake.go index f29c27a2c0..efe61fe3ed 100644 --- a/backend/src/apiserver/client/swf_fake.go +++ b/backend/src/apiserver/client/swf_fake.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/client/token_review.go b/backend/src/apiserver/client/token_review.go index c75246df23..6e7a83d8b9 100644 --- a/backend/src/apiserver/client/token_review.go +++ b/backend/src/apiserver/client/token_review.go @@ -20,7 +20,7 @@ import ( "context" "github.com/kubeflow/pipelines/backend/src/common/util" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/cenkalti/backoff" "github.com/golang/glog" @@ -28,7 +28,7 @@ import ( ) type TokenReviewInterface interface { - Create(ctx context.Context, tokenReview *authv1.TokenReview, opts metav1.CreateOptions) (result *authv1.TokenReview, err error) + Create(ctx context.Context, tokenReview *authv1.TokenReview, opts v1.CreateOptions) (result *authv1.TokenReview, err error) } func createTokenReviewClient(clientParams util.ClientParameters) (TokenReviewInterface, error) { diff --git a/backend/src/apiserver/client/token_review_fake.go b/backend/src/apiserver/client/token_review_fake.go index 570a4425e3..63d9514b59 100644 --- a/backend/src/apiserver/client/token_review_fake.go +++ b/backend/src/apiserver/client/token_review_fake.go @@ -20,13 +20,13 @@ import ( "github.com/kubeflow/pipelines/backend/src/apiserver/common" "github.com/pkg/errors" authv1 "k8s.io/api/authentication/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) type FakeTokenReviewClient struct { } -func (FakeTokenReviewClient) Create(context.Context, *authv1.TokenReview, metav1.CreateOptions) (*authv1.TokenReview, error) { +func (FakeTokenReviewClient) Create(context.Context, *authv1.TokenReview, v1.CreateOptions) (*authv1.TokenReview, error) { return &authv1.TokenReview{Status: authv1.TokenReviewStatus{ Authenticated: true, User: authv1.UserInfo{Username: "test"}, @@ -42,7 +42,7 @@ func NewFakeTokenReviewClient() FakeTokenReviewClient { type FakeTokenReviewClientUnauthenticated struct { } -func (FakeTokenReviewClientUnauthenticated) Create(context.Context, *authv1.TokenReview, metav1.CreateOptions) (*authv1.TokenReview, error) { +func (FakeTokenReviewClientUnauthenticated) Create(context.Context, *authv1.TokenReview, v1.CreateOptions) (*authv1.TokenReview, error) { return &authv1.TokenReview{Status: authv1.TokenReviewStatus{ Authenticated: false, User: authv1.UserInfo{}, @@ -58,7 +58,7 @@ func NewFakeTokenReviewClientUnauthenticated() FakeTokenReviewClientUnauthentica type FakeTokenReviewClientError struct { } -func (FakeTokenReviewClientError) Create(context.Context, *authv1.TokenReview, metav1.CreateOptions) (*authv1.TokenReview, error) { +func (FakeTokenReviewClientError) Create(context.Context, *authv1.TokenReview, v1.CreateOptions) (*authv1.TokenReview, error) { return nil, errors.New("failed to create token review") } diff --git a/backend/src/apiserver/client/workflow_fake.go b/backend/src/apiserver/client/workflow_fake.go index a12e19fd89..12e46579e2 100644 --- a/backend/src/apiserver/client/workflow_fake.go +++ b/backend/src/apiserver/client/workflow_fake.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/client_manager.go b/backend/src/apiserver/client_manager.go index 7043588539..bc8f0b1de9 100644 --- a/backend/src/apiserver/client_manager.go +++ b/backend/src/apiserver/client_manager.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -50,6 +50,7 @@ const ( mysqlExtraParams = "DBConfig.ExtraParams" archiveLogFileName = "ARCHIVE_LOG_FILE_NAME" archiveLogPathPrefix = "ARCHIVE_LOG_PATH_PREFIX" + dbConMaxLifeTimeSec = "DBConfig.ConMaxLifeTimeSec" visualizationServiceHost = "ML_PIPELINE_VISUALIZATIONSERVER_SERVICE_HOST" visualizationServicePort = "ML_PIPELINE_VISUALIZATIONSERVER_SERVICE_PORT" @@ -67,6 +68,7 @@ type ClientManager struct { pipelineStore storage.PipelineStoreInterface jobStore storage.JobStoreInterface runStore storage.RunStoreInterface + taskStore storage.TaskStoreInterface resourceReferenceStore storage.ResourceReferenceStoreInterface dBStatusStore storage.DBStatusStoreInterface defaultExperimentStore storage.DefaultExperimentStoreInterface @@ -82,6 +84,10 @@ type ClientManager struct { tektonClient client.TektonClientInterface } +func (c *ClientManager) TaskStore() storage.TaskStoreInterface { + return c.taskStore +} + func (c *ClientManager) ExperimentStore() storage.ExperimentStoreInterface { return c.experimentStore } @@ -153,6 +159,7 @@ func (c *ClientManager) Authenticators() []auth.Authenticator { func (c *ClientManager) init() { glog.Info("Initializing client manager") db := initDBClient(common.GetDurationConfig(initConnectionTimeout)) + db.SetConnMaxLifetime(common.GetDurationConfig(dbConMaxLifeTimeSec)) // time c.time = util.NewRealTime() @@ -164,6 +171,7 @@ func (c *ClientManager) init() { c.experimentStore = storage.NewExperimentStore(db, c.time, c.uuid) c.pipelineStore = storage.NewPipelineStore(db, c.time, c.uuid) c.jobStore = storage.NewJobStore(db, c.time) + c.taskStore = storage.NewTaskStore(db, c.time, c.uuid) c.resourceReferenceStore = storage.NewResourceReferenceStore(db) c.dBStatusStore = storage.NewDBStatusStore(db) c.defaultExperimentStore = storage.NewDefaultExperimentStore(db) @@ -236,6 +244,7 @@ func initDBClient(initConnectionTimeout time.Duration) *storage.DB { &model.ResourceReference{}, &model.RunDetail{}, &model.RunMetric{}, + &model.Task{}, &model.DBStatus{}, &model.DefaultExperiment{}) @@ -283,6 +292,11 @@ func initDBClient(initConnectionTimeout time.Duration) *storage.DB { if response.Error != nil { glog.Fatalf("Failed to create a foreign key for PipelineId in pipeline_versions table. Error: %s", response.Error) } + response = db.Model(&model.Task{}). + AddForeignKey("RunUUID", "run_details(UUID)", "CASCADE" /* onDelete */, "CASCADE" /* update */) + if response.Error != nil { + glog.Fatalf("Failed to create a foreign key for RunUUID in task table. Error: %s", response.Error) + } // Data backfill for pipeline_versions if this is the first time for // pipeline_versions to enter mlpipeline DB. diff --git a/backend/src/apiserver/common/config.go b/backend/src/apiserver/common/config.go index 6aa2971253..bb8bd422e2 100644 --- a/backend/src/apiserver/common/config.go +++ b/backend/src/apiserver/common/config.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/common/const.go b/backend/src/apiserver/common/const.go index cea9bbb3a2..111966cf42 100644 --- a/backend/src/apiserver/common/const.go +++ b/backend/src/apiserver/common/const.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/common/filter_context.go b/backend/src/apiserver/common/filter_context.go index 8d4fe00a29..202a6be30c 100644 --- a/backend/src/apiserver/common/filter_context.go +++ b/backend/src/apiserver/common/filter_context.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/common/pagination_context.go b/backend/src/apiserver/common/pagination_context.go index 11881f06b1..a3cb6fc29a 100644 --- a/backend/src/apiserver/common/pagination_context.go +++ b/backend/src/apiserver/common/pagination_context.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/common/paths.go b/backend/src/apiserver/common/paths.go index 3417c48a63..d18df95d3a 100644 --- a/backend/src/apiserver/common/paths.go +++ b/backend/src/apiserver/common/paths.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/common/util.go b/backend/src/apiserver/common/util.go index ba2a3db914..aad08416f1 100644 --- a/backend/src/apiserver/common/util.go +++ b/backend/src/apiserver/common/util.go @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/common/util_test.go b/backend/src/apiserver/common/util_test.go index 5ba399f6d3..305212fca7 100644 --- a/backend/src/apiserver/common/util_test.go +++ b/backend/src/apiserver/common/util_test.go @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/config/config.json b/backend/src/apiserver/config/config.json index 230dc1070e..4cbea67762 100644 --- a/backend/src/apiserver/config/config.json +++ b/backend/src/apiserver/config/config.json @@ -3,7 +3,8 @@ "DriverName": "mysql", "DataSourceName": "", "DBName": "mlpipeline", - "GroupConcatMaxLen": "4194304" + "GroupConcatMaxLen": "4194304", + "ConMaxLifeTimeSec": "120" }, "ObjectStoreConfig": { "AccessKey": "minio", @@ -17,6 +18,7 @@ "DefaultPipelineRunnerServiceAccount": "pipeline-runner", "CacheEnabled": "true", "CRON_SCHEDULE_TIMEZONE": "UTC", - "CACHE_IMAGE": "gcr.io/google-containers/busybox" + "CACHE_IMAGE": "gcr.io/google-containers/busybox", + "CACHE_NODE_RESTRICTIONS": "false" } diff --git a/backend/src/apiserver/filter/filter.go b/backend/src/apiserver/filter/filter.go index cc4e6657d8..c5b7fff315 100644 --- a/backend/src/apiserver/filter/filter.go +++ b/backend/src/apiserver/filter/filter.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/filter/filter_test.go b/backend/src/apiserver/filter/filter_test.go index f4bcdd7125..63180f1a94 100644 --- a/backend/src/apiserver/filter/filter_test.go +++ b/backend/src/apiserver/filter/filter_test.go @@ -2,6 +2,7 @@ package filter import ( "encoding/json" + "google.golang.org/protobuf/testing/protocmp" "testing" "github.com/Masterminds/squirrel" @@ -347,7 +348,7 @@ func TestUnmarshalJSON(t *testing.T) { got := &Filter{} err := json.Unmarshal([]byte(in), got) - if err != nil || !cmp.Equal(got, want, cmp.AllowUnexported(Filter{})) { + if err != nil || !cmp.Equal(got, want, cmpopts.EquateEmpty(), protocmp.Transform(),cmp.AllowUnexported(Filter{})) { t.Errorf("json.Unmarshal(%+v):\nGot: %v, Error: %v\nWant:\n%+v, Error: nil\nDiff:%s\n", in, got, err, want, cmp.Diff(want, got, cmp.AllowUnexported(Filter{}))) } } diff --git a/backend/src/apiserver/interceptor.go b/backend/src/apiserver/interceptor.go index a26df338e1..551c335037 100644 --- a/backend/src/apiserver/interceptor.go +++ b/backend/src/apiserver/interceptor.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/list/list.go b/backend/src/apiserver/list/list.go index f9c357668b..f995322827 100644 --- a/backend/src/apiserver/list/list.go +++ b/backend/src/apiserver/list/list.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/list/list_test.go b/backend/src/apiserver/list/list_test.go index 8ad4667914..54e3f04014 100644 --- a/backend/src/apiserver/list/list_test.go +++ b/backend/src/apiserver/list/list_test.go @@ -1,6 +1,7 @@ package list import ( + "google.golang.org/protobuf/testing/protocmp" "reflect" "strings" "testing" @@ -196,7 +197,7 @@ func TestNextPageToken_ValidTokens(t *testing.T) { for _, test := range tests { got, err := test.inOpts.nextPageToken(l) - if !cmp.Equal(got, test.want, cmp.AllowUnexported(filter.Filter{})) || err != nil { + if !cmp.Equal(got, test.want, cmpopts.EquateEmpty(), protocmp.Transform(),cmp.AllowUnexported(filter.Filter{})) || err != nil { t.Errorf("nextPageToken(%+v, %+v) =\nGot: %+v, %+v\nWant: %+v, <nil>\nDiff:\n%s", test.inOpts, l, got, err, test.want, cmp.Diff(test.want, got)) } @@ -467,6 +468,7 @@ func TestNewOptions_ValidFilter(t *testing.T) { } opts := []cmp.Option{ + cmpopts.EquateEmpty(), protocmp.Transform(), cmp.AllowUnexported(Options{}), cmp.AllowUnexported(filter.Filter{}), } @@ -711,7 +713,7 @@ func TestTokenSerialization(t *testing.T) { got := &token{} got.unmarshal(s) - if !cmp.Equal(got, test.want, cmp.AllowUnexported(filter.Filter{})) { + if !cmp.Equal(got, test.want, cmpopts.EquateEmpty(), protocmp.Transform(),cmp.AllowUnexported(filter.Filter{})) { t.Errorf("token.unmarshal(%q) =\nGot: %+v\nWant: %+v\nDiff:\n%s", s, got, test.want, cmp.Diff(test.want, got, cmp.AllowUnexported(filter.Filter{}))) } diff --git a/backend/src/apiserver/main.go b/backend/src/apiserver/main.go index fa220bb319..712561f076 100644 --- a/backend/src/apiserver/main.go +++ b/backend/src/apiserver/main.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -95,6 +95,7 @@ func startRpcServer(resourceManager *resource.ResourceManager) { api.RegisterPipelineServiceServer(s, server.NewPipelineServer(resourceManager, &server.PipelineServerOptions{CollectMetrics: *collectMetricsFlag})) api.RegisterExperimentServiceServer(s, server.NewExperimentServer(resourceManager, &server.ExperimentServerOptions{CollectMetrics: *collectMetricsFlag})) api.RegisterRunServiceServer(s, server.NewRunServer(resourceManager, &server.RunServerOptions{CollectMetrics: *collectMetricsFlag})) + api.RegisterTaskServiceServer(s, server.NewTaskServer(resourceManager)) api.RegisterJobServiceServer(s, server.NewJobServer(resourceManager, &server.JobServerOptions{CollectMetrics: *collectMetricsFlag})) api.RegisterReportServiceServer(s, server.NewReportServer(resourceManager)) api.RegisterVisualizationServiceServer( @@ -127,6 +128,7 @@ func startHttpProxy(resourceManager *resource.ResourceManager) { registerHttpHandlerFromEndpoint(api.RegisterExperimentServiceHandlerFromEndpoint, "ExperimentService", ctx, runtimeMux) registerHttpHandlerFromEndpoint(api.RegisterJobServiceHandlerFromEndpoint, "JobService", ctx, runtimeMux) registerHttpHandlerFromEndpoint(api.RegisterRunServiceHandlerFromEndpoint, "RunService", ctx, runtimeMux) + registerHttpHandlerFromEndpoint(api.RegisterTaskServiceHandlerFromEndpoint, "TaskService", ctx, runtimeMux) registerHttpHandlerFromEndpoint(api.RegisterReportServiceHandlerFromEndpoint, "ReportService", ctx, runtimeMux) registerHttpHandlerFromEndpoint(api.RegisterVisualizationServiceHandlerFromEndpoint, "Visualization", ctx, runtimeMux) registerHttpHandlerFromEndpoint(api.RegisterAuthServiceHandlerFromEndpoint, "AuthService", ctx, runtimeMux) diff --git a/backend/src/apiserver/model/db_status.go b/backend/src/apiserver/model/db_status.go index 27799b4dd8..05b64a19b8 100644 --- a/backend/src/apiserver/model/db_status.go +++ b/backend/src/apiserver/model/db_status.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/model/default_experiment.go b/backend/src/apiserver/model/default_experiment.go index 3c8a0ed650..ec90afeda0 100644 --- a/backend/src/apiserver/model/default_experiment.go +++ b/backend/src/apiserver/model/default_experiment.go @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/model/job.go b/backend/src/apiserver/model/job.go index 376132f534..6328f357ed 100644 --- a/backend/src/apiserver/model/job.go +++ b/backend/src/apiserver/model/job.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/model/listable_model.go b/backend/src/apiserver/model/listable_model.go index df8b515bed..c3c18cd445 100644 --- a/backend/src/apiserver/model/listable_model.go +++ b/backend/src/apiserver/model/listable_model.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/model/pipeline.go b/backend/src/apiserver/model/pipeline.go index 7785407fba..67393d918c 100644 --- a/backend/src/apiserver/model/pipeline.go +++ b/backend/src/apiserver/model/pipeline.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/model/pipeline_spec.go b/backend/src/apiserver/model/pipeline_spec.go index 9504a4cd83..dfa4ecf2cc 100644 --- a/backend/src/apiserver/model/pipeline_spec.go +++ b/backend/src/apiserver/model/pipeline_spec.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/model/pipeline_version.go b/backend/src/apiserver/model/pipeline_version.go index 8eca8670aa..ef6c49613c 100644 --- a/backend/src/apiserver/model/pipeline_version.go +++ b/backend/src/apiserver/model/pipeline_version.go @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -42,6 +42,7 @@ type PipelineVersion struct { Status PipelineVersionStatus `gorm:"column:Status; not null"` // Code source url links to the pipeline version's definition in repo. CodeSourceUrl string `gorm:"column:CodeSourceUrl;"` + Description string `gorm:"column:Description; not null; size:65535"` // Set size to large number so it will be stored as longtext } func (p PipelineVersion) GetValueOfPrimaryKey() string { diff --git a/backend/src/apiserver/model/resource_reference.go b/backend/src/apiserver/model/resource_reference.go index ca1331be0f..5cfdcd4c33 100644 --- a/backend/src/apiserver/model/resource_reference.go +++ b/backend/src/apiserver/model/resource_reference.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/model/resource_reference_test.go b/backend/src/apiserver/model/resource_reference_test.go index afc05a89ad..89df5cbe6d 100644 --- a/backend/src/apiserver/model/resource_reference_test.go +++ b/backend/src/apiserver/model/resource_reference_test.go @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/model/run.go b/backend/src/apiserver/model/run.go index 4184718571..cf62ff9811 100644 --- a/backend/src/apiserver/model/run.go +++ b/backend/src/apiserver/model/run.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/model/task.go b/backend/src/apiserver/model/task.go new file mode 100644 index 0000000000..8193c344d5 --- /dev/null +++ b/backend/src/apiserver/model/task.go @@ -0,0 +1,77 @@ +package model + +type Task struct { + UUID string `gorm:"column:UUID; not null; primary_key"` + Namespace string `gorm:"column:Namespace; not null;"` + PipelineName string `gorm:"column:PipelineName; not null;"` + RunUUID string `gorm:"column:RunUUID; not null;"` + MLMDExecutionID string `gorm:"column:MLMDExecutionID; not null;"` + CreatedTimestamp int64 `gorm:"column:CreatedTimestamp; not null"` + FinishedTimestamp int64 `gorm:"column:FinishedTimestamp"` + Fingerprint string `gorm:"column:Fingerprint; not null;"` +} + +func (t Task) PrimaryKeyColumnName() string { + return "UUID" +} + +func (t Task) DefaultSortField() string { + return "CreatedTimestamp" +} + +func (t Task) APIToModelFieldMap() map[string]string { + return taskAPIToModelFieldMap +} + +func (t Task) GetModelName() string { + return "tasks" +} + +func (t Task) GetSortByFieldPrefix(s string) string { + return "tasks." +} + +func (t Task) GetKeyFieldPrefix() string { + return "tasks." +} + +var taskAPIToModelFieldMap = map[string]string{ + "id": "UUID", + "namespace": "Namespace", + "pipelineName": "PipelineName", + "runId": "RunUUID ", + "mlmdExecutionID": "MLMDExecutionID", + "created_at": "CreatedTimestamp", + "finished_at": "FinishedTimestamp", + "fingerprint": "Fingerprint", +} + +func (t Task) GetField(name string) (string, bool) { + if field, ok := taskAPIToModelFieldMap[name]; ok { + return field, true + } + return "", false +} + +func (t Task) GetFieldValue(name string) interface{} { + switch name { + case "UUID": + return t.UUID + case "Namespace": + return t.Namespace + case "PipelineName": + return t.PipelineName + case "RunUUID": + return t.RunUUID + case "MLMDExecutionID": + return t.MLMDExecutionID + case "CreatedTimestamp": + return t.CreatedTimestamp + case "FinishedTimestamp": + return t.FinishedTimestamp + case "Fingerprint": + return t.Fingerprint + default: + return nil + } +} diff --git a/backend/src/apiserver/resource/client_manager_fake.go b/backend/src/apiserver/resource/client_manager_fake.go index 43ecfb8260..68a44ddc40 100644 --- a/backend/src/apiserver/resource/client_manager_fake.go +++ b/backend/src/apiserver/resource/client_manager_fake.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -39,6 +39,7 @@ type FakeClientManager struct { pipelineStore storage.PipelineStoreInterface jobStore storage.JobStoreInterface runStore storage.RunStoreInterface + taskStore storage.TaskStoreInterface resourceReferenceStore storage.ResourceReferenceStoreInterface dBStatusStore storage.DBStatusStoreInterface defaultExperimentStore storage.DefaultExperimentStoreInterface @@ -78,6 +79,7 @@ func NewFakeClientManager(time util.TimeInterface, uuid util.UUIDGeneratorInterf pipelineStore: storage.NewPipelineStore(db, time, uuid), jobStore: storage.NewJobStore(db, time), runStore: storage.NewRunStore(db, time), + taskStore: storage.NewTaskStore(db, time, uuid), resourceReferenceStore: storage.NewResourceReferenceStore(db), dBStatusStore: storage.NewDBStatusStore(db), defaultExperimentStore: storage.NewDefaultExperimentStore(db), @@ -142,6 +144,10 @@ func (f *FakeClientManager) RunStore() storage.RunStoreInterface { return f.runStore } +func (f *FakeClientManager) TaskStore() storage.TaskStoreInterface { + return f.taskStore +} + func (f *FakeClientManager) ResourceReferenceStore() storage.ResourceReferenceStoreInterface { return f.resourceReferenceStore } diff --git a/backend/src/apiserver/resource/model_converter.go b/backend/src/apiserver/resource/model_converter.go index 7b71ca80f6..b070e209b2 100644 --- a/backend/src/apiserver/resource/model_converter.go +++ b/backend/src/apiserver/resource/model_converter.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/resource/model_converter_test.go b/backend/src/apiserver/resource/model_converter_test.go index b0bfeaf1eb..6814966c61 100644 --- a/backend/src/apiserver/resource/model_converter_test.go +++ b/backend/src/apiserver/resource/model_converter_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/resource/resource_manager.go b/backend/src/apiserver/resource/resource_manager.go index f5ba877a0d..1c6410b208 100644 --- a/backend/src/apiserver/resource/resource_manager.go +++ b/backend/src/apiserver/resource/resource_manager.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -40,6 +40,7 @@ import ( "github.com/prometheus/client_golang/prometheus/promauto" workflowapi "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1" workflowclient "github.com/tektoncd/pipeline/pkg/client/clientset/versioned/typed/pipeline/v1beta1" + "google.golang.org/grpc/codes" authorizationv1 "k8s.io/api/authorization/v1" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -72,6 +73,7 @@ type ClientManagerInterface interface { PipelineStore() storage.PipelineStoreInterface JobStore() storage.JobStoreInterface RunStore() storage.RunStoreInterface + TaskStore() storage.TaskStoreInterface ResourceReferenceStore() storage.ResourceReferenceStoreInterface DBStatusStore() storage.DBStatusStoreInterface DefaultExperimentStore() storage.DefaultExperimentStoreInterface @@ -92,6 +94,7 @@ type ResourceManager struct { pipelineStore storage.PipelineStoreInterface jobStore storage.JobStoreInterface runStore storage.RunStoreInterface + taskStore storage.TaskStoreInterface resourceReferenceStore storage.ResourceReferenceStoreInterface dBStatusStore storage.DBStatusStoreInterface defaultExperimentStore storage.DefaultExperimentStoreInterface @@ -114,6 +117,7 @@ func NewResourceManager(clientManager ClientManagerInterface) *ResourceManager { pipelineStore: clientManager.PipelineStore(), jobStore: clientManager.JobStore(), runStore: clientManager.RunStore(), + taskStore: clientManager.TaskStore(), resourceReferenceStore: clientManager.ResourceReferenceStore(), dBStatusStore: clientManager.DBStatusStore(), defaultExperimentStore: clientManager.DefaultExperimentStore(), @@ -166,7 +170,7 @@ func (r *ResourceManager) DeleteExperiment(experimentID string) error { return r.experimentStore.DeleteExperiment(experimentID) } -func (r *ResourceManager) ArchiveExperiment(experimentId string) error { +func (r *ResourceManager) ArchiveExperiment(ctx context.Context, experimentId string) error { // To archive an experiment // (1) update our persistent agent to disable CRDs of jobs in experiment // (2) update database to @@ -262,7 +266,14 @@ func (r *ResourceManager) UpdatePipelineDefaultVersion(pipelineId string, versio func (r *ResourceManager) CreatePipeline(name string, description string, namespace string, pipelineFile []byte) (*model.Pipeline, error) { // Extract the parameter from the pipeline - params, err := util.GetParameters(pipelineFile) + wf, err := util.ValidatePipelineRun(pipelineFile) + if err != nil { + return nil, util.Wrap(err, "Create pipeline failed") + } + if wf.IsV2() { + overrideV2PipelineName(wf, name, namespace) + } + paramsJson, err := util.MarshalParameters(wf.Spec.Params) if err != nil { return nil, util.Wrap(err, "Create pipeline failed") } @@ -271,12 +282,12 @@ func (r *ResourceManager) CreatePipeline(name string, description string, namesp pipeline := &model.Pipeline{ Name: name, Description: description, - Parameters: params, + Parameters: paramsJson, Status: model.PipelineCreating, Namespace: namespace, DefaultVersion: &model.PipelineVersion{ Name: name, - Parameters: params, + Parameters: paramsJson, Status: model.PipelineVersionCreating}} newPipeline, err := r.pipelineStore.CreatePipeline(pipeline) if err != nil { @@ -348,7 +359,7 @@ func (r *ResourceManager) AuthenticateRequest(ctx context.Context) (string, erro return "", utilerrors.NewAggregate(errlist) } -func (r *ResourceManager) CreateRun(apiRun *api.Run) (*model.RunDetail, error) { +func (r *ResourceManager) CreateRun(ctx context.Context, apiRun *api.Run) (*model.RunDetail, error) { // Get workflow from either of the two places: // (1) raw pipeline manifest in pipeline_spec // (2) pipeline version in resource_references @@ -451,6 +462,7 @@ func (r *ResourceManager) CreateRun(apiRun *api.Run) (*model.RunDetail, error) { if err != nil { return nil, util.NewInternalServerError(err, "Tekton Preprocessing Failed") } + workflow.SetLabels(util.LabelKeyWorkflowRunId, runId) // Marking auto-added artifacts as optional. Otherwise most older workflows will start failing after upgrade to Argo 2.3. // TODO: Fix the components to explicitly declare the artifacts they really output. @@ -466,7 +478,7 @@ func (r *ResourceManager) CreateRun(apiRun *api.Run) (*model.RunDetail, error) { // } // Create Tekton pipelineRun CRD resource - newWorkflow, err := r.getWorkflowClient(namespace).Create(context.Background(), workflow.Get(), v1.CreateOptions{}) + newWorkflow, err := r.getWorkflowClient(namespace).Create(ctx, workflow.Get(), v1.CreateOptions{}) wfs, _ := json.Marshal(newWorkflow) glog.Infof(string(wfs)) if err != nil { @@ -501,7 +513,7 @@ func (r *ResourceManager) UnarchiveRun(runId string) error { return r.runStore.UnarchiveRun(runId) } -func (r *ResourceManager) DeleteRun(runID string) error { +func (r *ResourceManager) DeleteRun(ctx context.Context, runID string) error { runDetail, err := r.checkRunExist(runID) if err != nil { return util.Wrap(err, "Delete run failed") @@ -510,7 +522,7 @@ func (r *ResourceManager) DeleteRun(runID string) error { if err != nil { return util.Wrap(err, "Delete run failed") } - err = r.getWorkflowClient(namespace).Delete(context.Background(), runDetail.Name, v1.DeleteOptions{}) + err = r.getWorkflowClient(namespace).Delete(ctx, runDetail.Name, v1.DeleteOptions{}) if err != nil { // API won't need to delete the workflow CR // once persistent agent sync the state to DB and set TTL for it. @@ -523,13 +535,37 @@ func (r *ResourceManager) DeleteRun(runID string) error { return nil } +func (r *ResourceManager) CreateTask(ctx context.Context, apiTask *api.Task) (*model.Task, error) { + uuid, err := r.uuid.NewRandom() + if err != nil { + return nil, util.NewInternalServerError(err, "Failed to generate task ID.") + } + id := uuid.String() + task := model.Task{ + UUID: id, + Namespace: apiTask.Namespace, + PipelineName: apiTask.PipelineName, + RunUUID: apiTask.RunId, + MLMDExecutionID: apiTask.MlmdExecutionID, + CreatedTimestamp: apiTask.CreatedAt.AsTime().Unix(), + FinishedTimestamp: apiTask.FinishedAt.AsTime().Unix(), + Fingerprint: apiTask.Fingerprint, + } + return r.taskStore.CreateTask(&task) +} + +func (r *ResourceManager) ListTasks(filterContext *common.FilterContext, + opts *list.Options) (tasks []*model.Task, total_size int, nextPageToken string, err error) { + return r.taskStore.ListTasks(filterContext, opts) +} + func (r *ResourceManager) ListJobs(filterContext *common.FilterContext, opts *list.Options) (jobs []*model.Job, total_size int, nextPageToken string, err error) { return r.jobStore.ListJobs(filterContext, opts) } // TerminateWorkflow terminates a pipelinerun by setting its status to Cancelled -func TerminateWorkflow(wfClient workflowclient.PipelineRunInterface, name string) error { +func TerminateWorkflow(ctx context.Context, wfClient workflowclient.PipelineRunInterface, name string) error { patchObj := map[string]interface{}{ "spec": map[string]interface{}{ "status": common.GetTerminateStatus(), @@ -542,7 +578,7 @@ func TerminateWorkflow(wfClient workflowclient.PipelineRunInterface, name string } var operation = func() error { - _, err = wfClient.Patch(context.Background(), name, types.MergePatchType, patch, v1.PatchOptions{}) + _, err = wfClient.Patch(ctx, name, types.MergePatchType, patch, v1.PatchOptions{}) return err } var backoffPolicy = backoff.WithMaxRetries(backoff.NewConstantBackOff(100), 10) @@ -550,7 +586,7 @@ func TerminateWorkflow(wfClient workflowclient.PipelineRunInterface, name string return err } -func (r *ResourceManager) TerminateRun(runId string) error { +func (r *ResourceManager) TerminateRun(ctx context.Context, runId string) error { runDetail, err := r.checkRunExist(runId) if err != nil { return util.Wrap(err, "Terminate run failed") @@ -566,14 +602,14 @@ func (r *ResourceManager) TerminateRun(runId string) error { return util.Wrap(err, "Terminate run failed") } - err = TerminateWorkflow(r.getWorkflowClient(namespace), runDetail.Run.Name) + err = TerminateWorkflow(ctx, r.getWorkflowClient(namespace), runDetail.Run.Name) if err != nil { return util.NewInternalServerError(err, "Failed to terminate the run") } return nil } -func (r *ResourceManager) RetryRun(runId string) error { +func (r *ResourceManager) RetryRun(ctx context.Context, runId string) error { runDetail, err := r.checkRunExist(runId) if err != nil { return util.Wrap(err, "Retry run failed") @@ -596,16 +632,16 @@ func (r *ResourceManager) RetryRun(runId string) error { return util.Wrap(err, "Retry run failed.") } - if err = deletePods(r.k8sCoreClient, podsToDelete, namespace); err != nil { + if err = deletePods(ctx, r.k8sCoreClient, podsToDelete, namespace); err != nil { return util.NewInternalServerError(err, "Retry run failed. Failed to clean up the failed pods from previous run.") } // First try to update workflow - updateError := r.updateWorkflow(newWorkflow, namespace) + updateError := r.updateWorkflow(ctx, newWorkflow, namespace) if updateError != nil { // Remove resource version newWorkflow.ResourceVersion = "" - newCreatedWorkflow, createError := r.getWorkflowClient(namespace).Create(context.Background(), newWorkflow.PipelineRun, v1.CreateOptions{}) + newCreatedWorkflow, createError := r.getWorkflowClient(namespace).Create(ctx, newWorkflow.PipelineRun, v1.CreateOptions{}) if createError != nil { return util.NewInternalServerError(createError, "Retry run failed. Failed to create or update the run. Update Error: %s, Create Error: %s", @@ -649,13 +685,13 @@ func (r *ResourceManager) readRunLogFromArchive(run *model.RunDetail, nodeId str return nil } -func (r *ResourceManager) ReadLog(runId string, nodeId string, follow bool, dst io.Writer) error { +func (r *ResourceManager) ReadLog(ctx context.Context, runId string, nodeId string, follow bool, dst io.Writer) error { run, err := r.checkRunExist(runId) if err != nil { return util.NewBadRequestError(errors.New("log cannot be read"), "Run does not exist") } - err = r.readRunLogFromPod(run, nodeId, follow, dst) + err = r.readRunLogFromPod(ctx, run, nodeId, follow, dst) if err != nil && r.logArchive != nil { err = r.readRunLogFromArchive(run, nodeId, dst) } @@ -671,11 +707,11 @@ func (r *ResourceManager) getPodLogOptions(follow bool) corev1.PodLogOptions { } } -func (r *ResourceManager) readRunLogFromPod(run *model.RunDetail, nodeId string, follow bool, dst io.Writer) error { +func (r *ResourceManager) readRunLogFromPod(ctx context.Context, run *model.RunDetail, nodeId string, follow bool, dst io.Writer) error { logOptions := r.getPodLogOptions(follow) req := r.k8sCoreClient.PodClient(run.Namespace).GetLogs(nodeId, &logOptions) - podLogs, err := req.Stream(context.Background()) + podLogs, err := req.Stream(ctx) if err != nil { if !apierrors.IsNotFound(err) { glog.Errorf("Failed to access Pod log: %v", err) @@ -692,15 +728,15 @@ func (r *ResourceManager) readRunLogFromPod(run *model.RunDetail, nodeId string, return nil } -func (r *ResourceManager) updateWorkflow(newWorkflow *util.Workflow, namespace string) error { +func (r *ResourceManager) updateWorkflow(ctx context.Context, newWorkflow *util.Workflow, namespace string) error { // If fail to get the workflow, return error. - latestWorkflow, err := r.getWorkflowClient(namespace).Get(context.Background(), newWorkflow.Name, v1.GetOptions{}) + latestWorkflow, err := r.getWorkflowClient(namespace).Get(ctx, newWorkflow.Name, v1.GetOptions{}) if err != nil { return err } // Update the workflow's resource version to latest. newWorkflow.ResourceVersion = latestWorkflow.ResourceVersion - _, err = r.getWorkflowClient(namespace).Update(context.Background(), newWorkflow.PipelineRun, v1.UpdateOptions{}) + _, err = r.getWorkflowClient(namespace).Update(ctx, newWorkflow.PipelineRun, v1.UpdateOptions{}) return err } @@ -708,7 +744,7 @@ func (r *ResourceManager) GetJob(id string) (*model.Job, error) { return r.jobStore.GetJob(id) } -func (r *ResourceManager) CreateJob(apiJob *api.Job) (*model.Job, error) { +func (r *ResourceManager) CreateJob(ctx context.Context, apiJob *api.Job) (*model.Job, error) { // Get workflow from either of the two places: // (1) raw pipeline manifest in pipeline_spec // (2) pipeline version in resource_references @@ -810,7 +846,7 @@ func (r *ResourceManager) CreateJob(apiJob *api.Job) (*model.Job, error) { // } // } - newScheduledWorkflow, err := r.getScheduledWorkflowClient(namespace).Create(context.Background(), scheduledWorkflow, v1.CreateOptions{}) + newScheduledWorkflow, err := r.getScheduledWorkflowClient(namespace).Create(ctx, scheduledWorkflow, v1.CreateOptions{}) if err != nil { return nil, util.NewInternalServerError(err, "Failed to create a scheduled workflow for (%s)", scheduledWorkflow.Name) } @@ -826,11 +862,11 @@ func (r *ResourceManager) CreateJob(apiJob *api.Job) (*model.Job, error) { return r.jobStore.CreateJob(job) } -func (r *ResourceManager) EnableJob(jobID string, enabled bool) error { +func (r *ResourceManager) EnableJob(ctx context.Context, jobID string, enabled bool) error { var job *model.Job var err error if enabled { - job, err = r.checkJobExist(jobID) + job, err = r.checkJobExist(ctx, jobID) } else { // We can skip custom resource existence verification, because disabling // the job do not need to care about it. @@ -861,13 +897,13 @@ func (r *ResourceManager) EnableJob(jobID string, enabled bool) error { return nil } -func (r *ResourceManager) DeleteJob(jobID string) error { +func (r *ResourceManager) DeleteJob(ctx context.Context, jobID string) error { job, err := r.jobStore.GetJob(jobID) if err != nil { return util.Wrap(err, "Delete job failed") } - err = r.getScheduledWorkflowClient(job.Namespace).Delete(context.Background(), job.Name, v1.DeleteOptions{}) + err = r.getScheduledWorkflowClient(job.Namespace).Delete(ctx, job.Name, v1.DeleteOptions{}) if err != nil { if !util.IsNotFound(err) { // For any error other than NotFound @@ -887,7 +923,7 @@ func (r *ResourceManager) DeleteJob(jobID string) error { return nil } -func (r *ResourceManager) ReportWorkflowResource(workflow *util.Workflow) error { +func (r *ResourceManager) ReportWorkflowResource(ctx context.Context, workflow *util.Workflow) error { if _, ok := workflow.ObjectMeta.Labels[util.LabelKeyWorkflowRunId]; !ok { // Skip reporting if the workflow doesn't have the run id label return util.NewInvalidInputError("Workflow[%s] missing the Run ID label", workflow.Name) @@ -900,7 +936,7 @@ func (r *ResourceManager) ReportWorkflowResource(workflow *util.Workflow) error if workflow.PersistedFinalState() { // If workflow's final state has being persisted, the workflow should be garbage collected. - err := r.getWorkflowClient(workflow.Namespace).Delete(context.Background(), workflow.Name, v1.DeleteOptions{}) + err := r.getWorkflowClient(workflow.Namespace).Delete(ctx, workflow.Name, v1.DeleteOptions{}) if err != nil { // A fix for kubeflow/pipelines#4484, persistence agent might have an outdated item in its workqueue, so it will // report workflows that no longer exist. It's important to return a not found error, so that persistence @@ -920,9 +956,27 @@ func (r *ResourceManager) ReportWorkflowResource(workflow *util.Workflow) error if jobId == "" { // If a run doesn't have job ID, it's a one-time run created by Pipeline API server. // In this case the DB entry should already been created when argo workflow CR is created. - err := r.runStore.UpdateRun(runId, condition, workflow.FinishedAt(), workflow.ToStringForStore()) - if err != nil { - return util.Wrap(err, "Failed to update the run.") + if updateError := r.runStore.UpdateRun(runId, condition, workflow.FinishedAt(), workflow.ToStringForStore()); updateError != nil { + if !util.IsUserErrorCodeMatch(updateError, codes.NotFound) { + return util.Wrap(updateError, "Failed to update the run.") + } + // Handle run not found in run store error. + // To avoid letting the workflow leak for ever, we need to GC it when its record does not exist in KFP DB. + glog.Errorf("Cannot find reported workflow name=%q namespace=%q runId=%q in run store. "+ + "Deleting the workflow to avoid resource leaking. "+ + "This can be caused by installing two KFP instances that try to manage the same workflows "+ + "or an unknown bug. If you encounter this, recommend reporting more details in https://github.com/kubeflow/pipelines/issues/6189.", + workflow.GetName(), workflow.GetNamespace(), runId) + if err := r.getWorkflowClient(workflow.Namespace).Delete(ctx, workflow.Name, v1.DeleteOptions{}); err != nil { + if util.IsNotFound(err) { + return util.NewNotFoundError(err, "Failed to delete the obsolete workflow for run %s", runId) + } + return util.NewInternalServerError(err, "Failed to delete the obsolete workflow for run %s", runId) + } + // TODO(jingzhang36): find a proper way to pass collectMetricsFlag here. + workflowGCCounter.Inc() + // Note, persistence agent will not retry reporting this workflow again, because updateError is a not found error. + return util.Wrapf(updateError, "Failed to report workflow name=%q namespace=%q runId=%q", workflow.GetName(), workflow.GetNamespace(), runId) } } else { // Get the experiment resource reference for job. @@ -979,7 +1033,7 @@ func (r *ResourceManager) ReportWorkflowResource(workflow *util.Workflow) error } if workflow.IsInFinalState() { - err := AddWorkflowLabel(r.getWorkflowClient(workflow.Namespace), workflow.Name, util.LabelKeyWorkflowPersistedFinalState, "true") + err := AddWorkflowLabel(ctx, r.getWorkflowClient(workflow.Namespace), workflow.Name, util.LabelKeyWorkflowPersistedFinalState, "true") if err != nil { message := fmt.Sprintf("Failed to add PersistedFinalState label to workflow %s", workflow.GetName()) // A fix for kubeflow/pipelines#4484, persistence agent might have an outdated item in its workqueue, so it will @@ -997,7 +1051,7 @@ func (r *ResourceManager) ReportWorkflowResource(workflow *util.Workflow) error } // AddWorkflowLabel add label for a workflow -func AddWorkflowLabel(wfClient workflowclient.PipelineRunInterface, name string, labelKey string, labelValue string) error { +func AddWorkflowLabel(ctx context.Context, wfClient workflowclient.PipelineRunInterface, name string, labelKey string, labelValue string) error { patchObj := map[string]interface{}{ "metadata": map[string]interface{}{ "labels": map[string]interface{}{ @@ -1012,7 +1066,7 @@ func AddWorkflowLabel(wfClient workflowclient.PipelineRunInterface, name string, } var operation = func() error { - _, err = wfClient.Patch(context.Background(), name, types.MergePatchType, patch, v1.PatchOptions{}) + _, err = wfClient.Patch(ctx, name, types.MergePatchType, patch, v1.PatchOptions{}) return err } var backoffPolicy = backoff.WithMaxRetries(backoff.NewConstantBackOff(100), 10) @@ -1027,13 +1081,13 @@ func (r *ResourceManager) ReportScheduledWorkflowResource(swf *util.ScheduledWor // checkJobExist The Kubernetes API doesn't support CRUD by UID. This method // retrieve the job metadata from the database, then retrieve the CR // using the job name, and compare the given job id is same as the CR. -func (r *ResourceManager) checkJobExist(jobID string) (*model.Job, error) { +func (r *ResourceManager) checkJobExist(ctx context.Context, jobID string) (*model.Job, error) { job, err := r.jobStore.GetJob(jobID) if err != nil { return nil, util.Wrap(err, "Check job exist failed") } - scheduledWorkflow, err := r.getScheduledWorkflowClient(job.Namespace).Get(context.Background(), job.Name, v1.GetOptions{}) + scheduledWorkflow, err := r.getScheduledWorkflowClient(job.Namespace).Get(ctx, job.Name, v1.GetOptions{}) if err != nil { return nil, util.NewInternalServerError(err, "Check job exist failed") } @@ -1217,12 +1271,6 @@ func (r *ResourceManager) getDefaultSA() string { } func (r *ResourceManager) CreatePipelineVersion(apiVersion *api.PipelineVersion, pipelineFile []byte, updateDefaultVersion bool) (*model.PipelineVersion, error) { - // Extract the parameters from the pipeline - params, err := util.GetParameters(pipelineFile) - if err != nil { - return nil, util.Wrap(err, "Create pipeline version failed") - } - // Extract pipeline id var pipelineId = "" for _, resourceReference := range apiVersion.ResourceReferences { @@ -1231,7 +1279,24 @@ func (r *ResourceManager) CreatePipelineVersion(apiVersion *api.PipelineVersion, } } if len(pipelineId) == 0 { - return nil, util.Wrap(err, "Create pipeline version failed due to missing pipeline id") + return nil, util.NewInvalidInputError("Create pipeline version failed due to missing pipeline id") + } + + // Extract the parameters from the pipeline & override pipeline name parameter. + wf, err := util.ValidatePipelineRun(pipelineFile) + if err != nil { + return nil, util.Wrap(err, "Create pipeline version failed") + } + if wf.IsV2() { + pipeline, err := r.GetPipeline(pipelineId) + if err != nil { + return nil, util.Wrap(err, "Create pipeline version failed") + } + overrideV2PipelineName(wf, pipeline.Name, pipeline.Namespace) + } + paramsJson, err := util.MarshalParameters(wf.Spec.Params) + if err != nil { + return nil, util.Wrap(err, "Create pipeline version failed") } // Construct model.PipelineVersion @@ -1239,8 +1304,9 @@ func (r *ResourceManager) CreatePipelineVersion(apiVersion *api.PipelineVersion, Name: apiVersion.Name, PipelineId: pipelineId, Status: model.PipelineVersionCreating, - Parameters: params, + Parameters: paramsJson, CodeSourceUrl: apiVersion.CodeSourceUrl, + Description: apiVersion.Description, } version, err = r.pipelineStore.CreatePipelineVersion(version, updateDefaultVersion) if err != nil { @@ -1313,7 +1379,7 @@ func (r *ResourceManager) GetPipelineVersionTemplate(versionId string) ([]byte, return template, nil } -func (r *ResourceManager) IsRequestAuthorized(userIdentity string, resourceAttributes *authorizationv1.ResourceAttributes) error { +func (r *ResourceManager) IsRequestAuthorized(ctx context.Context, userIdentity string, resourceAttributes *authorizationv1.ResourceAttributes) error { result, err := r.subjectAccessReviewClient.Create( context.Background(), &authorizationv1.SubjectAccessReview{ diff --git a/backend/src/apiserver/resource/resource_manager_test.go b/backend/src/apiserver/resource/resource_manager_test.go index cea29f9972..a394f46725 100644 --- a/backend/src/apiserver/resource/resource_manager_test.go +++ b/backend/src/apiserver/resource/resource_manager_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ import ( "github.com/kubeflow/pipelines/backend/src/apiserver/client" "github.com/kubeflow/pipelines/backend/src/apiserver/common" "github.com/kubeflow/pipelines/backend/src/apiserver/model" + "github.com/kubeflow/pipelines/backend/src/apiserver/storage" "github.com/kubeflow/pipelines/backend/src/common/util" "github.com/pkg/errors" "github.com/spf13/viper" @@ -127,6 +128,48 @@ func initWithExperimentAndPipeline(t *testing.T) (*FakeClientManager, *ResourceM return store, manager, experiment, pipeline } +func initWithExperimentAndPipelineAndRun(t *testing.T) (*FakeClientManager, *ResourceManager, *model.Experiment, *model.Pipeline, *model.RunDetail) { + store, manager, exp, pipeline := initWithExperimentAndPipeline(t) + // Create a new pipeline version with UUID being FakeUUID. + pipelineStore, ok := store.pipelineStore.(*storage.PipelineStore) + assert.True(t, ok) + pipelineStore.SetUUIDGenerator(util.NewFakeUUIDGeneratorOrFatal(FakeUUIDOne, nil)) + _, err := manager.CreatePipelineVersion(&api.PipelineVersion{ + Name: "version_for_run", + ResourceReferences: []*api.ResourceReference{ + &api.ResourceReference{ + Key: &api.ResourceKey{ + Id: pipeline.UUID, + Type: api.ResourceType_PIPELINE, + }, + Relationship: api.Relationship_OWNER, + }, + }, + }, []byte(testWorkflow.ToStringForStore()), true) + assert.Nil(t, err) + + // The pipeline specified via pipeline id will be converted to this + // pipeline's default version, which will be used to create run. + apiRun := &api.Run{ + Name: "run1", + PipelineSpec: &api.PipelineSpec{ + PipelineId: pipeline.UUID, + Parameters: []*api.Parameter{ + {Name: "param1", Value: "world"}, + }, + }, + ResourceReferences: []*api.ResourceReference{ + { + Key: &api.ResourceKey{Type: api.ResourceType_EXPERIMENT, Id: exp.UUID}, + Relationship: api.Relationship_OWNER, + }, + }, + } + runDetail, err := manager.CreateRun(context.Background(), apiRun) + assert.Nil(t, err) + return store, manager, exp, pipeline, runDetail +} + // Util function to create an initial state with pipeline uploaded func initWithJob(t *testing.T) (*FakeClientManager, *ResourceManager, *model.Job) { store, manager, exp := initWithExperiment(t) @@ -141,7 +184,7 @@ func initWithJob(t *testing.T) (*FakeClientManager, *ResourceManager, *model.Job }, }, } - j, err := manager.CreateJob(job) + j, err := manager.CreateJob(context.Background(), job) assert.Nil(t, err) return store, manager, j @@ -166,7 +209,7 @@ func initWithPatchedRun(t *testing.T) (*FakeClientManager, *ResourceManager, *mo }, }, } - runDetail, err := manager.CreateRun(apiRun) + runDetail, err := manager.CreateRun(context.Background(), apiRun) assert.Nil(t, err) return store, manager, runDetail } @@ -240,7 +283,7 @@ func TestCreateRun_EmptyPipelineSpec(t *testing.T) { }, }, } - _, err := manager.CreateRun(apiRun) + _, err := manager.CreateRun(context.Background(), apiRun) assert.NotNil(t, err) assert.Contains(t, err.Error(), "Failed to fetch workflow spec") } @@ -258,7 +301,7 @@ func TestCreateRun_InvalidWorkflowSpec(t *testing.T) { }, }, } - _, err := manager.CreateRun(apiRun) + _, err := manager.CreateRun(context.Background(), apiRun) assert.NotNil(t, err) assert.Contains(t, err.Error(), "Failed to unmarshal workflow spec manifest") } @@ -269,7 +312,7 @@ func TestDeleteRun_RunNotExist(t *testing.T) { store := NewFakeClientManagerOrFatal(util.NewFakeTimeForEpoch()) defer store.Close() manager := NewResourceManager(store) - err := manager.DeleteRun("1") + err := manager.DeleteRun(context.Background(), "1") assert.Equal(t, codes.NotFound, err.(*util.UserError).ExternalStatusCode()) assert.Contains(t, err.Error(), "not found") } @@ -336,7 +379,7 @@ func TestTerminateRun_RunNotExist(t *testing.T) { store := NewFakeClientManagerOrFatal(util.NewFakeTimeForEpoch()) defer store.Close() manager := NewResourceManager(store) - err := manager.TerminateRun("1") + err := manager.TerminateRun(context.Background(), "1") assert.Equal(t, codes.NotFound, err.(*util.UserError).ExternalStatusCode()) assert.Contains(t, err.Error(), "not found") } @@ -347,7 +390,7 @@ func TestRetryRun_RunNotExist(t *testing.T) { store := NewFakeClientManagerOrFatal(util.NewFakeTimeForEpoch()) defer store.Close() manager := NewResourceManager(store) - err := manager.RetryRun("1") + err := manager.RetryRun(context.Background(), "1") assert.Equal(t, codes.NotFound, err.(*util.UserError).ExternalStatusCode()) assert.Contains(t, err.Error(), "not found") } @@ -390,7 +433,7 @@ func TestEnableJob_JobNotExist(t *testing.T) { store := NewFakeClientManagerOrFatal(util.NewFakeTimeForEpoch()) defer store.Close() manager := NewResourceManager(store) - err := manager.EnableJob("1", false) + err := manager.EnableJob(context.Background(), "1", false) assert.Equal(t, codes.NotFound, err.(*util.UserError).ExternalStatusCode()) assert.Contains(t, err.Error(), "Job 1 not found") } @@ -399,7 +442,7 @@ func TestEnableJob_CustomResourceFailure(t *testing.T) { store, manager, job := initWithJob(t) defer store.Close() manager.swfClient = client.NewFakeSwfClientWithBadWorkflow() - err := manager.EnableJob(job.UUID, true) + err := manager.EnableJob(context.Background(), job.UUID, true) assert.Equal(t, codes.Internal, err.(*util.UserError).ExternalStatusCode()) assert.Contains(t, err.Error(), "Check job exist failed: some error") } @@ -411,7 +454,7 @@ func TestEnableJob_CustomResourceNotFound(t *testing.T) { // Explicitly delete it to simulate the situation. manager.getScheduledWorkflowClient(job.Namespace).Delete(context.Background(), job.Name, v1.DeleteOptions{}) // When swf CR is missing, enabling the job needs to fail. - err := manager.EnableJob(job.UUID, true) + err := manager.EnableJob(context.Background(), job.UUID, true) assert.Equal(t, codes.Internal, err.(*util.UserError).ExternalStatusCode()) assert.Contains(t, err.Error(), "Check job exist failed") assert.Contains(t, err.Error(), "not found") @@ -425,7 +468,7 @@ func TestDisableJob_CustomResourceNotFound(t *testing.T) { // The swf CR can be missing when user reinstalled KFP using existing DB data. // Explicitly delete it to simulate the situation. manager.getScheduledWorkflowClient(job.Namespace).Delete(context.Background(), job.Name, v1.DeleteOptions{}) - err := manager.EnableJob(job.UUID, false) + err := manager.EnableJob(context.Background(), job.UUID, false) require.Nil(t, err, "Disabling the job should succeed even when the custom resource is missing.") job, err = manager.GetJob(job.UUID) require.Nil(t, err) @@ -436,7 +479,7 @@ func TestEnableJob_DbFailure(t *testing.T) { store, manager, job := initWithJob(t) defer store.Close() store.DB().Close() - err := manager.EnableJob(job.UUID, false) + err := manager.EnableJob(context.Background(), job.UUID, false) assert.Equal(t, codes.Internal, err.(*util.UserError).ExternalStatusCode()) assert.Contains(t, err.Error(), "database is closed") } @@ -444,7 +487,7 @@ func TestEnableJob_DbFailure(t *testing.T) { func TestDeleteJob(t *testing.T) { store, manager, job := initWithJob(t) defer store.Close() - err := manager.DeleteJob(job.UUID) + err := manager.DeleteJob(context.Background(), job.UUID) assert.Nil(t, err) _, err = manager.GetJob(job.UUID) @@ -456,7 +499,7 @@ func TestDeleteJob_JobNotExist(t *testing.T) { store := NewFakeClientManagerOrFatal(util.NewFakeTimeForEpoch()) defer store.Close() manager := NewResourceManager(store) - err := manager.DeleteJob("1") + err := manager.DeleteJob(context.Background(), "1") assert.Equal(t, codes.NotFound, err.(*util.UserError).ExternalStatusCode()) assert.Contains(t, err.Error(), "Job 1 not found") } @@ -466,7 +509,7 @@ func TestDeleteJob_CustomResourceFailure(t *testing.T) { defer store.Close() manager.swfClient = client.NewFakeSwfClientWithBadWorkflow() - err := manager.DeleteJob(job.UUID) + err := manager.DeleteJob(context.Background(), job.UUID) assert.Equal(t, codes.Internal, err.(*util.UserError).ExternalStatusCode()) assert.Contains(t, err.Error(), "Delete job CR failed: some error") } @@ -479,7 +522,7 @@ func TestDeleteJob_CustomResourceNotFound(t *testing.T) { manager.getScheduledWorkflowClient(job.Namespace).Delete(context.Background(), job.Name, v1.DeleteOptions{}) // Now deleting job should still succeed when the swf CR is already deleted. - err := manager.DeleteJob(job.UUID) + err := manager.DeleteJob(context.Background(), job.UUID) assert.Nil(t, err) // And verify Job has been deleted from DB too. @@ -494,7 +537,7 @@ func TestDeleteJob_DbFailure(t *testing.T) { defer store.Close() store.DB().Close() - err := manager.DeleteJob(job.UUID) + err := manager.DeleteJob(context.Background(), job.UUID) assert.Equal(t, codes.Internal, err.(*util.UserError).ExternalStatusCode()) assert.Contains(t, err.Error(), "database is closed") } diff --git a/backend/src/apiserver/resource/resource_manager_util.go b/backend/src/apiserver/resource/resource_manager_util.go index 0fd8a7d032..a1545ef8ff 100644 --- a/backend/src/apiserver/resource/resource_manager_util.go +++ b/backend/src/apiserver/resource/resource_manager_util.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -181,9 +181,9 @@ func formulateRetryWorkflow(wf *util.Workflow) (*util.Workflow, []string, error) return util.NewWorkflow(newWF), podsToDelete, nil } -func deletePods(k8sCoreClient client.KubernetesCoreInterface, podsToDelete []string, namespace string) error { +func deletePods(ctx context.Context, k8sCoreClient client.KubernetesCoreInterface, podsToDelete []string, namespace string) error { for _, podId := range podsToDelete { - err := k8sCoreClient.PodClient(namespace).Delete(context.Background(), podId, metav1.DeleteOptions{}) + err := k8sCoreClient.PodClient(namespace).Delete(ctx, podId, metav1.DeleteOptions{}) if err != nil && !apierr.IsNotFound(err) { return util.NewInternalServerError(err, "Failed to delete pods.") } @@ -266,3 +266,16 @@ func convertPipelineIdToDefaultPipelineVersion(pipelineSpec *api.PipelineSpec, r }) return nil } + +// Override pipeline name parameter if this is a v2 compatible pipeline. +func overrideV2PipelineName(wf *util.Workflow, name string, namespace string) { + var pipelineRef string + if namespace != "" { + pipelineRef = fmt.Sprintf("namespace/%s/pipeline/%s", namespace, name) + } else { + pipelineRef = fmt.Sprintf("pipeline/%s", name) + } + overrides := make(map[string]string) + overrides["pipeline-name"] = pipelineRef + wf.OverrideParameters(overrides) +} diff --git a/backend/src/apiserver/resource/resource_manager_util_test.go b/backend/src/apiserver/resource/resource_manager_util_test.go index cdec78a23e..f1f8d26ce6 100644 --- a/backend/src/apiserver/resource/resource_manager_util_test.go +++ b/backend/src/apiserver/resource/resource_manager_util_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/resource/test_util.go b/backend/src/apiserver/resource/test_util.go new file mode 100644 index 0000000000..958e3540f7 --- /dev/null +++ b/backend/src/apiserver/resource/test_util.go @@ -0,0 +1 @@ +package resource diff --git a/backend/src/apiserver/server/api_converter.go b/backend/src/apiserver/server/api_converter.go index 73f12a0eed..260790bc4d 100644 --- a/backend/src/apiserver/server/api_converter.go +++ b/backend/src/apiserver/server/api_converter.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,14 +15,11 @@ package server import ( - "encoding/json" - "github.com/golang/protobuf/ptypes/timestamp" api "github.com/kubeflow/pipelines/backend/api/go_client" "github.com/kubeflow/pipelines/backend/src/apiserver/common" "github.com/kubeflow/pipelines/backend/src/apiserver/model" "github.com/kubeflow/pipelines/backend/src/common/util" - "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1" ) func ToApiExperiment(experiment *model.Experiment) *api.Experiment { @@ -97,6 +94,7 @@ func ToApiPipelineVersion(version *model.PipelineVersion) (*api.PipelineVersion, Name: version.Name, CreatedAt: ×tamp.Timestamp{Seconds: version.CreatedAtInSec}, Parameters: params, + Description: version.Description, CodeSourceUrl: version.CodeSourceUrl, ResourceReferences: []*api.ResourceReference{ &api.ResourceReference{ @@ -131,12 +129,11 @@ func toApiParameters(paramsString string) ([]*api.Parameter, error) { if paramsString == "" { return nil, nil } - apiParams := make([]*api.Parameter, 0) - var params []v1beta1.Param - err := json.Unmarshal([]byte(paramsString), ¶ms) + params, err := util.UnmarshalParameters(paramsString) if err != nil { return nil, util.NewInternalServerError(err, "Parameter with wrong format is stored") } + apiParams := make([]*api.Parameter, 0) for _, param := range params { var value string if ¶m.Value.StringVal != nil { @@ -205,6 +202,26 @@ func ToApiRunDetail(run *model.RunDetail) *api.RunDetail { } } +func ToApiTask(task *model.Task) *api.Task { + return &api.Task{ + Id: task.UUID, + Namespace: task.Namespace, + PipelineName: task.PipelineName, + RunId: task.RunUUID, + MlmdExecutionID: task.MLMDExecutionID, + CreatedAt: ×tamp.Timestamp{Seconds: task.CreatedTimestamp}, + FinishedAt: ×tamp.Timestamp{Seconds: task.FinishedTimestamp}, + Fingerprint: task.Fingerprint, + } +} + +func ToApiTasks(tasks []*model.Task) []*api.Task { + apiTasks := make([]*api.Task, 0) + for _, task := range tasks { + apiTasks = append(apiTasks, ToApiTask(task)) + } + return apiTasks +} func ToApiJob(job *model.Job) *api.Job { params, err := toApiParameters(job.Parameters) if err != nil { diff --git a/backend/src/apiserver/server/api_converter_test.go b/backend/src/apiserver/server/api_converter_test.go index 8603a35523..685790bdf7 100644 --- a/backend/src/apiserver/server/api_converter_test.go +++ b/backend/src/apiserver/server/api_converter_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,6 +17,8 @@ package server import ( "testing" + "github.com/kubeflow/pipelines/backend/src/apiserver/resource" + "github.com/golang/protobuf/ptypes/timestamp" api "github.com/kubeflow/pipelines/backend/api/go_client" "github.com/kubeflow/pipelines/backend/src/apiserver/common" @@ -35,6 +37,7 @@ func TestToApiPipeline(t *testing.T) { CreatedAtInSec: 1, Parameters: "[]", PipelineId: "pipeline1", + Description: "desc1", CodeSourceUrl: "http://repo/22222", }, } @@ -47,6 +50,7 @@ func TestToApiPipeline(t *testing.T) { Id: "pipelineversion1", CreatedAt: ×tamp.Timestamp{Seconds: 1}, Parameters: []*api.Parameter{}, + Description: "desc1", CodeSourceUrl: "http://repo/22222", ResourceReferences: []*api.ResourceReference{ &api.ResourceReference{ @@ -70,11 +74,8 @@ func TestToApiPipeline_ErrorParsingField(t *testing.T) { DefaultVersion: &model.PipelineVersion{}, } apiPipeline := ToApiPipeline(modelPipeline) - expectedApiPipeline := &api.Pipeline{ - Id: "pipeline1", - Error: "InternalServerError: Parameter with wrong format is stored: invalid character 'i' looking for beginning of value", - } - assert.Equal(t, expectedApiPipeline, apiPipeline) + assert.Equal(t, "pipeline1", apiPipeline.Id) + assert.Contains(t, apiPipeline.Error, "Parameter with wrong format is stored") } func TestToApiRunDetail(t *testing.T) { @@ -225,6 +226,80 @@ func TestToApiRuns(t *testing.T) { assert.Equal(t, expectedApiRun, apiRuns) } +func TestToApiTask(t *testing.T) { + modelTask := &model.Task{ + UUID: resource.DefaultFakeUUID, + Namespace: "", + PipelineName: "pipeline/my-pipeline", + RunUUID: resource.NonDefaultFakeUUID, + MLMDExecutionID: "1", + CreatedTimestamp: 1, + FinishedTimestamp: 2, + Fingerprint: "123", + } + apiTask := ToApiTask(modelTask) + expectedApiTask := &api.Task{ + Id: resource.DefaultFakeUUID, + Namespace: "", + PipelineName: "pipeline/my-pipeline", + RunId: resource.NonDefaultFakeUUID, + MlmdExecutionID: "1", + CreatedAt: ×tamp.Timestamp{Seconds: 1}, + FinishedAt: ×tamp.Timestamp{Seconds: 2}, + Fingerprint: "123", + } + + assert.Equal(t, expectedApiTask, apiTask) +} + +func TestToApiTasks(t *testing.T) { + modelTask1 := model.Task{ + UUID: "123e4567-e89b-12d3-a456-426655440000", + Namespace: "ns1", + PipelineName: "namespace/ns1/pipeline/my-pipeline-1", + RunUUID: "123e4567-e89b-12d3-a456-426655440001", + MLMDExecutionID: "1", + CreatedTimestamp: 1, + FinishedTimestamp: 2, + Fingerprint: "123", + } + modelTask2 := model.Task{ + UUID: "123e4567-e89b-12d3-a456-426655440002", + Namespace: "ns2", + PipelineName: "namespace/ns1/pipeline/my-pipeline-2", + RunUUID: "123e4567-e89b-12d3-a456-426655440003", + MLMDExecutionID: "2", + CreatedTimestamp: 3, + FinishedTimestamp: 4, + Fingerprint: "124", + } + + apiTasks := ToApiTasks([]*model.Task{&modelTask1, &modelTask2}) + expectedApiTasks := []*api.Task{ + { + Id: "123e4567-e89b-12d3-a456-426655440000", + Namespace: "ns1", + PipelineName: "namespace/ns1/pipeline/my-pipeline-1", + RunId: "123e4567-e89b-12d3-a456-426655440001", + MlmdExecutionID: "1", + CreatedAt: ×tamp.Timestamp{Seconds: 1}, + FinishedAt: ×tamp.Timestamp{Seconds: 2}, + Fingerprint: "123", + }, + { + Id: "123e4567-e89b-12d3-a456-426655440002", + Namespace: "ns2", + PipelineName: "namespace/ns1/pipeline/my-pipeline-2", + RunId: "123e4567-e89b-12d3-a456-426655440003", + MlmdExecutionID: "2", + CreatedAt: ×tamp.Timestamp{Seconds: 3}, + FinishedAt: ×tamp.Timestamp{Seconds: 4}, + Fingerprint: "124", + }, + } + assert.Equal(t, expectedApiTasks, apiTasks) +} + func TestCronScheduledJobToApiJob(t *testing.T) { modelJob := model.Job{ UUID: "job1", @@ -369,11 +444,8 @@ func TestToApiJob_ErrorParsingField(t *testing.T) { } apiJob := ToApiJob(modelJob) - expectedApiJob := &api.Job{ - Id: "job1", - Error: "InternalServerError: Parameter with wrong format is stored: invalid character 'i' looking for beginning of value", - } - assert.Equal(t, expectedApiJob, apiJob) + assert.Equal(t, "job1", apiJob.Id) + assert.Contains(t, apiJob.Error, "InternalServerError: Parameter with wrong format is stored") } func TestToApiJobs(t *testing.T) { diff --git a/backend/src/apiserver/server/experiment_server.go b/backend/src/apiserver/server/experiment_server.go index ceadf6ceb7..51b391ca48 100644 --- a/backend/src/apiserver/server/experiment_server.go +++ b/backend/src/apiserver/server/experiment_server.go @@ -260,7 +260,7 @@ func (s *ExperimentServer) ArchiveExperiment(ctx context.Context, request *api.A if err != nil { return nil, util.Wrap(err, "Failed to authorize the request") } - err = s.resourceManager.ArchiveExperiment(request.Id) + err = s.resourceManager.ArchiveExperiment(ctx, request.Id) if err != nil { return nil, err } diff --git a/backend/src/apiserver/server/job_server.go b/backend/src/apiserver/server/job_server.go index 1c47f49289..1b7397625f 100644 --- a/backend/src/apiserver/server/job_server.go +++ b/backend/src/apiserver/server/job_server.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -113,7 +113,7 @@ func (s *JobServer) CreateJob(ctx context.Context, request *api.CreateJobRequest } } - newJob, err := s.resourceManager.CreateJob(request.Job) + newJob, err := s.resourceManager.CreateJob(ctx, request.Job) if err != nil { return nil, err } @@ -214,7 +214,7 @@ func (s *JobServer) EnableJob(ctx context.Context, request *api.EnableJobRequest return nil, util.Wrap(err, "Failed to authorize the request") } - return s.enableJob(request.Id, true) + return s.enableJob(ctx, request.Id, true) } func (s *JobServer) DisableJob(ctx context.Context, request *api.DisableJobRequest) (*empty.Empty, error) { @@ -227,7 +227,7 @@ func (s *JobServer) DisableJob(ctx context.Context, request *api.DisableJobReque return nil, util.Wrap(err, "Failed to authorize the request") } - return s.enableJob(request.Id, false) + return s.enableJob(ctx, request.Id, false) } func (s *JobServer) DeleteJob(ctx context.Context, request *api.DeleteJobRequest) (*empty.Empty, error) { @@ -240,7 +240,7 @@ func (s *JobServer) DeleteJob(ctx context.Context, request *api.DeleteJobRequest return nil, util.Wrap(err, "Failed to authorize the request") } - err = s.resourceManager.DeleteJob(request.Id) + err = s.resourceManager.DeleteJob(ctx, request.Id) if err != nil { return nil, err } @@ -276,12 +276,12 @@ func (s *JobServer) validateCreateJobRequest(request *api.CreateJobRequest) erro return nil } -func (s *JobServer) enableJob(id string, enabled bool) (*empty.Empty, error) { +func (s *JobServer) enableJob(ctx context.Context, id string, enabled bool) (*empty.Empty, error) { if s.options.CollectMetrics { enableJobRequests.Inc() } - err := s.resourceManager.EnableJob(id, enabled) + err := s.resourceManager.EnableJob(ctx, id, enabled) if err != nil { return nil, err } diff --git a/backend/src/apiserver/server/list_request_util.go b/backend/src/apiserver/server/list_request_util.go index 72f5784d47..4021d1655a 100644 --- a/backend/src/apiserver/server/list_request_util.go +++ b/backend/src/apiserver/server/list_request_util.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/server/list_request_util_test.go b/backend/src/apiserver/server/list_request_util_test.go index 18bfe2d530..7b5cd1204d 100644 --- a/backend/src/apiserver/server/list_request_util_test.go +++ b/backend/src/apiserver/server/list_request_util_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,6 +17,8 @@ package server import ( "encoding/base64" "encoding/json" + "github.com/google/go-cmp/cmp/cmpopts" + "google.golang.org/protobuf/testing/protocmp" "testing" "github.com/google/go-cmp/cmp" @@ -211,7 +213,7 @@ func TestParseAPIFilter_DecodesEncodedString(t *testing.T) { } got, err := parseAPIFilter(in) - if !cmp.Equal(got, want) || err != nil { + if !cmp.Equal(got, want, cmpopts.EquateEmpty(), protocmp.Transform(),) || err != nil { t.Errorf("parseAPIString(%q) =\nGot %+v, %v\n Want %+v, <nil>\nDiff: %s", in, got, err, want, cmp.Diff(want, got)) } diff --git a/backend/src/apiserver/server/pipeline_server.go b/backend/src/apiserver/server/pipeline_server.go index 2fc5083ba5..ebbf1fbaf7 100644 --- a/backend/src/apiserver/server/pipeline_server.go +++ b/backend/src/apiserver/server/pipeline_server.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/server/pipeline_upload_server.go b/backend/src/apiserver/server/pipeline_upload_server.go index b819bbd5a2..df7e84d1c5 100644 --- a/backend/src/apiserver/server/pipeline_upload_server.go +++ b/backend/src/apiserver/server/pipeline_upload_server.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ package server import ( + "context" "encoding/json" "fmt" "net/http" @@ -229,7 +230,7 @@ func (s *PipelineUploadServer) canUploadVersionedPipeline(r *http.Request, names Version: common.RbacPipelinesVersion, Resource: common.RbacResourceTypePipelines, } - err := s.resourceManager.IsRequestAuthorized(userIdentityHeader, resourceAttributes) + err := s.resourceManager.IsRequestAuthorized(context.TODO(), userIdentityHeader, resourceAttributes) if err != nil { return util.Wrap(err, "Authorization Failure.") } diff --git a/backend/src/apiserver/server/pipeline_upload_server_test.go b/backend/src/apiserver/server/pipeline_upload_server_test.go index 3545c3ecbc..97c534a7c4 100644 --- a/backend/src/apiserver/server/pipeline_upload_server_test.go +++ b/backend/src/apiserver/server/pipeline_upload_server_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/server/report_server.go b/backend/src/apiserver/server/report_server.go index 042b23cf1e..e47c69939b 100644 --- a/backend/src/apiserver/server/report_server.go +++ b/backend/src/apiserver/server/report_server.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -37,7 +37,7 @@ func (s *ReportServer) ReportWorkflow(ctx context.Context, if err != nil { return nil, util.Wrap(err, "Report workflow failed.") } - err = s.resourceManager.ReportWorkflowResource(workflow) + err = s.resourceManager.ReportWorkflowResource(ctx, workflow) if err != nil { return nil, util.Wrap(err, "Report workflow failed.") } diff --git a/backend/src/apiserver/server/run_log_server.go b/backend/src/apiserver/server/run_log_server.go index 354e0a8cf9..c786ce41c1 100644 --- a/backend/src/apiserver/server/run_log_server.go +++ b/backend/src/apiserver/server/run_log_server.go @@ -15,6 +15,7 @@ package server import ( + "context" "encoding/json" "fmt" "net/http" @@ -62,7 +63,7 @@ func (s *RunLogServer) ReadRunLog(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/plain") w.Header().Set("Cache-Control", "no-cache, private") - err := s.resourceManager.ReadLog(runId, nodeId, follow, w) + err := s.resourceManager.ReadLog(context.Background(), runId, nodeId, follow, w) if err != nil { s.writeErrorToResponse(w, http.StatusInternalServerError, err) } diff --git a/backend/src/apiserver/server/run_metric_util.go b/backend/src/apiserver/server/run_metric_util.go index a9ca16822d..ded0e2c65c 100644 --- a/backend/src/apiserver/server/run_metric_util.go +++ b/backend/src/apiserver/server/run_metric_util.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/server/run_metric_util_test.go b/backend/src/apiserver/server/run_metric_util_test.go index a2ea50b23b..33be47cbec 100644 --- a/backend/src/apiserver/server/run_metric_util_test.go +++ b/backend/src/apiserver/server/run_metric_util_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/server/run_server.go b/backend/src/apiserver/server/run_server.go index 86e07750d5..73db791da9 100644 --- a/backend/src/apiserver/server/run_server.go +++ b/backend/src/apiserver/server/run_server.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -132,7 +132,7 @@ func (s *RunServer) CreateRun(ctx context.Context, request *api.CreateRunRequest } } - run, err := s.resourceManager.CreateRun(request.Run) + run, err := s.resourceManager.CreateRun(ctx, request.Run) if err != nil { return nil, util.Wrap(err, "Failed to create a new run.") } @@ -264,7 +264,7 @@ func (s *RunServer) DeleteRun(ctx context.Context, request *api.DeleteRunRequest if err != nil { return nil, util.Wrap(err, "Failed to authorize the request") } - err = s.resourceManager.DeleteRun(request.Id) + err = s.resourceManager.DeleteRun(ctx, request.Id) if err != nil { return nil, err } @@ -332,7 +332,7 @@ func (s *RunServer) TerminateRun(ctx context.Context, request *api.TerminateRunR if err != nil { return nil, util.Wrap(err, "Failed to authorize the request") } - err = s.resourceManager.TerminateRun(request.RunId) + err = s.resourceManager.TerminateRun(ctx, request.RunId) if err != nil { return nil, err } @@ -348,7 +348,7 @@ func (s *RunServer) RetryRun(ctx context.Context, request *api.RetryRunRequest) if err != nil { return nil, util.Wrap(err, "Failed to authorize the request") } - err = s.resourceManager.RetryRun(request.RunId) + err = s.resourceManager.RetryRun(ctx, request.RunId) if err != nil { return nil, err } diff --git a/backend/src/apiserver/server/task_server.go b/backend/src/apiserver/server/task_server.go new file mode 100644 index 0000000000..741ad5ccd1 --- /dev/null +++ b/backend/src/apiserver/server/task_server.go @@ -0,0 +1,96 @@ +package server + +import ( + "context" + api "github.com/kubeflow/pipelines/backend/api/go_client" + "github.com/kubeflow/pipelines/backend/src/apiserver/model" + "github.com/kubeflow/pipelines/backend/src/apiserver/resource" + "github.com/kubeflow/pipelines/backend/src/common/util" + "strings" +) + +type TaskServer struct { + resourceManager *resource.ResourceManager +} + +func (s *TaskServer) CreateTask(ctx context.Context, request *api.CreateTaskRequest) (*api.Task, error) { + err := s.validateCreateTaskRequest(request) + if err != nil { + return nil, util.Wrap(err, "Validate create task request failed.") + } + + task, err := s.resourceManager.CreateTask(ctx, request.Task) + if err != nil { + return nil, util.Wrap(err, "Failed to create a new task.") + } + + return ToApiTask(task), nil +} + +func (s *TaskServer) validateCreateTaskRequest(request *api.CreateTaskRequest) error { + if request == nil { + return util.NewInvalidInputError("CreatTaskRequst is nil") + } + task := *request.Task + + errMustSpecify := func(s string) error { return util.NewInvalidInputError("Invalid task: must specify %s", s) } + + if task.GetId() != "" { + return util.NewInvalidInputError("Invalid task: Id should not be set") + } + if task.GetPipelineName() == "" { + return errMustSpecify("PipelineName") + } + if strings.HasPrefix(task.GetPipelineName(), "namespace/") { + s := strings.SplitN(task.GetPipelineName(), "/", 4) + if len(s) != 4 { + return util.NewInvalidInputError("invalid PipelineName for namespaced pipelines, need to follow 'namespace/${namespace}/pipeline/${pipelineName}': %s", task.GetPipelineName()) + } + namespace := s[1] + if task.GetNamespace() != "" && namespace != task.GetNamespace() { + return util.NewInvalidInputError("the namespace %s extracted from pipelineName is not equal to the namespace %s in task", namespace, task.GetNamespace()) + } + } + if task.GetRunId() == "" { + return errMustSpecify("RunId") + } + if task.GetMlmdExecutionID() == "" { + return errMustSpecify("MlmdExecutionID") + } + if task.GetFingerprint() == "" { + return errMustSpecify("FingerPrint") + } + if task.GetCreatedAt() == nil { + return errMustSpecify("CreatedAt") + } + return nil +} + +func (s *TaskServer) ListTasks(ctx context.Context, request *api.ListTasksRequest) ( + *api.ListTasksResponse, error) { + + opts, err := validatedListOptions(&model.Task{}, request.PageToken, int(request.PageSize), request.SortBy, request.Filter) + + if err != nil { + return nil, util.Wrap(err, "Failed to create list options") + } + + filterContext, err := ValidateFilter(request.ResourceReferenceKey) + if err != nil { + return nil, util.Wrap(err, "Validating filter failed.") + } + + tasks, total_size, nextPageToken, err := s.resourceManager.ListTasks(filterContext, opts) + if err != nil { + return nil, util.Wrap(err, "List tasks failed.") + } + return &api.ListTasksResponse{ + Tasks: ToApiTasks(tasks), + TotalSize: int32(total_size), + NextPageToken: nextPageToken}, + nil +} + +func NewTaskServer(resourceManager *resource.ResourceManager) *TaskServer { + return &TaskServer{resourceManager: resourceManager} +} diff --git a/backend/src/apiserver/server/test/arguments-parameters.yaml b/backend/src/apiserver/server/test/arguments-parameters.yaml index 50f19c352d..ed45493378 100644 --- a/backend/src/apiserver/server/test/arguments-parameters.yaml +++ b/backend/src/apiserver/server/test/arguments-parameters.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/server/test/patched-arguments-parameters.yaml b/backend/src/apiserver/server/test/patched-arguments-parameters.yaml index fc7118e2f5..8b945f3193 100644 --- a/backend/src/apiserver/server/test/patched-arguments-parameters.yaml +++ b/backend/src/apiserver/server/test/patched-arguments-parameters.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/server/test/pipeline_plus_component/pipeline.yaml b/backend/src/apiserver/server/test/pipeline_plus_component/pipeline.yaml index 50f19c352d..ed45493378 100644 --- a/backend/src/apiserver/server/test/pipeline_plus_component/pipeline.yaml +++ b/backend/src/apiserver/server/test/pipeline_plus_component/pipeline.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/server/test_util.go b/backend/src/apiserver/server/test_util.go index ba1500d2ea..1ec4758f90 100644 --- a/backend/src/apiserver/server/test_util.go +++ b/backend/src/apiserver/server/test_util.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ package server import ( + "context" "testing" api "github.com/kubeflow/pipelines/backend/api/go_client" @@ -159,7 +160,7 @@ func initWithExperimentAndPipelineVersion(t *testing.T) (*resource.FakeClientMan assert.Nil(t, err) // Create a pipeline and then a pipeline version. - _, err = resourceManager.CreatePipeline("pipeline", "", "", []byte("apiVersion: tekton.dev/v1beta1\nkind: PipelineRun")) + _, err = resourceManager.CreatePipeline("pipeline", "", "", []byte(testWorkflow.ToStringForStore())) assert.Nil(t, err) _, err = resourceManager.CreatePipelineVersion(&api.PipelineVersion{ Name: "pipeline_version", @@ -192,7 +193,7 @@ func initWithOneTimeRun(t *testing.T) (*resource.FakeClientManager, *resource.Re }, }, } - runDetail, err := manager.CreateRun(apiRun) + runDetail, err := manager.CreateRun(context.Background(), apiRun) assert.Nil(t, err) return clientManager, manager, runDetail } diff --git a/backend/src/apiserver/server/util.go b/backend/src/apiserver/server/util.go index 3aa0fe3609..cfd71b0744 100644 --- a/backend/src/apiserver/server/util.go +++ b/backend/src/apiserver/server/util.go @@ -322,7 +322,7 @@ func isAuthorized(resourceManager *resource.ResourceManager, ctx context.Context glog.Infof("User: %s, ResourceAttributes: %+v", userIdentity, resourceAttributes) glog.Info("Authorizing request...") - err = resourceManager.IsRequestAuthorized(userIdentity, resourceAttributes) + err = resourceManager.IsRequestAuthorized(ctx, userIdentity, resourceAttributes) if err != nil { glog.Info(err.Error()) return err diff --git a/backend/src/apiserver/storage/db.go b/backend/src/apiserver/storage/db.go index e558989d1f..ea4ff5432f 100644 --- a/backend/src/apiserver/storage/db.go +++ b/backend/src/apiserver/storage/db.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/db_fake.go b/backend/src/apiserver/storage/db_fake.go index 5f24bc772e..1165c3fc02 100644 --- a/backend/src/apiserver/storage/db_fake.go +++ b/backend/src/apiserver/storage/db_fake.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -38,6 +38,7 @@ func NewFakeDb() (*DB, error) { &model.ResourceReference{}, &model.RunDetail{}, &model.RunMetric{}, + &model.Task{}, &model.DBStatus{}, &model.DefaultExperiment{}) diff --git a/backend/src/apiserver/storage/db_status_store.go b/backend/src/apiserver/storage/db_status_store.go index e444ee0162..58e62ec1b9 100644 --- a/backend/src/apiserver/storage/db_status_store.go +++ b/backend/src/apiserver/storage/db_status_store.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/db_status_store_test.go b/backend/src/apiserver/storage/db_status_store_test.go index 4ef9eeade9..6905dd6a91 100644 --- a/backend/src/apiserver/storage/db_status_store_test.go +++ b/backend/src/apiserver/storage/db_status_store_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/db_test.go b/backend/src/apiserver/storage/db_test.go index 3d74986717..6fae80dc2c 100644 --- a/backend/src/apiserver/storage/db_test.go +++ b/backend/src/apiserver/storage/db_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/default_experiment_store.go b/backend/src/apiserver/storage/default_experiment_store.go index 6fe898cff1..d66d886727 100644 --- a/backend/src/apiserver/storage/default_experiment_store.go +++ b/backend/src/apiserver/storage/default_experiment_store.go @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/default_experiment_store_test.go b/backend/src/apiserver/storage/default_experiment_store_test.go index 415df22ffb..33f8f6c02d 100644 --- a/backend/src/apiserver/storage/default_experiment_store_test.go +++ b/backend/src/apiserver/storage/default_experiment_store_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/job_store.go b/backend/src/apiserver/storage/job_store.go index 3f386883a6..bf9c4734da 100644 --- a/backend/src/apiserver/storage/job_store.go +++ b/backend/src/apiserver/storage/job_store.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/job_store_test.go b/backend/src/apiserver/storage/job_store_test.go index 076c37e0d6..783da69326 100644 --- a/backend/src/apiserver/storage/job_store_test.go +++ b/backend/src/apiserver/storage/job_store_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/minio_client.go b/backend/src/apiserver/storage/minio_client.go index f5e1069309..2b7a902f02 100644 --- a/backend/src/apiserver/storage/minio_client.go +++ b/backend/src/apiserver/storage/minio_client.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/minio_client_fake.go b/backend/src/apiserver/storage/minio_client_fake.go index f07233db5f..530831ed5b 100644 --- a/backend/src/apiserver/storage/minio_client_fake.go +++ b/backend/src/apiserver/storage/minio_client_fake.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/object_store.go b/backend/src/apiserver/storage/object_store.go index 87f527ca6c..88ce2556c5 100644 --- a/backend/src/apiserver/storage/object_store.go +++ b/backend/src/apiserver/storage/object_store.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/object_store_fake.go b/backend/src/apiserver/storage/object_store_fake.go index 2c59f68341..ca38d66c20 100644 --- a/backend/src/apiserver/storage/object_store_fake.go +++ b/backend/src/apiserver/storage/object_store_fake.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/object_store_test.go b/backend/src/apiserver/storage/object_store_test.go index fc5fede25d..e27163cd71 100644 --- a/backend/src/apiserver/storage/object_store_test.go +++ b/backend/src/apiserver/storage/object_store_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/pipeline_store.go b/backend/src/apiserver/storage/pipeline_store.go index 68871f834a..a453e486a4 100644 --- a/backend/src/apiserver/storage/pipeline_store.go +++ b/backend/src/apiserver/storage/pipeline_store.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -43,6 +43,7 @@ var pipelineColumns = []string{ "pipeline_versions.PipelineId", "pipeline_versions.Status", "pipeline_versions.CodeSourceUrl", + "pipeline_versions.Description", } var pipelineVersionColumns = []string{ @@ -53,6 +54,7 @@ var pipelineVersionColumns = []string{ "pipeline_versions.PipelineId", "pipeline_versions.Status", "pipeline_versions.CodeSourceUrl", + "pipeline_versions.Description", } type PipelineStoreInterface interface { @@ -172,7 +174,7 @@ func (s *PipelineStore) scanRows(rows *sql.Rows) ([]*model.Pipeline, error) { var defaultVersionId, namespace sql.NullString var createdAtInSec int64 var status model.PipelineStatus - var versionUUID, versionName, versionParameters, versionPipelineId, versionCodeSourceUrl, versionStatus sql.NullString + var versionUUID, versionName, versionParameters, versionPipelineId, versionCodeSourceUrl, versionStatus, versionDescription sql.NullString var versionCreatedAtInSec sql.NullInt64 if err := rows.Scan( &uuid, @@ -189,7 +191,8 @@ func (s *PipelineStore) scanRows(rows *sql.Rows) ([]*model.Pipeline, error) { &versionParameters, &versionPipelineId, &versionStatus, - &versionCodeSourceUrl); err != nil { + &versionCodeSourceUrl, + &versionDescription); err != nil { return nil, err } if defaultVersionId.Valid { @@ -210,6 +213,7 @@ func (s *PipelineStore) scanRows(rows *sql.Rows) ([]*model.Pipeline, error) { PipelineId: versionPipelineId.String, Status: model.PipelineVersionStatus(versionStatus.String), CodeSourceUrl: versionCodeSourceUrl.String, + Description: versionDescription.String, }}) } else { pipelines = append(pipelines, &model.Pipeline{ @@ -327,6 +331,7 @@ func (s *PipelineStore) CreatePipeline(p *model.Pipeline) (*model.Pipeline, erro "Parameters": newPipeline.DefaultVersion.Parameters, "Status": string(newPipeline.DefaultVersion.Status), "PipelineId": newPipeline.UUID, + "Description": newPipeline.DefaultVersion.Description, "CodeSourceUrl": newPipeline.DefaultVersion.CodeSourceUrl}). ToSql() if err != nil { @@ -482,7 +487,8 @@ func (s *PipelineStore) CreatePipelineVersion(v *model.PipelineVersion, updatePi "Parameters": newPipelineVersion.Parameters, "PipelineId": newPipelineVersion.PipelineId, "Status": string(newPipelineVersion.Status), - "CodeSourceUrl": newPipelineVersion.CodeSourceUrl}). + "CodeSourceUrl": newPipelineVersion.CodeSourceUrl, + "Description": newPipelineVersion.Description}). ToSql() if versionErr != nil { return nil, util.NewInternalServerError( @@ -589,7 +595,7 @@ func (s *PipelineStore) GetPipelineVersionWithStatus(versionId string, status mo func (s *PipelineStore) scanPipelineVersionRows(rows *sql.Rows) ([]*model.PipelineVersion, error) { var pipelineVersions []*model.PipelineVersion for rows.Next() { - var uuid, name, parameters, pipelineId, codeSourceUrl, status sql.NullString + var uuid, name, parameters, pipelineId, codeSourceUrl, status, description sql.NullString var createdAtInSec sql.NullInt64 if err := rows.Scan( &uuid, @@ -599,6 +605,7 @@ func (s *PipelineStore) scanPipelineVersionRows(rows *sql.Rows) ([]*model.Pipeli &pipelineId, &status, &codeSourceUrl, + &description, ); err != nil { return nil, err } @@ -610,7 +617,8 @@ func (s *PipelineStore) scanPipelineVersionRows(rows *sql.Rows) ([]*model.Pipeli Parameters: parameters.String, PipelineId: pipelineId.String, CodeSourceUrl: codeSourceUrl.String, - Status: model.PipelineVersionStatus(status.String)}) + Status: model.PipelineVersionStatus(status.String), + Description: description.String}) } } return pipelineVersions, nil diff --git a/backend/src/apiserver/storage/pipeline_store_test.go b/backend/src/apiserver/storage/pipeline_store_test.go index 8bb1f45ea2..e361313bec 100644 --- a/backend/src/apiserver/storage/pipeline_store_test.go +++ b/backend/src/apiserver/storage/pipeline_store_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,11 +27,11 @@ import ( ) const ( - fakeUUID = "123e4567-e89b-12d3-a456-426655440000" - fakeUUIDTwo = "123e4567-e89b-12d3-a456-426655440001" - fakeUUIDThree = "123e4567-e89b-12d3-a456-426655440002" - fakeUUIDFour = "123e4567-e89b-12d3-a456-426655440003" - fakeUUIDFive = "123e4567-e89b-12d3-a456-426655440004" + defaultFakePipelineId = "123e4567-e89b-12d3-a456-426655440000" + defaultFakePipelineIdTwo = "123e4567-e89b-12d3-a456-426655440001" + defaultFakePipelineIdThree = "123e4567-e89b-12d3-a456-426655440002" + defaultFakePipelineIdFour = "123e4567-e89b-12d3-a456-426655440003" + defaultFakePipelineIdFive = "123e4567-e89b-12d3-a456-426655440004" ) func createPipeline(name string) *model.Pipeline { @@ -49,11 +49,11 @@ func createPipeline(name string) *model.Pipeline { func TestListPipelines_FilterOutNotReady(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) pipelineStore.CreatePipeline(createPipeline("pipeline1")) - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipeline(createPipeline("pipeline2")) - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDThree, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdThree, nil) pipelineStore.CreatePipeline(&model.Pipeline{ Name: "pipeline3", Status: model.PipelineCreating, @@ -62,33 +62,33 @@ func TestListPipelines_FilterOutNotReady(t *testing.T) { Status: model.PipelineVersionCreating}}) expectedPipeline1 := &model.Pipeline{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUID, + DefaultVersionId: defaultFakePipelineId, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }} expectedPipeline2 := &model.Pipeline{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, CreatedAtInSec: 2, Name: "pipeline2", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUIDTwo, + DefaultVersionId: defaultFakePipelineIdTwo, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, CreatedAtInSec: 2, Name: "pipeline2", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUIDTwo, + PipelineId: defaultFakePipelineIdTwo, Status: model.PipelineVersionReady, }} pipelinesExpected := []*model.Pipeline{expectedPipeline1, expectedPipeline2} @@ -107,25 +107,25 @@ func TestListPipelines_FilterOutNotReady(t *testing.T) { func TestListPipelines_WithFilter(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) pipelineStore.CreatePipeline(createPipeline("pipeline_foo")) - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipeline(createPipeline("pipeline_bar")) - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDThree, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdThree, nil) expectedPipeline1 := &model.Pipeline{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline_foo", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUID, + DefaultVersionId: defaultFakePipelineId, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline_foo", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }} pipelinesExpected := []*model.Pipeline{expectedPipeline1} @@ -153,42 +153,42 @@ func TestListPipelines_WithFilter(t *testing.T) { func TestListPipelines_Pagination(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) pipelineStore.CreatePipeline(createPipeline("pipeline1")) - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipeline(createPipeline("pipeline3")) - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDThree, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdThree, nil) pipelineStore.CreatePipeline(createPipeline("pipeline4")) - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDFour, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdFour, nil) pipelineStore.CreatePipeline(createPipeline("pipeline2")) expectedPipeline1 := &model.Pipeline{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUID, + DefaultVersionId: defaultFakePipelineId, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }} expectedPipeline4 := &model.Pipeline{ - UUID: fakeUUIDFour, + UUID: defaultFakePipelineIdFour, CreatedAtInSec: 4, Name: "pipeline2", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUIDFour, + DefaultVersionId: defaultFakePipelineIdFour, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUIDFour, + UUID: defaultFakePipelineIdFour, CreatedAtInSec: 4, Name: "pipeline2", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUIDFour, + PipelineId: defaultFakePipelineIdFour, Status: model.PipelineVersionReady, }} pipelinesExpected := []*model.Pipeline{expectedPipeline1, expectedPipeline4} @@ -202,33 +202,33 @@ func TestListPipelines_Pagination(t *testing.T) { assert.Equal(t, pipelinesExpected, pipelines) expectedPipeline2 := &model.Pipeline{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, CreatedAtInSec: 2, Name: "pipeline3", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUIDTwo, + DefaultVersionId: defaultFakePipelineIdTwo, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, CreatedAtInSec: 2, Name: "pipeline3", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUIDTwo, + PipelineId: defaultFakePipelineIdTwo, Status: model.PipelineVersionReady, }} expectedPipeline3 := &model.Pipeline{ - UUID: fakeUUIDThree, + UUID: defaultFakePipelineIdThree, CreatedAtInSec: 3, Name: "pipeline4", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUIDThree, + DefaultVersionId: defaultFakePipelineIdThree, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUIDThree, + UUID: defaultFakePipelineIdThree, CreatedAtInSec: 3, Name: "pipeline4", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUIDThree, + PipelineId: defaultFakePipelineIdThree, Status: model.PipelineVersionReady, }} pipelinesExpected2 := []*model.Pipeline{expectedPipeline2, expectedPipeline3} @@ -246,43 +246,43 @@ func TestListPipelines_Pagination(t *testing.T) { func TestListPipelines_Pagination_Descend(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) pipelineStore.CreatePipeline(createPipeline("pipeline1")) - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipeline(createPipeline("pipeline3")) - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDThree, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdThree, nil) pipelineStore.CreatePipeline(createPipeline("pipeline4")) - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDFour, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdFour, nil) pipelineStore.CreatePipeline(createPipeline("pipeline2")) expectedPipeline2 := &model.Pipeline{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, CreatedAtInSec: 2, Name: "pipeline3", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUIDTwo, + DefaultVersionId: defaultFakePipelineIdTwo, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, CreatedAtInSec: 2, Name: "pipeline3", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUIDTwo, + PipelineId: defaultFakePipelineIdTwo, Status: model.PipelineVersionReady, }} expectedPipeline3 := &model.Pipeline{ - UUID: fakeUUIDThree, + UUID: defaultFakePipelineIdThree, CreatedAtInSec: 3, Name: "pipeline4", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUIDThree, + DefaultVersionId: defaultFakePipelineIdThree, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUIDThree, + UUID: defaultFakePipelineIdThree, CreatedAtInSec: 3, Name: "pipeline4", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUIDThree, + PipelineId: defaultFakePipelineIdThree, Status: model.PipelineVersionReady, }} pipelinesExpected := []*model.Pipeline{expectedPipeline3, expectedPipeline2} @@ -296,33 +296,33 @@ func TestListPipelines_Pagination_Descend(t *testing.T) { assert.Equal(t, pipelinesExpected, pipelines) expectedPipeline1 := &model.Pipeline{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUID, + DefaultVersionId: defaultFakePipelineId, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }} expectedPipeline4 := &model.Pipeline{ - UUID: fakeUUIDFour, + UUID: defaultFakePipelineIdFour, CreatedAtInSec: 4, Name: "pipeline2", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUIDFour, + DefaultVersionId: defaultFakePipelineIdFour, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUIDFour, + UUID: defaultFakePipelineIdFour, CreatedAtInSec: 4, Name: "pipeline2", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUIDFour, + PipelineId: defaultFakePipelineIdFour, Status: model.PipelineVersionReady, }} pipelinesExpected2 := []*model.Pipeline{expectedPipeline4, expectedPipeline1} @@ -339,21 +339,21 @@ func TestListPipelines_Pagination_Descend(t *testing.T) { func TestListPipelines_Pagination_LessThanPageSize(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) pipelineStore.CreatePipeline(createPipeline("pipeline1")) expectedPipeline1 := &model.Pipeline{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUID, + DefaultVersionId: defaultFakePipelineId, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }} pipelinesExpected := []*model.Pipeline{expectedPipeline1} @@ -370,7 +370,7 @@ func TestListPipelines_Pagination_LessThanPageSize(t *testing.T) { func TestListPipelinesError(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) db.Close() opts, err := list.NewOptions(&model.Pipeline{}, 2, "", nil) assert.Nil(t, err) @@ -381,25 +381,25 @@ func TestListPipelinesError(t *testing.T) { func TestGetPipeline(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) pipelineStore.CreatePipeline(createPipeline("pipeline1")) pipelineExpected := model.Pipeline{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUID, + DefaultVersionId: defaultFakePipelineId, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }} - pipeline, err := pipelineStore.GetPipeline(fakeUUID) + pipeline, err := pipelineStore.GetPipeline(defaultFakePipelineId) assert.Nil(t, err) assert.Equal(t, pipelineExpected, *pipeline, "Got unexpected pipeline.") } @@ -407,7 +407,7 @@ func TestGetPipeline(t *testing.T) { func TestGetPipeline_NotFound_Creating(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) pipelineStore.CreatePipeline( &model.Pipeline{ Name: "pipeline3", @@ -417,7 +417,7 @@ func TestGetPipeline_NotFound_Creating(t *testing.T) { Status: model.PipelineVersionCreating, }}) - _, err := pipelineStore.GetPipeline(fakeUUID) + _, err := pipelineStore.GetPipeline(defaultFakePipelineId) assert.Equal(t, codes.NotFound, err.(*util.UserError).ExternalStatusCode(), "Expected get pipeline to return not found") } @@ -425,9 +425,9 @@ func TestGetPipeline_NotFound_Creating(t *testing.T) { func TestGetPipeline_NotFoundError(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) - _, err := pipelineStore.GetPipeline(fakeUUID) + _, err := pipelineStore.GetPipeline(defaultFakePipelineId) assert.Equal(t, codes.NotFound, err.(*util.UserError).ExternalStatusCode(), "Expected get pipeline to return not found") } @@ -435,7 +435,7 @@ func TestGetPipeline_NotFoundError(t *testing.T) { func TestGetPipeline_InternalError(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) db.Close() _, err := pipelineStore.GetPipeline("123") assert.Equal(t, codes.Internal, err.(*util.UserError).ExternalStatusCode(), @@ -445,21 +445,21 @@ func TestGetPipeline_InternalError(t *testing.T) { func TestCreatePipeline(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) pipelineExpected := model.Pipeline{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineReady, - DefaultVersionId: fakeUUID, + DefaultVersionId: defaultFakePipelineId, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineVersionReady, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, }} pipeline := createPipeline("pipeline1") @@ -471,7 +471,7 @@ func TestCreatePipeline(t *testing.T) { func TestCreatePipeline_DuplicateKey(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) pipeline := createPipeline("pipeline1") _, err := pipelineStore.CreatePipeline(pipeline) @@ -487,7 +487,7 @@ func TestCreatePipeline_InternalServerError(t *testing.T) { DefaultVersion: &model.PipelineVersion{}} db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) db.Close() _, err := pipelineStore.CreatePipeline(pipeline) @@ -498,50 +498,50 @@ func TestCreatePipeline_InternalServerError(t *testing.T) { func TestDeletePipeline(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) pipelineStore.CreatePipeline(createPipeline("pipeline1")) - err := pipelineStore.DeletePipeline(fakeUUID) + err := pipelineStore.DeletePipeline(defaultFakePipelineId) assert.Nil(t, err) - _, err = pipelineStore.GetPipeline(fakeUUID) + _, err = pipelineStore.GetPipeline(defaultFakePipelineId) assert.Equal(t, codes.NotFound, err.(*util.UserError).ExternalStatusCode()) } func TestDeletePipelineError(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) db.Close() - err := pipelineStore.DeletePipeline(fakeUUID) + err := pipelineStore.DeletePipeline(defaultFakePipelineId) assert.Equal(t, codes.Internal, err.(*util.UserError).ExternalStatusCode()) } func TestUpdatePipelineStatus(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) pipeline, err := pipelineStore.CreatePipeline(createPipeline("pipeline1")) assert.Nil(t, err) pipelineExpected := model.Pipeline{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineDeleting, - DefaultVersionId: fakeUUID, + DefaultVersionId: defaultFakePipelineId, DefaultVersion: &model.PipelineVersion{ - UUID: fakeUUID, + UUID: defaultFakePipelineId, CreatedAtInSec: 1, Name: "pipeline1", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineVersionDeleting, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, }, } err = pipelineStore.UpdatePipelineStatus(pipeline.UUID, model.PipelineDeleting) assert.Nil(t, err) err = pipelineStore.UpdatePipelineVersionStatus(pipeline.UUID, model.PipelineVersionDeleting) assert.Nil(t, err) - pipeline, err = pipelineStore.GetPipelineWithStatus(fakeUUID, model.PipelineDeleting) + pipeline, err = pipelineStore.GetPipelineWithStatus(defaultFakePipelineId, model.PipelineDeleting) assert.Nil(t, err) assert.Equal(t, pipelineExpected, *pipeline) } @@ -549,9 +549,9 @@ func TestUpdatePipelineStatus(t *testing.T) { func TestUpdatePipelineStatusError(t *testing.T) { db := NewFakeDbOrFatal() defer db.Close() - pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + pipelineStore := NewPipelineStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) db.Close() - err := pipelineStore.UpdatePipelineStatus(fakeUUID, model.PipelineDeleting) + err := pipelineStore.UpdatePipelineStatus(defaultFakePipelineId, model.PipelineDeleting) assert.Equal(t, codes.Internal, err.(*util.UserError).ExternalStatusCode()) } @@ -561,7 +561,7 @@ func TestCreatePipelineVersion(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) // Create a pipeline first. pipelineStore.CreatePipeline( @@ -572,11 +572,12 @@ func TestCreatePipelineVersion(t *testing.T) { }) // Create a version under the above pipeline. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineVersion := &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + Description: "pipeline_version_description", + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionCreating, CodeSourceUrl: "code_source_url", } @@ -585,12 +586,13 @@ func TestCreatePipelineVersion(t *testing.T) { // Check whether created pipeline version is as expected. pipelineVersionExpected := model.PipelineVersion{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, CreatedAtInSec: 2, Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, + Description: "pipeline_version_description", Status: model.PipelineVersionCreating, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, CodeSourceUrl: "code_source_url", } assert.Nil(t, err) @@ -601,9 +603,10 @@ func TestCreatePipelineVersion(t *testing.T) { "Got unexpected pipeline.") // Check whether pipeline has updated default version id. - pipeline, err := pipelineStore.GetPipeline(fakeUUID) + pipeline, err := pipelineStore.GetPipeline(defaultFakePipelineId) assert.Nil(t, err) - assert.Equal(t, pipeline.DefaultVersionId, fakeUUIDTwo, "Got unexpected default version id.") + assert.Equal(t, pipeline.DefaultVersionId, defaultFakePipelineIdTwo, "Got unexpected default version id.") + assert.Equal(t, pipeline.DefaultVersion.Description, "pipeline_version_description", "Got unexpected description for pipeline version.") } func TestCreatePipelineVersionNotUpdateDefaultVersion(t *testing.T) { @@ -612,7 +615,7 @@ func TestCreatePipelineVersionNotUpdateDefaultVersion(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) // Create a pipeline first. pipelineStore.CreatePipeline( @@ -623,11 +626,11 @@ func TestCreatePipelineVersionNotUpdateDefaultVersion(t *testing.T) { }) // Create a version under the above pipeline. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineVersion := &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionCreating, CodeSourceUrl: "code_source_url", } @@ -636,12 +639,12 @@ func TestCreatePipelineVersionNotUpdateDefaultVersion(t *testing.T) { // Check whether created pipeline version is as expected. pipelineVersionExpected := model.PipelineVersion{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, CreatedAtInSec: 2, Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, Status: model.PipelineVersionCreating, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, CodeSourceUrl: "code_source_url", } assert.Nil(t, err) @@ -652,10 +655,10 @@ func TestCreatePipelineVersionNotUpdateDefaultVersion(t *testing.T) { "Got unexpected pipeline.") // Check whether pipeline has updated default version id. - pipeline, err := pipelineStore.GetPipeline(fakeUUID) + pipeline, err := pipelineStore.GetPipeline(defaultFakePipelineId) assert.Nil(t, err) - assert.NotEqual(t, pipeline.DefaultVersionId, fakeUUIDTwo, "Got unexpected default version id.") - assert.Equal(t, pipeline.DefaultVersionId, fakeUUID, "Got unexpected default version id.") + assert.NotEqual(t, pipeline.DefaultVersionId, defaultFakePipelineIdTwo, "Got unexpected default version id.") + assert.Equal(t, pipeline.DefaultVersionId, defaultFakePipelineId, "Got unexpected default version id.") } @@ -665,7 +668,7 @@ func TestCreatePipelineVersion_DuplicateKey(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) // Create a pipeline. pipelineStore.CreatePipeline( @@ -676,12 +679,12 @@ func TestCreatePipelineVersion_DuplicateKey(t *testing.T) { }) // Create a version under the above pipeline. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionCreating, }, true) @@ -690,7 +693,7 @@ func TestCreatePipelineVersion_DuplicateKey(t *testing.T) { &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param2"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionCreating, }, true) assert.NotNil(t, err) @@ -703,7 +706,7 @@ func TestCreatePipelineVersion_InternalServerError_DBClosed(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) db.Close() // Try to create a new version but db is closed. @@ -711,7 +714,7 @@ func TestCreatePipelineVersion_InternalServerError_DBClosed(t *testing.T) { &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, }, true) assert.Equal(t, codes.Internal, err.(*util.UserError).ExternalStatusCode(), "Expected create pipeline version to return error") @@ -723,7 +726,7 @@ func TestDeletePipelineVersion(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) // Create a pipeline. pipelineStore.CreatePipeline( @@ -734,37 +737,37 @@ func TestDeletePipelineVersion(t *testing.T) { }) // Create a version under the above pipeline. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) // Create a second version, which will become the default version. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDThree, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdThree, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_2", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) - // Delete version with id being fakeUUIDThree. - err := pipelineStore.DeletePipelineVersion(fakeUUIDThree) + // Delete version with id being defaultFakePipelineIdThree. + err := pipelineStore.DeletePipelineVersion(defaultFakePipelineIdThree) assert.Nil(t, err) // Check version removed. - _, err = pipelineStore.GetPipelineVersion(fakeUUIDThree) + _, err = pipelineStore.GetPipelineVersion(defaultFakePipelineIdThree) assert.Equal(t, codes.NotFound, err.(*util.UserError).ExternalStatusCode()) - // Check new default version is version with id being fakeUUIDTwo. - pipeline, err := pipelineStore.GetPipeline(fakeUUID) + // Check new default version is version with id being defaultFakePipelineIdTwo. + pipeline, err := pipelineStore.GetPipeline(defaultFakePipelineId) assert.Nil(t, err) - assert.Equal(t, pipeline.DefaultVersionId, fakeUUIDTwo) + assert.Equal(t, pipeline.DefaultVersionId, defaultFakePipelineIdTwo) } func TestDeletePipelineVersionError(t *testing.T) { @@ -773,7 +776,7 @@ func TestDeletePipelineVersionError(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) // Create a pipeline. pipelineStore.CreatePipeline( @@ -784,18 +787,18 @@ func TestDeletePipelineVersionError(t *testing.T) { }) // Create a version under the above pipeline. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) db.Close() // On closed db, create pipeline version ends in internal error. - err := pipelineStore.DeletePipelineVersion(fakeUUIDTwo) + err := pipelineStore.DeletePipelineVersion(defaultFakePipelineIdTwo) assert.Equal(t, codes.Internal, err.(*util.UserError).ExternalStatusCode()) } @@ -805,7 +808,7 @@ func TestGetPipelineVersion(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) // Create a pipeline. pipelineStore.CreatePipeline( @@ -816,26 +819,26 @@ func TestGetPipelineVersion(t *testing.T) { }) // Create a version under the above pipeline. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) // Get pipeline version. - pipelineVersion, err := pipelineStore.GetPipelineVersion(fakeUUIDTwo) + pipelineVersion, err := pipelineStore.GetPipelineVersion(defaultFakePipelineIdTwo) assert.Nil(t, err) assert.Equal( t, model.PipelineVersion{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, Name: "pipeline_version_1", CreatedAtInSec: 2, Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, *pipelineVersion, "Got unexpected pipeline version.") @@ -847,7 +850,7 @@ func TestGetPipelineVersion_InternalError(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) db.Close() // Internal error because of closed DB. @@ -862,7 +865,7 @@ func TestGetPipelineVersion_NotFound_VersionStatusCreating(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) // Create a pipeline. pipelineStore.CreatePipeline( @@ -873,16 +876,16 @@ func TestGetPipelineVersion_NotFound_VersionStatusCreating(t *testing.T) { }) // Create a version under the above pipeline. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionCreating, }, true) - _, err := pipelineStore.GetPipelineVersion(fakeUUIDTwo) + _, err := pipelineStore.GetPipelineVersion(defaultFakePipelineIdTwo) assert.Equal(t, codes.NotFound, err.(*util.UserError).ExternalStatusCode(), "Expected get pipeline to return not found") } @@ -893,9 +896,9 @@ func TestGetPipelineVersion_NotFoundError(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) - _, err := pipelineStore.GetPipelineVersion(fakeUUID) + _, err := pipelineStore.GetPipelineVersion(defaultFakePipelineId) assert.Equal(t, codes.NotFound, err.(*util.UserError).ExternalStatusCode(), "Expected get pipeline to return not found") } @@ -906,7 +909,7 @@ func TestListPipelineVersion_FilterOutNotReady(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) // Create a pipeline. pipelineStore.CreatePipeline( @@ -917,56 +920,56 @@ func TestListPipelineVersion_FilterOutNotReady(t *testing.T) { }) // Create a first version with status ready. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) // Create a second version with status ready. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDThree, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdThree, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_2", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) // Create a third version with status creating. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDFour, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdFour, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_3", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionCreating, }, true) pipelineVersionsExpected := []*model.PipelineVersion{ &model.PipelineVersion{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, CreatedAtInSec: 2, Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady}, &model.PipelineVersion{ - UUID: fakeUUIDThree, + UUID: defaultFakePipelineIdThree, CreatedAtInSec: 3, Name: "pipeline_version_2", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady}} opts, err := list.NewOptions(&model.PipelineVersion{}, 10, "id", nil) assert.Nil(t, err) pipelineVersions, total_size, nextPageToken, err := - pipelineStore.ListPipelineVersions(fakeUUID, opts) + pipelineStore.ListPipelineVersions(defaultFakePipelineId, opts) assert.Nil(t, err) assert.Equal(t, "", nextPageToken) @@ -980,7 +983,7 @@ func TestListPipelineVersions_Pagination(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) // Create a pipeline. pipelineStore.CreatePipeline( @@ -990,43 +993,43 @@ func TestListPipelineVersions_Pagination(t *testing.T) { Status: model.PipelineReady, }) - // Create "version_1" with fakeUUIDTwo. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + // Create "version_1" with defaultFakePipelineIdTwo. + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) - // Create "version_3" with fakeUUIDThree. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDThree, nil) + // Create "version_3" with defaultFakePipelineIdThree. + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdThree, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_3", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) - // Create "version_2" with fakeUUIDFour. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDFour, nil) + // Create "version_2" with defaultFakePipelineIdFour. + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdFour, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_2", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) - // Create "version_4" with fakeUUIDFive. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDFive, nil) + // Create "version_4" with defaultFakePipelineIdFive. + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdFive, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_4", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) @@ -1035,7 +1038,7 @@ func TestListPipelineVersions_Pagination(t *testing.T) { opts, err := list.NewOptions(&model.PipelineVersion{}, 2, "name", nil) assert.Nil(t, err) pipelineVersions, total_size, nextPageToken, err := - pipelineStore.ListPipelineVersions(fakeUUID, opts) + pipelineStore.ListPipelineVersions(defaultFakePipelineId, opts) assert.Nil(t, err) assert.NotEmpty(t, nextPageToken) assert.Equal(t, 4, total_size) @@ -1043,19 +1046,19 @@ func TestListPipelineVersions_Pagination(t *testing.T) { // First page. assert.Equal(t, pipelineVersions, []*model.PipelineVersion{ &model.PipelineVersion{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, CreatedAtInSec: 2, Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, &model.PipelineVersion{ - UUID: fakeUUIDFour, + UUID: defaultFakePipelineIdFour, CreatedAtInSec: 4, Name: "pipeline_version_2", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, }) @@ -1063,7 +1066,7 @@ func TestListPipelineVersions_Pagination(t *testing.T) { opts, err = list.NewOptionsFromToken(nextPageToken, 2) assert.Nil(t, err) pipelineVersions, total_size, nextPageToken, err = - pipelineStore.ListPipelineVersions(fakeUUID, opts) + pipelineStore.ListPipelineVersions(defaultFakePipelineId, opts) assert.Nil(t, err) // Second page. @@ -1071,19 +1074,19 @@ func TestListPipelineVersions_Pagination(t *testing.T) { assert.Equal(t, 4, total_size) assert.Equal(t, pipelineVersions, []*model.PipelineVersion{ &model.PipelineVersion{ - UUID: fakeUUIDThree, + UUID: defaultFakePipelineIdThree, CreatedAtInSec: 3, Name: "pipeline_version_3", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, &model.PipelineVersion{ - UUID: fakeUUIDFive, + UUID: defaultFakePipelineIdFive, CreatedAtInSec: 5, Name: "pipeline_version_4", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, }) @@ -1095,7 +1098,7 @@ func TestListPipelineVersions_Pagination_Descend(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) // Create a pipeline. pipelineStore.CreatePipeline( @@ -1105,43 +1108,44 @@ func TestListPipelineVersions_Pagination_Descend(t *testing.T) { Status: model.PipelineReady, }) - // Create "version_1" with fakeUUIDTwo. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + // Create "version_1" with defaultFakePipelineIdTwo. + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ - Name: "pipeline_version_1", - Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, - Status: model.PipelineVersionReady, + Name: "pipeline_version_1", + Parameters: `[{"Name": "param1"}]`, + PipelineId: defaultFakePipelineId, + Status: model.PipelineVersionReady, + Description: "version_1", }, true) - // Create "version_3" with fakeUUIDThree. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDThree, nil) + // Create "version_3" with defaultFakePipelineIdThree. + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdThree, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_3", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) - // Create "version_2" with fakeUUIDFour. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDFour, nil) + // Create "version_2" with defaultFakePipelineIdFour. + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdFour, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_2", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) - // Create "version_4" with fakeUUIDFive. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDFive, nil) + // Create "version_4" with defaultFakePipelineIdFive. + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdFive, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_4", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) @@ -1150,7 +1154,7 @@ func TestListPipelineVersions_Pagination_Descend(t *testing.T) { opts, err := list.NewOptions(&model.PipelineVersion{}, 2, "name desc", nil) assert.Nil(t, err) pipelineVersions, total_size, nextPageToken, err := - pipelineStore.ListPipelineVersions(fakeUUID, opts) + pipelineStore.ListPipelineVersions(defaultFakePipelineId, opts) assert.Nil(t, err) assert.NotEmpty(t, nextPageToken) assert.Equal(t, 4, total_size) @@ -1158,19 +1162,19 @@ func TestListPipelineVersions_Pagination_Descend(t *testing.T) { // First page. assert.Equal(t, pipelineVersions, []*model.PipelineVersion{ &model.PipelineVersion{ - UUID: fakeUUIDFive, + UUID: defaultFakePipelineIdFive, CreatedAtInSec: 5, Name: "pipeline_version_4", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, &model.PipelineVersion{ - UUID: fakeUUIDThree, + UUID: defaultFakePipelineIdThree, CreatedAtInSec: 3, Name: "pipeline_version_3", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, }) @@ -1178,7 +1182,7 @@ func TestListPipelineVersions_Pagination_Descend(t *testing.T) { opts, err = list.NewOptionsFromToken(nextPageToken, 2) assert.Nil(t, err) pipelineVersions, total_size, nextPageToken, err = - pipelineStore.ListPipelineVersions(fakeUUID, opts) + pipelineStore.ListPipelineVersions(defaultFakePipelineId, opts) assert.Nil(t, err) assert.Empty(t, nextPageToken) assert.Equal(t, 4, total_size) @@ -1186,19 +1190,20 @@ func TestListPipelineVersions_Pagination_Descend(t *testing.T) { // Second Page. assert.Equal(t, pipelineVersions, []*model.PipelineVersion{ &model.PipelineVersion{ - UUID: fakeUUIDFour, + UUID: defaultFakePipelineIdFour, CreatedAtInSec: 4, Name: "pipeline_version_2", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, &model.PipelineVersion{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, CreatedAtInSec: 2, Name: "pipeline_version_1", + Description: "version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, }) @@ -1210,7 +1215,7 @@ func TestListPipelineVersions_Pagination_LessThanPageSize(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) // Create a pipeline. pipelineStore.CreatePipeline( @@ -1221,29 +1226,29 @@ func TestListPipelineVersions_Pagination_LessThanPageSize(t *testing.T) { }) // Create a version under the above pipeline. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) opts, err := list.NewOptions(&model.PipelineVersion{}, 2, "", nil) assert.Nil(t, err) pipelineVersions, total_size, nextPageToken, err := - pipelineStore.ListPipelineVersions(fakeUUID, opts) + pipelineStore.ListPipelineVersions(defaultFakePipelineId, opts) assert.Nil(t, err) assert.Equal(t, "", nextPageToken) assert.Equal(t, 1, total_size) assert.Equal(t, pipelineVersions, []*model.PipelineVersion{ &model.PipelineVersion{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, Name: "pipeline_version_1", CreatedAtInSec: 2, Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, }) @@ -1255,7 +1260,7 @@ func TestListPipelineVersions_WithFilter(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) // Create a pipeline. pipelineStore.CreatePipeline( @@ -1265,23 +1270,23 @@ func TestListPipelineVersions_WithFilter(t *testing.T) { Status: model.PipelineReady, }) - // Create "version_1" with fakeUUIDTwo. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + // Create "version_1" with defaultFakePipelineIdTwo. + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) - // Create "version_2" with fakeUUIDThree. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDThree, nil) + // Create "version_2" with defaultFakePipelineIdThree. + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdThree, nil) pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_2", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) @@ -1310,7 +1315,7 @@ func TestListPipelineVersions_WithFilter(t *testing.T) { // Only return 1 pipeline version with equal filter. opts, err := list.NewOptions(&model.PipelineVersion{}, 10, "id", equalFilterProto) assert.Nil(t, err) - _, totalSize, nextPageToken, err := pipelineStore.ListPipelineVersions(fakeUUID, opts) + _, totalSize, nextPageToken, err := pipelineStore.ListPipelineVersions(defaultFakePipelineId, opts) assert.Nil(t, err) assert.Equal(t, "", nextPageToken) assert.Equal(t, 1, totalSize) @@ -1318,7 +1323,7 @@ func TestListPipelineVersions_WithFilter(t *testing.T) { // Return 2 pipeline versions without filter. opts, err = list.NewOptions(&model.PipelineVersion{}, 10, "id", nil) assert.Nil(t, err) - _, totalSize, nextPageToken, err = pipelineStore.ListPipelineVersions(fakeUUID, opts) + _, totalSize, nextPageToken, err = pipelineStore.ListPipelineVersions(defaultFakePipelineId, opts) assert.Nil(t, err) assert.Equal(t, "", nextPageToken) assert.Equal(t, 2, totalSize) @@ -1326,7 +1331,7 @@ func TestListPipelineVersions_WithFilter(t *testing.T) { // Return 2 pipeline versions with prefix filter. opts, err = list.NewOptions(&model.PipelineVersion{}, 10, "id", prefixFilterProto) assert.Nil(t, err) - _, totalSize, nextPageToken, err = pipelineStore.ListPipelineVersions(fakeUUID, opts) + _, totalSize, nextPageToken, err = pipelineStore.ListPipelineVersions(defaultFakePipelineId, opts) assert.Nil(t, err) assert.Equal(t, "", nextPageToken) assert.Equal(t, 2, totalSize) @@ -1338,13 +1343,13 @@ func TestListPipelineVersionsError(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) db.Close() // Internal error because of closed DB. opts, err := list.NewOptions(&model.PipelineVersion{}, 2, "", nil) assert.Nil(t, err) - _, _, _, err = pipelineStore.ListPipelineVersions(fakeUUID, opts) + _, _, _, err = pipelineStore.ListPipelineVersions(defaultFakePipelineId, opts) assert.Equal(t, codes.Internal, err.(*util.UserError).ExternalStatusCode()) } @@ -1354,7 +1359,7 @@ func TestUpdatePipelineVersionStatus(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) // Create a pipeline. pipelineStore.CreatePipeline( @@ -1365,12 +1370,12 @@ func TestUpdatePipelineVersionStatus(t *testing.T) { }) // Create a version under the above pipeline. - pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(fakeUUIDTwo, nil) + pipelineStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineIdTwo, nil) pipelineVersion, _ := pipelineStore.CreatePipelineVersion( &model.PipelineVersion{ Name: "pipeline_version_1", Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionReady, }, true) @@ -1385,11 +1390,11 @@ func TestUpdatePipelineVersionStatus(t *testing.T) { pipelineVersion.UUID, model.PipelineVersionDeleting) assert.Nil(t, err) assert.Equal(t, *retrievedPipelineVersion, model.PipelineVersion{ - UUID: fakeUUIDTwo, + UUID: defaultFakePipelineIdTwo, Name: "pipeline_version_1", CreatedAtInSec: 2, Parameters: `[{"Name": "param1"}]`, - PipelineId: fakeUUID, + PipelineId: defaultFakePipelineId, Status: model.PipelineVersionDeleting, }) } @@ -1400,11 +1405,11 @@ func TestUpdatePipelineVersionStatusError(t *testing.T) { pipelineStore := NewPipelineStore( db, util.NewFakeTimeForEpoch(), - util.NewFakeUUIDGeneratorOrFatal(fakeUUID, nil)) + util.NewFakeUUIDGeneratorOrFatal(defaultFakePipelineId, nil)) db.Close() // Internal error because of closed DB. err := pipelineStore.UpdatePipelineVersionStatus( - fakeUUID, model.PipelineVersionDeleting) + defaultFakePipelineId, model.PipelineVersionDeleting) assert.Equal(t, codes.Internal, err.(*util.UserError).ExternalStatusCode()) } diff --git a/backend/src/apiserver/storage/run_store.go b/backend/src/apiserver/storage/run_store.go index e91d428d49..31d638261d 100644 --- a/backend/src/apiserver/storage/run_store.go +++ b/backend/src/apiserver/storage/run_store.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -445,11 +445,11 @@ func (s *RunStore) UpdateRun(runID string, condition string, finishedAtInSec int return util.NewInternalServerError(errors.New("Failed to update run"), "Failed to update run %s. More than 1 rows affected", runID) } else if r == 0 { tx.Rollback() - return util.NewInternalServerError(errors.New("Failed to update run"), "Failed to update run %s. Row not found", runID) + return util.Wrap(util.NewResourceNotFoundError("Run", fmt.Sprint(runID)), "Failed to update run") } if err := tx.Commit(); err != nil { - return util.NewInternalServerError(err, "failed to commit transaction") + return util.NewInternalServerError(err, "failed to commit transaction for run %s", runID) } return nil } diff --git a/backend/src/apiserver/storage/run_store_test.go b/backend/src/apiserver/storage/run_store_test.go index 1e755fb594..7696b92233 100644 --- a/backend/src/apiserver/storage/run_store_test.go +++ b/backend/src/apiserver/storage/run_store_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -29,6 +29,12 @@ import ( "google.golang.org/grpc/codes" ) +const ( + defaultFakeRunId = "123e4567-e89b-12d3-a456-426655440020" + defaultFakeRunIdTwo = "123e4567-e89b-12d3-a456-426655440021" + defaultFakeRunIdThree = "123e4567-e89b-12d3-a456-426655440023" +) + type RunMetricSorter []*model.RunMetric func (r RunMetricSorter) Len() int { return len(r) } @@ -820,7 +826,8 @@ func TestUpdateRun_RunNotExist(t *testing.T) { err := runStore.UpdateRun("not-exist", "done", 1, "workflow_done") assert.NotNil(t, err) - assert.Contains(t, err.Error(), "Row not found") + assert.True(t, util.IsUserErrorCodeMatch(err, codes.NotFound)) + assert.Contains(t, err.Error(), "not found") } func TestTerminateRun(t *testing.T) { diff --git a/backend/src/apiserver/storage/sql_null_util.go b/backend/src/apiserver/storage/sql_null_util.go index 2a86d20aee..a1d3cd555d 100644 --- a/backend/src/apiserver/storage/sql_null_util.go +++ b/backend/src/apiserver/storage/sql_null_util.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/storage/task_store.go b/backend/src/apiserver/storage/task_store.go new file mode 100644 index 0000000000..5f43660416 --- /dev/null +++ b/backend/src/apiserver/storage/task_store.go @@ -0,0 +1,210 @@ +package storage + +import ( + "database/sql" + "fmt" + sq "github.com/Masterminds/squirrel" + "github.com/golang/glog" + "github.com/kubeflow/pipelines/backend/src/apiserver/common" + "github.com/kubeflow/pipelines/backend/src/apiserver/list" + "github.com/kubeflow/pipelines/backend/src/apiserver/model" + "github.com/kubeflow/pipelines/backend/src/common/util" +) + +const table_name = "tasks" + +var ( + taskColumns = []string{ + "UUID", + "Namespace", + "PipelineName", + "RunUUID", + "MLMDExecutionID", + "CreatedTimestamp", + "FinishedTimestamp", + "Fingerprint", + } +) + +type TaskStoreInterface interface { + // Create a task entry in the database + CreateTask(task *model.Task) (*model.Task, error) + + ListTasks(filterContext *common.FilterContext, opts *list.Options) ([]*model.Task, int, string, error) + + GetTask(id string) (*model.Task, error) +} + +type TaskStore struct { + db *DB + time util.TimeInterface + uuid util.UUIDGeneratorInterface +} + +// NewTaskStore creates a new TaskStore. +func NewTaskStore(db *DB, time util.TimeInterface, uuid util.UUIDGeneratorInterface) *TaskStore { + return &TaskStore{ + db: db, + time: time, + uuid: uuid, + } +} + +func (s *TaskStore) CreateTask(task *model.Task) (*model.Task, error) { + // Set up UUID for task. + newTask := *task + id, err := s.uuid.NewRandom() + if err != nil { + return nil, util.NewInternalServerError(err, "Failed to create an task id.") + } + newTask.UUID = id.String() + + sql, args, err := sq. + Insert(table_name). + SetMap(sq.Eq{ + "UUID": newTask.UUID, + "Namespace": newTask.Namespace, + "PipelineName": newTask.PipelineName, + "RunUUID": newTask.RunUUID, + "MLMDExecutionID": newTask.MLMDExecutionID, + "CreatedTimestamp": newTask.CreatedTimestamp, + "FinishedTimestamp":newTask.FinishedTimestamp, + "Fingerprint": newTask.Fingerprint, + }). + ToSql() + if err != nil { + return nil, util.NewInternalServerError(err, "Failed to create query to insert task to task table: %v", + err.Error()) + } + _, err = s.db.Exec(sql, args...) + if err != nil { + return nil, util.NewInternalServerError(err, "Failed to add task to task table: %v", + err.Error()) + } + return &newTask, nil +} + +func (s *TaskStore) scanRows(rows *sql.Rows) ([]*model.Task, error) { + var tasks []*model.Task + for rows.Next() { + var uuid, namespace, pipelineName, runUUID, mlmdExecutionID, fingerprint string + var createdTimestamp, finishedTimestamp int64 + err := rows.Scan(&uuid, &namespace, &pipelineName, &runUUID, &mlmdExecutionID, &createdTimestamp, &finishedTimestamp, &fingerprint) + if err != nil { + fmt.Printf("scan error is %v", err) + return tasks, err + } + task := &model.Task{ + UUID: uuid, + Namespace: namespace, + PipelineName: pipelineName, + RunUUID: runUUID, + MLMDExecutionID: mlmdExecutionID, + CreatedTimestamp: createdTimestamp, + FinishedTimestamp: finishedTimestamp, + Fingerprint: fingerprint, + } + tasks = append(tasks, task) + } + return tasks, nil +} + +// Runs two SQL queries in a transaction to return a list of matching experiments, as well as their +// total_size. The total_size does not reflect the page size. +func (s *TaskStore) ListTasks(filterContext *common.FilterContext, opts *list.Options) ([]*model.Task, int, string, error) { + errorF := func(err error) ([]*model.Task, int, string, error) { + return nil, 0, "", util.NewInternalServerError(err, "Failed to list tasks: %v", err) + } + + // SQL for getting the filtered and paginated rows + sqlBuilder := sq.Select(taskColumns...).From("tasks") + if filterContext.ReferenceKey != nil && filterContext.ReferenceKey.Type == common.Pipeline { + sqlBuilder = sqlBuilder.Where(sq.Eq{"PipelineName": filterContext.ReferenceKey.ID}) + } + sqlBuilder = opts.AddFilterToSelect(sqlBuilder) + + rowsSql, rowsArgs, err := opts.AddPaginationToSelect(sqlBuilder).ToSql() + if err != nil { + return errorF(err) + } + + // SQL for getting total size. This matches the query to get all the rows above, in order + // to do the same filter, but counts instead of scanning the rows. + sqlBuilder = sq.Select("count(*)").From("tasks") + if filterContext.ReferenceKey != nil && filterContext.ReferenceKey.Type == common.Pipeline { + sqlBuilder = sqlBuilder.Where(sq.Eq{"PipelineName": filterContext.ReferenceKey.ID}) + } + sizeSql, sizeArgs, err := opts.AddFilterToSelect(sqlBuilder).ToSql() + if err != nil { + return errorF(err) + } + + // Use a transaction to make sure we're returning the total_size of the same rows queried + tx, err := s.db.Begin() + if err != nil { + glog.Errorf("Failed to start transaction to list tasks") + return errorF(err) + } + + rows, err := tx.Query(rowsSql, rowsArgs...) + if err != nil { + tx.Rollback() + return errorF(err) + } + exps, err := s.scanRows(rows) + if err != nil { + tx.Rollback() + return errorF(err) + } + rows.Close() + + sizeRow, err := tx.Query(sizeSql, sizeArgs...) + if err != nil { + tx.Rollback() + return errorF(err) + } + total_size, err := list.ScanRowToTotalSize(sizeRow) + if err != nil { + tx.Rollback() + return errorF(err) + } + sizeRow.Close() + + err = tx.Commit() + if err != nil { + glog.Errorf("Failed to commit transaction to list experiments") + return errorF(err) + } + + if len(exps) <= opts.PageSize { + return exps, total_size, "", nil + } + + npt, err := opts.NextPageToken(exps[opts.PageSize]) + return exps[:opts.PageSize], total_size, npt, err +} + +func (s *TaskStore) GetTask(id string) (*model.Task, error) { + sql, args, err := sq. + Select(taskColumns...). + From("tasks"). + Where(sq.Eq{"tasks.uuid": id}). + Limit(1).ToSql() + if err != nil { + return nil, util.NewInternalServerError(err, "Failed to create query to get task: %v", err.Error()) + } + r, err := s.db.Query(sql, args...) + if err != nil { + return nil, util.NewInternalServerError(err, "Failed to get task: %v", err.Error()) + } + defer r.Close() + tasks, err := s.scanRows(r) + + if err != nil || len(tasks) > 1 { + return nil, util.NewInternalServerError(err, "Failed to get pipeline: %v", err.Error()) + } + if len(tasks) == 0 { + return nil, util.NewResourceNotFoundError("task", fmt.Sprint(id)) + } + return tasks[0], nil +} diff --git a/backend/src/apiserver/storage/task_store_test.go b/backend/src/apiserver/storage/task_store_test.go new file mode 100644 index 0000000000..d8989af34c --- /dev/null +++ b/backend/src/apiserver/storage/task_store_test.go @@ -0,0 +1,239 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package storage + +import ( + "fmt" + "testing" + + api "github.com/kubeflow/pipelines/backend/api/go_client" + "github.com/kubeflow/pipelines/backend/src/apiserver/common" + "github.com/kubeflow/pipelines/backend/src/apiserver/list" + "github.com/kubeflow/pipelines/backend/src/apiserver/model" + "github.com/kubeflow/pipelines/backend/src/common/util" + "github.com/stretchr/testify/assert" +) + +const ( + defaultFakeTaskId = "123e4567-e89b-12d3-a456-426655440010" + defaultFakeTaskIdTwo = "123e4567-e89b-12d3-a456-426655440011" + defaultFakeTaskIdThree = "123e4567-e89b-12d3-a456-426655440012" + defaultFakeTaskIdFour = "123e4567-e89b-12d3-a456-426655440013" + defaultFakeTaskIdFive = "123e4567-e89b-12d3-a456-426655440014" +) + +func initializeTaskStore() (*DB, *TaskStore) { + db := NewFakeDbOrFatal() + expStore := NewExperimentStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakeExpId, nil)) + expStore.CreateExperiment(&model.Experiment{Name: "e1", Namespace: "ns1"}) + expStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakeExpIdTwo, nil) + expStore.CreateExperiment(&model.Experiment{Name: "e2", Namespace: "ns2"}) + runStore := NewRunStore(db, util.NewFakeTimeForEpoch()) + + run1 := &model.RunDetail{ + Run: model.Run{ + UUID: defaultFakeRunId, + ExperimentUUID: defaultFakeExpId, + DisplayName: "run1", + Name: "workflow-name", + Namespace: "ns1", + ServiceAccount: "pipeline-runner", + StorageState: api.Run_STORAGESTATE_AVAILABLE.String(), + CreatedAtInSec: 4, + Conditions: "done", + ResourceReferences: []*model.ResourceReference{ + { + ResourceUUID: defaultFakeRunId, + ResourceType: common.Run, + ReferenceUUID: defaultFakeExpId, + ReferenceName: "e1", + ReferenceType: common.Experiment, + Relationship: common.Owner, + }, + }, + }, + PipelineRuntime: model.PipelineRuntime{ + WorkflowRuntimeManifest: "workflow1", + }, + } + runStore.CreateRun(run1) + run2 := &model.RunDetail{ + Run: model.Run{ + UUID: defaultFakeRunIdTwo, + ExperimentUUID: defaultFakeExpIdTwo, + DisplayName: "run2", + Name: "workflow-name", + Namespace: "ns2", + ServiceAccount: "pipeline-runner", + StorageState: api.Run_STORAGESTATE_AVAILABLE.String(), + CreatedAtInSec: 4, + Conditions: "Running", + ResourceReferences: []*model.ResourceReference{ + { + ResourceUUID: defaultFakeRunIdTwo, + ResourceType: common.Run, + ReferenceUUID: defaultFakeExpIdTwo, + ReferenceName: "e2", + ReferenceType: common.Experiment, + Relationship: common.Owner, + }, + }, + }, + PipelineRuntime: model.PipelineRuntime{ + WorkflowRuntimeManifest: "workflow2", + }, + } + + run3 := &model.RunDetail{ + Run: model.Run{ + UUID: defaultFakeRunIdThree, + ExperimentUUID: defaultFakeExpId, + DisplayName: "run3", + Name: "workflow-name", + Namespace: "ns1", + ServiceAccount: "pipeline-runner", + StorageState: api.Run_STORAGESTATE_AVAILABLE.String(), + CreatedAtInSec: 5, + Conditions: "Running", + ResourceReferences: []*model.ResourceReference{ + { + ResourceUUID: defaultFakeRunIdThree, + ResourceType: common.Run, + ReferenceUUID: defaultFakeExpId, + ReferenceName: "e1", + ReferenceType: common.Experiment, + Relationship: common.Owner, + }, + }, + }, + PipelineRuntime: model.PipelineRuntime{ + WorkflowRuntimeManifest: "workflow1", + }, + } + + //runStore.CreateRun(run1) + runStore.CreateRun(run2) + runStore.CreateRun(run3) + + taskStore := NewTaskStore(db, util.NewFakeTimeForEpoch(), util.NewFakeUUIDGeneratorOrFatal(defaultFakeTaskId, nil)) + task1 := &model.Task{ + Namespace: "ns1", + PipelineName: "namespace/ns1/pipeline/pipeline1", + RunUUID: run1.UUID, + MLMDExecutionID: "1", + CreatedTimestamp: 1, + FinishedTimestamp: 2, + Fingerprint: "1", + } + taskStore.CreateTask(task1) + + taskStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakeTaskIdTwo, nil) + task2 := &model.Task{ + Namespace: "ns1", + PipelineName: "namespace/ns1/pipeline/pipeline1", + RunUUID: run1.UUID, + MLMDExecutionID: "2", + CreatedTimestamp: 3, + FinishedTimestamp: 4, + Fingerprint: "2", + } + taskStore.CreateTask(task2) + + taskStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakeTaskIdThree, nil) + task3 := &model.Task{ + Namespace: "ns1", + PipelineName: "namespace/ns1/pipeline/pipeline1", + RunUUID: run3.UUID, + MLMDExecutionID: "3", + CreatedTimestamp: 5, + FinishedTimestamp: 6, + Fingerprint: "1", + } + taskStore.CreateTask(task3) + + taskStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakeTaskIdFour, nil) + task4 := &model.Task{ + Namespace: "ns2", + PipelineName: "namespace/ns2/pipeline/pipeline2", + RunUUID: run2.UUID, + MLMDExecutionID: "4", + CreatedTimestamp: 5, + FinishedTimestamp: 6, + Fingerprint: "1", + } + taskStore.CreateTask(task4) + + taskStore.uuid = util.NewFakeUUIDGeneratorOrFatal(defaultFakeTaskIdFive, nil) + task5 := &model.Task{ + Namespace: "ns2", + PipelineName: "namespace/ns2/pipeline/pipeline2", + RunUUID: run2.UUID, + MLMDExecutionID: "5", + CreatedTimestamp: 7, + FinishedTimestamp: 8, + Fingerprint: "10", + } + taskStore.CreateTask(task5) + return db, taskStore +} + +func TestListTasks(t *testing.T) { + db, taskStore := initializeTaskStore() + defer db.Close() + + expectedFirstPageTasks := []*model.Task{ + { + UUID: defaultFakeTaskIdFour, + Namespace: "ns2", + PipelineName: "namespace/ns2/pipeline/pipeline2", + RunUUID: defaultFakeRunIdTwo, + MLMDExecutionID: "4", + CreatedTimestamp: 5, + FinishedTimestamp: 6, + Fingerprint: "1", + }} + expectedSecondPageTasks := []*model.Task{ + { + UUID: defaultFakeTaskIdFive, + Namespace: "ns2", + PipelineName: "namespace/ns2/pipeline/pipeline2", + RunUUID: defaultFakeRunIdTwo, + MLMDExecutionID: "5", + CreatedTimestamp: 7, + FinishedTimestamp: 8, + Fingerprint: "10", + }} + + opts, err := list.NewOptions(&model.Task{}, 1, "", nil) + assert.Nil(t, err) + + tasks, total_size, nextPageToken, err := taskStore.ListTasks( + &common.FilterContext{ReferenceKey: &common.ReferenceKey{Type: common.Pipeline, ID: "namespace/ns2/pipeline/pipeline2"}}, opts) + assert.Nil(t, err) + assert.Equal(t, 2, total_size) + assert.Equal(t, expectedFirstPageTasks, tasks, "Unexpected Tasks listed.") + assert.NotEmpty(t, nextPageToken) + fmt.Print("tasks") + fmt.Print(nextPageToken) + + opts, err = list.NewOptionsFromToken(nextPageToken, 1) + assert.Nil(t, err) + tasks, total_size, nextPageToken, err = taskStore.ListTasks( + &common.FilterContext{ReferenceKey: &common.ReferenceKey{Type: common.Pipeline, ID: "namespace/ns2/pipeline/pipeline2"}}, opts) + assert.Nil(t, err) + assert.Equal(t, 2, total_size) + assert.Equal(t, expectedSecondPageTasks, tasks, "Unexpected Tasks listed.") + assert.Empty(t, nextPageToken) +} diff --git a/backend/src/apiserver/visualization/exporter.py b/backend/src/apiserver/visualization/exporter.py index 2f56f57711..757be271cc 100644 --- a/backend/src/apiserver/visualization/exporter.py +++ b/backend/src/apiserver/visualization/exporter.py @@ -3,7 +3,7 @@ converting those objects to HTML. """ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/visualization/requirements-test.txt b/backend/src/apiserver/visualization/requirements-test.txt index 4d782b6e44..d9d5fbfd16 100644 --- a/backend/src/apiserver/visualization/requirements-test.txt +++ b/backend/src/apiserver/visualization/requirements-test.txt @@ -1,6 +1 @@ -ipykernel==5.1.1 -jupyter_client==5.2.4 -nbconvert==5.5.0 -nbformat==4.4.0 snapshottest==0.5.1 -tornado diff --git a/backend/src/apiserver/visualization/requirements.in b/backend/src/apiserver/visualization/requirements.in index 9c309bf2e1..0662b4be04 100644 --- a/backend/src/apiserver/visualization/requirements.in +++ b/backend/src/apiserver/visualization/requirements.in @@ -8,6 +8,9 @@ jupyter_client==5.3.* nbconvert==5.5.0 nbformat==4.4.0 scikit_learn==0.21.2 -tensorflow-metadata==0.26.* -tensorflow-model-analysis==0.26.* -tensorflow-data-validation==0.26.* +tensorflow==2.5.1 +tensorflow-metadata==1.2.* +tensorflow-model-analysis==0.33.* +tensorflow-data-validation==1.2.* +tensorflow-serving-api==2.5.* +tornado==6.* diff --git a/backend/src/apiserver/visualization/requirements.txt b/backend/src/apiserver/visualization/requirements.txt index fd5f8f99f0..b3ab2886ba 100644 --- a/backend/src/apiserver/visualization/requirements.txt +++ b/backend/src/apiserver/visualization/requirements.txt @@ -4,145 +4,143 @@ # # pip-compile --output-file=- - # -absl-py==0.10.0 # via tensorboard, tensorflow, tensorflow-data-validation, tensorflow-metadata, tensorflow-model-analysis, tensorflow-transform, tfx-bsl -apache-beam[gcp]==2.28.0 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx-bsl +absl-py==0.12.0 # via tensorboard, tensorflow, tensorflow-data-validation, tensorflow-metadata, tensorflow-model-analysis, tfx-bsl +apache-beam[gcp]==2.31.0 # via tensorflow-data-validation, tensorflow-model-analysis, tfx-bsl argon2-cffi==20.1.0 # via notebook astunparse==1.6.3 # via tensorflow -attrs==20.3.0 # via jsonschema +attrs==21.2.0 # via jsonschema avro-python3==1.9.2.1 # via apache-beam backcall==0.2.0 # via ipython -bleach==3.3.0 # via nbconvert +bleach==4.0.0 # via nbconvert bokeh==1.2.0 # via -r - -cachetools==4.2.1 # via apache-beam, google-auth -certifi==2020.12.5 # via requests -cffi==1.14.5 # via argon2-cffi, google-crc32c -chardet==4.0.0 # via requests +cached-property==1.5.2 # via h5py +cachetools==4.2.2 # via apache-beam, google-auth +certifi==2021.5.30 # via requests +cffi==1.14.6 # via argon2-cffi, google-crc32c +charset-normalizer==2.0.4 # via requests crcmod==1.7 # via apache-beam -dataclasses==0.8 # via libcst -decorator==4.4.2 # via gcsfs, ipython, traitlets -defusedxml==0.6.0 # via nbconvert +dataclasses==0.8 # via apache-beam, werkzeug +decorator==5.0.9 # via gcsfs, ipython, traitlets +defusedxml==0.7.1 # via nbconvert dill==0.3.1.1 # via apache-beam docopt==0.6.2 # via hdfs entrypoints==0.3 # via nbconvert -fastavro==1.3.2 # via apache-beam -fasteners==0.16 # via google-apitools +fastavro==1.4.4 # via apache-beam +fasteners==0.16.3 # via google-apitools +flatbuffers==1.12 # via tensorflow future==0.18.2 # via apache-beam -gast==0.3.3 # via tensorflow +gast==0.4.0 # via tensorflow gcsfs==0.2.3 # via -r - -google-api-core[grpc,grpcgcp]==1.26.0 # via google-cloud-bigquery, google-cloud-bigtable, google-cloud-build, google-cloud-core, google-cloud-datastore, google-cloud-dlp, google-cloud-language, google-cloud-pubsub, google-cloud-spanner, google-cloud-videointelligence, google-cloud-vision -google-api-python-client==1.7.12 # via -r -, tfx-bsl +google-api-core[grpc,grpcgcp]==1.31.2 # via google-cloud-bigquery, google-cloud-bigtable, google-cloud-core, google-cloud-datastore, google-cloud-dlp, google-cloud-language, google-cloud-pubsub, google-cloud-spanner, google-cloud-videointelligence, google-cloud-vision +google-api-python-client==1.7.12 # via -r -, google-cloud-profiler, tfx-bsl google-apitools==0.5.31 # via apache-beam -google-auth-httplib2==0.0.4 # via google-api-python-client -google-auth-oauthlib==0.4.2 # via gcsfs, tensorboard -google-auth==1.27.0 # via apache-beam, gcsfs, google-api-core, google-api-python-client, google-auth-httplib2, google-auth-oauthlib, google-cloud-core, tensorboard -google-cloud-bigquery==1.28.0 # via apache-beam +google-auth-httplib2==0.1.0 # via google-api-python-client, google-cloud-profiler +google-auth-oauthlib==0.4.5 # via gcsfs, tensorboard +google-auth==1.35.0 # via apache-beam, gcsfs, google-api-core, google-api-python-client, google-auth-httplib2, google-auth-oauthlib, google-cloud-core, google-cloud-profiler, tensorboard +google-cloud-bigquery==2.20.0 # via apache-beam, tensorflow-data-validation, tensorflow-model-analysis, tfx-bsl google-cloud-bigtable==1.7.0 # via apache-beam -google-cloud-build==2.0.0 # via apache-beam -google-cloud-core==1.6.0 # via apache-beam, google-cloud-bigquery, google-cloud-bigtable, google-cloud-datastore, google-cloud-spanner +google-cloud-core==1.7.2 # via apache-beam, google-cloud-bigquery, google-cloud-bigtable, google-cloud-datastore, google-cloud-spanner google-cloud-datastore==1.15.3 # via apache-beam google-cloud-dlp==1.0.0 # via apache-beam google-cloud-language==1.3.0 # via apache-beam +google-cloud-profiler==3.0.5 # via apache-beam google-cloud-pubsub==1.7.0 # via apache-beam google-cloud-spanner==1.19.1 # via apache-beam google-cloud-videointelligence==1.16.1 # via apache-beam google-cloud-vision==1.0.0 # via apache-beam google-crc32c==1.1.2 # via google-resumable-media google-pasta==0.2.0 # via tensorflow -google-resumable-media==1.2.0 # via google-cloud-bigquery -googleapis-common-protos[grpc]==1.52.0 # via google-api-core, grpc-google-iam-v1, tensorflow-metadata +google-resumable-media==1.3.3 # via google-cloud-bigquery +googleapis-common-protos[grpc]==1.53.0 # via google-api-core, grpc-google-iam-v1, tensorflow-metadata grpc-google-iam-v1==0.12.3 # via google-cloud-bigtable, google-cloud-pubsub, google-cloud-spanner grpcio-gcp==0.2.2 # via apache-beam, google-api-core -grpcio==1.35.0 # via apache-beam, google-api-core, googleapis-common-protos, grpc-google-iam-v1, grpcio-gcp, tensorboard, tensorflow, tensorflow-serving-api -h5py==2.10.0 # via tensorflow +grpcio==1.34.1 # via apache-beam, google-api-core, googleapis-common-protos, grpc-google-iam-v1, grpcio-gcp, tensorboard, tensorflow, tensorflow-serving-api +h5py==3.1.0 # via tensorflow hdfs==2.6.0 # via apache-beam -httplib2==0.17.4 # via apache-beam, google-api-python-client, google-apitools, google-auth-httplib2, oauth2client -idna==2.10 # via requests -importlib-metadata==3.7.0 # via jsonschema, markdown +httplib2==0.19.1 # via apache-beam, google-api-python-client, google-apitools, google-auth-httplib2, oauth2client +idna==3.2 # via requests +importlib-metadata==4.6.4 # via jsonschema, markdown ipykernel==5.1.1 # via -r -, ipywidgets, notebook ipython-genutils==0.2.0 # via nbformat, notebook, traitlets ipython==7.12.0 # via -r -, ipykernel, ipywidgets, tensorflow-model-analysis ipywidgets==7.6.3 # via tensorflow-model-analysis itables==0.1.0 # via -r - jedi==0.18.0 # via ipython -jinja2==2.11.3 # via bokeh, nbconvert, notebook +jinja2==3.0.1 # via bokeh, nbconvert, notebook joblib==0.14.1 # via scikit-learn, tensorflow-data-validation jsonschema==3.2.0 # via nbformat jupyter-client==5.3.5 # via -r -, ipykernel, notebook jupyter-core==4.7.1 # via jupyter-client, nbconvert, nbformat, notebook jupyterlab-widgets==1.0.0 # via ipywidgets +keras-nightly==2.5.0.dev2021032900 # via tensorflow keras-preprocessing==1.1.2 # via tensorflow -libcst==0.3.17 # via google-cloud-build markdown==3.3.4 # via tensorboard -markupsafe==1.1.1 # via jinja2 +markupsafe==2.0.1 # via jinja2 mistune==0.8.4 # via nbconvert -mock==2.0.0 # via apache-beam -mypy-extensions==0.4.3 # via typing-inspect nbconvert==5.5.0 # via -r -, notebook nbformat==4.4.0 # via -r -, ipywidgets, nbconvert, notebook -notebook==6.2.0 # via widgetsnbextension -numpy==1.18.5 # via apache-beam, bokeh, h5py, keras-preprocessing, opt-einsum, pandas, pyarrow, scikit-learn, scipy, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx-bsl +notebook==6.4.3 # via widgetsnbextension +numpy==1.19.5 # via apache-beam, bokeh, h5py, keras-preprocessing, opt-einsum, pandas, pyarrow, scikit-learn, scipy, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-model-analysis, tfx-bsl oauth2client==4.1.3 # via apache-beam, google-apitools -oauthlib==3.1.0 # via requests-oauthlib +oauthlib==3.1.1 # via requests-oauthlib opt-einsum==3.3.0 # via tensorflow -packaging==20.9 # via bleach, bokeh, google-api-core +packaging==21.0 # via bleach, bokeh, google-api-core, google-cloud-bigquery pandas==1.1.5 # via itables, tensorflow-data-validation, tensorflow-model-analysis, tfx-bsl pandocfilters==1.4.3 # via nbconvert -parso==0.8.1 # via jedi -pbr==5.5.1 # via mock +parso==0.8.2 # via jedi pexpect==4.8.0 # via ipython pickleshare==0.7.5 # via ipython -pillow==8.1.0 # via bokeh -prometheus-client==0.9.0 # via notebook -prompt-toolkit==3.0.16 # via ipython -proto-plus==1.13.0 # via google-cloud-build -protobuf==3.15.2 # via apache-beam, google-api-core, googleapis-common-protos, proto-plus, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-metadata, tensorflow-model-analysis, tensorflow-serving-api, tensorflow-transform, tfx-bsl +pillow==8.3.1 # via bokeh +prometheus-client==0.11.0 # via notebook +prompt-toolkit==3.0.19 # via ipython +proto-plus==1.19.0 # via google-cloud-bigquery +protobuf==3.17.3 # via apache-beam, google-api-core, google-cloud-bigquery, google-cloud-profiler, googleapis-common-protos, proto-plus, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-metadata, tensorflow-model-analysis, tensorflow-serving-api, tfx-bsl ptyprocess==0.7.0 # via pexpect, terminado -pyarrow==0.17.1 # via apache-beam, tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx-bsl +pyarrow==2.0.0 # via apache-beam, tensorflow-data-validation, tensorflow-model-analysis, tfx-bsl pyasn1-modules==0.2.8 # via google-auth, oauth2client pyasn1==0.4.8 # via oauth2client, pyasn1-modules, rsa pycparser==2.20 # via cffi -pydot==1.4.2 # via apache-beam, tensorflow-transform -pygments==2.8.0 # via ipython, nbconvert -pymongo==3.11.3 # via apache-beam -pyparsing==2.4.7 # via packaging, pydot -pyrsistent==0.17.3 # via jsonschema -python-dateutil==2.8.1 # via apache-beam, bokeh, jupyter-client, pandas +pydot==1.4.2 # via apache-beam +pygments==2.10.0 # via ipython, nbconvert +pymongo==3.12.0 # via apache-beam +pyparsing==2.4.7 # via httplib2, packaging, pydot +pyrsistent==0.18.0 # via jsonschema +python-dateutil==2.8.2 # via apache-beam, bokeh, jupyter-client, pandas pytz==2021.1 # via apache-beam, google-api-core, pandas -pyyaml==5.4.1 # via bokeh, libcst -pyzmq==22.0.3 # via jupyter-client, notebook +pyyaml==5.4.1 # via bokeh +pyzmq==22.2.1 # via jupyter-client, notebook requests-oauthlib==1.3.0 # via google-auth-oauthlib -requests==2.25.1 # via apache-beam, gcsfs, google-api-core, hdfs, requests-oauthlib, tensorboard +requests==2.26.0 # via apache-beam, gcsfs, google-api-core, google-cloud-bigquery, google-cloud-profiler, hdfs, requests-oauthlib, tensorboard rsa==4.7.2 # via google-auth, oauth2client scikit_learn==0.21.2 # via -r - scipy==1.5.4 # via scikit-learn, tensorflow-model-analysis -send2trash==1.5.0 # via notebook -six==1.15.0 # via absl-py, argon2-cffi, astunparse, bleach, bokeh, fasteners, google-api-core, google-api-python-client, google-apitools, google-auth, google-auth-httplib2, google-cloud-bigquery, google-cloud-core, google-pasta, google-resumable-media, grpcio, h5py, hdfs, jsonschema, keras-preprocessing, mock, oauth2client, protobuf, python-dateutil, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, traitlets +send2trash==1.8.0 # via notebook +six==1.15.0 # via absl-py, argon2-cffi, astunparse, bleach, bokeh, fasteners, google-api-core, google-api-python-client, google-apitools, google-auth, google-auth-httplib2, google-cloud-core, google-pasta, google-resumable-media, grpcio, hdfs, jsonschema, keras-preprocessing, oauth2client, protobuf, python-dateutil, tensorflow, tensorflow-data-validation, tensorflow-model-analysis, traitlets +tensorboard-data-server==0.6.1 # via tensorboard tensorboard-plugin-wit==1.8.0 # via tensorboard -tensorboard==2.4.1 # via tensorflow -tensorflow-data-validation==0.26.0 # via -r - -tensorflow-estimator==2.3.0 # via tensorflow -tensorflow-metadata==0.26.0 # via -r -, tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx-bsl -tensorflow-model-analysis==0.26.0 # via -r - -tensorflow-serving-api==2.3.0 # via tfx-bsl -tensorflow-transform==0.26.0 # via tensorflow-data-validation -tensorflow==2.3.2 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-serving-api, tensorflow-transform, tfx-bsl +tensorboard==2.6.0 # via tensorflow +tensorflow-data-validation==1.2.0 # via -r - +tensorflow-estimator==2.5.0 # via tensorflow +tensorflow-metadata==1.2.0 # via -r -, tensorflow-data-validation, tensorflow-model-analysis, tfx-bsl +tensorflow-model-analysis==0.33.0 # via -r - +tensorflow-serving-api==2.5.1 # via -r -, tfx-bsl +tensorflow==2.5.1 # via -r -, tensorflow-data-validation, tensorflow-model-analysis, tensorflow-serving-api, tfx-bsl termcolor==1.1.0 # via tensorflow -terminado==0.9.2 # via notebook -testpath==0.4.4 # via nbconvert -tfx-bsl==0.26.1 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform +terminado==0.11.0 # via notebook +testpath==0.5.0 # via nbconvert +tfx-bsl==1.2.0 # via tensorflow-data-validation, tensorflow-model-analysis tornado==6.1 # via bokeh, ipykernel, jupyter-client, notebook, terminado traitlets==4.3.3 # via ipykernel, ipython, ipywidgets, jupyter-client, jupyter-core, nbconvert, nbformat, notebook -typing-extensions==3.7.4.3 # via apache-beam, importlib-metadata, libcst, typing-inspect -typing-inspect==0.6.0 # via libcst +typing-extensions==3.7.4.3 # via apache-beam, importlib-metadata, tensorflow uritemplate==3.0.1 # via google-api-python-client -urllib3==1.26.3 # via requests +urllib3==1.26.6 # via requests wcwidth==0.2.5 # via prompt-toolkit webencodings==0.5.1 # via bleach -werkzeug==1.0.1 # via tensorboard -wheel==0.36.2 # via astunparse, tensorboard, tensorflow +werkzeug==2.0.1 # via tensorboard +wheel==0.37.0 # via astunparse, tensorboard, tensorflow widgetsnbextension==3.5.1 # via ipywidgets wrapt==1.12.1 # via tensorflow -zipp==3.4.0 # via importlib-metadata +zipp==3.5.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/backend/src/apiserver/visualization/server.py b/backend/src/apiserver/visualization/server.py index 9b0d8a6fe7..a9cbb09777 100644 --- a/backend/src/apiserver/visualization/server.py +++ b/backend/src/apiserver/visualization/server.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/visualization/snapshots/snap_test_exporter.py b/backend/src/apiserver/visualization/snapshots/snap_test_exporter.py index b5ee9a514a..c28e506ad1 100644 --- a/backend/src/apiserver/visualization/snapshots/snap_test_exporter.py +++ b/backend/src/apiserver/visualization/snapshots/snap_test_exporter.py @@ -45,7 +45,7 @@ because it does not have dependencies and had a low chance of being updated. """ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/visualization/test_exporter.py b/backend/src/apiserver/visualization/test_exporter.py index c869fec88e..c7591e041a 100644 --- a/backend/src/apiserver/visualization/test_exporter.py +++ b/backend/src/apiserver/visualization/test_exporter.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/visualization/test_server.py b/backend/src/apiserver/visualization/test_server.py index d6592742a1..331fab8597 100644 --- a/backend/src/apiserver/visualization/test_server.py +++ b/backend/src/apiserver/visualization/test_server.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/visualization/types/roc_curve.py b/backend/src/apiserver/visualization/types/roc_curve.py index 41ff825a4b..a2dd16b6d3 100644 --- a/backend/src/apiserver/visualization/types/roc_curve.py +++ b/backend/src/apiserver/visualization/types/roc_curve.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/visualization/types/table.py b/backend/src/apiserver/visualization/types/table.py index 86e0b1343b..d4322a1b3c 100644 --- a/backend/src/apiserver/visualization/types/table.py +++ b/backend/src/apiserver/visualization/types/table.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/visualization/types/test.py b/backend/src/apiserver/visualization/types/test.py index b9eca40d04..92877ad402 100644 --- a/backend/src/apiserver/visualization/types/test.py +++ b/backend/src/apiserver/visualization/types/test.py @@ -3,7 +3,7 @@ because it does not have dependencies and had a low chance of being updated. """ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/visualization/types/tfdv.py b/backend/src/apiserver/visualization/types/tfdv.py index ac3e303b60..c8abfa849c 100644 --- a/backend/src/apiserver/visualization/types/tfdv.py +++ b/backend/src/apiserver/visualization/types/tfdv.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/visualization/types/tfma.py b/backend/src/apiserver/visualization/types/tfma.py index dc0b156538..33416dda84 100644 --- a/backend/src/apiserver/visualization/types/tfma.py +++ b/backend/src/apiserver/visualization/types/tfma.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/apiserver/visualization/update_requirements.sh b/backend/src/apiserver/visualization/update_requirements.sh index 24fb8bc1e8..5dfbd8f12f 100755 --- a/backend/src/apiserver/visualization/update_requirements.sh +++ b/backend/src/apiserver/visualization/update_requirements.sh @@ -1,5 +1,9 @@ #!/bin/bash # This image should be in sync with Dockerfile.visualization. -IMAGE=tensorflow/tensorflow:2.4.0 +IMAGE="tensorflow/tensorflow:2.5.1" +# tensorflow/tfx default entrypoint is Apache BEAM, because Apache BEAM doesn't +# support custom entrypoint for now. We need to override with --entrypoint "" +# for other `docker run` usecase. +# https://github.com/tensorflow/tfx/blob/master/tfx/tools/docker/Dockerfile#L71 ../../../update_requirements.sh $IMAGE <requirements.in >requirements.txt diff --git a/backend/src/cache/client/kubernetes_core_fake.go b/backend/src/cache/client/kubernetes_core_fake.go index 221f769b27..92a90ff186 100644 --- a/backend/src/cache/client/kubernetes_core_fake.go +++ b/backend/src/cache/client/kubernetes_core_fake.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/cache/client/pod_fake.go b/backend/src/cache/client/pod_fake.go index 877cb60239..dc5c4005c4 100644 --- a/backend/src/cache/client/pod_fake.go +++ b/backend/src/cache/client/pod_fake.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -108,6 +108,11 @@ func (FakePodClient) GetLogs(name string, opts *corev1.PodLogOptions) *rest.Requ return nil } +func (FakePodClient) ProxyGet(scheme string, name string, port string, path string, params map[string]string) rest.ResponseWrapper { + glog.Error("This fake method is not yet implemented.") + return nil +} + type FakeBadPodClient struct { FakePodClient } diff --git a/backend/src/cache/client/sql.go b/backend/src/cache/client/sql.go index 8eaa39f257..1de8bf7933 100644 --- a/backend/src/cache/client/sql.go +++ b/backend/src/cache/client/sql.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/cache/client/sql_test.go b/backend/src/cache/client/sql_test.go index a9d2782084..f1801127c6 100644 --- a/backend/src/cache/client/sql_test.go +++ b/backend/src/cache/client/sql_test.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/cache/client_manager.go b/backend/src/cache/client_manager.go index fae8cc60a2..fe15878f47 100644 --- a/backend/src/cache/client_manager.go +++ b/backend/src/cache/client_manager.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import ( "log" "time" + "encoding/json" "github.com/cenkalti/backoff" "github.com/golang/glog" "github.com/jinzhu/gorm" @@ -109,6 +110,10 @@ func initDBClient(params WhSvrDBParameters, initConnectionTimeout time.Duration) } func initMysql(params WhSvrDBParameters, initConnectionTimeout time.Duration) string { + + var mysqlExtraParams = map[string]string{} + data := []byte(params.dbExtraParams) + json.Unmarshal(data, &mysqlExtraParams) mysqlConfig := client.CreateMySQLConfig( params.dbUser, params.dbPwd, @@ -116,7 +121,7 @@ func initMysql(params WhSvrDBParameters, initConnectionTimeout time.Duration) st params.dbPort, "", params.dbGroupConcatMaxLen, - map[string]string{}, + mysqlExtraParams, ) var db *sql.DB diff --git a/backend/src/cache/deployer/Dockerfile b/backend/src/cache/deployer/Dockerfile index e409653a1b..51d3169d4c 100644 --- a/backend/src/cache/deployer/Dockerfile +++ b/backend/src/cache/deployer/Dockerfile @@ -10,6 +10,7 @@ RUN apk add --update \ RUN gcloud components install kubectl ADD backend/src/cache/deployer/* /kfp/cache/deployer/ +RUN chmod -R 777 /kfp/cache/deployer WORKDIR /kfp/cache/deployer diff --git a/backend/src/cache/deployer/deploy-cache-service.sh b/backend/src/cache/deployer/deploy-cache-service.sh index 5ce7822cdb..3b43a58185 100755 --- a/backend/src/cache/deployer/deploy-cache-service.sh +++ b/backend/src/cache/deployer/deploy-cache-service.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/cache/deployer/webhook-create-signed-cert.sh b/backend/src/cache/deployer/webhook-create-signed-cert.sh index 0b7301035d..3cfdabb265 100755 --- a/backend/src/cache/deployer/webhook-create-signed-cert.sh +++ b/backend/src/cache/deployer/webhook-create-signed-cert.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/cache/deployer/webhook-patch-ca-bundle.sh b/backend/src/cache/deployer/webhook-patch-ca-bundle.sh index 3515549f9c..2e3c1dc0a8 100755 --- a/backend/src/cache/deployer/webhook-patch-ca-bundle.sh +++ b/backend/src/cache/deployer/webhook-patch-ca-bundle.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/cache/main.go b/backend/src/cache/main.go index 9267bec2fa..adcc42c6c3 100644 --- a/backend/src/cache/main.go +++ b/backend/src/cache/main.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ package main import ( + "context" "flag" "log" "net/http" @@ -52,6 +53,7 @@ type WhSvrDBParameters struct { dbUser string dbPwd string dbGroupConcatMaxLen string + dbExtraParams string namespaceToWatch string } @@ -65,6 +67,7 @@ func main() { flag.StringVar(¶ms.dbUser, "db_user", "root", "Database user name.") flag.StringVar(¶ms.dbPwd, "db_password", "", "Database password.") flag.StringVar(¶ms.dbGroupConcatMaxLen, "db_group_concat_max_len", mysqlDBGroupConcatMaxLenDefault, "Database group concat max length.") + flag.StringVar(¶ms.dbExtraParams, "db_extra_params", "", "Database extra parameters.") flag.StringVar(¶ms.namespaceToWatch, "namespace_to_watch", "kubeflow", "Namespace to watch.") // Use default value of client QPS (5) & burst (10) defined in // k8s.io/client-go/rest/config.go#RESTClientFor @@ -75,8 +78,8 @@ func main() { log.Println("Initing client manager....") clientManager := NewClientManager(params, clientParams) - - go server.WatchPods(params.namespaceToWatch, &clientManager) + ctx := context.Background() + go server.WatchPods(ctx, params.namespaceToWatch, &clientManager) certPath := filepath.Join(TLSDir, TLSCertFile) keyPath := filepath.Join(TLSDir, TLSKeyFile) diff --git a/backend/src/cache/model/execution_cache.go b/backend/src/cache/model/execution_cache.go index e60f82701f..0ca6aad42e 100644 --- a/backend/src/cache/model/execution_cache.go +++ b/backend/src/cache/model/execution_cache.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/cache/server/admission.go b/backend/src/cache/server/admission.go index 1c0ddc188d..b8ed733af1 100644 --- a/backend/src/cache/server/admission.go +++ b/backend/src/cache/server/admission.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/cache/server/admission_test.go b/backend/src/cache/server/admission_test.go index 5475289193..b4b8c51c24 100644 --- a/backend/src/cache/server/admission_test.go +++ b/backend/src/cache/server/admission_test.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/cache/server/client_manager_fake.go b/backend/src/cache/server/client_manager_fake.go index 73e793c939..a9afaa9d91 100644 --- a/backend/src/cache/server/client_manager_fake.go +++ b/backend/src/cache/server/client_manager_fake.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/cache/server/mutation.go b/backend/src/cache/server/mutation.go index 8854bed60d..9db3165e6f 100644 --- a/backend/src/cache/server/mutation.go +++ b/backend/src/cache/server/mutation.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -58,8 +58,8 @@ const ( TaskName string = "tekton.dev/pipelineTask" PipelineName string = "pipelines.kubeflow.org/pipelinename" Generation string = "pipelines.kubeflow.org/generation" - PipelineRun string = "tekton.dev/pipelineRun" - CachedPipeline string = "pipelines.kubeflow.org/cached_pipeline_run" + PipelineRun string = "tekton.dev/pipelineRun" + CachedPipeline string = "pipelines.kubeflow.org/cached_pipeline_run" TektonGroup string = "tekton.dev/v1beta1" TektonTaskKind string = "TaskRun" @@ -203,7 +203,24 @@ func MutatePodIfCached(req *v1beta1.AdmissionRequest, clientMgr ClientManagerInt Path: SpecContainersPath, Value: dummyContainers, }) - + node_restrictions, err := getEnvBool("CACHE_NODE_RESTRICTIONS") + if err != nil { + return nil, err + } + if !node_restrictions { + if pod.Spec.Affinity != nil { + patches = append(patches, patchOperation{ + Op: OperationTypeRemove, + Path: "spec/affinity", + }) + } + if pod.Spec.NodeSelector != nil { + patches = append(patches, patchOperation{ + Op: OperationTypeRemove, + Path: "spec/nodeSelector", + }) + } + } // Handler init containers, do or not? if pod.Spec.InitContainers != nil || len(pod.Spec.InitContainers) != 0 { dummyInitContainers, err := prepareInitContainer(&pod, logger) @@ -365,7 +382,10 @@ func isLabeledCorrect(pod *corev1.Pod, logger *zap.SugaredLogger) bool { } func isTFXPod(pod *corev1.Pod, logger *zap.SugaredLogger) bool { - if pod.Labels[SdkTypeLabel] == TfxSdkTypeLabel { + // The label defaults to 'tfx', but is overridable. + // Official tfx templates override the value to 'tfx-template', so + // we loosely match the word 'tfx'. + if strings.Contains(pod.Labels[SdkTypeLabel], TfxSdkTypeLabel) { return true } containers := pod.Spec.Containers @@ -399,3 +419,15 @@ func isTaskrunOwn(pod *corev1.Pod) (string, bool) { func isV2Pod(pod *corev1.Pod) bool { return pod.Annotations[V2ComponentAnnotationKey] == V2ComponentAnnotationValue } + +func getEnvBool(key string) (bool, error) { + v, ok := os.LookupEnv("CACHE_NODE_RESTRICTIONS") + if !ok { + return false, nil + } + b, err := strconv.ParseBool(v) + if err != nil { + return false, err + } + return b, nil +} diff --git a/backend/src/cache/server/mutation_test.go b/backend/src/cache/server/mutation_test.go index 1053816a6b..8e05938696 100644 --- a/backend/src/cache/server/mutation_test.go +++ b/backend/src/cache/server/mutation_test.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -60,6 +60,7 @@ var ( Args: []string{"-entrypoint", "/bin/bash", "--", "-c", "printf 'This step output is taken from cache.\n\n'", "printf '200'"}, }, }, + NodeSelector: map[string]string{"disktype": "ssd"}, }, } fakeAdmissionRequest = v1beta1.AdmissionRequest{ @@ -96,6 +97,13 @@ func GetFakeRequestFromPod(pod *corev1.Pod) *v1beta1.AdmissionRequest { return &fakeRequest } +func TestMain(m *testing.M) { + os.Setenv("CACHE_NODE_RESTRICTIONS", "true") + defer os.Unsetenv("CACHE_NODE_RESTRICTIONS") + code := m.Run() + os.Exit(code) +} + func TestMutatePodIfCachedWithErrorPodResource(t *testing.T) { mockAdmissionRequest := &v1beta1.AdmissionRequest{ Resource: metav1.GroupVersionResource{ @@ -138,6 +146,12 @@ func TestMutatePodIfCachedWithTFXPod2(t *testing.T) { patchOperation, err := MutatePodIfCached(GetFakeRequestFromPod(&tfxPod), fakeClientManager) assert.Nil(t, patchOperation) assert.Nil(t, err) + // test variation 2 + tfxPod = *fakePod.DeepCopy() + tfxPod.Labels["pipelines.kubeflow.org/pipeline-sdk-type"] = "tfx-template" + patchOperation, err = MutatePodIfCached(GetFakeRequestFromPod(&tfxPod), fakeClientManager) + assert.Nil(t, patchOperation) + assert.Nil(t, err) } func TestMutatePodIfCachedWithKfpV2Pod(t *testing.T) { @@ -210,6 +224,23 @@ func TestSetImage(t *testing.T) { assert.Equal(t, testImage, container.Image) } +func TestCacheNodeRestriction(t *testing.T) { + os.Setenv("CACHE_NODE_RESTRICTIONS", "false") + + executionCache := &model.ExecutionCache{ + ExecutionCacheKey: "f5fe913be7a4516ebfe1b5de29bcb35edd12ecc776b2f33f10ca19709ea3b2f0", + ExecutionOutput: "testOutput", + ExecutionTemplate: `{"container":{"command":["echo", "Hello"],"image":"python:3.7"},"nodeSelector":{"disktype":"ssd"}}`, + MaxCacheStaleness: -1, + } + fakeClientManager.CacheStore().CreateExecutionCache(executionCache) + patchOperation, err := MutatePodIfCached(&fakeAdmissionRequest, fakeClientManager) + assert.Nil(t, err) + assert.Equal(t, OperationTypeRemove, patchOperation[1].Op) + assert.Nil(t, patchOperation[1].Value) + os.Setenv("CACHE_NODE_RESTRICTIONS", "true") +} + func TestMutatePodIfCachedWithTeamplateCleanup(t *testing.T) { executionCache := &model.ExecutionCache{ ExecutionCacheKey: "5a20e3f2e74863b363291953082d9812a58e25f7117bface1c76d40ef0ee88fc", diff --git a/backend/src/cache/server/watcher.go b/backend/src/cache/server/watcher.go index f67a9dc1f0..0c2ec1b074 100644 --- a/backend/src/cache/server/watcher.go +++ b/backend/src/cache/server/watcher.go @@ -27,7 +27,7 @@ const ( MaxCacheStalenessKey string = "pipelines.kubeflow.org/max_cache_staleness" ) -func WatchPods(namespaceToWatch string, clientManager ClientManagerInterface) { +func WatchPods(ctx context.Context, namespaceToWatch string, clientManager ClientManagerInterface) { zapLog, _ := zap.NewProduction() logger := zapLog.Sugar() defer zapLog.Sync() @@ -39,7 +39,7 @@ func WatchPods(namespaceToWatch string, clientManager ClientManagerInterface) { Watch: true, LabelSelector: CacheIDLabelKey, } - watcher, err := k8sCore.PodClient(namespaceToWatch).Watch(context.Background(), listOptions) + watcher, err := k8sCore.PodClient(namespaceToWatch).Watch(ctx, listOptions) if err != nil { logger.Errorf("Watcher error: %v", err) @@ -102,7 +102,7 @@ func WatchPods(namespaceToWatch string, clientManager ClientManagerInterface) { continue } - err = patchCacheID(k8sCore, pod, namespaceToWatch, cacheEntryCreated.ID, logger) + err = patchCacheID(ctx, k8sCore, pod, namespaceToWatch, cacheEntryCreated.ID, logger) if err != nil { logger.Errorf("Patch Pod: %s failed", pod.ObjectMeta.Name) } @@ -166,7 +166,7 @@ func isCacheWriten(labels map[string]string) bool { return cacheID != "" } -func patchCacheID(k8sCore client.KubernetesCoreInterface, podToPatch *corev1.Pod, namespaceToWatch string, id int64, logger *zap.SugaredLogger) error { +func patchCacheID(ctx context.Context, k8sCore client.KubernetesCoreInterface, podToPatch *corev1.Pod, namespaceToWatch string, id int64, logger *zap.SugaredLogger) error { labels := podToPatch.ObjectMeta.Labels labels[CacheIDLabelKey] = strconv.FormatInt(id, 10) logger.Infof("Cache id: %d", id) @@ -182,7 +182,7 @@ func patchCacheID(k8sCore client.KubernetesCoreInterface, podToPatch *corev1.Pod logger.Errorf("Marshal patch for pod: %s failed", podToPatch.ObjectMeta.Name) return fmt.Errorf("Unable to patch cache_id to pod: %s", podToPatch.ObjectMeta.Name) } - _, err = k8sCore.PodClient(namespaceToWatch).Patch(context.Background(), podToPatch.ObjectMeta.Name, types.JSONPatchType, patchBytes, metav1.PatchOptions{}) + _, err = k8sCore.PodClient(namespaceToWatch).Patch(ctx, podToPatch.ObjectMeta.Name, types.JSONPatchType, patchBytes, metav1.PatchOptions{}) if err != nil { logger.Errorf("Unable to patch cache_id to pod: %s", podToPatch.ObjectMeta.Name) return err diff --git a/backend/src/cache/storage/db.go b/backend/src/cache/storage/db.go index 4b8102832d..7b9154477e 100644 --- a/backend/src/cache/storage/db.go +++ b/backend/src/cache/storage/db.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/cache/storage/db_fake.go b/backend/src/cache/storage/db_fake.go index 6733181e3d..1887561c57 100644 --- a/backend/src/cache/storage/db_fake.go +++ b/backend/src/cache/storage/db_fake.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/cache/storage/execution_cache_store.go b/backend/src/cache/storage/execution_cache_store.go index 301d9c1a65..a2a445186e 100644 --- a/backend/src/cache/storage/execution_cache_store.go +++ b/backend/src/cache/storage/execution_cache_store.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/cache/storage/execution_cache_store_test.go b/backend/src/cache/storage/execution_cache_store_test.go index c10babea63..9b15e8dafd 100644 --- a/backend/src/cache/storage/execution_cache_store_test.go +++ b/backend/src/cache/storage/execution_cache_store_test.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/consts.go b/backend/src/common/util/consts.go index 398ba7e117..293f4f5d86 100644 --- a/backend/src/common/util/consts.go +++ b/backend/src/common/util/consts.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/error.go b/backend/src/common/util/error.go index 0f1da62b23..76cf17600d 100644 --- a/backend/src/common/util/error.go +++ b/backend/src/common/util/error.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -326,7 +326,8 @@ func TerminateIfError(err error) { } } -// IsNotFound returns whether an error indicates that a resource was "not found". +// IsNotFound returns whether an error indicates that a Kubernetes resource was "not found". +// This does not identify UserError with codes.NotFound errors, use IsUserErrorCodeMatch instead. func IsNotFound(err error) bool { return reasonForError(err) == k8metav1.StatusReasonNotFound } diff --git a/backend/src/common/util/error_test.go b/backend/src/common/util/error_test.go index cf10263a94..72dba5ffbf 100644 --- a/backend/src/common/util/error_test.go +++ b/backend/src/common/util/error_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/formatter.go b/backend/src/common/util/formatter.go index 79e34f41ac..cc6c47d08e 100644 --- a/backend/src/common/util/formatter.go +++ b/backend/src/common/util/formatter.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/formatter_test.go b/backend/src/common/util/formatter_test.go index bd4ca89d39..4cab323da0 100644 --- a/backend/src/common/util/formatter_test.go +++ b/backend/src/common/util/formatter_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/json.go b/backend/src/common/util/json.go index b68c318b69..9b590679a9 100644 --- a/backend/src/common/util/json.go +++ b/backend/src/common/util/json.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/label.go b/backend/src/common/util/label.go index 950e8f7546..a4270e027c 100644 --- a/backend/src/common/util/label.go +++ b/backend/src/common/util/label.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/label_test.go b/backend/src/common/util/label_test.go index c7d4440614..61b63ec1fd 100644 --- a/backend/src/common/util/label_test.go +++ b/backend/src/common/util/label_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/parameter_formatter.go b/backend/src/common/util/parameter_formatter.go index 76c3c3b2bd..3b471f4363 100644 --- a/backend/src/common/util/parameter_formatter.go +++ b/backend/src/common/util/parameter_formatter.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,6 +19,9 @@ import ( "regexp" "strings" "time" + + "github.com/golang/glog" + "github.com/lestrrat-go/strftime" ) const ( @@ -30,6 +33,10 @@ const ( currentTimePrefix = "[[CurrentTime." defaultTimeFormat = "20060102150405" suffix = "]]" + + scheduledTimePrefix2 = "{{$.scheduledTime.strftime('" + currentTimePrefix2 = "{{$.currentTime.strftime('" + suffix2 = "')}}" ) const ( @@ -79,7 +86,7 @@ func (p *ParameterFormatter) FormatWorkflowParameters( // Format substitutes special strings in the provided string. func (p *ParameterFormatter) Format(s string) string { - re := regexp.MustCompile(`\[\[(.*?)\]\]`) + re := regexp.MustCompile(`\[\[(.*?)\]\]|\{\{\$\.(.*?)\}\}`) matches := re.FindAllString(s, -1) if matches == nil { return s @@ -113,6 +120,24 @@ func (p *ParameterFormatter) createSubstitutes(match string) string { match = strings.Replace(match, currentTimePrefix, "", 1) match = strings.Replace(match, suffix, "", 1) return time.Unix(p.nowEpoch, 0).UTC().Format(match) + } else if p.scheduledEpoch != disabledField && strings.HasPrefix(match, scheduledTimePrefix2) { + format := strings.Replace(match, scheduledTimePrefix2, "", 1) + format = strings.Replace(format, suffix2, "", 1) + formatter, err := strftime.New(format, strftime.WithUnixSeconds('s')) + if err != nil { + glog.Errorf("Could not create the strftime formatter from '%v'. Error: %v", format, err) + return match + } + return formatter.FormatString(time.Unix(p.scheduledEpoch, 0).UTC()) + } else if p.nowEpoch != disabledField && strings.HasPrefix(match, currentTimePrefix2) { + format := strings.Replace(match, currentTimePrefix2, "", 1) + format = strings.Replace(format, suffix2, "", 1) + formatter, err := strftime.New(format, strftime.WithUnixSeconds('s')) + if err != nil { + glog.Errorf("Could not create the strftime formatter from '%v'. Error: %v", format, err) + return match + } + return formatter.FormatString(time.Unix(p.nowEpoch, 0).UTC()) } else { return match } diff --git a/backend/src/common/util/parameter_formatter_test.go b/backend/src/common/util/parameter_formatter_test.go index 23752c6526..f6da105e40 100644 --- a/backend/src/common/util/parameter_formatter_test.go +++ b/backend/src/common/util/parameter_formatter_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -53,4 +53,8 @@ func TestParameterFormatter_Format(t *testing.T) { // Test empty string assert.Equal(t, "", formatter.Format("")) + + // Test modern time formatters + assert.Equal(t, "FOO 1970-01-01 00:00:25 FOO", formatter.Format("FOO {{$.scheduledTime.strftime('%Y-%m-%d %H:%M:%S')}} FOO")) + assert.Equal(t, "FOO 1970-01-01 00:00:26 FOO", formatter.Format("FOO {{$.currentTime.strftime('%Y-%m-%d %H:%M:%S')}} FOO")) } diff --git a/backend/src/common/util/pointer.go b/backend/src/common/util/pointer.go index 674248908b..2de694e69d 100644 --- a/backend/src/common/util/pointer.go +++ b/backend/src/common/util/pointer.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/scheduled_workflow.go b/backend/src/common/util/scheduled_workflow.go index 5d96f7049a..371cf2673d 100644 --- a/backend/src/common/util/scheduled_workflow.go +++ b/backend/src/common/util/scheduled_workflow.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/scheduled_workflow_test.go b/backend/src/common/util/scheduled_workflow_test.go index 8feae5c16b..2513a39810 100644 --- a/backend/src/common/util/scheduled_workflow_test.go +++ b/backend/src/common/util/scheduled_workflow_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/service.go b/backend/src/common/util/service.go index 5aadec8e52..099a4d0e46 100644 --- a/backend/src/common/util/service.go +++ b/backend/src/common/util/service.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/template_util.go b/backend/src/common/util/template_util.go index f9d704e8be..c5f236292f 100644 --- a/backend/src/common/util/template_util.go +++ b/backend/src/common/util/template_util.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,6 +27,32 @@ const ( tektonK8sResource = "PipelineRun" ) +func UnmarshalParameters(paramsString string) ([]tektonV1Beta1.Param, error) { + if paramsString == "" { + return nil, nil + } + var params []tektonV1Beta1.Param + err := json.Unmarshal([]byte(paramsString), ¶ms) + if err != nil { + return nil, NewInternalServerError(err, "Parameters have wrong format") + } + return params, nil +} + +func MarshalParameters(params []tektonV1Beta1.Param) (string, error) { + if params == nil { + return "[]", nil + } + paramBytes, err := json.Marshal(params) + if err != nil { + return "", NewInvalidInputErrorWithDetails(err, "Failed to marshal the parameter.") + } + if len(paramBytes) > MaxParameterBytes { + return "", NewInvalidInputError("The input parameter length exceed maximum size of %v.", MaxParameterBytes) + } + return string(paramBytes), nil +} + func GetParameters(template []byte) (string, error) { return GetTektonParameters(template) } @@ -50,7 +76,7 @@ func GetTektonParameters(template []byte) (string, error) { return string(paramBytes), nil } -func ValidatePipelineRun(template []byte) (*tektonV1Beta1.PipelineRun, error) { +func ValidatePipelineRun(template []byte) (*Workflow, error) { var wf tektonV1Beta1.PipelineRun err := yaml.Unmarshal(template, &wf) if err != nil { @@ -62,5 +88,5 @@ func ValidatePipelineRun(template []byte) (*tektonV1Beta1.PipelineRun, error) { if wf.Kind != tektonK8sResource { return nil, NewInvalidInputError("Unexpected resource type. Expected: %v. Received: %v", tektonK8sResource, wf.Kind) } - return &wf, nil + return NewWorkflow(&wf), nil } diff --git a/backend/src/common/util/template_util_test.go b/backend/src/common/util/template_util_test.go index ca07b4d62c..76a5bc5364 100644 --- a/backend/src/common/util/template_util_test.go +++ b/backend/src/common/util/template_util_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/tgz.go b/backend/src/common/util/tgz.go index 4aae19c2e2..2fe27fdb2c 100644 --- a/backend/src/common/util/tgz.go +++ b/backend/src/common/util/tgz.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/tgz_test.go b/backend/src/common/util/tgz_test.go index e06f5e7924..3f0c3f3005 100644 --- a/backend/src/common/util/tgz_test.go +++ b/backend/src/common/util/tgz_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/time.go b/backend/src/common/util/time.go index 6ffdea3bcf..f1bb56845e 100644 --- a/backend/src/common/util/time.go +++ b/backend/src/common/util/time.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/uuid.go b/backend/src/common/util/uuid.go index 2e211e7250..92c467199d 100644 --- a/backend/src/common/util/uuid.go +++ b/backend/src/common/util/uuid.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/common/util/workflow.go b/backend/src/common/util/workflow.go index 7b85e0e799..9eb12ce016 100644 --- a/backend/src/common/util/workflow.go +++ b/backend/src/common/util/workflow.go @@ -203,8 +203,9 @@ func (w *Workflow) OverrideName(name string) { w.Name = name } -// SetAnnotations sets annotations on all templates in a Workflow -func (w *Workflow) SetAnnotationsToAllTemplates(key string, value string) { +// SetAnnotationsToAllTemplatesIfKeyNotExist sets annotations on all templates in a Workflow +// if the annotation key does not exist +func (w *Workflow) SetAnnotationsToAllTemplatesIfKeyNotExist(key string, value string) { // No metadata object within pipelineRun task return } @@ -314,3 +315,9 @@ func (w *Workflow) PersistedFinalState() bool { } return false } + +// IsV2 whether the workflow is a v2 compatible pipeline. +func (w *Workflow) IsV2() bool { + value := w.GetObjectMeta().GetAnnotations()["pipelines.kubeflow.org/v2_pipeline"] + return value == "true" +} diff --git a/backend/src/common/util/workflow_test.go b/backend/src/common/util/workflow_test.go index 0b172c6f59..ead08b3c11 100644 --- a/backend/src/common/util/workflow_test.go +++ b/backend/src/common/util/workflow_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/controller/scheduledworkflow/client/kube_client.go b/backend/src/crd/controller/scheduledworkflow/client/kube_client.go index 51ac30fc59..5295028285 100644 --- a/backend/src/crd/controller/scheduledworkflow/client/kube_client.go +++ b/backend/src/crd/controller/scheduledworkflow/client/kube_client.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,7 +27,7 @@ import ( const ( successSynced = "Synced" failedSynced = "Failed" - messageResourceSuccessSynced = "Scheduled workflow synced successfull" + messageResourceSuccessSynced = "Scheduled workflow synced successful" messageResourceFailedSynced = "Schedulde workflow synced failed" ) diff --git a/backend/src/crd/controller/scheduledworkflow/client/swf_client.go b/backend/src/crd/controller/scheduledworkflow/client/swf_client.go index 2f898131c8..8bcdd230de 100644 --- a/backend/src/crd/controller/scheduledworkflow/client/swf_client.go +++ b/backend/src/crd/controller/scheduledworkflow/client/swf_client.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -61,9 +61,9 @@ func (p *ScheduledWorkflowClient) Get(namespace string, name string) (*util.Sche } // Update Updates a ScheduledWorkflow in the Kubernetes API server. -func (p *ScheduledWorkflowClient) Update(namespace string, +func (p *ScheduledWorkflowClient) Update(ctx context.Context, namespace string, schedule *util.ScheduledWorkflow) error { _, err := p.clientSet.ScheduledworkflowV1beta1().ScheduledWorkflows(namespace). - Update(context.Background(), schedule.Get(), metav1.UpdateOptions{}) + Update(ctx, schedule.Get(), metav1.UpdateOptions{}) return err } diff --git a/backend/src/crd/controller/scheduledworkflow/client/workflow_client.go b/backend/src/crd/controller/scheduledworkflow/client/workflow_client.go index 0310373beb..02b12b7a3c 100644 --- a/backend/src/crd/controller/scheduledworkflow/client/workflow_client.go +++ b/backend/src/crd/controller/scheduledworkflow/client/workflow_client.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -130,9 +130,9 @@ func retrieveIndex(workflow *workflowapi.PipelineRun) int64 { } // Create creates a workflow given a namespace and its specification. -func (p *WorkflowClient) Create(namespace string, workflow *commonutil.Workflow) ( +func (p *WorkflowClient) Create(ctx context.Context, namespace string, workflow *commonutil.Workflow) ( *commonutil.Workflow, error) { - result, err := p.clientSet.TektonV1beta1().PipelineRuns(namespace).Create(context.Background(), workflow.Get(), metav1.CreateOptions{}) + result, err := p.clientSet.TektonV1beta1().PipelineRuns(namespace).Create(ctx, workflow.Get(), metav1.CreateOptions{}) if err != nil { return nil, wraperror.Wrapf(err, "Error creating workflow in namespace (%v): %v: %+v", namespace, err, workflow.Get()) diff --git a/backend/src/crd/controller/scheduledworkflow/client/workflow_client_test.go b/backend/src/crd/controller/scheduledworkflow/client/workflow_client_test.go index 681a4f1c77..c165960477 100644 --- a/backend/src/crd/controller/scheduledworkflow/client/workflow_client_test.go +++ b/backend/src/crd/controller/scheduledworkflow/client/workflow_client_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/controller/scheduledworkflow/controller.go b/backend/src/crd/controller/scheduledworkflow/controller.go index eb0cab621e..d0816d29ac 100644 --- a/backend/src/crd/controller/scheduledworkflow/controller.go +++ b/backend/src/crd/controller/scheduledworkflow/controller.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ package main import ( + "context" "fmt" "time" @@ -326,7 +327,8 @@ func (c *Controller) processNextWorkItem() bool { // Run the syncHandler, passing it the namespace/name string of the // ScheduledWorkflow to be synced. - syncAgain, retryOnError, swf, err := c.syncHandler(key) + ctx := context.Background() + syncAgain, retryOnError, swf, err := c.syncHandler(ctx, key) if err != nil && retryOnError { // Transient failure. We will retry. c.workqueue.AddRateLimited(obj) // Exponential backoff. @@ -369,7 +371,7 @@ func (c *Controller) processNextWorkItem() bool { // syncHandler compares the actual state with the desired, and attempts to // converge the two. It then updates the Status block of the ScheduledWorkflow // with the current status of the resource. -func (c *Controller) syncHandler(key string) ( +func (c *Controller) syncHandler(ctx context.Context, key string) ( syncAgain bool, retryOnError bool, swf *util.ScheduledWorkflow, err error) { // Convert the namespace/name string into a distinct namespace and name @@ -412,13 +414,13 @@ func (c *Controller) syncHandler(key string) ( wraperror.Wrapf(err, "Syncing ScheduledWorkflow (%v): transient failure, can't fetch completed workflows: %v", name, err) } - workflow, nextScheduledEpoch, err := c.submitNextWorkflowIfNeeded(swf, len(active), nowEpoch) + workflow, nextScheduledEpoch, err := c.submitNextWorkflowIfNeeded(ctx, swf, len(active), nowEpoch) if err != nil { return false, true, swf, wraperror.Wrapf(err, "Syncing ScheduledWorkflow (%v): transient failure, can't fetch completed workflows: %v", name, err) } - err = c.updateStatus(swf, workflow, active, completed, nextScheduledEpoch, nowEpoch) + err = c.updateStatus(ctx, swf, workflow, active, completed, nextScheduledEpoch, nowEpoch) if err != nil { return false, true, swf, wraperror.Wrapf(err, "Syncing ScheduledWorkflow (%v): transient failure, can't update swf status: %v", name, err) @@ -443,7 +445,7 @@ func (c *Controller) syncHandler(key string) ( // Submits the next workflow if a workflow is due to execute. Returns the submitted workflow, // an error (if any), and a boolean indicating (in case of an error) whether handling the // ScheduledWorkflow should be attempted again at a later time. -func (c *Controller) submitNextWorkflowIfNeeded(swf *util.ScheduledWorkflow, +func (c *Controller) submitNextWorkflowIfNeeded(ctx context.Context, swf *util.ScheduledWorkflow, activeWorkflowCount int, nowEpoch int64) ( workflow *commonutil.Workflow, nextScheduledEpoch int64, err error) { // Compute the next scheduled time. @@ -458,7 +460,7 @@ func (c *Controller) submitNextWorkflowIfNeeded(swf *util.ScheduledWorkflow, return nil, nextScheduledEpoch, nil } - workflow, err = c.submitNewWorkflowIfNotAlreadySubmitted(swf, nextScheduledEpoch, nowEpoch) + workflow, err = c.submitNewWorkflowIfNotAlreadySubmitted(ctx, swf, nextScheduledEpoch, nowEpoch) if err != nil { log.WithFields(log.Fields{ ScheduledWorkflow: swf.Name, @@ -477,6 +479,7 @@ func (c *Controller) submitNextWorkflowIfNeeded(swf *util.ScheduledWorkflow, } func (c *Controller) submitNewWorkflowIfNotAlreadySubmitted( + ctx context.Context, swf *util.ScheduledWorkflow, nextScheduledEpoch int64, nowEpoch int64) ( *commonutil.Workflow, error) { @@ -501,7 +504,7 @@ func (c *Controller) submitNewWorkflowIfNotAlreadySubmitted( // If the workflow is not found, we need to create it. newWorkflow, err := swf.NewWorkflow(nextScheduledEpoch, nowEpoch) - createdWorkflow, err := c.workflowClient.Create(swf.Namespace, newWorkflow) + createdWorkflow, err := c.workflowClient.Create(ctx, swf.Namespace, newWorkflow) if err != nil { return nil, err @@ -510,6 +513,7 @@ func (c *Controller) submitNewWorkflowIfNotAlreadySubmitted( } func (c *Controller) updateStatus( + ctx context.Context, swf *util.ScheduledWorkflow, workflow *commonutil.Workflow, active []swfapi.WorkflowStatus, @@ -526,5 +530,5 @@ func (c *Controller) updateStatus( // update the Status block of the ScheduledWorkflow. UpdateStatus will not // allow changes to the Spec of the resource, which is ideal for ensuring // nothing other than resource status has been updated. - return c.swfClient.Update(swf.Namespace, swfCopy) + return c.swfClient.Update(ctx, swf.Namespace, swfCopy) } diff --git a/backend/src/crd/controller/scheduledworkflow/main.go b/backend/src/crd/controller/scheduledworkflow/main.go index 325f1d8d9f..8ea5619af3 100644 --- a/backend/src/crd/controller/scheduledworkflow/main.go +++ b/backend/src/crd/controller/scheduledworkflow/main.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -51,7 +51,6 @@ func initEnv() { } func main() { - initEnv() flag.Parse() // set up signals so we handle the first shutdown signal gracefully @@ -107,6 +106,8 @@ func main() { } func init() { + initEnv() + flag.StringVar(&kubeconfig, "kubeconfig", "", "Path to a kubeconfig. Only required if out-of-cluster.") flag.StringVar(&masterURL, "master", "", "The address of the Kubernetes API server. Overrides any value in kubeconfig. Only required if out-of-cluster.") flag.StringVar(&namespace, "namespace", "", "The namespace name used for Kubernetes informers to obtain the listers.") @@ -119,4 +120,5 @@ func init() { if err != nil { log.Fatalf("Error running controller: %s", err.Error()) } + log.Infof("Location: %s", location.String()) } diff --git a/backend/src/crd/controller/scheduledworkflow/util/const.go b/backend/src/crd/controller/scheduledworkflow/util/const.go index 944b7a4387..78b22e300e 100644 --- a/backend/src/crd/controller/scheduledworkflow/util/const.go +++ b/backend/src/crd/controller/scheduledworkflow/util/const.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/controller/scheduledworkflow/util/cron_schedule.go b/backend/src/crd/controller/scheduledworkflow/util/cron_schedule.go index 2fc247faaa..930b0333ca 100644 --- a/backend/src/crd/controller/scheduledworkflow/util/cron_schedule.go +++ b/backend/src/crd/controller/scheduledworkflow/util/cron_schedule.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/controller/scheduledworkflow/util/cron_schedule_test.go b/backend/src/crd/controller/scheduledworkflow/util/cron_schedule_test.go index c35b26b1f3..f19071c33b 100644 --- a/backend/src/crd/controller/scheduledworkflow/util/cron_schedule_test.go +++ b/backend/src/crd/controller/scheduledworkflow/util/cron_schedule_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/controller/scheduledworkflow/util/periodic_schedule.go b/backend/src/crd/controller/scheduledworkflow/util/periodic_schedule.go index 917af7b559..c1024d3dcb 100644 --- a/backend/src/crd/controller/scheduledworkflow/util/periodic_schedule.go +++ b/backend/src/crd/controller/scheduledworkflow/util/periodic_schedule.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/controller/scheduledworkflow/util/periodic_schedule_test.go b/backend/src/crd/controller/scheduledworkflow/util/periodic_schedule_test.go index ebd15e25c0..a1edf8d723 100644 --- a/backend/src/crd/controller/scheduledworkflow/util/periodic_schedule_test.go +++ b/backend/src/crd/controller/scheduledworkflow/util/periodic_schedule_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/controller/scheduledworkflow/util/scheduled_workflow.go b/backend/src/crd/controller/scheduledworkflow/util/scheduled_workflow.go index fad5d10d12..2befe60871 100644 --- a/backend/src/crd/controller/scheduledworkflow/util/scheduled_workflow.go +++ b/backend/src/crd/controller/scheduledworkflow/util/scheduled_workflow.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -184,6 +184,8 @@ func (s *ScheduledWorkflow) NewWorkflow( result.SetCannonicalLabels(s.Name, nextScheduledEpoch, s.nextIndex()) result.SetLabels(commonutil.LabelKeyWorkflowRunId, uuid.String()) + // Pod pipeline/runid label is used by v2 compatible mode. + result.SetLabels(commonutil.LabelKeyWorkflowRunId, uuid.String()) // Replace {{workflow.uid}} with runId err = result.ReplaceUID(uuid.String()) if err != nil { diff --git a/backend/src/crd/controller/scheduledworkflow/util/scheduled_workflow_test.go b/backend/src/crd/controller/scheduledworkflow/util/scheduled_workflow_test.go index 7b4c8ecc41..54459f3cd7 100644 --- a/backend/src/crd/controller/scheduledworkflow/util/scheduled_workflow_test.go +++ b/backend/src/crd/controller/scheduledworkflow/util/scheduled_workflow_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/controller/viewer/main.go b/backend/src/crd/controller/viewer/main.go index 39a7500159..8e25b84545 100644 --- a/backend/src/crd/controller/viewer/main.go +++ b/backend/src/crd/controller/viewer/main.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,13 +17,13 @@ package main import ( + "context" "flag" "log" "github.com/golang/glog" "github.com/kubeflow/pipelines/backend/src/crd/controller/viewer/reconciler" - "github.com/kubeflow/pipelines/backend/src/crd/pkg/signals" viewerV1beta1 "github.com/kubeflow/pipelines/backend/src/crd/pkg/apis/viewer/v1beta1" appsv1 "k8s.io/api/apps/v1" @@ -83,18 +83,18 @@ func main() { } _, err = builder.ControllerManagedBy(mgr). - ForType(&viewerV1beta1.Viewer{}). + For(&viewerV1beta1.Viewer{}). Owns(&appsv1.Deployment{}). Owns(&corev1.Service{}). - WithConfig(cfg). Build(reconciler) if err != nil { log.Fatal(err) } - + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() glog.Info("Starting controller for the Viewer CRD") - if err := mgr.Start(signals.SetupSignalHandler()); err != nil { + if err := mgr.Start(ctx); err != nil { log.Fatalf("Failed to start controller: %v", err) } } diff --git a/backend/src/crd/controller/viewer/reconciler/reconciler.go b/backend/src/crd/controller/viewer/reconciler/reconciler.go index e1a9e82c8f..5dde400a7c 100644 --- a/backend/src/crd/controller/viewer/reconciler/reconciler.go +++ b/backend/src/crd/controller/viewer/reconciler/reconciler.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -71,7 +71,7 @@ func New(cli client.Client, scheme *runtime.Scheme, opts *Options) (*Reconciler, // Reconcile runs the main logic for reconciling the state of a viewer with a // corresponding deployment and service allowing users to access the view under // a specific path. -func (r *Reconciler) Reconcile(req reconcile.Request) (reconcile.Result, error) { +func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) { glog.Infof("Reconcile request: %+v", req) view := &viewerV1beta1.Viewer{} @@ -178,15 +178,23 @@ func setPodSpecForTensorboard(view *viewerV1beta1.Viewer, s *corev1.PodSpec) { fmt.Sprintf("--logdir=%s", view.Spec.TensorboardSpec.LogDir), fmt.Sprintf("--path_prefix=/tensorboard/%s/", view.Name), } - - tfImageVersion := strings.Split(view.Spec.TensorboardSpec.TensorflowImage, ":")[1] - // This is needed for tf 2.0 - if !strings.HasPrefix(tfImageVersion, `1.`) { + isTensorflowV1 := false + parts := strings.Split(view.Spec.TensorboardSpec.TensorflowImage, ":") + // an image might not contain a tag + if len(parts) == 2 { + tfImageVersion := parts[1] + if strings.HasPrefix(tfImageVersion, `1.`) { + isTensorflowV1 = true + } + } + if !isTensorflowV1 { + // This is needed for tf 2.0. + // https://github.com/kubeflow/pipelines/issues/2440 c.Args = append(c.Args, "--bind_all") } c.Ports = []corev1.ContainerPort{ - corev1.ContainerPort{ContainerPort: viewerTargetPort}, + {ContainerPort: viewerTargetPort}, } } @@ -259,7 +267,7 @@ func serviceFrom(v *viewerV1beta1.Viewer, deploymentName string) *corev1.Service "viewer": v.Name, }, Ports: []corev1.ServicePort{ - corev1.ServicePort{ + { Name: "http", Protocol: corev1.ProtocolTCP, Port: 80, diff --git a/backend/src/crd/controller/viewer/reconciler/reconciler_test.go b/backend/src/crd/controller/viewer/reconciler/reconciler_test.go index 4f65c64bd1..34b289932a 100644 --- a/backend/src/crd/controller/viewer/reconciler/reconciler_test.go +++ b/backend/src/crd/controller/viewer/reconciler/reconciler_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -142,7 +142,7 @@ func TestReconcile_EachViewerCreatesADeployment(t *testing.T) { req := reconcile.Request{ NamespacedName: types.NamespacedName{Name: "viewer-123", Namespace: "kubeflow"}, } - _, err := reconciler.Reconcile(req) + _, err := reconciler.Reconcile(context.Background(), req) if err != nil { t.Fatalf("Reconcile(%+v) = %v; Want nil error", req, err) @@ -196,6 +196,48 @@ func TestReconcile_EachViewerCreatesADeployment(t *testing.T) { } } +func TestReconcile_ImageWithoutTagCountAsTFv2(t *testing.T) { + customImageWithoutTag := "potentially_custom_tensorflow_without_tag" + viewer := &viewerV1beta1.Viewer{ + ObjectMeta: metav1.ObjectMeta{ + Name: "viewer-123", + Namespace: "kubeflow", + }, + Spec: viewerV1beta1.ViewerSpec{ + Type: viewerV1beta1.ViewerTypeTensorboard, + TensorboardSpec: viewerV1beta1.TensorboardSpec{ + LogDir: "gs://tensorboard/logdir", + TensorflowImage: customImageWithoutTag, + }, + }, + } + + cli := fake.NewFakeClient(viewer) + reconciler, _ := New(cli, scheme.Scheme, &Options{MaxNumViewers: 10}) + + req := reconcile.Request{ + NamespacedName: types.NamespacedName{Name: "viewer-123", Namespace: "kubeflow"}, + } + _, err := reconciler.Reconcile(context.Background(), req) + + if err != nil { + t.Fatalf("Reconcile(%+v) = %v; Want nil error", req, err) + } + + gotDpls := getDeployments(t, cli) + actualArgs := gotDpls[0].Spec.Template.Spec.Containers[0].Args + hasBindAllArg := false + for _, arg := range actualArgs { + if arg == "--bind_all" { + hasBindAllArg = true + } + } + if !hasBindAllArg { + t.Errorf("Created viewer CRD %+v\nWant --bind_all arg\nGot args: %+v", + viewer, actualArgs) + } +} + func TestReconcile_ViewerUsesSpecifiedVolumeMountsForDeployment(t *testing.T) { viewer := &viewerV1beta1.Viewer{ ObjectMeta: metav1.ObjectMeta{ @@ -242,7 +284,7 @@ func TestReconcile_ViewerUsesSpecifiedVolumeMountsForDeployment(t *testing.T) { req := reconcile.Request{ NamespacedName: types.NamespacedName{Name: "viewer-123", Namespace: "kubeflow"}, } - _, err := reconciler.Reconcile(req) + _, err := reconciler.Reconcile(context.Background(), req) if err != nil { t.Fatalf("Reconcile(%+v) = %v; Want nil error", req, err) @@ -331,7 +373,7 @@ func TestReconcile_EachViewerCreatesAService(t *testing.T) { req := reconcile.Request{ NamespacedName: types.NamespacedName{Name: "viewer-123", Namespace: "kubeflow"}, } - _, err := reconciler.Reconcile(req) + _, err := reconciler.Reconcile(context.Background(), req) if err != nil { t.Fatalf("Reconcile(%+v) = %v; Want nil error", req, err) @@ -405,7 +447,7 @@ func TestReconcile_UnknownViewerTypesAreIgnored(t *testing.T) { NamespacedName: types.NamespacedName{Name: "viewer-123", Namespace: "kubeflow"}, } - got, err := reconciler.Reconcile(req) + got, err := reconciler.Reconcile(context.Background(), req) // Want no error and no requeuing. want := reconcile.Result{Requeue: false} @@ -434,7 +476,7 @@ func TestReconcile_UnknownViewerDoesNothing(t *testing.T) { req := reconcile.Request{ NamespacedName: types.NamespacedName{Name: "viewer-123", Namespace: "kubeflow"}, } - got, err := reconciler.Reconcile(req) + got, err := reconciler.Reconcile(context.Background(), req) want := reconcile.Result{} if err != nil || !cmp.Equal(got, want) { @@ -485,7 +527,7 @@ func TestReconcile_MaxNumViewersIsEnforced(t *testing.T) { n, v := makeViewer(i) cli.Create(ctx, v) req := reconcile.Request{NamespacedName: *n} - _, err := reconciler.Reconcile(req) + _, err := reconciler.Reconcile(context.Background(), req) if err != nil { t.Errorf("Reconcile(%+v) = %v; Want nil error", req, err) @@ -540,7 +582,7 @@ func TestReconcile_MaxNumViewersIsEnforced(t *testing.T) { cli.Create(ctx, v) req := reconcile.Request{NamespacedName: *n} - _, err := reconciler.Reconcile(req) + _, err := reconciler.Reconcile(context.Background(), req) if err != nil { t.Errorf("Reconcile(%+v) = %v; Want nil error", req, err) diff --git a/backend/src/crd/hack/custom-boilerplate.go.txt b/backend/src/crd/hack/custom-boilerplate.go.txt index ee4b12e5c1..e460f75227 100644 --- a/backend/src/crd/hack/custom-boilerplate.go.txt +++ b/backend/src/crd/hack/custom-boilerplate.go.txt @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/hack/update-codegen.sh b/backend/src/crd/hack/update-codegen.sh index 9677bb878f..70f3e4fae3 100755 --- a/backend/src/crd/hack/update-codegen.sh +++ b/backend/src/crd/hack/update-codegen.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/hack/verify-codegen.sh b/backend/src/crd/hack/verify-codegen.sh index c03a95ee65..bd092b5d1f 100755 --- a/backend/src/crd/hack/verify-codegen.sh +++ b/backend/src/crd/hack/verify-codegen.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/install/manifests/scheduledworkflow-crd.yaml b/backend/src/crd/install/manifests/scheduledworkflow-crd.yaml index b6bfbb760c..13aa854885 100644 --- a/backend/src/crd/install/manifests/scheduledworkflow-crd.yaml +++ b/backend/src/crd/install/manifests/scheduledworkflow-crd.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/install/manifests/viewer-crd.yaml b/backend/src/crd/install/manifests/viewer-crd.yaml index 0e60e6f654..226a88d05b 100644 --- a/backend/src/crd/install/manifests/viewer-crd.yaml +++ b/backend/src/crd/install/manifests/viewer-crd.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/apis/scheduledworkflow/register.go b/backend/src/crd/pkg/apis/scheduledworkflow/register.go index 7e12af1504..6fff0124b4 100644 --- a/backend/src/crd/pkg/apis/scheduledworkflow/register.go +++ b/backend/src/crd/pkg/apis/scheduledworkflow/register.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/doc.go b/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/doc.go index f309c047ba..9b1315232b 100644 --- a/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/doc.go +++ b/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/doc.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/register.go b/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/register.go index 0457c11c2a..84f29950f2 100644 --- a/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/register.go +++ b/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/register.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/types.go b/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/types.go index 8bffb0541f..bd2bc2b2fc 100644 --- a/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/types.go +++ b/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/types.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/zz_generated.deepcopy.go b/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/zz_generated.deepcopy.go index c72bf387a3..e6d95b85ad 100644 --- a/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/zz_generated.deepcopy.go +++ b/backend/src/crd/pkg/apis/scheduledworkflow/v1beta1/zz_generated.deepcopy.go @@ -1,6 +1,6 @@ // +build !ignore_autogenerated -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/apis/viewer/register.go b/backend/src/crd/pkg/apis/viewer/register.go index 9c578049fa..0f4ae58d6f 100644 --- a/backend/src/crd/pkg/apis/viewer/register.go +++ b/backend/src/crd/pkg/apis/viewer/register.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/apis/viewer/v1beta1/doc.go b/backend/src/crd/pkg/apis/viewer/v1beta1/doc.go index 5a5de606fe..502adaa14e 100644 --- a/backend/src/crd/pkg/apis/viewer/v1beta1/doc.go +++ b/backend/src/crd/pkg/apis/viewer/v1beta1/doc.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/apis/viewer/v1beta1/register.go b/backend/src/crd/pkg/apis/viewer/v1beta1/register.go index 5567863b13..80e705b61b 100644 --- a/backend/src/crd/pkg/apis/viewer/v1beta1/register.go +++ b/backend/src/crd/pkg/apis/viewer/v1beta1/register.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/apis/viewer/v1beta1/types.go b/backend/src/crd/pkg/apis/viewer/v1beta1/types.go index 378e5d63d8..1dd6672fc7 100644 --- a/backend/src/crd/pkg/apis/viewer/v1beta1/types.go +++ b/backend/src/crd/pkg/apis/viewer/v1beta1/types.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/apis/viewer/v1beta1/zz_generated.deepcopy.go b/backend/src/crd/pkg/apis/viewer/v1beta1/zz_generated.deepcopy.go index 5cfe7e3eef..295ed55991 100644 --- a/backend/src/crd/pkg/apis/viewer/v1beta1/zz_generated.deepcopy.go +++ b/backend/src/crd/pkg/apis/viewer/v1beta1/zz_generated.deepcopy.go @@ -1,6 +1,6 @@ // +build !ignore_autogenerated -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/clientset.go b/backend/src/crd/pkg/client/clientset/versioned/clientset.go index 9918303949..af8965afaa 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/clientset.go +++ b/backend/src/crd/pkg/client/clientset/versioned/clientset.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/doc.go b/backend/src/crd/pkg/client/clientset/versioned/doc.go index bf61e64519..1b38a7dfae 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/doc.go +++ b/backend/src/crd/pkg/client/clientset/versioned/doc.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/fake/clientset_generated.go b/backend/src/crd/pkg/client/clientset/versioned/fake/clientset_generated.go index 22dd40a98c..4000c6f1b0 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/fake/clientset_generated.go +++ b/backend/src/crd/pkg/client/clientset/versioned/fake/clientset_generated.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/fake/doc.go b/backend/src/crd/pkg/client/clientset/versioned/fake/doc.go index 0d3b150592..9a9bfee8f7 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/fake/doc.go +++ b/backend/src/crd/pkg/client/clientset/versioned/fake/doc.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/fake/register.go b/backend/src/crd/pkg/client/clientset/versioned/fake/register.go index 575f2e8377..a59cf86c30 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/fake/register.go +++ b/backend/src/crd/pkg/client/clientset/versioned/fake/register.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/scheme/doc.go b/backend/src/crd/pkg/client/clientset/versioned/scheme/doc.go index 097d33b9f7..f8dbd44a52 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/scheme/doc.go +++ b/backend/src/crd/pkg/client/clientset/versioned/scheme/doc.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/scheme/register.go b/backend/src/crd/pkg/client/clientset/versioned/scheme/register.go index 168a052dc6..e770b68b1d 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/scheme/register.go +++ b/backend/src/crd/pkg/client/clientset/versioned/scheme/register.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/doc.go b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/doc.go index 6e8a6d7b00..0a16846d7d 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/doc.go +++ b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/doc.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/fake/doc.go b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/fake/doc.go index f1d8dcee60..acfabc3258 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/fake/doc.go +++ b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/fake/doc.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/fake/fake_scheduledworkflow.go b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/fake/fake_scheduledworkflow.go index 4ef3db5e5b..77f3c0b2ee 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/fake/fake_scheduledworkflow.go +++ b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/fake/fake_scheduledworkflow.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/fake/fake_scheduledworkflow_client.go b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/fake/fake_scheduledworkflow_client.go index dc47dde59f..c7eb400999 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/fake/fake_scheduledworkflow_client.go +++ b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/fake/fake_scheduledworkflow_client.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/generated_expansion.go b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/generated_expansion.go index d0f7d23a59..7dbc2fd924 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/generated_expansion.go +++ b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/generated_expansion.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/scheduledworkflow.go b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/scheduledworkflow.go index 5638fae50c..b1bef74eeb 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/scheduledworkflow.go +++ b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/scheduledworkflow.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/scheduledworkflow_client.go b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/scheduledworkflow_client.go index 15eda453a3..e21a1ee352 100644 --- a/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/scheduledworkflow_client.go +++ b/backend/src/crd/pkg/client/clientset/versioned/typed/scheduledworkflow/v1beta1/scheduledworkflow_client.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/informers/externalversions/factory.go b/backend/src/crd/pkg/client/informers/externalversions/factory.go index dae5ba5d4c..c257847cfb 100644 --- a/backend/src/crd/pkg/client/informers/externalversions/factory.go +++ b/backend/src/crd/pkg/client/informers/externalversions/factory.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/informers/externalversions/generic.go b/backend/src/crd/pkg/client/informers/externalversions/generic.go index a91974425f..958795e6de 100644 --- a/backend/src/crd/pkg/client/informers/externalversions/generic.go +++ b/backend/src/crd/pkg/client/informers/externalversions/generic.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go b/backend/src/crd/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go index 3ca51d5def..6db2e982c7 100644 --- a/backend/src/crd/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go +++ b/backend/src/crd/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/informers/externalversions/scheduledworkflow/interface.go b/backend/src/crd/pkg/client/informers/externalversions/scheduledworkflow/interface.go index a212d6351e..d03ea7e516 100644 --- a/backend/src/crd/pkg/client/informers/externalversions/scheduledworkflow/interface.go +++ b/backend/src/crd/pkg/client/informers/externalversions/scheduledworkflow/interface.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/informers/externalversions/scheduledworkflow/v1beta1/interface.go b/backend/src/crd/pkg/client/informers/externalversions/scheduledworkflow/v1beta1/interface.go index 577de47a1e..08f11a0d69 100644 --- a/backend/src/crd/pkg/client/informers/externalversions/scheduledworkflow/v1beta1/interface.go +++ b/backend/src/crd/pkg/client/informers/externalversions/scheduledworkflow/v1beta1/interface.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/informers/externalversions/scheduledworkflow/v1beta1/scheduledworkflow.go b/backend/src/crd/pkg/client/informers/externalversions/scheduledworkflow/v1beta1/scheduledworkflow.go index 65ef75c267..54f3cdb7cb 100644 --- a/backend/src/crd/pkg/client/informers/externalversions/scheduledworkflow/v1beta1/scheduledworkflow.go +++ b/backend/src/crd/pkg/client/informers/externalversions/scheduledworkflow/v1beta1/scheduledworkflow.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -53,19 +53,20 @@ func NewScheduledWorkflowInformer(client versioned.Interface, namespace string, // Always prefer using an informer factory to get a shared informer instead of getting an independent // one. This reduces memory footprint and number of connections to the server. func NewFilteredScheduledWorkflowInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + ctx := context.Background() return cache.NewSharedIndexInformer( &cache.ListWatch{ ListFunc: func(options v1.ListOptions) (runtime.Object, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.ScheduledworkflowV1beta1().ScheduledWorkflows(namespace).List(context.TODO(), options) + return client.ScheduledworkflowV1beta1().ScheduledWorkflows(namespace).List(ctx, options) }, WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.ScheduledworkflowV1beta1().ScheduledWorkflows(namespace).Watch(context.TODO(), options) + return client.ScheduledworkflowV1beta1().ScheduledWorkflows(namespace).Watch(ctx, options) }, }, &scheduledworkflowv1beta1.ScheduledWorkflow{}, diff --git a/backend/src/crd/pkg/client/listers/scheduledworkflow/v1beta1/expansion_generated.go b/backend/src/crd/pkg/client/listers/scheduledworkflow/v1beta1/expansion_generated.go index 385843a305..4193e9ba40 100644 --- a/backend/src/crd/pkg/client/listers/scheduledworkflow/v1beta1/expansion_generated.go +++ b/backend/src/crd/pkg/client/listers/scheduledworkflow/v1beta1/expansion_generated.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/client/listers/scheduledworkflow/v1beta1/scheduledworkflow.go b/backend/src/crd/pkg/client/listers/scheduledworkflow/v1beta1/scheduledworkflow.go index 9117e7ba76..4fec4232b6 100644 --- a/backend/src/crd/pkg/client/listers/scheduledworkflow/v1beta1/scheduledworkflow.go +++ b/backend/src/crd/pkg/client/listers/scheduledworkflow/v1beta1/scheduledworkflow.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/signals/signal.go b/backend/src/crd/pkg/signals/signal.go index 0e8286e113..b1806d9c44 100644 --- a/backend/src/crd/pkg/signals/signal.go +++ b/backend/src/crd/pkg/signals/signal.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/pkg/signals/signal_posix.go b/backend/src/crd/pkg/signals/signal_posix.go index 9239c75799..997c961c53 100644 --- a/backend/src/crd/pkg/signals/signal_posix.go +++ b/backend/src/crd/pkg/signals/signal_posix.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/src/crd/samples/scheduledworkflow/concurrency.yaml b/backend/src/crd/samples/scheduledworkflow/concurrency.yaml index 7009fa4488..825aff90ef 100644 --- a/backend/src/crd/samples/scheduledworkflow/concurrency.yaml +++ b/backend/src/crd/samples/scheduledworkflow/concurrency.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/samples/scheduledworkflow/every-minute-cron.yaml b/backend/src/crd/samples/scheduledworkflow/every-minute-cron.yaml index 53d7289a08..99ade37600 100644 --- a/backend/src/crd/samples/scheduledworkflow/every-minute-cron.yaml +++ b/backend/src/crd/samples/scheduledworkflow/every-minute-cron.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/samples/scheduledworkflow/every-minute-periodic.yaml b/backend/src/crd/samples/scheduledworkflow/every-minute-periodic.yaml index 9c04549efe..0ee39ccbc9 100644 --- a/backend/src/crd/samples/scheduledworkflow/every-minute-periodic.yaml +++ b/backend/src/crd/samples/scheduledworkflow/every-minute-periodic.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/samples/scheduledworkflow/invalid.yaml b/backend/src/crd/samples/scheduledworkflow/invalid.yaml index 5f535a659b..e3665634d6 100644 --- a/backend/src/crd/samples/scheduledworkflow/invalid.yaml +++ b/backend/src/crd/samples/scheduledworkflow/invalid.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/samples/scheduledworkflow/no-history.yaml b/backend/src/crd/samples/scheduledworkflow/no-history.yaml index 6fc08b93a0..b83bc44754 100644 --- a/backend/src/crd/samples/scheduledworkflow/no-history.yaml +++ b/backend/src/crd/samples/scheduledworkflow/no-history.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/samples/scheduledworkflow/parameterized.yaml b/backend/src/crd/samples/scheduledworkflow/parameterized.yaml index 61da6cb51c..b0d4f2a83e 100644 --- a/backend/src/crd/samples/scheduledworkflow/parameterized.yaml +++ b/backend/src/crd/samples/scheduledworkflow/parameterized.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/samples/scheduledworkflow/single-run.yaml b/backend/src/crd/samples/scheduledworkflow/single-run.yaml index 3cac6f0f0c..92eaa88278 100644 --- a/backend/src/crd/samples/scheduledworkflow/single-run.yaml +++ b/backend/src/crd/samples/scheduledworkflow/single-run.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/samples/scheduledworkflow/start-end-cron.yaml b/backend/src/crd/samples/scheduledworkflow/start-end-cron.yaml index d4a141a723..88f90ed557 100644 --- a/backend/src/crd/samples/scheduledworkflow/start-end-cron.yaml +++ b/backend/src/crd/samples/scheduledworkflow/start-end-cron.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/samples/scheduledworkflow/start-end-periodic.yaml b/backend/src/crd/samples/scheduledworkflow/start-end-periodic.yaml index a742159158..3c927b998f 100644 --- a/backend/src/crd/samples/scheduledworkflow/start-end-periodic.yaml +++ b/backend/src/crd/samples/scheduledworkflow/start-end-periodic.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/samples/viewer/mnist.yaml b/backend/src/crd/samples/viewer/mnist.yaml index 06023f84ba..ee75729ee3 100644 --- a/backend/src/crd/samples/viewer/mnist.yaml +++ b/backend/src/crd/samples/viewer/mnist.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/samples/viewer/tensorboard-local-volume.yaml b/backend/src/crd/samples/viewer/tensorboard-local-volume.yaml index f99ee8b154..640d75ff3b 100644 --- a/backend/src/crd/samples/viewer/tensorboard-local-volume.yaml +++ b/backend/src/crd/samples/viewer/tensorboard-local-volume.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/crd/samples/viewer/tensorboard-persistent-volume.yaml b/backend/src/crd/samples/viewer/tensorboard-persistent-volume.yaml index ae3d3b7465..becc1c596a 100644 --- a/backend/src/crd/samples/viewer/tensorboard-persistent-volume.yaml +++ b/backend/src/crd/samples/viewer/tensorboard-persistent-volume.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/src/v2/.gitignore b/backend/src/v2/.gitignore deleted file mode 100644 index 30c0704595..0000000000 --- a/backend/src/v2/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# temporary local data folder for simulating pipeline run -tmp -# compiled binary -main -# local env file to configure dev image repository -.env -# local token to identify whether image has been built up-to-date -.build diff --git a/backend/src/v2/Makefile b/backend/src/v2/Makefile deleted file mode 100644 index fb36933a8f..0000000000 --- a/backend/src/v2/Makefile +++ /dev/null @@ -1,72 +0,0 @@ -REPO_ROOT=../../../.. -GO_COMMON_ARGS=--logtostderr -DRIVER_EXAMPLE_PATH=./driver/example -PUBLISHER_EXAMPLE_PATH=./publisher/example -DATA_PATH=./tmp -DRIVER_CODE=./driver/*.go -PUBLISHER_CODE=./publisher/*.go -ENTRYPOINT_CODE=./entrypoint/*.go - -.PHONY: run-producer-consumer -run-producer-consumer: $(DRIVER_CODE) $(ENTRYPOINT_CODE) $(PUBLISHER_CODE) $(DRIVER_EXAMPLE_PATH)/task_spec_producer.json $(DRIVER_EXAMPLE_PATH)/task_spec_dag.json - # Make sure you have a separate running terminal that runs - # `make proxy`. - - # Clean up intermediate data - rm -rf $(DATA_PATH) - @echo - # ====== Run DAG driver ========== - go run $(DRIVER_CODE) $(GO_COMMON_ARGS) \ - --task_spec="$$(cat $(DRIVER_EXAMPLE_PATH)/task_spec_dag.json)" \ - --execution_name="kfp-$$RANDOM" \ - --driver_type=DAG \ - --output_path_execution_id="$(DATA_PATH)/dag/execution_id" \ - --output_path_context_name="$(DATA_PATH)/dag/context_name" - @if ls $(DATA_PATH)/dag/execution_id $(DATA_PATH)/dag/context_name; then \ - echo "DAG driver outputs are found."; \ - else \ - echo "Some of DAG driver outputs are missing." \ - exit 1; \ - fi - @echo - # ======== Run producer task driver ======== - go run $(DRIVER_CODE) $(GO_COMMON_ARGS) \ - --task_spec="$$(cat $(DRIVER_EXAMPLE_PATH)/task_spec_producer.json)" \ - --executor_spec="$$(cat $(DRIVER_EXAMPLE_PATH)/executor_spec_producer.json)" \ - --execution_name="kfp-$$RANDOM" \ - --driver_type=EXECUTOR \ - --parent_context_name="$$(cat $(DATA_PATH)/dag/context_name)" \ - --output_path_execution_id="$(DATA_PATH)/producer/execution_id" \ - --output_path_pod_spec_patch="$(DATA_PATH)/producer/pod_spec_patch.json" - cat $(DATA_PATH)/producer/pod_spec_patch.json - @echo - @echo - # ========= Run producer task entrypoint ======= - mkdir -p $(DATA_PATH)/producer/parameters - go run $(ENTRYPOINT_CODE) $(GO_COMMON_ARGS) \ - --component_outputs_spec="$$(cat $(PUBLISHER_EXAMPLE_PATH)/outputs_spec.json)" \ - --execution_id=$$(cat $(DATA_PATH)/producer/execution_id) \ - --publisher_type=EXECUTOR \ - --input_path_parameters=$(DATA_PATH)/producer/parameters \ - -- "bash" "-c" "echo output value > $(DATA_PATH)/producer/parameters/output_value" - @echo - # ========= Run consumer task driver ========== - go run $(DRIVER_CODE) $(GO_COMMON_ARGS) \ - --task_spec="$$(cat $(DRIVER_EXAMPLE_PATH)/task_spec_consumer.json)" \ - --executor_spec="$$(cat $(DRIVER_EXAMPLE_PATH)/executor_spec_consumer.json)" \ - --execution_name="kfp-$$RANDOM" \ - --driver_type=EXECUTOR \ - --parent_context_name="$$(cat $(DATA_PATH)/dag/context_name)" \ - --output_path_execution_id="$(DATA_PATH)/consumer/execution_id" \ - --output_path_pod_spec_patch="$(DATA_PATH)/consumer/pod_spec_patch.json" - cat $(DATA_PATH)/consumer/pod_spec_patch.json - @echo - -.PHONY: image-push -image-push: - cd driver && $(MAKE) image-push - cd publisher && $(MAKE) image-push - -.PHONY: proxy -proxy: - kubectl port-forward -n kubeflow svc/metadata-grpc-service 8080:8080 diff --git a/backend/src/v2/README.md b/backend/src/v2/README.md deleted file mode 100644 index 37d9f7d39c..0000000000 --- a/backend/src/v2/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# V2 Backend POC - -* You can run this POC on a KFP cluster, take a look at `./compiler`. -* You can run e2e testing for this POC locally by: - - First, in one terminal, run the following to start a proxy to MLMD service in your KFP cluster (do not use your production cluster!): - - ```bash - make proxy - ``` - - Then, run the e2e testing: - - ```bash - make - ``` diff --git a/backend/src/v2/common/const.go b/backend/src/v2/common/const.go deleted file mode 100644 index 4c4d4ebe5d..0000000000 --- a/backend/src/v2/common/const.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package common - -// publisher type enum -const ( - PublisherType_DAG = "DAG" - PublisherType_EXECUTOR = "EXECUTOR" -) - -// executor output parameters path -const ( - ExecutorOutputPathParameters = "/kfp/outputs/parameters" - ExecutorEntrypointPath = "/kfp/entrypoint/entrypoint" - ExecutorEntrypointVolumePath = "/kfp/entrypoint" -) - -// execution custom properties -const ( - ExecutionPropertyPrefixOutputParam = "output:" -) diff --git a/backend/src/v2/common/mlmd/execution.go b/backend/src/v2/common/mlmd/execution.go deleted file mode 100644 index 6f467550ae..0000000000 --- a/backend/src/v2/common/mlmd/execution.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package mlmd - -import ( - "github.com/kubeflow/pipelines/backend/src/v2/common" - mlmdPb "github.com/kubeflow/pipelines/third_party/ml-metadata/go_client/ml_metadata/proto" -) - -// TODO(Bobgy): refactor driver and publisher to all use this helper -type KfpExecution struct { - execution *mlmdPb.Execution -} - -func NewKfpExecution(execution *mlmdPb.Execution) *KfpExecution { - return &KfpExecution{execution: execution} -} - -func (e *KfpExecution) String() string { - return e.execution.String() -} - -func (e *KfpExecution) GetOutputParameter(parameterName string) *mlmdPb.Value { - return e.execution.GetCustomProperties()[common.ExecutionPropertyPrefixOutputParam+parameterName] -} diff --git a/backend/src/v2/compiler/Makefile b/backend/src/v2/compiler/Makefile deleted file mode 100644 index 4bc3cf6ead..0000000000 --- a/backend/src/v2/compiler/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -REPO_ROOT=../../../.. -# PIPELINE_SPEC_PATH=$(REPO_ROOT)/samples/v2/hello_world/hw_pipeline_job.json -PIPELINE_SPEC_PATH=$(REPO_ROOT)/samples/v2/producer_consumer_param/two_step_pipeline_job.json -SAMPLE_PIPELINE_SPEC=../driver/example/task_spec_dag.json - -run: compile $(SAMPLE_PIPELINE_SPEC) - # Run compiled argo workflow spec in workflow.yaml in an existing KFP cluster - # using argo CLI to submit. - # - # Alternatively, you can upload this workflow.yaml in KFP UI and run it. - argo submit --watch workflow.yaml \ - --serviceaccount pipeline-runner \ - --namespace kubeflow \ - --parameter task-spec="$$(cat $(SAMPLE_PIPELINE_SPEC))" - -# TODO(Bobgy): How can we write ./**/*.go instead? -.PHONY: compile -compile: ./*.go ./templates/*.go - set -o pipefail \ - && ( \ - go run ./*.go --pipeline_spec_path=$(PIPELINE_SPEC_PATH) | tee workflow.yaml \ - || (rm -f workflow.yaml && exit 1) \ - ) diff --git a/backend/src/v2/compiler/compiler.go b/backend/src/v2/compiler/compiler.go deleted file mode 100644 index 16399b0cc8..0000000000 --- a/backend/src/v2/compiler/compiler.go +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package main - -import ( - "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" - workflowapi "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" - pb "github.com/kubeflow/pipelines/api/v2alpha1/go" - "github.com/kubeflow/pipelines/backend/src/v2/common" - "github.com/kubeflow/pipelines/backend/src/v2/compiler/templates" - "github.com/pkg/errors" -) - -const ( - rootDagDriverTaskName = "driver-kfp-root" -) - -const ( - templateNameExecutorDriver = "kfp-executor-driver" - templateNameDagDriver = "kfp-dag-driver" - templateNameExecutorPublisher = "kfp-executor-publisher" -) - -func CompilePipelineSpec( - pipelineSpec *pb.PipelineSpec, - deploymentConfig *pb.PipelineDeploymentConfig, -) (*workflowapi.Workflow, error) { - - // validation - if pipelineSpec.GetPipelineInfo().GetName() == "" { - return nil, errors.New("Name is empty") - } - - // initialization - var workflow workflowapi.Workflow - workflow.APIVersion = "argoproj.io/v1alpha1" - workflow.Kind = "Workflow" - workflow.GenerateName = pipelineSpec.GetPipelineInfo().GetName() + "-" - - spec, err := generateSpec(pipelineSpec, deploymentConfig) - if err != nil { - return nil, errors.Wrapf(err, "Failed to generate workflow spec") - } - workflow.Spec = *spec - - return &workflow, nil -} - -func generateSpec( - pipelineSpec *pb.PipelineSpec, - deploymentConfig *pb.PipelineDeploymentConfig, -) (*workflowapi.WorkflowSpec, error) { - tasks := pipelineSpec.GetTasks() - var spec workflowapi.WorkflowSpec - - // generate helper templates - executorDriver := templates.Driver(false) - executorDriver.Name = templateNameExecutorDriver - dagDriver := templates.Driver(true) - dagDriver.Name = templateNameDagDriver - executorPublisher := templates.Publisher(common.PublisherType_EXECUTOR) - executorPublisher.Name = templateNameExecutorPublisher - executorTemplates := templates.Executor(templateNameExecutorDriver, templateNameExecutorPublisher) - - // generate root template - var root workflowapi.Template - root.Name = "kfp-root" - rootDag := initRootDag(&spec, templateNameDagDriver) - root.DAG = rootDag - // TODO: make a generic default value - defaultTaskSpec := `{"taskInfo":{"name":"hello-world-dag"},"inputs":{"parameters":{"text":{"runtimeValue":{"constantValue":{"stringValue":"Hello, World!"}}}}}}` - - spec.Arguments.Parameters = []workflowapi.Parameter{ - {Name: "task-spec", Value: v1alpha1.AnyStringPtr(defaultTaskSpec)}, - } - - subDag, err := templates.Dag(&templates.DagArgs{ - Tasks: &tasks, - DeploymentConfig: deploymentConfig, - ExecutorTemplateName: templates.TemplateNameExecutor, - }) - if err != nil { - return nil, err - } - parentContextName := "{{tasks." + rootDagDriverTaskName + ".outputs.parameters." + templates.DriverParamContextName + "}}" - root.DAG.Tasks = append(root.DAG.Tasks, workflowapi.DAGTask{ - Name: "sub-dag", - Template: subDag.Name, - Dependencies: []string{rootDagDriverTaskName}, - Arguments: workflowapi.Arguments{ - Parameters: []workflowapi.Parameter{ - {Name: templates.DagParamContextName, Value: v1alpha1.AnyStringPtr(parentContextName)}, - }, - }, - }) - - spec.Templates = []workflowapi.Template{root, *subDag, *executorDriver, *dagDriver, *executorPublisher} - for _, template := range executorTemplates { - spec.Templates = append(spec.Templates, *template) - } - spec.Entrypoint = root.Name - return &spec, nil -} - -func initRootDag(spec *workflowapi.WorkflowSpec, templateNameDagDriver string) *workflowapi.DAGTemplate { - root := &workflowapi.DAGTemplate{} - // TODO(Bobgy): shall we pass a lambda "addTemplate()" here instead? - driverTask := &workflowapi.DAGTask{} - driverTask.Name = rootDagDriverTaskName - driverTask.Template = templateNameDagDriver - rootExecutionName := "kfp-root-{{workflow.name}}" - workflowParameterTaskSpec := "{{workflow.parameters.task-spec}}" - driverType := "DAG" - parentContextName := "" // root has no parent - driverTask.Arguments.Parameters = []workflowapi.Parameter{ - {Name: templates.DriverParamExecutionName, Value: v1alpha1.AnyStringPtr(rootExecutionName)}, - {Name: templates.DriverParamTaskSpec, Value: v1alpha1.AnyStringPtr(workflowParameterTaskSpec)}, - {Name: templates.DriverParamDriverType, Value: v1alpha1.AnyStringPtr(driverType)}, - {Name: templates.DriverParamParentContextName, Value: v1alpha1.AnyStringPtr(parentContextName)}, - } - root.Tasks = append(root.Tasks, *driverTask) - return root -} diff --git a/backend/src/v2/compiler/main.go b/backend/src/v2/compiler/main.go deleted file mode 100644 index 703c7c7d6a..0000000000 --- a/backend/src/v2/compiler/main.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package main - -import ( - "bytes" - "flag" - "fmt" - "io/ioutil" - - "github.com/golang/glog" - - "github.com/golang/protobuf/jsonpb" - - "encoding/json" - - pb "github.com/kubeflow/pipelines/api/v2alpha1/go" -) - -var pipelineSpecPath = flag.String("pipeline_spec_path", "../../../../samples/v2/hello_world/hw_pipeline_job.json", "Path to pipeline spec file generated by KFP SDK v2") - -func main() { - flag.Parse() - if pipelineSpecPath == nil || *pipelineSpecPath == "" { - glog.Fatal("Pipeline spec path is not provided") - } - in, err := ioutil.ReadFile(*pipelineSpecPath) - if err != nil { - fmt.Println(err) - } - jobJson := fmt.Sprintf("%s", in) - // fmt.Println(specJson) - job := &pb.PipelineJob{} - if err := jsonpb.UnmarshalString(jobJson, job); err != nil { - glog.Fatalf("Failed to parse pipeline job: %v, error: %s", jobJson, err) - } - // TODO(Bobgy): can we avoid this marshal to string step? - marshaler := jsonpb.Marshaler{} - specJson, err := marshaler.MarshalToString(job.GetPipelineSpec()) - if err != nil { - glog.Fatalf("Failed marshal pipeline spec to json: %v", err) - } - spec := &pb.PipelineSpec{} - if err := jsonpb.UnmarshalString(specJson, spec); err != nil { - glog.Fatalf("Failed to parse pipeline spec: %v", err) - } - deploymentConfig, err := unmarshalDeploymentConfig(spec) - if err != nil { - glog.Fatalf("Failed to unmarshal deployment config: %v", err) - } - // fmt.Println(a) - workflow, err := CompilePipelineSpec(spec, deploymentConfig) - if err != nil { - glog.Fatalf("Failed to compile pipeline IR to argo workflow: %v", err) - } - workflowInJson, err := json.MarshalIndent(workflow, "", " ") - if err != nil { - glog.Fatalf("Could not marshal the workflow: %v", err) - } - fmt.Println(string(workflowInJson)) - glog.Flush() -} - -func unmarshalDeploymentConfig(spec *pb.PipelineSpec) (*pb.PipelineDeploymentConfig, error) { - marshaler := jsonpb.Marshaler{} - buffer := new(bytes.Buffer) - if err := marshaler.Marshal(buffer, spec.GetDeploymentConfig()); err != nil { - return nil, err - } - deploymentConfig := &pb.PipelineDeploymentConfig{} - // Allow unknown '@type' field in the json message. - unmarshaler := jsonpb.Unmarshaler{AllowUnknownFields: true} - if err := unmarshaler.Unmarshal(buffer, deploymentConfig); err != nil { - return nil, err - } - return deploymentConfig, nil -} diff --git a/backend/src/v2/compiler/templates/dag.go b/backend/src/v2/compiler/templates/dag.go deleted file mode 100644 index 8af1cc05e6..0000000000 --- a/backend/src/v2/compiler/templates/dag.go +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package templates - -import ( - "fmt" - - "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" - workflowapi "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" - "github.com/golang/protobuf/jsonpb" - pb "github.com/kubeflow/pipelines/api/v2alpha1/go" - "github.com/kubeflow/pipelines/backend/src/v2/compiler/util" - "github.com/pkg/errors" -) - -const ( - // Dag Inputs - DagParamContextName = paramPrefixKfpInternal + "context-name" -) - -// Const can not be refered via string pointers, so we use var here. -var ( - argoVariablePodName = "{{pod.name}}" -) - -type DagArgs struct { - Tasks *[]*pb.PipelineTaskSpec - DeploymentConfig *pb.PipelineDeploymentConfig - ExecutorTemplateName string -} - -type taskData struct { - task *pb.PipelineTaskSpec - // we may need more stuff put here -} - -func Dag(args *DagArgs) (*workflowapi.Template, error) { - // convenient local variables - tasks := args.Tasks - deploymentConfig := args.DeploymentConfig - executors := deploymentConfig.GetExecutors() - - var dag workflowapi.Template - dag.Name = getUniqueDagName() - dag.DAG = &workflowapi.DAGTemplate{} - dag.Inputs.Parameters = []workflowapi.Parameter{ - {Name: DagParamContextName}, - } - taskMap := make(map[string]*taskData) - for index, task := range *tasks { - name := task.GetTaskInfo().GetName() - if name == "" { - return nil, errors.Errorf("Task name is empty for task with index %v and spec: %s", index, task.String()) - } - sanitizedName := util.SanitizeK8sName(name) - if taskMap[sanitizedName] != nil { - return nil, errors.Errorf("Two tasks '%s' and '%s' in the DAG has the same sanitized name: %s", taskMap[sanitizedName].task.GetTaskInfo().GetName(), name, sanitizedName) - } - taskMap[sanitizedName] = &taskData{ - task: task, - } - } - - // generate tasks - for _, task := range *tasks { - // TODO(Bobgy): Move executor template generation out as a separate file. - executorLabel := task.GetExecutorLabel() - executorSpec := executors[executorLabel] - if executorSpec == nil { - return nil, errors.Errorf("Executor with label '%v' cannot be found in deployment config", executorLabel) - } - var executor workflowapi.Template - executor.Name = util.SanitizeK8sName(executorLabel) - - argoTaskName := util.SanitizeK8sName(task.GetTaskInfo().GetName()) - marshaler := &jsonpb.Marshaler{} - taskSpecInJson, err := marshaler.MarshalToString(task) - if err != nil { - return nil, errors.Wrapf(err, "Failed to marshal task spec to JSON: %s", task.String()) - } - executorSpecInJson, err := marshaler.MarshalToString(executorSpec) - if err != nil { - return nil, errors.Wrapf(err, "Failed to marshal executor spec to JSON: %s", executorSpec.String()) - } - // TODO(Bobgy): Task outputs spec is deprecated. Get outputs spec from component output spec once data is ready. - outputsSpec := task.GetOutputs() - if outputsSpec == nil { - // For tasks without outputs spec, marshal an emtpy outputs spec. - outputsSpec = &pb.TaskOutputsSpec{} - } - outputsSpecInJson, err := marshaler.MarshalToString(outputsSpec) - if err != nil { - return nil, errors.Wrapf(err, "Failed to marshal outputs spec to JSON: %s", task.GetOutputs().String()) - } - parentContextNameValue := "{{inputs.parameters." + DagParamContextName + "}}" - - dependencies, err := getTaskDependencies(task.GetInputs()) - if err != nil { - return nil, errors.Wrapf(err, "Failed to get task dependencies for task: %s", task.String()) - } - // Convert dependency names to sanitized ones and check validity. - for index, dependency := range *dependencies { - sanitizedDependencyName := util.SanitizeK8sName(dependency) - upstreamTask := taskMap[sanitizedDependencyName] - if upstreamTask == nil { - return nil, errors.Wrapf(err, "Failed to find dependency '%s' for task: %s", dependency, task.String()) - } - upstreamTaskName := upstreamTask.task.GetTaskInfo().GetName() - if upstreamTaskName != dependency { - return nil, errors.Wrapf(err, "Found slightly different dependency task name '%s', expecting '%s' for task: %s", upstreamTaskName, dependency, task.String()) - } - (*dependencies)[index] = sanitizedDependencyName - } - - dag.DAG.Tasks = append( - dag.DAG.Tasks, - workflowapi.DAGTask{ - Name: argoTaskName, - Template: args.ExecutorTemplateName, - Dependencies: *dependencies, - Arguments: workflowapi.Arguments{ - Parameters: []workflowapi.Parameter{ - {Name: ExecutorParamTaskSpec, Value: v1alpha1.AnyStringPtr(taskSpecInJson)}, - {Name: ExecutorParamContextName, Value: v1alpha1.AnyStringPtr(parentContextNameValue)}, - {Name: ExecutorParamExecutorSpec, Value: v1alpha1.AnyStringPtr(executorSpecInJson)}, - {Name: ExecutorParamOutputsSpec, Value: v1alpha1.AnyStringPtr(outputsSpecInJson)}, - }, - }, - }) - } - return &dag, nil -} - -func getTaskDependencies(inputsSpec *pb.TaskInputsSpec) (*[]string, error) { - dependencies := make(map[string]bool) - for _, parameter := range inputsSpec.GetParameters() { - if parameter.GetTaskOutputParameter() != nil { - producerTask := parameter.GetTaskOutputParameter().GetProducerTask() - if producerTask == "" { - return nil, errors.Errorf("Invalid task input parameter spec, producer task is empty: %v", parameter.String()) - } - dependencies[producerTask] = true - } - } - dependencyList := make([]string, 0, len(dependencies)) - for dependency := range dependencies { - dependencyList = append(dependencyList, dependency) - } - return &dependencyList, nil -} - -// TODO(Bobgy): figure out a better way to generate unique names -var globalDagCount = 0 - -func getUniqueDagName() string { - globalDagCount = globalDagCount + 1 - return fmt.Sprintf("dag-%x", globalDagCount) -} diff --git a/backend/src/v2/compiler/templates/driver.go b/backend/src/v2/compiler/templates/driver.go deleted file mode 100644 index 0a6a5b711a..0000000000 --- a/backend/src/v2/compiler/templates/driver.go +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package templates - -import ( - "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" - workflowapi "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" - k8sv1 "k8s.io/api/core/v1" -) - -// TODO(Bobgy): make image configurable -// gcr.io/gongyuan-pipeline-test/kfp-driver:latest -const ( - driverImage = "gcr.io/gongyuan-pipeline-test/kfp-driver" - driverImageRef = "@sha256:d3fa780ffc59a22253eb4b4460e89f722811dfdd2ded277d3606f1fce323af87" - driverImageFull = driverImage + driverImageRef -) - -const ( - paramPrefixKfpInternal = "kfp-" - outputPathPodSpecPatch = "/kfp/outputs/pod-spec-patch.json" -) - -const ( - // Inputs - DriverParamParentContextName = paramPrefixKfpInternal + "parent-context-name" - DriverParamExecutionName = paramPrefixKfpInternal + "execution-name" - DriverParamDriverType = paramPrefixKfpInternal + "driver-type" - DriverParamTaskSpec = paramPrefixKfpInternal + "task-spec" - DriverParamExecutorSpec = paramPrefixKfpInternal + "executor-spec" - // Outputs - DriverParamExecutionId = paramPrefixKfpInternal + "execution-id" - DriverParamContextName = paramPrefixKfpInternal + "context-name" - DriverParamPodSpecPatch = paramPrefixKfpInternal + "pod-spec-patch" -) - -// Do not modify this, this should be constant too. -// This needs to be used in string pointers, so it is "var" instead of "const". -var ( - mlmdExecutionName = "kfp-executor-{{pod.name}}" -) - -// TODO(Bobgy): parameters is no longer needed. -// TODO(Bobgy): reuse existing templates if they are the same. -func Driver(isDag bool) *workflowapi.Template { - driver := &workflowapi.Template{} - // driver.Name is not set, it should be set after calling this method. - driver.Container = &k8sv1.Container{} - driver.Container.Image = driverImageFull - driver.Container.Command = []string{"/bin/kfp-driver"} - driver.Inputs.Parameters = []workflowapi.Parameter{ - {Name: DriverParamParentContextName}, - {Name: DriverParamExecutionName, Value: v1alpha1.AnyStringPtr(mlmdExecutionName)}, - {Name: DriverParamDriverType}, - {Name: DriverParamTaskSpec}, - } - driver.Outputs.Parameters = []workflowapi.Parameter{ - {Name: DriverParamExecutionId, ValueFrom: &workflowapi.ValueFrom{ - Path: "/kfp/outputs/internal/execution-id", - }}, - } - driver.Container.Args = []string{ - "--logtostderr", - // TODO(Bobgy): make this configurable - "--mlmd_url=metadata-grpc-service.kubeflow.svc.cluster.local:8080", - "--parent_context_name={{inputs.parameters." + DriverParamParentContextName + "}}", - "--execution_name={{inputs.parameters." + DriverParamExecutionName + "}}", - "--driver_type={{inputs.parameters." + DriverParamDriverType + "}}", - "--task_spec={{inputs.parameters." + DriverParamTaskSpec + "}}", - "--output_path_execution_id={{outputs.parameters." + DriverParamExecutionId + ".path}}", - } - if isDag { - driver.Container.Args = append( - driver.Container.Args, - "--output_path_context_name={{outputs.parameters."+DriverParamContextName+".path}}", - ) - driver.Outputs.Parameters = append( - driver.Outputs.Parameters, - workflowapi.Parameter{ - Name: DriverParamContextName, - ValueFrom: &workflowapi.ValueFrom{ - Path: "/kfp/outputs/internal/context-name", - }, - }, - ) - } else { - // input executor spec - driver.Container.Args = append( - driver.Container.Args, - "--executor_spec={{inputs.parameters."+DriverParamExecutorSpec+"}}", - ) - driver.Inputs.Parameters = append( - driver.Inputs.Parameters, - workflowapi.Parameter{Name: DriverParamExecutorSpec}, - ) - // output pod spec patch - driver.Container.Args = append( - driver.Container.Args, - "--output_path_pod_spec_patch="+outputPathPodSpecPatch, - ) - driver.Outputs.Parameters = append( - driver.Outputs.Parameters, - workflowapi.Parameter{ - Name: DriverParamPodSpecPatch, - ValueFrom: &workflowapi.ValueFrom{ - Path: outputPathPodSpecPatch, - }, - }, - ) - } - return driver -} diff --git a/backend/src/v2/compiler/templates/executor.go b/backend/src/v2/compiler/templates/executor.go deleted file mode 100644 index 320abe1e67..0000000000 --- a/backend/src/v2/compiler/templates/executor.go +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package templates - -import ( - "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" - workflowapi "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" - "github.com/kubeflow/pipelines/backend/src/v2/common" - apiv1 "k8s.io/api/core/v1" -) - -// TODO(Bobgy): make image configurable -const ( - entrypointImage = "gcr.io/gongyuan-pipeline-test/kfp-entrypoint" - entrypointImageRef = "@sha256:793316de698fe53ab318d43b00213d947f5ac2abbefc780cece46bf8a44381c4" - entrypointImageFull = entrypointImage + entrypointImageRef -) - -const ( - TemplateNameExecutor = "kfp-executor" - templateNameDummy = "kfp-dummy" - - // Executor inputs - ExecutorParamTaskSpec = DriverParamTaskSpec - ExecutorParamExecutorSpec = DriverParamExecutorSpec - ExecutorParamContextName = paramPrefixKfpInternal + "context-name" - ExecutorParamOutputsSpec = PublisherParamOutputsSpec - - executorInternalParamPodName = paramPrefixKfpInternal + "pod-name" - executorInternalParamPodSpecPatch = paramPrefixKfpInternal + "pod-spec-patch" - executorInternalArtifactParameters = paramPrefixKfpInternal + "parameters" -) - -func Executor(executorDriverTemplateName string, executorPublisherTemplateName string) []*workflowapi.Template { - // TODO(Bobgy): Move dummy template generation out as a separate file. - var dummy workflowapi.Template - dummy.Name = templateNameDummy - // The actual container definition will be injected by pod spec patch - entrypointVolumeName := "kfp-entrypoint" - dummy.Volumes = []apiv1.Volume{{ - Name: entrypointVolumeName, - VolumeSource: apiv1.VolumeSource{ - EmptyDir: &apiv1.EmptyDirVolumeSource{}, - }, - }} - dummy.Container = &apiv1.Container{ - Image: "dummy", - VolumeMounts: []apiv1.VolumeMount{{ - Name: entrypointVolumeName, - MountPath: common.ExecutorEntrypointVolumePath, - ReadOnly: true, - }}, - } - // The entrypoint init container copies the entrypoint binary into a volume shared with executor container. - dummy.InitContainers = []workflowapi.UserContainer{{ - Container: apiv1.Container{ - Name: "entrypoint-init", - Image: entrypointImageFull, - Command: []string{"cp"}, - Args: []string{"/bin/kfp-entrypoint", common.ExecutorEntrypointPath}, - VolumeMounts: []apiv1.VolumeMount{{ - Name: entrypointVolumeName, - MountPath: common.ExecutorEntrypointVolumePath, - }}, - }, - }} - dummy.PodSpecPatch = "{{inputs.parameters." + executorInternalParamPodSpecPatch + "}}" - dummy.Inputs.Parameters = []workflowapi.Parameter{ - {Name: executorInternalParamPodSpecPatch}, - } - dummy.Outputs.Parameters = []workflowapi.Parameter{ - {Name: executorInternalParamPodName, Value: v1alpha1.AnyStringPtr(argoVariablePodName)}, - } - dummy.Outputs.Artifacts = []workflowapi.Artifact{ - {Name: executorInternalArtifactParameters, Path: common.ExecutorOutputPathParameters, Optional: true}, - } - - driverTaskName := "driver" - executorTaskName := "executor" - driverType := "EXECUTOR" - - var executorDag workflowapi.Template - executorDag.Name = TemplateNameExecutor - executorDag.Inputs.Parameters = []workflowapi.Parameter{ - {Name: ExecutorParamContextName}, - {Name: ExecutorParamTaskSpec}, - {Name: ExecutorParamExecutorSpec}, - {Name: ExecutorParamOutputsSpec}, - } - taskSpecInJson := "{{inputs.parameters." + ExecutorParamTaskSpec + "}}" - executorSpecInJson := "{{inputs.parameters." + ExecutorParamExecutorSpec + "}}" - podSpecPatchValue := "{{tasks." + driverTaskName + ".outputs.parameters." + executorInternalParamPodSpecPatch + "}}" - parentContextNameValue := "{{inputs.parameters." + ExecutorParamContextName + "}}" - executorDag.DAG = &workflowapi.DAGTemplate{} - executorDag.DAG.Tasks = []workflowapi.DAGTask{ - { - Name: driverTaskName, - Template: executorDriverTemplateName, - Arguments: workflowapi.Arguments{ - Parameters: []workflowapi.Parameter{ - {Name: DriverParamTaskSpec, Value: v1alpha1.AnyStringPtr(taskSpecInJson)}, - {Name: DriverParamDriverType, Value: v1alpha1.AnyStringPtr(driverType)}, - {Name: DriverParamParentContextName, Value: v1alpha1.AnyStringPtr(parentContextNameValue)}, - {Name: DriverParamExecutorSpec, Value: v1alpha1.AnyStringPtr(executorSpecInJson)}, - }, - }, - }, - { - Name: executorTaskName, - Template: dummy.Name, - Dependencies: []string{driverTaskName}, - Arguments: workflowapi.Arguments{ - Parameters: []workflowapi.Parameter{ - {Name: executorInternalParamPodSpecPatch, Value: v1alpha1.AnyStringPtr(podSpecPatchValue)}, - }, - }, - }, - } - return []*workflowapi.Template{ - &executorDag, - &dummy, - } -} diff --git a/backend/src/v2/compiler/templates/publisher.go b/backend/src/v2/compiler/templates/publisher.go deleted file mode 100644 index 562420aced..0000000000 --- a/backend/src/v2/compiler/templates/publisher.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package templates - -import ( - workflowapi "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" - k8sv1 "k8s.io/api/core/v1" -) - -// TODO(Bobgy): make image configurable -// gcr.io/gongyuan-pipeline-test/kfp-driver:latest -const ( - publisherImage = "gcr.io/gongyuan-pipeline-test/kfp-publisher" - publisherImageRef = "@sha256:3623052f6bd4f02da6199d1971ec948b96fb00c6d8c61725d3cfda998b304efe" - publisherImageFull = publisherImage + publisherImageRef -) - -const ( - // Inputs - PublisherParamExecutionId = paramPrefixKfpInternal + "execution-id" - PublisherParamPublisherType = paramPrefixKfpInternal + "publisher-type" - PublisherParamOutputsSpec = paramPrefixKfpInternal + "outputs-spec" - PublisherArtifactParameters = paramPrefixKfpInternal + "parameters" - // Paths - publisherInputPathParameters = "/kfp/inputs/parameters" -) - -// TODO(Bobgy): parameters is no longer needed. -// TODO(Bobgy): reuse existing templates if they are the same. -func Publisher(publisherType string) *workflowapi.Template { - publisher := &workflowapi.Template{} - // publisher.Name is not set, it should be set after calling this method. - publisher.Container = &k8sv1.Container{} - publisher.Container.Image = publisherImageFull - publisher.Container.Command = []string{"/bin/kfp-publisher"} - publisher.Inputs.Parameters = []workflowapi.Parameter{ - {Name: PublisherParamExecutionId}, - {Name: PublisherParamOutputsSpec}, - {Name: PublisherParamPublisherType}, - } - publisher.Inputs.Artifacts = []workflowapi.Artifact{{ - Name: PublisherArtifactParameters, - Path: publisherInputPathParameters, - Optional: true, - }} - publisher.Container.Args = []string{ - "--logtostderr", - // TODO(Bobgy): make this configurable - "--mlmd_url=metadata-grpc-service.kubeflow.svc.cluster.local:8080", - "--execution_id={{inputs.parameters." + PublisherParamExecutionId + "}}", - "--publisher_type={{inputs.parameters." + PublisherParamPublisherType + "}}", - "--component_outputs_spec={{inputs.parameters." + PublisherParamOutputsSpec + "}}", - "--input_path_parameters={{inputs.artifacts." + PublisherArtifactParameters + ".path}}", - } - return publisher -} diff --git a/backend/src/v2/compiler/util/util.go b/backend/src/v2/compiler/util/util.go deleted file mode 100644 index 25bed2cd70..0000000000 --- a/backend/src/v2/compiler/util/util.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package util - -import ( - "regexp" - "strings" -) - -func SanitizeK8sName(name string) string { - expressionAlphaNumericOrHyphen := regexp.MustCompile(`[^-0-9a-z]+`) - // replace non alphanumeric or hyphen characters to hyphen - nameWithAlphaNumericAndHyphen := - expressionAlphaNumericOrHyphen.ReplaceAll( - []byte(strings.ToLower(name)), - []byte("-")) - expressionMultipleHyphens := regexp.MustCompile(`-+`) - // compress multiple hyphens to one - return string(expressionMultipleHyphens.ReplaceAll( - nameWithAlphaNumericAndHyphen, - []byte("-"))) -} diff --git a/backend/src/v2/compiler/workflow.yaml b/backend/src/v2/compiler/workflow.yaml deleted file mode 100644 index 2a552b77b8..0000000000 --- a/backend/src/v2/compiler/workflow.yaml +++ /dev/null @@ -1,446 +0,0 @@ -# Copyright 2021 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -{ - "kind": "Workflow", - "apiVersion": "argoproj.io/v1alpha1", - "metadata": { - "generateName": "simple-two-step-pipeline-gongyuan-1609817103-", - "creationTimestamp": null - }, - "spec": { - "templates": [ - { - "name": "kfp-root", - "arguments": {}, - "inputs": {}, - "outputs": {}, - "metadata": {}, - "dag": { - "tasks": [ - { - "name": "driver-kfp-root", - "template": "kfp-dag-driver", - "arguments": { - "parameters": [ - { - "name": "kfp-execution-name", - "value": "kfp-root-{{workflow.name}}" - }, - { - "name": "kfp-task-spec", - "value": "{{workflow.parameters.task-spec}}" - }, - { - "name": "kfp-driver-type", - "value": "DAG" - }, - { - "name": "kfp-parent-context-name", - "value": "" - } - ] - } - }, - { - "name": "sub-dag", - "template": "dag-1", - "arguments": { - "parameters": [ - { - "name": "kfp-context-name", - "value": "{{tasks.driver-kfp-root.outputs.parameters.kfp-context-name}}" - } - ] - }, - "dependencies": [ - "driver-kfp-root" - ] - } - ] - } - }, - { - "name": "dag-1", - "arguments": {}, - "inputs": { - "parameters": [ - { - "name": "kfp-context-name" - } - ] - }, - "outputs": {}, - "metadata": {}, - "dag": { - "tasks": [ - { - "name": "producer", - "template": "kfp-executor", - "arguments": { - "parameters": [ - { - "name": "kfp-task-spec", - "value": "{\"taskInfo\":{\"name\":\"Producer\"},\"inputs\":{\"parameters\":{\"text\":{\"componentInputParameter\":\"text\"}}},\"outputs\":{\"parameters\":{\"output_value\":{\"type\":\"STRING\"}}},\"executorLabel\":\"Producer\"}" - }, - { - "name": "kfp-context-name", - "value": "{{inputs.parameters.kfp-context-name}}" - }, - { - "name": "kfp-executor-spec", - "value": "{\"container\":{\"image\":\"google/cloud-sdk:latest\",\"command\":[\"sh\",\"-c\",\"set -e -x\\necho \\\"$0, this is an output parameter\\\" | gsutil cp - \\\"$1\\\"\\n\",\"{{$.inputs.parameters['text']}}\",\"{{$.outputs.parameters['output_value'].output_file}}\"]}}" - }, - { - "name": "kfp-outputs-spec", - "value": "{\"parameters\":{\"output_value\":{\"type\":\"STRING\"}}}" - } - ] - } - }, - { - "name": "consumer", - "template": "kfp-executor", - "arguments": { - "parameters": [ - { - "name": "kfp-task-spec", - "value": "{\"taskInfo\":{\"name\":\"Consumer\"},\"inputs\":{\"parameters\":{\"input_value\":{\"taskOutputParameter\":{\"producerTask\":\"Producer\",\"outputParameterKey\":\"output_value\"}}}},\"executorLabel\":\"Consumer\"}" - }, - { - "name": "kfp-context-name", - "value": "{{inputs.parameters.kfp-context-name}}" - }, - { - "name": "kfp-executor-spec", - "value": "{\"container\":{\"image\":\"google/cloud-sdk:latest\",\"command\":[\"sh\",\"-c\",\"set -e -x\\necho \\\"Read from an input parameter: \\\" \\u0026\\u0026 echo \\\"$0\\\"\\n\",\"{{$.inputs.parameters['input_value']}}\"]}}" - }, - { - "name": "kfp-outputs-spec", - "value": "{}" - } - ] - }, - "dependencies": [ - "producer" - ] - } - ] - } - }, - { - "name": "kfp-executor-driver", - "arguments": {}, - "inputs": { - "parameters": [ - { - "name": "kfp-parent-context-name" - }, - { - "name": "kfp-execution-name", - "value": "kfp-executor-{{pod.name}}" - }, - { - "name": "kfp-driver-type" - }, - { - "name": "kfp-task-spec" - }, - { - "name": "kfp-executor-spec" - } - ] - }, - "outputs": { - "parameters": [ - { - "name": "kfp-execution-id", - "valueFrom": { - "path": "/kfp/outputs/internal/execution-id" - } - }, - { - "name": "kfp-pod-spec-patch", - "valueFrom": { - "path": "/kfp/outputs/pod-spec-patch.json" - } - } - ] - }, - "metadata": {}, - "container": { - "name": "", - "image": "gcr.io/gongyuan-pipeline-test/kfp-driver@sha256:d3fa780ffc59a22253eb4b4460e89f722811dfdd2ded277d3606f1fce323af87", - "command": [ - "/bin/kfp-driver" - ], - "args": [ - "--logtostderr", - "--mlmd_url=metadata-grpc-service.kubeflow.svc.cluster.local:8080", - "--parent_context_name={{inputs.parameters.kfp-parent-context-name}}", - "--execution_name={{inputs.parameters.kfp-execution-name}}", - "--driver_type={{inputs.parameters.kfp-driver-type}}", - "--task_spec={{inputs.parameters.kfp-task-spec}}", - "--output_path_execution_id={{outputs.parameters.kfp-execution-id.path}}", - "--executor_spec={{inputs.parameters.kfp-executor-spec}}", - "--output_path_pod_spec_patch=/kfp/outputs/pod-spec-patch.json" - ], - "resources": {} - } - }, - { - "name": "kfp-dag-driver", - "arguments": {}, - "inputs": { - "parameters": [ - { - "name": "kfp-parent-context-name" - }, - { - "name": "kfp-execution-name", - "value": "kfp-executor-{{pod.name}}" - }, - { - "name": "kfp-driver-type" - }, - { - "name": "kfp-task-spec" - } - ] - }, - "outputs": { - "parameters": [ - { - "name": "kfp-execution-id", - "valueFrom": { - "path": "/kfp/outputs/internal/execution-id" - } - }, - { - "name": "kfp-context-name", - "valueFrom": { - "path": "/kfp/outputs/internal/context-name" - } - } - ] - }, - "metadata": {}, - "container": { - "name": "", - "image": "gcr.io/gongyuan-pipeline-test/kfp-driver@sha256:d3fa780ffc59a22253eb4b4460e89f722811dfdd2ded277d3606f1fce323af87", - "command": [ - "/bin/kfp-driver" - ], - "args": [ - "--logtostderr", - "--mlmd_url=metadata-grpc-service.kubeflow.svc.cluster.local:8080", - "--parent_context_name={{inputs.parameters.kfp-parent-context-name}}", - "--execution_name={{inputs.parameters.kfp-execution-name}}", - "--driver_type={{inputs.parameters.kfp-driver-type}}", - "--task_spec={{inputs.parameters.kfp-task-spec}}", - "--output_path_execution_id={{outputs.parameters.kfp-execution-id.path}}", - "--output_path_context_name={{outputs.parameters.kfp-context-name.path}}" - ], - "resources": {} - } - }, - { - "name": "kfp-executor-publisher", - "arguments": {}, - "inputs": { - "parameters": [ - { - "name": "kfp-execution-id" - }, - { - "name": "kfp-outputs-spec" - }, - { - "name": "kfp-publisher-type" - } - ], - "artifacts": [ - { - "name": "kfp-parameters", - "path": "/kfp/inputs/parameters", - "optional": true - } - ] - }, - "outputs": {}, - "metadata": {}, - "container": { - "name": "", - "image": "gcr.io/gongyuan-pipeline-test/kfp-publisher@sha256:3623052f6bd4f02da6199d1971ec948b96fb00c6d8c61725d3cfda998b304efe", - "command": [ - "/bin/kfp-publisher" - ], - "args": [ - "--logtostderr", - "--mlmd_url=metadata-grpc-service.kubeflow.svc.cluster.local:8080", - "--execution_id={{inputs.parameters.kfp-execution-id}}", - "--publisher_type={{inputs.parameters.kfp-publisher-type}}", - "--component_outputs_spec={{inputs.parameters.kfp-outputs-spec}}", - "--input_path_parameters={{inputs.artifacts.kfp-parameters.path}}" - ], - "resources": {} - } - }, - { - "name": "kfp-executor", - "arguments": {}, - "inputs": { - "parameters": [ - { - "name": "kfp-context-name" - }, - { - "name": "kfp-task-spec" - }, - { - "name": "kfp-executor-spec" - }, - { - "name": "kfp-outputs-spec" - } - ] - }, - "outputs": {}, - "metadata": {}, - "dag": { - "tasks": [ - { - "name": "driver", - "template": "kfp-executor-driver", - "arguments": { - "parameters": [ - { - "name": "kfp-task-spec", - "value": "{{inputs.parameters.kfp-task-spec}}" - }, - { - "name": "kfp-driver-type", - "value": "EXECUTOR" - }, - { - "name": "kfp-parent-context-name", - "value": "{{inputs.parameters.kfp-context-name}}" - }, - { - "name": "kfp-executor-spec", - "value": "{{inputs.parameters.kfp-executor-spec}}" - } - ] - } - }, - { - "name": "executor", - "template": "kfp-dummy", - "arguments": { - "parameters": [ - { - "name": "kfp-pod-spec-patch", - "value": "{{tasks.driver.outputs.parameters.kfp-pod-spec-patch}}" - } - ] - }, - "dependencies": [ - "driver" - ] - } - ] - } - }, - { - "name": "kfp-dummy", - "arguments": {}, - "inputs": { - "parameters": [ - { - "name": "kfp-pod-spec-patch" - } - ] - }, - "outputs": { - "parameters": [ - { - "name": "kfp-pod-name", - "value": "{{pod.name}}" - } - ], - "artifacts": [ - { - "name": "kfp-parameters", - "path": "/kfp/outputs/parameters", - "optional": true - } - ] - }, - "metadata": {}, - "container": { - "name": "", - "image": "dummy", - "resources": {}, - "volumeMounts": [ - { - "name": "kfp-entrypoint", - "readOnly": true, - "mountPath": "/kfp/entrypoint" - } - ] - }, - "volumes": [ - { - "name": "kfp-entrypoint", - "emptyDir": {} - } - ], - "initContainers": [ - { - "name": "entrypoint-init", - "image": "gcr.io/gongyuan-pipeline-test/kfp-entrypoint@sha256:793316de698fe53ab318d43b00213d947f5ac2abbefc780cece46bf8a44381c4", - "command": [ - "cp" - ], - "args": [ - "/bin/kfp-entrypoint", - "/kfp/entrypoint/entrypoint" - ], - "resources": {}, - "volumeMounts": [ - { - "name": "kfp-entrypoint", - "mountPath": "/kfp/entrypoint" - } - ] - } - ], - "podSpecPatch": "{{inputs.parameters.kfp-pod-spec-patch}}" - } - ], - "entrypoint": "kfp-root", - "arguments": { - "parameters": [ - { - "name": "task-spec", - "value": "{\"taskInfo\":{\"name\":\"hello-world-dag\"},\"inputs\":{\"parameters\":{\"text\":{\"runtimeValue\":{\"constantValue\":{\"stringValue\":\"Hello, World!\"}}}}}}" - } - ] - } - }, - "status": { - "startedAt": null, - "finishedAt": null - } -} diff --git a/backend/src/v2/driver/.gitignore b/backend/src/v2/driver/.gitignore deleted file mode 100644 index 50a6513b5a..0000000000 --- a/backend/src/v2/driver/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -inputs_spec.json -data diff --git a/backend/src/v2/driver/Dockerfile.dev b/backend/src/v2/driver/Dockerfile.dev deleted file mode 100644 index 315cb74a50..0000000000 --- a/backend/src/v2/driver/Dockerfile.dev +++ /dev/null @@ -1,4 +0,0 @@ -FROM scratch -WORKDIR /bin -COPY main /bin/kfp-driver -ENTRYPOINT ["/bin/kfp-driver"] diff --git a/backend/src/v2/driver/Makefile b/backend/src/v2/driver/Makefile deleted file mode 100644 index 9a41135daf..0000000000 --- a/backend/src/v2/driver/Makefile +++ /dev/null @@ -1,106 +0,0 @@ -REPO_ROOT=../../../.. -GO_COMMON_ARGS=--logtostderr - -# Example .env file: -# ``` -# IMAGE_DEV=gcr.io/gongyuan-pipeline-test/kfp-publisher -# ``` -# It should be an image repository where you can push to via docker push. -include .env - -.PHONY: run-producer -run-producer: *.go ./example/task_spec_dag.json ./example/task_spec_producer.json ./example/executor_spec_producer.json - # Make sure you have a separate running terminal that runs - # `make proxy`. - - # Clean up intermediate data - rm -rf ./data - # Run DAG driver - go run *.go $(GO_COMMON_ARGS) \ - --task_spec="$$(cat ./example/task_spec_dag.json)" \ - --execution_name="kfp-$$RANDOM" \ - --driver_type=DAG \ - --output_path_execution_id="./data/execution_id" \ - --output_path_context_name="./data/context_name" - # Run task driver - @if ls ./example/task_spec_producer.json ./data/execution_id ./data/context_name; then \ - echo "inputs are found"; \ - else \ - exit 1; \ - fi - go run *.go $(GO_COMMON_ARGS) \ - --task_spec="$$(cat ./example/task_spec_producer.json)" \ - --executor_spec="$$(cat ./example/executor_spec_producer.json)" \ - --execution_name="kfp-$$RANDOM" \ - --driver_type=EXECUTOR \ - --parent_context_name="$$(cat ./data/context_name)" \ - --output_path_execution_id="./data/execution_id" \ - --output_path_pod_spec_patch="./data/pod_spec_patch.json" - cat ./data/pod_spec_patch.json - -.PHONY: run -run: *.go example/task_spec_dag.json - # Make sure you have a separate running terminal that runs - # `make proxy`. - - # Clean up intermediate data - rm -rf ./data - # Run DAG driver - go run *.go $(GO_COMMON_ARGS) \ - --task_spec="$$(cat ./example/task_spec_dag.json)" \ - --execution_name="kfp-$$RANDOM" \ - --driver_type=DAG \ - --output_path_execution_id="./data/execution_id" \ - --output_path_context_name="./data/context_name" - # Run task driver - @if ls ./example/task_spec_hw.json ./data/execution_id ./data/context_name; then \ - echo "inputs are found"; \ - else \ - exit 1; \ - fi - go run *.go $(GO_COMMON_ARGS) \ - --task_spec="$$(cat ./example/task_spec_hw.json)" \ - --executor_spec="$$(cat ./example/executor_spec_hw.json)" \ - --execution_name="kfp-$$RANDOM" \ - --driver_type=EXECUTOR \ - --parent_context_name="$$(cat ./data/context_name)" \ - --output_path_execution_id="./data/execution_id" \ - --output_path_pod_spec_patch="./data/pod_spec_patch.json" - cat ./data/pod_spec_patch.json - -.PHONY: run-docker -run-docker: .build - docker run kfp/driver $(GO_COMMON_ARGS) \ - --task_spec="$$(cat ./example/task_spec_dag.json)" \ - --execution_name="kfp-$$RANDOM" \ - --driver_type=DAG \ - --output_path_execution_id="./data/execution_id" \ - --output_path_context_name="./data/context_name" \ - --mlmd_url="host.docker.internal:8080" - -.PHONY: proxy -proxy: - kubectl port-forward -n kubeflow svc/metadata-grpc-service 8080:8080 - -.PHONY: example -example: example/task_spec_hw.json - -.PHONY: image -image: .build - -.PHONY: image-push -image-push: image - docker push $(IMAGE_DEV) - -.build: Dockerfile.dev main .env - docker build . -f Dockerfile.dev -t kfp/driver -t $(IMAGE_DEV) - touch .build - -main: *.go $(REPO_ROOT)/go.mod - env GOOS=linux CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o main *.go - -example/task_spec_dag.json: example/*.go - go run example/*.go - -example/task_spec_hw.json: example/*.go - go run example/*.go diff --git a/backend/src/v2/driver/README.md b/backend/src/v2/driver/README.md deleted file mode 100644 index 749e6e1298..0000000000 --- a/backend/src/v2/driver/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# KFP Driver - -## Responsibility - -* Read KFP task's context from MLMD. -* Init MLMD execution. -* Resolve input artifacts and parameters and output them through argo parameters. - -## Pseudo Code - -```go -func driver(parentExecutionId int, taskSpec Spec) { - mlmdClient := newMlmdClient() - parentExecution := mlmdClient.GetExecutionById(parentExecutionId) - parentParameters := parentExecution.GetParameters() - for _, paramName, paramSource := taskSpec.Inputs.Parameters { - if paramSource == runtimeValueOrParameter { - ioutil.write( - parentExecution.GetCustomProperty("input:"+paramName), - "/kfp/parameters/" + paramName - ) - } - } -} -``` diff --git a/backend/src/v2/driver/example/example.go b/backend/src/v2/driver/example/example.go deleted file mode 100644 index 7222fcd508..0000000000 --- a/backend/src/v2/driver/example/example.go +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package main - -import ( - "io/ioutil" - - "github.com/golang/glog" - "github.com/golang/protobuf/jsonpb" - pb "github.com/kubeflow/pipelines/api/v2alpha1/go" -) - -const ( - outputPath = "./example" -) - -func exampleTaskSpec_DAG() { - taskSpec := &pb.PipelineTaskSpec{} - taskSpec.TaskInfo = &pb.PipelineTaskInfo{ - Name: "hello-world-dag", - } - taskInputsSpec := &pb.TaskInputsSpec{} - taskSpec.Inputs = taskInputsSpec - value := &pb.TaskInputsSpec_InputParameterSpec{} - // This wrapper hell might be improved when issues like https://github.com/golang/protobuf/issues/283 - // is resolved. - // TODO(Bobgy): investigate if there are better workarounds we can use now. - value.Kind = &pb.TaskInputsSpec_InputParameterSpec_RuntimeValue{ - RuntimeValue: &pb.ValueOrRuntimeParameter{ - Value: &pb.ValueOrRuntimeParameter_ConstantValue{ - ConstantValue: &pb.Value{Value: &pb.Value_StringValue{StringValue: "Hello, World!"}}, - }}} - taskInputsSpec.Parameters = make(map[string]*pb.TaskInputsSpec_InputParameterSpec) - taskInputsSpec.Parameters["text"] = value - - marshaler := &jsonpb.Marshaler{} - jsonSpec, _ := marshaler.MarshalToString(taskSpec) - // jsonSpec, _ := json.MarshalIndent(taskInputsSpec, "", " ") - err := ioutil.WriteFile(outputPath+"/task_spec_dag.json", []byte(jsonSpec), 0644) - if err != nil { - glog.Fatal(err) - } - // fmt.Printf("%s\n", jsonSpec) -} - -func exampleTaskSpec_HelloWorld() { - taskSpec := &pb.PipelineTaskSpec{} - taskSpec.TaskInfo = &pb.PipelineTaskInfo{ - Name: "hello-world-task", - } - taskInputsSpec := &pb.TaskInputsSpec{} - taskSpec.Inputs = taskInputsSpec - value := &pb.TaskInputsSpec_InputParameterSpec{} - // This wrapper hell might be improved when issues like https://github.com/golang/protobuf/issues/283 - // is resolved. - // TODO(Bobgy): investigate if there are better workarounds we can use now. - value.Kind = &pb.TaskInputsSpec_InputParameterSpec_ComponentInputParameter{ - ComponentInputParameter: "text", - } - taskInputsSpec.Parameters = make(map[string]*pb.TaskInputsSpec_InputParameterSpec) - taskInputsSpec.Parameters["text"] = value - - marshaler := &jsonpb.Marshaler{} - jsonSpec, _ := marshaler.MarshalToString(taskSpec) - // jsonSpec, _ := json.MarshalIndent(taskInputsSpec, "", " ") - err := ioutil.WriteFile(outputPath+"/task_spec_hw.json", []byte(jsonSpec), 0644) - if err != nil { - glog.Fatal(err) - } - // fmt.Printf("%s\n", jsonSpec) -} - -func exampleExecutorSpec_HelloWorld() { - executorSpecJson := ` - { - "container": { - "image": "python:3.7", - "args": ["--text", "{{$.inputs.parameters['text']}}"], - "command": [ - "python3", - "-u", - "-c", - "def hello_world(text):\n print(text)\n return text\n\nimport argparse\n_parser = argparse.ArgumentParser(prog='Hello world', description='')\n_parser.add_argument(\"--text\", dest=\"text\", type=str, required=True, default=argparse.SUPPRESS)\n_parsed_args = vars(_parser.parse_args())\n\n_outputs = hello_world(**_parsed_args)\n" - ] - } - }` - var executorSpec pb.PipelineDeploymentConfig_ExecutorSpec - // verify the json string has correct format - err := jsonpb.UnmarshalString(executorSpecJson, &executorSpec) - if err != nil { - glog.Fatal(err) - } - marshaler := &jsonpb.Marshaler{} - jsonSpec, err := marshaler.MarshalToString(&executorSpec) - if err != nil { - glog.Fatal(err) - } - err = ioutil.WriteFile(outputPath+"/executor_spec_hw.json", []byte(jsonSpec), 0644) - if err != nil { - glog.Fatal(err) - } -} - -func main() { - exampleTaskSpec_DAG() - exampleTaskSpec_HelloWorld() - exampleExecutorSpec_HelloWorld() -} diff --git a/backend/src/v2/driver/example/executor_spec_consumer.json b/backend/src/v2/driver/example/executor_spec_consumer.json deleted file mode 100644 index f8000ea0a4..0000000000 --- a/backend/src/v2/driver/example/executor_spec_consumer.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "container": { - "image": "google/cloud-sdk:latest", - "command": [ - "sh", - "-c", - "set -e -x\necho \"Read from an input parameter: \" && echo \"$0\"\n", - "{{$.inputs.parameters['input_value']}}" - ] - } -} diff --git a/backend/src/v2/driver/example/executor_spec_hw.json b/backend/src/v2/driver/example/executor_spec_hw.json deleted file mode 100644 index c3aad6357a..0000000000 --- a/backend/src/v2/driver/example/executor_spec_hw.json +++ /dev/null @@ -1 +0,0 @@ -{"container":{"image":"python:3.7","command":["python3","-u","-c","def hello_world(text):\n print(text)\n return text\n\nimport argparse\n_parser = argparse.ArgumentParser(prog='Hello world', description='')\n_parser.add_argument(\"--text\", dest=\"text\", type=str, required=True, default=argparse.SUPPRESS)\n_parsed_args = vars(_parser.parse_args())\n\n_outputs = hello_world(**_parsed_args)\n"],"args":["--text","{{$.inputs.parameters['text']}}"]}} \ No newline at end of file diff --git a/backend/src/v2/driver/example/executor_spec_producer.json b/backend/src/v2/driver/example/executor_spec_producer.json deleted file mode 100644 index 5e810d9e1c..0000000000 --- a/backend/src/v2/driver/example/executor_spec_producer.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "container": { - "command": [ - "sh", - "-c", - "set -e -x\necho \"$0, this is an output parameter\" | gsutil cp - \"$1\"\necho \"$0, this is an output artifact\" | gsutil cp - \"$2\"\n", - "{{$.inputs.parameters['input_text']}}", - "{{$.outputs.parameters['output_value'].output_file}}", - "{{$.outputs.artifacts['output_artifact'].uri}}" - ], - "image": "google/cloud-sdk:latest" - } -} diff --git a/backend/src/v2/driver/example/inputs_spec_dag.json b/backend/src/v2/driver/example/inputs_spec_dag.json deleted file mode 100644 index af1a0260ab..0000000000 --- a/backend/src/v2/driver/example/inputs_spec_dag.json +++ /dev/null @@ -1 +0,0 @@ -{"parameters":{"text":{"runtimeValue":{"constantValue":{"stringValue":"Hello"}}}}} \ No newline at end of file diff --git a/backend/src/v2/driver/example/inputs_spec_hw.json b/backend/src/v2/driver/example/inputs_spec_hw.json deleted file mode 100644 index dbc7db0bbe..0000000000 --- a/backend/src/v2/driver/example/inputs_spec_hw.json +++ /dev/null @@ -1 +0,0 @@ -{"parameters":{"text":{"componentInputParameter":"text"}}} \ No newline at end of file diff --git a/backend/src/v2/driver/example/task_spec_consumer.json b/backend/src/v2/driver/example/task_spec_consumer.json deleted file mode 100644 index 3cab7c5848..0000000000 --- a/backend/src/v2/driver/example/task_spec_consumer.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "executorLabel": "Consumer", - "inputs": { - "parameters": { - "input_value": { - "taskOutputParameter": { - "producerTask": "Producer", - "outputParameterKey": "output_value" - } - } - } - }, - "taskInfo": { - "name": "Consumer" - } -} diff --git a/backend/src/v2/driver/example/task_spec_dag.json b/backend/src/v2/driver/example/task_spec_dag.json deleted file mode 100644 index 1a5b26dd46..0000000000 --- a/backend/src/v2/driver/example/task_spec_dag.json +++ /dev/null @@ -1 +0,0 @@ -{"taskInfo":{"name":"hello-world-dag"},"inputs":{"parameters":{"text":{"runtimeValue":{"constantValue":{"stringValue":"Hello, World!"}}}}}} \ No newline at end of file diff --git a/backend/src/v2/driver/example/task_spec_hw.json b/backend/src/v2/driver/example/task_spec_hw.json deleted file mode 100644 index 90b20ed47c..0000000000 --- a/backend/src/v2/driver/example/task_spec_hw.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "taskInfo": { "name": "hello-world-task" }, - "inputs": { "parameters": { "text": { "componentInputParameter": "text" } } } -} diff --git a/backend/src/v2/driver/example/task_spec_producer.json b/backend/src/v2/driver/example/task_spec_producer.json deleted file mode 100644 index cbbf40c0be..0000000000 --- a/backend/src/v2/driver/example/task_spec_producer.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "outputs": { - "parameters": { - "output_value": { - "type": "STRING" - } - }, - "artifacts": { - "output_artifact": { - "artifactType": { - "instanceSchema": "properties:\ntitle: kfp.Artifact\ntype: object\n" - } - } - } - }, - "executorLabel": "Producer", - "inputs": { - "parameters": { - "text": { "componentInputParameter": "text" } - } - }, - "taskInfo": { - "name": "Producer" - } -} diff --git a/backend/src/v2/driver/flags.go b/backend/src/v2/driver/flags.go deleted file mode 100644 index d89a2259b7..0000000000 --- a/backend/src/v2/driver/flags.go +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package main - -import ( - "flag" - "fmt" - "os" - - "github.com/golang/glog" -) - -// command line arguments -const ( - argumentMlmdUrl = "mlmd_url" - argumentMlmdUrlDefault = "localhost:8080" - argumentTaskSpec = "task_spec" - argumentExecutorSpec = "executor_spec" - argumentExecutionName = "execution_name" - argumentDriverType = "driver_type" - argumentOutputPathExecutionId = "output_path_execution_id" - argumentOutputPathContextName = "output_path_context_name" - argumentOutputPathParameters = "output_path_parameters" - argumentOutputPathPodSpecPatch = "output_path_pod_spec_patch" - argumentParentContextName = "parent_context_name" -) - -// command line variables -var ( - mlmdUrl string - taskSpecJson string - executorSpecJson string - executionName string - driverType string - parentContextName string - outputPathExecutionId string - outputPathContextName string - outputPathParameters string - outputPathPodSpecPatch string -) - -// driver type enum -const ( - driverTypeDag = "DAG" - driverTypeExecutor = "EXECUTOR" -) - -func initFlags() { - flag.StringVar(&mlmdUrl, argumentMlmdUrl, argumentMlmdUrlDefault, "URL of MLMD, defaults to localhost:8080") - flag.StringVar(&taskSpecJson, argumentTaskSpec, "", "PipelineTaskSpec") - // TODO(Bobgy): add component spec - flag.StringVar(&executionName, argumentExecutionName, "", "Unique execution name") - flag.StringVar(&driverType, argumentDriverType, "", fmt.Sprintf("Driver type, can be '%s' or '%s'", driverTypeDag, driverTypeExecutor)) - flag.StringVar(&parentContextName, argumentParentContextName, "", "Name of parent context. Required if not root DAG.") - flag.StringVar(&outputPathExecutionId, argumentOutputPathExecutionId, "", "Output path where execution ID should be written to") - - // Required when driving a DAG. - flag.StringVar(&outputPathContextName, argumentOutputPathContextName, "", "Output path where context name should be written to. Required when driver type is DAG.") - - // Required when driving an executor. - flag.StringVar(&executorSpecJson, argumentExecutorSpec, "", "ExecutorSpec. Required when driver type is EXECUTOR.") - // TODO(Bobgy): this will not be used most likely, keep it here for now. - flag.StringVar(&outputPathParameters, argumentOutputPathParameters, "", "Output path where parameters should be written to.") - flag.StringVar(&outputPathPodSpecPatch, argumentOutputPathPodSpecPatch, "", "Output path where pod spec patch should be written to. Required when driver type is EXECUTOR.") - - flag.Parse() - glog.Infof("Driver arguments: %v", os.Args) -} - -func validateFlagsOrFatal() { - if driverType == "" { - glog.Fatalln(argumentDriverType + " is empty.") - } else if driverType != driverTypeDag && driverType != driverTypeExecutor { - glog.Fatalf("invalid %s provided: %s. It should be either '%s' or '%s'", argumentDriverType, driverType, driverTypeDag, driverTypeExecutor) - } - if executionName == "" { - glog.Fatalln(argumentExecutionName + " is empty.") - } - if taskSpecJson == "" { - glog.Fatalln(argumentTaskSpec + " is empty.") - } - if driverType == driverTypeExecutor && executorSpecJson == "" { - glog.Fatalln(argumentExecutorSpec + " is empty. It is required for task drivers.") - } - if outputPathExecutionId == "" { - glog.Fatalln(argumentOutputPathExecutionId + " is empty.") - } - // Context name is only produced when driving a DAG. - if driverType == driverTypeDag && outputPathContextName == "" { - glog.Fatalf("%s is empty. Required when driver type is %s.", argumentOutputPathContextName, driverTypeDag) - } - if driverType == driverTypeExecutor { - // Temporarily commented out, because there's no decision yet, whether - // drivers need to output parameters or not. - - // Parameters are only produced when driving type is EXECUTOR. - // if outputPathParameters == "" { - // glog.Fatalf("%s is empty. Required when driver type is %s.", argumentOutputPathParameters, driverTypeExecutor) - // } - // Pod spec patch is only produced when driver type is EXECUTOR. - if outputPathPodSpecPatch == "" { - glog.Fatalf("%s is empty. Required when driver type is %s.", argumentOutputPathPodSpecPatch, driverTypeExecutor) - } - } -} diff --git a/backend/src/v2/driver/main.go b/backend/src/v2/driver/main.go deleted file mode 100644 index 5c0b7c1e49..0000000000 --- a/backend/src/v2/driver/main.go +++ /dev/null @@ -1,505 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package main - -import ( - "context" - "encoding/json" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "strings" - "time" - - "github.com/golang/glog" - - "github.com/golang/protobuf/jsonpb" - pb "github.com/kubeflow/pipelines/api/v2alpha1/go" - "github.com/kubeflow/pipelines/backend/src/v2/common" - "github.com/kubeflow/pipelines/backend/src/v2/common/mlmd" - mlmdPb "github.com/kubeflow/pipelines/third_party/ml-metadata/go_client/ml_metadata/proto" - "github.com/pkg/errors" - "google.golang.org/grpc" - k8sv1 "k8s.io/api/core/v1" -) - -const ( - kfpV2ExecutionType = "pipelines.kubeflow.org/v2alpha1/task" - kfpV2ContextTypeDag = "pipelines.kubeflow.org/v2alpha1/dag" -) - -// execution custom parameters -const ( - executionParamPrefixInputProperty = "input:" - executionParamContextName = "contextName" - // (context name, task name) is a unique key to identify a KFP execution. - // task name is unique among the context DAG. - executionParamTaskName = "taskName" -) - -// context custom parameters -const ( - contextParamDagExecutionId = "dagExecutionId" -) - -func main() { - initFlags() - validateFlagsOrFatal() - - taskSpec, err := unmarshalTaskSpec(taskSpecJson) - if err != nil { - glog.Fatalln(err) - } - glog.Infof("taskSpec: %s", taskSpec.String()) - var executorSpec *pb.PipelineDeploymentConfig_ExecutorSpec - if executorSpecJson != "" { - executorSpec, err = unmarshalExecutorSpec(executorSpecJson) - if err != nil { - glog.Fatalln(err) - } - glog.Infof("executorSpec: %s", executorSpec.String()) - } - - // Initialize MLMD connection, client and context - conn, err := grpc.Dial(mlmdUrl, grpc.WithInsecure(), grpc.WithBlock()) - if err != nil { - glog.Fatalf("did not connect: %v", err) - } - defer conn.Close() - c := mlmdPb.NewMetadataStoreServiceClient(conn) - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - execution, err := putExecutionAndContext(ctx, c, taskSpec, driverType == driverTypeDag /** createContext*/) - if err != nil { - glog.Fatal(err) - } - if driverType == driverTypeExecutor { - err = driveExecutor(executorSpec, taskSpec.GetOutputs(), execution, outputPathPodSpecPatch) - if err != nil { - glog.Fatal(err) - } - } - glog.Flush() -} - -func putExecutionAndContext( - ctx context.Context, - c mlmdPb.MetadataStoreServiceClient, - taskSpec *pb.PipelineTaskSpec, - createContext bool, -) (*mlmdPb.Execution, error) { - // put execution type - executionTypeName := kfpV2ExecutionType - putExecutionTypeResponse, err := c.PutExecutionType(ctx, - &mlmdPb.PutExecutionTypeRequest{ - ExecutionType: &mlmdPb.ExecutionType{ - Name: &executionTypeName, - }, - }) - if err != nil { - return nil, err - } - executionTypeId := putExecutionTypeResponse.GetTypeId() - if executionTypeId == 0 { - return nil, errors.Errorf("Execution type ID is 0, %v", putExecutionTypeResponse) - } - - // put context type - contextTypeName := kfpV2ContextTypeDag - putContextTypeResponse, err := c.PutContextType(ctx, - &mlmdPb.PutContextTypeRequest{ - ContextType: &mlmdPb.ContextType{ - Name: &contextTypeName, - }, - }, - ) - if err != nil { - return nil, err - } - contextTypeId := putContextTypeResponse.GetTypeId() - if contextTypeId == 0 { - return nil, errors.Errorf("Context type ID is 0, %v", putContextTypeResponse) - } - - // put execution - contextName := "" - if createContext { - contextName = executionName - } - var parentContext *mlmdPb.Context - if parentContextName != "" { - // get parent context - contextTypeName := kfpV2ContextTypeDag - parentContextResponse, err := c.GetContextByTypeAndName(ctx, &mlmdPb.GetContextByTypeAndNameRequest{ - TypeName: &contextTypeName, - ContextName: &parentContextName, - }) - if err != nil { - return nil, err - } - parentContext = parentContextResponse.GetContext() - if parentContext == nil { - return nil, errors.Errorf("parentContext is nil. response: %s", parentContextResponse.String()) - } - } - execution, err := initExecution(ctx, c, executionName, executionTypeId, taskSpec, contextName, parentContext, outputPathParameters) - if err != nil { - return nil, errors.Wrapf(err, "Failed to init execution") - } - glog.Infof("initExecution: %s\n", execution.String()) - var contexts []*mlmdPb.Context - if parentContext != nil { - contexts = []*mlmdPb.Context{ - parentContext, - } - } - putExecutionResponse, err := c.PutExecution( - ctx, - &mlmdPb.PutExecutionRequest{ - Execution: execution, - Contexts: contexts, - }, - ) - if err != nil { - return nil, errors.Wrapf(err, "Failed to put execution") - } - executionId := putExecutionResponse.GetExecutionId() - if executionId == 0 { - return nil, errors.Errorf("Failed to put execution, execution ID is 0: %v", putExecutionResponse.String()) - } - glog.Infof("PutExecutionResponse: %s\n", putExecutionResponse.String()) - execution.Id = &executionId - - err = os.MkdirAll(filepath.Dir(outputPathExecutionId), os.ModePerm) - if err != nil { - glog.Fatal(err) - } - // TODO(Bobgy): figure out an explanation of 0644 - err = ioutil.WriteFile(outputPathExecutionId, []byte(fmt.Sprint(executionId)), 0644) - if err != nil { - glog.Fatal(err) - } - - if createContext { - // put context - putContextResponse, err := c.PutContexts(ctx, &mlmdPb.PutContextsRequest{ - Contexts: []*mlmdPb.Context{ - { - Name: &contextName, - TypeId: &contextTypeId, - CustomProperties: map[string]*mlmdPb.Value{ - contextParamDagExecutionId: { - Value: &mlmdPb.Value_IntValue{ - IntValue: executionId, - }, - }, - }, - }, - }, - }) - if err != nil { - return nil, errors.Wrapf(err, "Failed to put context") - } - contextIds := putContextResponse.GetContextIds() - if len(contextIds) != 1 { - return nil, errors.Errorf("Failed to put context: unexpected length of context IDs in put context response: %v", contextIds) - } - contextId := contextIds[0] - if contextId == 0 { - return nil, errors.Errorf("Failed to put context: context ID in response is 0.") - } - glog.Infof("PutContextResponse: %s\n", putContextResponse.String()) - - // Example: we can find this context like this. - // foundContext, err := c.GetContextByTypeAndName(ctx, &mlmdPb.GetContextByTypeAndNameRequest{ - // TypeName: &contextTypeName, - // ContextName: &contextName, - // }) - // glog.Infof("%v", foundContext.String()) - - err = os.MkdirAll(filepath.Dir(outputPathContextName), os.ModePerm) - if err != nil { - glog.Fatal(err) - } - err = ioutil.WriteFile(outputPathContextName, []byte(contextName), 0644) - if err != nil { - glog.Fatal(err) - } - } - - return execution, nil -} - -func initExecution( - ctx context.Context, - c mlmdPb.MetadataStoreServiceClient, - name string, typeId int64, taskSpec *pb.PipelineTaskSpec, contextName string, - parentContext *mlmdPb.Context, - outputPathParameters string, -) (*mlmdPb.Execution, error) { - var parentExecution *mlmdPb.Execution - executionByTaskName := make(map[string]*mlmdPb.Execution) - - // There is only one case that parent context does not exist: root DAG. - if parentContext != nil { - // get parent execution - parentExecutionId := parentContext.CustomProperties[contextParamDagExecutionId].GetIntValue() - if parentExecutionId == 0 { - return nil, errors.Errorf("Cannot get parent execution ID from parent context: %v", parentContext.String()) - } - parentExecutionResponse, err := c.GetExecutionsByID(ctx, &mlmdPb.GetExecutionsByIDRequest{ - ExecutionIds: []int64{parentExecutionId}, - }) - if err != nil { - return nil, err - } - if len(parentExecutionResponse.GetExecutions()) != 1 { - return nil, errors.Errorf("Unexpected number of executions in get executions by ID response: (ID=%v response: %v)", parentExecutionId, parentExecutionResponse) - } - parentExecution = parentExecutionResponse.GetExecutions()[0] - if parentExecution == nil { - return nil, errors.Errorf("Parent execution is nil: (ID=%v response: %v)", parentExecutionId, parentExecutionResponse) - } - glog.Infof("Parent execution: %v", parentExecution.String()) - - // get all executions in the same context - executionsResponse, err := c.GetExecutionsByContext(ctx, &mlmdPb.GetExecutionsByContextRequest{ - ContextId: parentContext.Id, - Options: &mlmdPb.ListOperationOptions{}, - }) - if err != nil { - return nil, errors.Wrapf(err, "Failed getting executions by context: context_name=%v, context_id=%v", parentContextName, parentContext.Id) - } - // TODO(Bobgy): support pagination and more executions in the same context - if executionsResponse.GetNextPageToken() != "" { - return nil, errors.Errorf("Too many (>%v) executions in the same context, when getting executions by context: context_name=%v, context_id=%v.", len(executionsResponse.GetExecutions()), parentContextName, parentContext.Id) - } - executions := executionsResponse.GetExecutions() - - // Convert execution list to a map keyed by DAG task name. - for _, execution := range executions { - customProperties := execution.GetCustomProperties() - if customProperties == nil { - glog.Warningf("Execution id=%v name=%v does not have custom properties", execution.GetId(), execution.GetName()) - continue - } - taskNameProp := customProperties[executionParamTaskName] - if taskNameProp == nil { - glog.Warningf("Execution id=%v name=%v does not have %s custom property", execution.GetId(), execution.GetName(), executionParamTaskName) - continue - } - switch value := taskNameProp.Value.(type) { - case *mlmdPb.Value_StringValue: - executionByTaskName[value.StringValue] = execution - default: - glog.Warningf("Unexpected execution task name type: expected string, but got unrecognized type: %T.", taskNameProp.Value) - } - } - } - - // initialize execution - var execution mlmdPb.Execution - execution.Name = &name - execution.TypeId = &typeId - state := mlmdPb.Execution_RUNNING - execution.LastKnownState = &state - execution.CustomProperties = make(map[string]*mlmdPb.Value) - taskName := taskSpec.GetTaskInfo().GetName() - if taskName != "" { - execution.CustomProperties[executionParamTaskName] = &mlmdPb.Value{ - Value: &mlmdPb.Value_StringValue{ - StringValue: taskName, - }, - } - } - if contextName != "" { - // Note, the context can be queried via GetContextByTypeAndName. - execution.CustomProperties[executionParamContextName] = - &mlmdPb.Value{Value: &mlmdPb.Value_StringValue{StringValue: contextName}} - } - // resolve parameters - if outputPathParameters != "" { - // When driving a task, we need to expose parameters as argo parameters. - err := os.MkdirAll(outputPathParameters, os.ModePerm) - if err != nil { - return nil, errors.Wrapf(err, "Failed to make all parent dirs for -%s=%v", argumentOutputPathParameters, outputPathParameters) - } - } - for name, parameter := range taskSpec.GetInputs().GetParameters() { - // TODO(Bobgy): handle other parameter types - - // resolve parameter value - var value string - - if parameter.GetRuntimeValue() != nil { - runtimeValue := parameter.GetRuntimeValue() - if runtimeValue.GetConstantValue() != nil { - // TODO(Bobgy): build conversion helpers between MLMD Value and KFP Pipeline Spec Value, and use them here. - value = runtimeValue.GetConstantValue().GetStringValue() - execution.CustomProperties[executionParamPrefixInputProperty+name] = - &mlmdPb.Value{Value: &mlmdPb.Value_StringValue{ - StringValue: value}} - } else { - return nil, errors.Errorf("Unsupported parameter type: %T", parameter.GetRuntimeValue().Value) - } - } else if parameter.GetTaskOutputParameter() != nil { - spec := parameter.GetTaskOutputParameter() - if spec.ProducerTask == "" { - return nil, errors.Errorf("Task output parameter's producer task is empty: %v", parameter.String()) - } - producerExecution := executionByTaskName[spec.ProducerTask] - if producerExecution == nil { - return nil, errors.Errorf("Cannot find producer execution for parameter '%v' in parent context with name '%v'.", parameter.String(), parentContextName) - } - producerKfpExecution := mlmd.NewKfpExecution(producerExecution) - if spec.GetOutputParameterKey() == "" { - return nil, errors.Errorf("Output parameter key is empty for parameter '%v'.", parameter.String()) - } - value := producerKfpExecution.GetOutputParameter(spec.GetOutputParameterKey()) - // All parameters are required for KFP. - if value == nil { - return nil, errors.Errorf("Producer execution does not have parameter '%v'. Producer: %v", parameter.String(), producerKfpExecution.String()) - } - execution.CustomProperties[executionParamPrefixInputProperty+name] = value - // TODO(Bobgy): type check using component inputs spec. - } else if parameter.GetComponentInputParameter() != "" { - if parentExecution == nil || parentContext == nil { - return nil, errors.Errorf("ComponentInputParameter should not be specified in root DAG.") - } - customProperties := parentExecution.GetCustomProperties() - if customProperties == nil { - return nil, errors.Errorf("ComponentInputParameter '%s' specified, but parent execution does not have any parameters", parameter.GetComponentInputParameter()) - } - parentInputPropertyName := executionParamPrefixInputProperty + parameter.GetComponentInputParameter() - parentInputProperty := customProperties[parentInputPropertyName] - if parentInputProperty == nil { - return nil, errors.Errorf("ComponentInputParameter '%s' specified, but parent execution does not have '%s' custom property", parameter.GetComponentInputParameter(), parentInputPropertyName) - } - value = parentInputProperty.GetStringValue() - // TODO(Bobgy): verify custom property type matches and support other types - execution.CustomProperties[executionParamPrefixInputProperty+name] = - &mlmdPb.Value{Value: &mlmdPb.Value_StringValue{ - StringValue: value}} - } - - if outputPathParameters != "" { - // write parameter value to output path - filePath := filepath.Join(outputPathParameters, name) - err := ioutil.WriteFile(filePath, []byte(value), 0644) - if err != nil { - return nil, errors.Wrapf(err, "Failed to write parameter '%s' to file '%s'", name, filePath) - } - } - } - return &execution, nil -} - -func driveExecutor( - executorSpec *pb.PipelineDeploymentConfig_ExecutorSpec, - outputsSpec *pb.TaskOutputsSpec, - execution *mlmdPb.Execution, - outputPathPodSpecPatch string, -) error { - var podSpec k8sv1.PodSpec - podSpec.Containers = []k8sv1.Container{ - { - Name: "main", - Image: executorSpec.GetContainer().GetImage(), - }, - } - mainContainer := &podSpec.Containers[0] - - mainContainer.Image = fillPlaceholders(mainContainer.Image, execution, outputsSpec) - marshaler := jsonpb.Marshaler{} - if outputsSpec == nil { - outputsSpec = &pb.TaskOutputsSpec{} - } - outputsSpecJson, err := marshaler.MarshalToString(outputsSpec) - if err != nil { - return errors.Wrapf(err, "Failed to marshal outputs spec") - } - mainContainer.Command = []string{ - common.ExecutorEntrypointPath, - "--logtostderr", - "--mlmd_url=metadata-grpc-service.kubeflow.svc.cluster.local:8080", - fmt.Sprintf("--component_outputs_spec=%s", outputsSpecJson), - fmt.Sprintf("--execution_id=%v", execution.GetId()), - "--publisher_type=EXECUTOR", - "--input_path_parameters=" + common.ExecutorOutputPathParameters, - "--", // append "--", so that all the following arguments will not be parsed as flags. - } - mainContainer.Args = append(executorSpec.GetContainer().GetCommand(), executorSpec.GetContainer().GetArgs()...) - fillPlaceholdersForArray(&mainContainer.Args, execution, outputsSpec) - - // write pod spec patch to output path - podSpecPatchJsonBytes, err := json.Marshal(podSpec) - if err != nil { - return errors.Wrapf(err, "Failed to marshal pod spec to JSON. PodSpec: %v", podSpec) - } - err = ioutil.WriteFile(outputPathPodSpecPatch, podSpecPatchJsonBytes, 0644) - if err != nil { - return errors.Wrapf(err, "Failed to pod spec patch to file '%s'", outputPathPodSpecPatch) - } - return nil -} - -func fillPlaceholdersForArray(s *[]string, execution *mlmdPb.Execution, outputsSpec *pb.TaskOutputsSpec) { - for index, item := range *s { - (*s)[index] = fillPlaceholders(item, execution, outputsSpec) - } -} - -func fillPlaceholders(s string, execution *mlmdPb.Execution, outputsSpec *pb.TaskOutputsSpec) string { - properties := &execution.CustomProperties - if properties != nil { - for propertyName, property := range *properties { - if strings.HasPrefix(propertyName, executionParamPrefixInputProperty) { - name := strings.TrimPrefix(propertyName, executionParamPrefixInputProperty) - // TODO(Bobgy): handle other value types - value := property.GetStringValue() - // TODO(Bobgy): figure out a more stable way to replace placeholders - s = strings.ReplaceAll(s, fmt.Sprintf("{{$.inputs.parameters['%s']}}", name), value) - } - } - } - parameters := outputsSpec.GetParameters() - if parameters != nil { - for name := range parameters { - s = strings.ReplaceAll( - s, - fmt.Sprintf("{{$.outputs.parameters['%s'].output_file}}", name), - filepath.Join(common.ExecutorOutputPathParameters, name), - ) - } - } - return s -} - -func unmarshalTaskSpec(json string) (*pb.PipelineTaskSpec, error) { - taskSpec := &pb.PipelineTaskSpec{} - if err := jsonpb.UnmarshalString(json, taskSpec); err != nil { - return nil, errors.Wrapf(err, "Failed to parse task spec: %v", json) - } - return taskSpec, nil -} - -func unmarshalExecutorSpec(json string) (*pb.PipelineDeploymentConfig_ExecutorSpec, error) { - executorSpec := &pb.PipelineDeploymentConfig_ExecutorSpec{} - if err := jsonpb.UnmarshalString(json, executorSpec); err != nil { - return nil, errors.Wrapf(err, "Failed to parse executor spec: %v", json) - } - return executorSpec, nil -} diff --git a/backend/src/v2/entrypoint/Dockerfile.dev b/backend/src/v2/entrypoint/Dockerfile.dev deleted file mode 100644 index 0384a88f5b..0000000000 --- a/backend/src/v2/entrypoint/Dockerfile.dev +++ /dev/null @@ -1,3 +0,0 @@ -FROM alpine -WORKDIR /bin -COPY main /bin/kfp-entrypoint diff --git a/backend/src/v2/entrypoint/Makefile b/backend/src/v2/entrypoint/Makefile deleted file mode 100644 index 9ada92b05f..0000000000 --- a/backend/src/v2/entrypoint/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -REPO_ROOT=../../../.. -GO_COMMON_ARGS=--logtostderr -IMAGE=kfp-entrypoint -EXECUTION_ID=160 -PUBLISHER_EXAMPLES=../publisher/example - -# Example .env file: -# ``` -# IMAGE_DEV=gcr.io/gongyuan-pipeline-test/kfp-publisher -# ``` -# It should be an image repository where you can push to via docker push. -include .env - -.PHONY: run -run: *.go - # Make sure you have a separate running terminal that runs - # `make proxy`. - - # Clean up intermediate data - rm -rf ./data - # Run executor publisher - go run *.go $(GO_COMMON_ARGS) \ - --component_outputs_spec="$$(cat $(PUBLISHER_EXAMPLES)/outputs_spec.json)" \ - --execution_id=$(EXECUTION_ID) \ - --publisher_type=EXECUTOR \ - --input_path_parameters=$(PUBLISHER_EXAMPLES)/parameters \ - -- echo -n Hello, World! - -.PHONY: run-docker -run-docker: .build - docker run $(IMAGE) /bin/kfp-entrypoint $(GO_COMMON_ARGS) \ - --component_outputs_spec="$$(cat $(PUBLISHER_EXAMPLES)/outputs_spec.json)" \ - --execution_id=$(EXECUTION_ID) \ - --publisher_type=EXECUTOR \ - --input_path_parameters=$(PUBLISHER_EXAMPLES)/parameters \ - -- echo -n Hello, World! - -.PHONY: proxy -proxy: - kubectl port-forward -n kubeflow svc/metadata-grpc-service 8080:8080 - -.PHONY: image -image: .build - -.PHONY: image-push -image-push: image - docker push $(IMAGE_DEV) - -.build: Dockerfile.dev main .env - docker build . -f Dockerfile.dev -t $(IMAGE) -t $(IMAGE_DEV) - touch .build - -main: *.go $(REPO_ROOT)/go.mod - env GOOS=linux CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o main *.go diff --git a/backend/src/v2/entrypoint/main.go b/backend/src/v2/entrypoint/main.go deleted file mode 100644 index 6f24d11923..0000000000 --- a/backend/src/v2/entrypoint/main.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package main - -import ( - "flag" - "os" - "os/exec" - - "github.com/golang/glog" - publisherCmd "github.com/kubeflow/pipelines/backend/src/v2/publisher/cmd" -) - -func main() { - publisherCmd.InitFlags() - publisherCmd.ValidateFlagsOrFatal() - glog.Infof("Command and arguments: %v", flag.Args()) - cmd := exec.Command(flag.Args()[0], flag.Args()[1:]...) - cmd.Stdin = os.Stdin - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - publisherCmd.Publish() - glog.Fatal(err) - } else { - publisherCmd.Publish() - } - glog.Flush() -} diff --git a/backend/src/v2/publisher/Dockerfile.dev b/backend/src/v2/publisher/Dockerfile.dev deleted file mode 100644 index b74f04e1f9..0000000000 --- a/backend/src/v2/publisher/Dockerfile.dev +++ /dev/null @@ -1,4 +0,0 @@ -FROM scratch -WORKDIR /bin -COPY main /bin/kfp-publisher -ENTRYPOINT ["/bin/kfp-publisher"] diff --git a/backend/src/v2/publisher/Makefile b/backend/src/v2/publisher/Makefile deleted file mode 100644 index 040e812ec7..0000000000 --- a/backend/src/v2/publisher/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -REPO_ROOT=../../../.. -GO_COMMON_ARGS=--logtostderr -EXECUTION_ID=160 -IMAGE=kfp-publisher - -# Example .env file: -# ``` -# IMAGE_DEV=gcr.io/gongyuan-pipeline-test/kfp-publisher -# ``` -# It should be an image repository where you can push to via docker push. -include .env - -.PHONY: run -run: *.go example/outputs_spec.json - # Make sure you have a separate running terminal that runs - # `make proxy`. - - # Clean up intermediate data - rm -rf ./data - # Run executor publisher - go run *.go $(GO_COMMON_ARGS) \ - --component_outputs_spec="$$(cat ./example/outputs_spec.json)" \ - --execution_id=$(EXECUTION_ID) \ - --publisher_type=EXECUTOR \ - --input_path_parameters=./example/parameters - -.PHONY: run-docker -run-docker: .build - docker run kfp/publisher $(GO_COMMON_ARGS) \ - --component_outputs_spec="$$(cat ./example/outputs_spec.json)" \ - --execution_id=$(EXECUTION_ID) \ - --publisher_type=EXECUTOR \ - --input_path_parameters=./example/parameters - -.PHONY: proxy -proxy: - kubectl port-forward -n kubeflow svc/metadata-grpc-service 8080:8080 - -.PHONY: image -image: .build - -.PHONY: image-push -image-push: image - docker push $(IMAGE_DEV) - -.build: Dockerfile.dev main .env - docker build . -f Dockerfile.dev -t $(IMAGE) -t $(IMAGE_DEV) - touch .build - -main: *.go $(REPO_ROOT)/go.mod - env GOOS=linux CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o main *.go diff --git a/backend/src/v2/publisher/cmd/flags.go b/backend/src/v2/publisher/cmd/flags.go deleted file mode 100644 index bda1db7344..0000000000 --- a/backend/src/v2/publisher/cmd/flags.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package cmd - -import ( - "flag" - "fmt" - "os" - - "github.com/golang/glog" - "github.com/kubeflow/pipelines/backend/src/v2/common" -) - -// command line arguments -const ( - argumentMlmdUrl = "mlmd_url" - argumentMlmdUrlDefault = "localhost:8080" - argumentComponentOutputsSpec = "component_outputs_spec" - argumentExecutionId = "execution_id" - argumentPublisherType = "publisher_type" - argumentInputPathParameters = "input_path_parameters" -) - -// command line variables -var ( - mlmdUrl string - componentOutputsSpecJson string - executionId int64 - publisherType string - inputPathParameters string -) - -func InitFlags() { - flag.StringVar(&mlmdUrl, argumentMlmdUrl, argumentMlmdUrlDefault, "URL of MLMD, defaults to localhost:8080") - flag.StringVar(&componentOutputsSpecJson, argumentComponentOutputsSpec, "", "Component outputs spec") - flag.Int64Var(&executionId, argumentExecutionId, 0, "Execution ID to publish") - flag.StringVar(&publisherType, argumentPublisherType, "", fmt.Sprintf("Publisher type, can be '%s' or '%s'", common.PublisherType_DAG, common.PublisherType_EXECUTOR)) - flag.StringVar(&inputPathParameters, argumentInputPathParameters, "", "Input path which contains files corresponding to parameter values") - - flag.Parse() - glog.Infof("Publisher arguments: %v", os.Args) -} - -func ValidateFlagsOrFatal() { - if publisherType == "" { - glog.Fatalln(argumentPublisherType + " is not provided.") - } else if publisherType != common.PublisherType_DAG && publisherType != common.PublisherType_EXECUTOR { - glog.Fatalf("invalid %s provided: %s. It should be either '%s' or '%s'", argumentPublisherType, publisherType, common.PublisherType_DAG, common.PublisherType_EXECUTOR) - } - if executionId == 0 { - glog.Fatalln(argumentExecutionId + " is not provided.") - } - if componentOutputsSpecJson == "" { - glog.Fatalln(argumentComponentOutputsSpec + " is not provided.") - } - if inputPathParameters == "" { - glog.Fatalln(argumentInputPathParameters + " is not provided.") - } -} diff --git a/backend/src/v2/publisher/cmd/publish.go b/backend/src/v2/publisher/cmd/publish.go deleted file mode 100644 index 8247f0d1d1..0000000000 --- a/backend/src/v2/publisher/cmd/publish.go +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package cmd - -import ( - "context" - "io/ioutil" - "path/filepath" - "time" - - "github.com/golang/glog" - "github.com/golang/protobuf/jsonpb" - pb "github.com/kubeflow/pipelines/api/v2alpha1/go" - mlmdPb "github.com/kubeflow/pipelines/third_party/ml-metadata/go_client/ml_metadata/proto" - "github.com/pkg/errors" - "google.golang.org/grpc" -) - -const ( - executionParamPrefixOutputProperty = "output:" -) - -type publishArgs struct { - outputsSpec *pb.ComponentOutputsSpec - executionId int64 - mlmdUrl string - publisherType string - inputPathParameters string -} - -type mlmdClientHelper struct { - client mlmdPb.MetadataStoreServiceClient - ctx context.Context -} - -// TODO(Bobgy): refactor driver to also use this client -func (c *mlmdClientHelper) getExecutionByID(id int64) (*mlmdPb.Execution, error) { - response, err := c.client.GetExecutionsByID(c.ctx, &mlmdPb.GetExecutionsByIDRequest{ - ExecutionIds: []int64{id}, - }) - if err != nil { - return nil, err - } - if len(response.Executions) != 1 { - return nil, errors.Errorf("Unexpected number of executions returned: '%v',when fetching execution with ID %v", len(response.Executions), id) - } - return response.Executions[0], nil -} - -func publishImp(args *publishArgs) error { - // Initialize MLMD connection, client and context - conn, err := grpc.Dial(mlmdUrl, grpc.WithInsecure(), grpc.WithBlock()) - if err != nil { - return errors.Wrapf(err, "did not connect") - } - defer conn.Close() - c := mlmdPb.NewMetadataStoreServiceClient(conn) - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - - mlmdClient := mlmdClientHelper{client: c, ctx: ctx} - - execution, err := mlmdClient.getExecutionByID(args.executionId) - if err != nil { - return errors.Wrapf(err, "Failed to get execution.") - } - glog.Infof("Execution before update: %v", execution.String()) - execution.Id = &args.executionId - if execution.CustomProperties == nil { - execution.CustomProperties = make(map[string]*mlmdPb.Value) - } - for name := range args.outputsSpec.Parameters { - content, err := ioutil.ReadFile(filepath.Join(inputPathParameters, name)) - if err != nil { - return errors.Wrapf(err, "Failed to read content of parameter %s.", name) - } - // TODO(Bobgy): support other types and validate parameter type - execution.CustomProperties[executionParamPrefixOutputProperty+name] = &mlmdPb.Value{ - Value: &mlmdPb.Value_StringValue{ - StringValue: string(content), - }, - } - } - state := mlmdPb.Execution_COMPLETE - execution.LastKnownState = &state - _, err = c.PutExecution(ctx, &mlmdPb.PutExecutionRequest{Execution: execution}) - if err != nil { - return errors.Wrapf(err, "Failed to put execution") - } - execution2, err := mlmdClient.getExecutionByID(args.executionId) - if err != nil { - return errors.Wrapf(err, "Failed to get execution.") - } - glog.Infof("Execution after update: %v", execution2.String()) - return nil -} - -func unmarshalOutputsSpec(json string) (*pb.ComponentOutputsSpec, error) { - outputsSpec := &pb.ComponentOutputsSpec{} - if err := jsonpb.UnmarshalString(json, outputsSpec); err != nil { - return nil, errors.Wrapf(err, "Failed to parse component outputs spec: %v", json) - } - return outputsSpec, nil -} - -func Publish() error { - outputsSpec, err := unmarshalOutputsSpec(componentOutputsSpecJson) - if err != nil { - return err - } - return publishImp(&publishArgs{ - outputsSpec: outputsSpec, - executionId: executionId, - mlmdUrl: mlmdUrl, - publisherType: publisherType, - inputPathParameters: inputPathParameters, - }) -} diff --git a/backend/src/v2/publisher/example/outputs_spec.json b/backend/src/v2/publisher/example/outputs_spec.json deleted file mode 100644 index 0c9855fe2c..0000000000 --- a/backend/src/v2/publisher/example/outputs_spec.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "parameters": { - "output_value": { - "type": "STRING" - } - }, - "artifacts": { - "output_artifact": { - "artifactType": { - "instanceSchema": "properties:\ntitle: kfp.Artifact\ntype: object\n" - } - } - } -} diff --git a/backend/src/v2/publisher/example/parameters/output_value b/backend/src/v2/publisher/example/parameters/output_value deleted file mode 100644 index 8ab686eafe..0000000000 --- a/backend/src/v2/publisher/example/parameters/output_value +++ /dev/null @@ -1 +0,0 @@ -Hello, World! diff --git a/backend/test/integration/job_api_test.go b/backend/test/integration/job_api_test.go index c50ef5e723..d9bc24d976 100644 --- a/backend/test/integration/job_api_test.go +++ b/backend/test/integration/job_api_test.go @@ -448,10 +448,7 @@ func (s *JobApiTestSuite) TestJobApis_SwfNotFound() { // Delete all ScheduledWorkflow custom resources to simulate the situation // that after reinstalling KFP with managed storage, only KFP DB is kept, // but all KFP custom resources are gone. - ctx := context.Background() - ctx, cancel := context.WithCancel(ctx) - defer cancel() - err = s.swfClient.ScheduledWorkflow(s.namespace).DeleteCollection(ctx, v1.DeleteOptions{}, v1.ListOptions{}) + err = s.swfClient.ScheduledWorkflow(s.namespace).DeleteCollection(context.Background(), v1.DeleteOptions{}, v1.ListOptions{}) require.Nil(t, err) err = s.jobClient.Delete(&jobparams.DeleteJobParams{ID: job.ID}) diff --git a/backend/test/resources/arguments-parameters.yaml b/backend/test/resources/arguments-parameters.yaml index 5e14643117..7fec29c09c 100644 --- a/backend/test/resources/arguments-parameters.yaml +++ b/backend/test/resources/arguments-parameters.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/test/resources/hello-world.yaml b/backend/test/resources/hello-world.yaml index d1059f2415..f551df729c 100644 --- a/backend/test/resources/hello-world.yaml +++ b/backend/test/resources/hello-world.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/test/resources/long-running.yaml b/backend/test/resources/long-running.yaml index 240c69bd7c..5bb250ca4a 100644 --- a/backend/test/resources/long-running.yaml +++ b/backend/test/resources/long-running.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/test/resources/loops.yaml b/backend/test/resources/loops.yaml index cc1b8dc83b..618a02a155 100644 --- a/backend/test/resources/loops.yaml +++ b/backend/test/resources/loops.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/backend/test/test_utils.go b/backend/test/test_utils.go index fc77ab847f..28f47a12c3 100644 --- a/backend/test/test_utils.go +++ b/backend/test/test_utils.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/backend/third_party_licenses/apiserver.csv b/backend/third_party_licenses/apiserver.csv new file mode 100644 index 0000000000..17b53422a0 --- /dev/null +++ b/backend/third_party_licenses/apiserver.csv @@ -0,0 +1,316 @@ +# Generated by https://github.com/google/go-licenses/v2. DO NOT EDIT. +github.com/kubeflow/pipelines, https://github.com/kubeflow/pipelines/blob/master/LICENSE, Apache-2.0 +github.com/Masterminds/squirrel, https://github.com/Masterminds/squirrel/blob/fa735ea14f09/LICENSE.txt, MIT +github.com/PuerkitoBio/purell, https://github.com/PuerkitoBio/purell/blob/v1.1.1/LICENSE, BSD-3-Clause +github.com/PuerkitoBio/urlesc, https://github.com/PuerkitoBio/urlesc/blob/de5bf2ad4578/LICENSE, BSD-3-Clause +github.com/VividCortex/mysqlerr, https://github.com/VividCortex/mysqlerr/blob/6c6b55f8796f/LICENSE, MIT +github.com/asaskevich/govalidator, https://github.com/asaskevich/govalidator/blob/7a23bdc65eef/LICENSE, MIT +github.com/beorn7/perks, https://github.com/beorn7/perks/blob/v1.0.1/LICENSE, MIT +github.com/cenkalti/backoff, https://github.com/cenkalti/backoff/blob/v2.2.1/LICENSE, MIT +github.com/cespare/xxhash/v2, https://github.com/cespare/xxhash/blob/v2.1.1/LICENSE.txt, MIT +github.com/davecgh/go-spew, https://github.com/davecgh/go-spew/blob/v1.1.1/LICENSE, ISC +github.com/emicklei/go-restful, https://github.com/emicklei/go-restful/blob/v2.15.0/LICENSE, MIT +github.com/evanphx/json-patch/v5, https://github.com/evanphx/json-patch/blob/v5.5.0/LICENSE, BSD-3-Clause +github.com/fsnotify/fsnotify, https://github.com/fsnotify/fsnotify/blob/v1.4.9/LICENSE, BSD-3-Clause +github.com/ghodss/yaml, https://github.com/ghodss/yaml/blob/25d852aebe32/LICENSE, MIT / BSD-3-Clause +github.com/go-ini/ini, https://github.com/go-ini/ini/blob/v1.62.0/LICENSE, Apache-2.0 +github.com/go-logr/logr, https://github.com/go-logr/logr/blob/v0.4.0/LICENSE, Apache-2.0 +github.com/go-openapi/errors, https://github.com/go-openapi/errors/blob/v0.19.9/LICENSE, Apache-2.0 +github.com/go-openapi/jsonpointer, https://github.com/go-openapi/jsonpointer/blob/v0.19.5/LICENSE, Apache-2.0 +github.com/go-openapi/jsonreference, https://github.com/go-openapi/jsonreference/blob/v0.19.5/LICENSE, Apache-2.0 +github.com/go-openapi/runtime, https://github.com/go-openapi/runtime/blob/v0.19.24/LICENSE, Apache-2.0 +github.com/go-openapi/runtime, https://github.com/go-openapi/runtime/blob/v0.19.24/middleware/denco/LICENSE, MIT +github.com/go-openapi/spec, https://github.com/go-openapi/spec/blob/v0.20.2/LICENSE, Apache-2.0 +github.com/go-openapi/strfmt, https://github.com/go-openapi/strfmt/blob/v0.19.11/LICENSE, Apache-2.0 +github.com/go-openapi/swag, https://github.com/go-openapi/swag/blob/v0.19.15/LICENSE, Apache-2.0 +github.com/go-sql-driver/mysql, https://github.com/go-sql-driver/mysql/blob/v1.5.0/LICENSE, MPL-2.0 +github.com/go-stack/stack, https://github.com/go-stack/stack/blob/v1.8.0/LICENSE.md, MIT +github.com/gogo/protobuf, https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE, BSD-3-Clause / BSD-2-Clause +github.com/golang/glog, https://github.com/golang/glog/blob/23def4e6c14b/LICENSE, Apache-2.0 +github.com/golang/protobuf, https://github.com/golang/protobuf/blob/v1.5.2/LICENSE, BSD-3-Clause +github.com/google/go-cmp, https://github.com/google/go-cmp/blob/v0.5.6/LICENSE, BSD-3-Clause +github.com/google/go-containerregistry, https://github.com/google/go-containerregistry/blob/19c2b639fab1/LICENSE, Apache-2.0 +github.com/google/gofuzz, https://github.com/google/gofuzz/blob/v1.2.0/LICENSE, Apache-2.0 +github.com/google/uuid, https://github.com/google/uuid/blob/v1.2.0/LICENSE, BSD-3-Clause +github.com/googleapis/gnostic, https://github.com/googleapis/gnostic/blob/v0.5.3/LICENSE, Apache-2.0 +github.com/gorilla/mux, https://github.com/gorilla/mux/blob/v1.8.0/LICENSE, BSD-3-Clause +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/LICENSE.txt, BSD-3-Clause +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/internal/casing/LICENSE.md, BSD-3-Clause +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/third_party/googleapis/LICENSE, Apache-2.0 +github.com/hashicorp/golang-lru, https://github.com/hashicorp/golang-lru/blob/v0.5.4/LICENSE, MPL-2.0 +github.com/hashicorp/hcl, https://github.com/hashicorp/hcl/blob/v1.0.0/LICENSE, MPL-2.0 +github.com/imdario/mergo, https://github.com/imdario/mergo/blob/v0.3.10/LICENSE, BSD-3-Clause +github.com/jinzhu/gorm, https://github.com/jinzhu/gorm/blob/v1.9.12/License, MIT +github.com/jinzhu/inflection, https://github.com/jinzhu/inflection/blob/v1.0.0/LICENSE, MIT +github.com/josharian/intern, https://github.com/josharian/intern/blob/v1.0.0/license.md, MIT +github.com/json-iterator/go, https://github.com/json-iterator/go/blob/v1.1.11/LICENSE, MIT +github.com/lann/builder, https://github.com/lann/builder/blob/47ae307949d0/LICENSE, MIT +github.com/lann/ps, https://github.com/lann/ps/blob/62de8c46ede0/LICENSE, MIT +github.com/lestrrat-go/strftime, https://github.com/lestrrat-go/strftime/blob/v1.0.4/LICENSE, MIT +github.com/magiconair/properties, https://github.com/magiconair/properties/blob/v1.8.1/LICENSE, BSD-2-Clause +github.com/mailru/easyjson, https://github.com/mailru/easyjson/blob/v0.7.7/LICENSE, MIT +github.com/mailru/easyjson, https://github.com/mailru/easyjson/blob/v0.7.7/parser/modulepath.go, BSD-3-Clause +github.com/mattn/go-sqlite3, https://github.com/mattn/go-sqlite3/blob/v1.9.0/LICENSE, MIT +github.com/mattn/go-sqlite3/., https://github.com/mattn/go-sqlite3/blob/v1.9.0/sqlite3-binding.h#L2-L11, blessing +github.com/matttproud/golang_protobuf_extensions, https://github.com/matttproud/golang_protobuf_extensions/blob/c182affec369/LICENSE, Apache-2.0 +github.com/minio/minio-go, https://github.com/minio/minio-go/blob/v6.0.14/LICENSE, Apache-2.0 +github.com/mitchellh/go-homedir, https://github.com/mitchellh/go-homedir/blob/v1.1.0/LICENSE, MIT +github.com/mitchellh/mapstructure, https://github.com/mitchellh/mapstructure/blob/v1.4.0/LICENSE, MIT +github.com/modern-go/concurrent, https://github.com/modern-go/concurrent/blob/bacd9c7ef1dd/LICENSE, Apache-2.0 +github.com/modern-go/reflect2, https://github.com/modern-go/reflect2/blob/v1.0.1/LICENSE, Apache-2.0 +github.com/pelletier/go-toml, https://github.com/pelletier/go-toml/blob/v1.7.0/LICENSE, MIT +github.com/pkg/errors, https://github.com/pkg/errors/blob/v0.9.1/LICENSE, BSD-2-Clause +github.com/pmezard/go-difflib, https://github.com/pmezard/go-difflib/blob/v1.0.0/LICENSE, BSD-3-Clause +github.com/prometheus/client_golang, https://github.com/prometheus/client_golang/blob/v1.11.0/LICENSE, Apache-2.0 +github.com/prometheus/client_model, https://github.com/prometheus/client_model/blob/v0.2.0/LICENSE, Apache-2.0 +github.com/prometheus/common, https://github.com/prometheus/common/blob/v0.15.0/LICENSE, Apache-2.0 +github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg, https://github.com/prometheus/common/blob/v0.15.0/internal/bitbucket.org/ww/goautoneg/README.txt, BSD-3-Clause +github.com/prometheus/procfs, https://github.com/prometheus/procfs/blob/v0.6.0/LICENSE, Apache-2.0 +github.com/robfig/cron, https://github.com/robfig/cron/blob/v1.2.0/LICENSE, MIT +github.com/spf13/afero, https://github.com/spf13/afero/blob/v1.2.2/LICENSE.txt, Apache-2.0 +github.com/spf13/cast, https://github.com/spf13/cast/blob/v1.3.0/LICENSE, MIT +github.com/spf13/jwalterweatherman, https://github.com/spf13/jwalterweatherman/blob/v1.0.0/LICENSE, MIT +github.com/spf13/pflag, https://github.com/spf13/pflag/blob/v1.0.5/LICENSE, BSD-3-Clause +github.com/spf13/viper, https://github.com/spf13/viper/blob/v1.7.0/LICENSE, MIT +github.com/stretchr/testify, https://github.com/stretchr/testify/blob/v1.7.0/LICENSE, MIT +github.com/subosito/gotenv, https://github.com/subosito/gotenv/blob/v1.2.0/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/cloud.google.com/go/compute/metadata/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/contrib.go.opencensus.io/exporter/ocagent/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/contrib.go.opencensus.io/exporter/prometheus/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/azure-sdk-for-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/adal/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/date/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/to/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/validation/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/logger/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/tracing/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/PuerkitoBio/purell/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/PuerkitoBio/urlesc/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/alecthomas/template/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/alecthomas/units/COPYING, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/aws/aws-sdk-go/LICENSE.txt, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/aws/aws-sdk-go/internal/sync/singleflight/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/beorn7/perks/quantile/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/blang/semver/v4/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/blendle/zapdriver/LICENSE, ISC +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/census-instrumentation/opencensus-proto/gen-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/cespare/xxhash/v2/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/cloudevents/sdk-go/v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/containerd/stargz-snapshotter/estargz/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/davecgh/go-spew/spew/LICENSE, ISC +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/cli/cli/config/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/distribution/registry/client/auth/challenge/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/docker/pkg/homedir/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/docker-credential-helpers/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/emicklei/go-restful/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/evanphx/json-patch/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/evanphx/json-patch/v5/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/form3tech-oss/jwt-go/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/ghodss/yaml/LICENSE, MIT / BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-logr/logr/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/jsonpointer/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/jsonreference/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/spec/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/swag/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/gobuffalo/flect/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/gogo/protobuf/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/golang/groupcache/lru/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/golang/protobuf/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/go-cmp/cmp/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/go-containerregistry/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/go-containerregistry/pkg/authn/k8schain/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/gofuzz/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/uuid/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/googleapis/gnostic/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/grpc-ecosystem/grpc-gateway/LICENSE.txt, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/imdario/mergo/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/jenkins-x/go-scm/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/josharian/intern/license.md, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/json-iterator/go/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/kelseyhightower/envconfig/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/lightstep/tracecontext.go/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/mailru/easyjson/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/matttproud/golang_protobuf_extensions/pbutil/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/mitchellh/go-homedir/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/modern-go/concurrent/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/modern-go/reflect2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/opencontainers/go-digest/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/opencontainers/image-spec/specs-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/openzipkin/zipkin-go/model/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/pkg/errors/LICENSE, BSD-2-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/client_golang/prometheus/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/client_model/go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/common/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/procfs/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/statsd_exporter/pkg/mapper/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/shurcooL/githubv4/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/shurcooL/graphql/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/sirupsen/logrus/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/spf13/pflag/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/tektoncd/pipeline/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/vdemeester/k8s-pkg-credentialprovider/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.opencensus.io/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/atomic/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/automaxprocs/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/multierr/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/zap/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/crypto/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/net/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/oauth2/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/sync/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/sys/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/term/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/text/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/time/rate/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gomodules.xyz/jsonpatch/v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/api/support/bundler/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/genproto/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/grpc/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/protobuf/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/alecthomas/kingpin.v2/COPYING, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/inf.v0/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/yaml.v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/yaml.v3/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/api/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/apiextensions-apiserver/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/apimachinery/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/client-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/component-base/version/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/klog/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/klog/v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/kube-openapi/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/legacy-cloud-providers/azure/auth/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/utils/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/knative.dev/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/sigs.k8s.io/structured-merge-diff/v4/value/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/sigs.k8s.io/yaml/LICENSE, MIT / BSD-3-Clause +go.mongodb.org/mongo-driver, https://github.com/mongodb/mongo-go-driver/blob/v1.4.4/LICENSE, Apache-2.0 +go.mongodb.org/mongo-driver/., https://github.com/mongodb/mongo-go-driver/blob/v1.4.4/THIRD-PARTY-NOTICES#L1-L29, BSD-2-Clause +go.mongodb.org/mongo-driver/., https://github.com/mongodb/mongo-go-driver/blob/v1.4.4/THIRD-PARTY-NOTICES#L31-L61, BSD-3-Clause +golang.org/x/crypto, https://github.com/golang/crypto/blob/c07d793c2f9a/LICENSE, BSD-3-Clause +golang.org/x/net, https://github.com/golang/net/blob/04defd469f4e/LICENSE, BSD-3-Clause +golang.org/x/oauth2, https://github.com/golang/oauth2/blob/a41e5a781914/LICENSE, BSD-3-Clause +golang.org/x/sys, https://github.com/golang/sys/blob/ebe580a85c40/LICENSE, BSD-3-Clause +golang.org/x/term, https://github.com/golang/term/blob/2321bbc49cbf/LICENSE, BSD-3-Clause +golang.org/x/text, https://github.com/golang/text/blob/v0.3.6/LICENSE, BSD-3-Clause +golang.org/x/time, https://github.com/golang/time/blob/f8bda1e9f3ba/LICENSE, BSD-3-Clause +gomodules.xyz/jsonpatch/v2, https://github.com/gomodules/jsonpatch/blob/v2.2.0/LICENSE, Apache-2.0 +google.golang.org/genproto, https://github.com/googleapis/go-genproto/blob/9910b6c460de/LICENSE, Apache-2.0 +google.golang.org/grpc, https://github.com/grpc/grpc-go/blob/v1.38.0/LICENSE, Apache-2.0 +google.golang.org/protobuf, https://github.com/protocolbuffers/protobuf-go/blob/v1.27.1/LICENSE, BSD-3-Clause +gopkg.in/inf.v0, https://github.com/go-inf/inf/blob/v0.9.1/LICENSE, BSD-3-Clause +gopkg.in/ini.v1, https://github.com/go-ini/ini/blob/v1.51.0/LICENSE, Apache-2.0 +gopkg.in/yaml.v2, https://github.com/go-yaml/yaml/blob/v2.4.0/LICENSE, Apache-2.0 / MIT +gopkg.in/yaml.v3, https://github.com/go-yaml/yaml/blob/496545a6307b/LICENSE, MIT +k8s.io/api, https://github.com/kubernetes/api/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/apimachinery, https://github.com/kubernetes/apimachinery/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/client-go, https://github.com/kubernetes/client-go/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/klog/v2, https://github.com/kubernetes/klog/blob/v2.5.0/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/errors/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/spec/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/strfmt/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/validate/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/inotify/LICENSE, BSD-3-Clause +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/third_party/forked/golang/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/cloud.google.com/go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/cloud.google.com/go/storage/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/ocagent/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/prometheus/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/zipkin/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/alecthomas/template/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/alecthomas/units/COPYING, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/beorn7/perks/quantile/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/blang/semver/v4/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/blendle/zapdriver/LICENSE, ISC +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/census-instrumentation/opencensus-proto/gen-go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/cespare/xxhash/v2/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/davecgh/go-spew/spew/LICENSE, ISC +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/evanphx/json-patch/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/evanphx/json-patch/v5/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/go-logr/logr/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/gobuffalo/flect/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/gogo/protobuf/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/golang/glog/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/golang/groupcache/lru/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/golang/protobuf/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/go-cmp/cmp/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/go-github/v27/github/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/go-querystring/query/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/gofuzz/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/mako/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/uuid/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/googleapis/gax-go/v2/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/googleapis/gnostic/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/gorilla/websocket/LICENSE, BSD-2-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/grpc-ecosystem/grpc-gateway/LICENSE.txt, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/imdario/mergo/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/influxdata/tdigest/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/josharian/intern/license.md, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/json-iterator/go/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/kballard/go-shellquote/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/kelseyhightower/envconfig/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/mailru/easyjson/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/matttproud/golang_protobuf_extensions/pbutil/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/modern-go/concurrent/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/modern-go/reflect2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/openzipkin/zipkin-go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/pkg/errors/LICENSE, BSD-2-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/client_golang/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/client_model/go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/common/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/procfs/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/statsd_exporter/pkg/mapper/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/sirupsen/logrus/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/spf13/pflag/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/tsenart/vegeta/v12/lib/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.opencensus.io/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/atomic/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/automaxprocs/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/multierr/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/zap/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/crypto/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/mod/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/net/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/oauth2/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/sync/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/sys/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/term/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/text/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/time/rate/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/tools/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/xerrors/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gomodules.xyz/jsonpatch/v2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/api/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/api/internal/third_party/uritemplates/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/genproto/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/grpc/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/protobuf/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/alecthomas/kingpin.v2/COPYING, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/inf.v0/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/yaml.v2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/yaml.v3/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/api/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/apiextensions-apiserver/pkg/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/apimachinery/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/client-go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/code-generator/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/gengo/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/klog/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/klog/v2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/util/proto/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/utils/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/knative.dev/pkg/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/knative.dev/pkg/third_party/mako/proto/quickstore_go_proto/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/sigs.k8s.io/structured-merge-diff/v4/value/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/LICENSE, MIT / BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/mako/LICENSE, Apache-2.0 +sigs.k8s.io/structured-merge-diff/v4, https://github.com/kubernetes-sigs/structured-merge-diff/blob/v4.0.2/LICENSE, Apache-2.0 +sigs.k8s.io/yaml, https://github.com/kubernetes-sigs/yaml/blob/v1.2.0/LICENSE, MIT / BSD-3-Clause diff --git a/backend/third_party_licenses/cache_server.csv b/backend/third_party_licenses/cache_server.csv new file mode 100644 index 0000000000..d666a5c17f --- /dev/null +++ b/backend/third_party_licenses/cache_server.csv @@ -0,0 +1,451 @@ +# Generated by https://github.com/google/go-licenses/v2. DO NOT EDIT. +github.com/kubeflow/pipelines, https://github.com/kubeflow/pipelines/blob/master/LICENSE, Apache-2.0 +github.com/PuerkitoBio/purell, https://github.com/PuerkitoBio/purell/blob/v1.1.1/LICENSE, BSD-3-Clause +github.com/PuerkitoBio/urlesc, https://github.com/PuerkitoBio/urlesc/blob/de5bf2ad4578/LICENSE, BSD-3-Clause +github.com/asaskevich/govalidator, https://github.com/asaskevich/govalidator/blob/7a23bdc65eef/LICENSE, MIT +github.com/cenkalti/backoff, https://github.com/cenkalti/backoff/blob/v2.2.1/LICENSE, MIT +github.com/davecgh/go-spew, https://github.com/davecgh/go-spew/blob/v1.1.1/LICENSE, ISC +github.com/emicklei/go-restful, https://github.com/emicklei/go-restful/blob/v2.15.0/LICENSE, MIT +github.com/evanphx/json-patch/v5, https://github.com/evanphx/json-patch/blob/v5.5.0/LICENSE, BSD-3-Clause +github.com/ghodss/yaml, https://github.com/ghodss/yaml/blob/25d852aebe32/LICENSE, MIT / BSD-3-Clause +github.com/go-logr/logr, https://github.com/go-logr/logr/blob/v0.4.0/LICENSE, Apache-2.0 +github.com/go-openapi/errors, https://github.com/go-openapi/errors/blob/v0.19.9/LICENSE, Apache-2.0 +github.com/go-openapi/jsonpointer, https://github.com/go-openapi/jsonpointer/blob/v0.19.5/LICENSE, Apache-2.0 +github.com/go-openapi/jsonreference, https://github.com/go-openapi/jsonreference/blob/v0.19.5/LICENSE, Apache-2.0 +github.com/go-openapi/runtime, https://github.com/go-openapi/runtime/blob/v0.19.24/LICENSE, Apache-2.0 +github.com/go-openapi/runtime, https://github.com/go-openapi/runtime/blob/v0.19.24/middleware/denco/LICENSE, MIT +github.com/go-openapi/spec, https://github.com/go-openapi/spec/blob/v0.20.2/LICENSE, Apache-2.0 +github.com/go-openapi/strfmt, https://github.com/go-openapi/strfmt/blob/v0.19.11/LICENSE, Apache-2.0 +github.com/go-openapi/swag, https://github.com/go-openapi/swag/blob/v0.19.15/LICENSE, Apache-2.0 +github.com/go-sql-driver/mysql, https://github.com/go-sql-driver/mysql/blob/v1.5.0/LICENSE, MPL-2.0 +github.com/go-stack/stack, https://github.com/go-stack/stack/blob/v1.8.0/LICENSE.md, MIT +github.com/gogo/protobuf, https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE, BSD-3-Clause / BSD-2-Clause +github.com/golang/glog, https://github.com/golang/glog/blob/23def4e6c14b/LICENSE, Apache-2.0 +github.com/golang/protobuf, https://github.com/golang/protobuf/blob/v1.5.2/LICENSE, BSD-3-Clause +github.com/google/go-cmp, https://github.com/google/go-cmp/blob/v0.5.6/LICENSE, BSD-3-Clause +github.com/google/go-containerregistry, https://github.com/google/go-containerregistry/blob/19c2b639fab1/LICENSE, Apache-2.0 +github.com/google/gofuzz, https://github.com/google/gofuzz/blob/v1.2.0/LICENSE, Apache-2.0 +github.com/google/uuid, https://github.com/google/uuid/blob/v1.2.0/LICENSE, BSD-3-Clause +github.com/googleapis/gnostic, https://github.com/googleapis/gnostic/blob/v0.5.3/LICENSE, Apache-2.0 +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/LICENSE.txt, BSD-3-Clause +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/internal/casing/LICENSE.md, BSD-3-Clause +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/third_party/googleapis/LICENSE, Apache-2.0 +github.com/hashicorp/golang-lru, https://github.com/hashicorp/golang-lru/blob/v0.5.4/LICENSE, MPL-2.0 +github.com/imdario/mergo, https://github.com/imdario/mergo/blob/v0.3.10/LICENSE, BSD-3-Clause +github.com/jinzhu/gorm, https://github.com/jinzhu/gorm/blob/v1.9.12/License, MIT +github.com/jinzhu/inflection, https://github.com/jinzhu/inflection/blob/v1.0.0/LICENSE, MIT +github.com/josharian/intern, https://github.com/josharian/intern/blob/v1.0.0/license.md, MIT +github.com/json-iterator/go, https://github.com/json-iterator/go/blob/v1.1.11/LICENSE, MIT +github.com/lestrrat-go/strftime, https://github.com/lestrrat-go/strftime/blob/v1.0.4/LICENSE, MIT +github.com/mailru/easyjson, https://github.com/mailru/easyjson/blob/v0.7.7/LICENSE, MIT +github.com/mailru/easyjson, https://github.com/mailru/easyjson/blob/v0.7.7/parser/modulepath.go, BSD-3-Clause +github.com/mattn/go-sqlite3, https://github.com/mattn/go-sqlite3/blob/v1.9.0/LICENSE, MIT +github.com/mattn/go-sqlite3/., https://github.com/mattn/go-sqlite3/blob/v1.9.0/sqlite3-binding.h#L2-L11, blessing +github.com/mitchellh/mapstructure, https://github.com/mitchellh/mapstructure/blob/v1.4.0/LICENSE, MIT +github.com/modern-go/concurrent, https://github.com/modern-go/concurrent/blob/bacd9c7ef1dd/LICENSE, Apache-2.0 +github.com/modern-go/reflect2, https://github.com/modern-go/reflect2/blob/v1.0.1/LICENSE, Apache-2.0 +github.com/peterhellberg/duration, https://github.com/peterhellberg/duration/blob/ec6baeebcd10/LICENSE, MIT +github.com/pkg/errors, https://github.com/pkg/errors/blob/v0.9.1/LICENSE, BSD-2-Clause +github.com/spf13/pflag, https://github.com/spf13/pflag/blob/v1.0.5/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/cloud.google.com/go/compute/metadata/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/contrib.go.opencensus.io/exporter/ocagent/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/contrib.go.opencensus.io/exporter/prometheus/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/azure-sdk-for-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/adal/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/date/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/to/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/validation/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/logger/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/tracing/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/PuerkitoBio/purell/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/PuerkitoBio/urlesc/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/alecthomas/template/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/alecthomas/units/COPYING, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/aws/aws-sdk-go/LICENSE.txt, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/aws/aws-sdk-go/internal/sync/singleflight/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/beorn7/perks/quantile/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/blang/semver/v4/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/blendle/zapdriver/LICENSE, ISC +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/census-instrumentation/opencensus-proto/gen-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/cespare/xxhash/v2/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/cloudevents/sdk-go/v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/containerd/stargz-snapshotter/estargz/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/davecgh/go-spew/spew/LICENSE, ISC +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/cli/cli/config/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/distribution/registry/client/auth/challenge/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/docker/pkg/homedir/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/docker-credential-helpers/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/emicklei/go-restful/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/evanphx/json-patch/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/evanphx/json-patch/v5/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/form3tech-oss/jwt-go/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/ghodss/yaml/LICENSE, MIT / BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-logr/logr/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/jsonpointer/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/jsonreference/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/spec/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/swag/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/gobuffalo/flect/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/gogo/protobuf/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/golang/groupcache/lru/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/golang/protobuf/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/go-cmp/cmp/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/go-containerregistry/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/go-containerregistry/pkg/authn/k8schain/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/gofuzz/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/uuid/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/googleapis/gnostic/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/grpc-ecosystem/grpc-gateway/LICENSE.txt, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/imdario/mergo/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/jenkins-x/go-scm/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/josharian/intern/license.md, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/json-iterator/go/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/kelseyhightower/envconfig/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/lightstep/tracecontext.go/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/mailru/easyjson/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/matttproud/golang_protobuf_extensions/pbutil/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/mitchellh/go-homedir/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/modern-go/concurrent/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/modern-go/reflect2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/opencontainers/go-digest/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/opencontainers/image-spec/specs-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/openzipkin/zipkin-go/model/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/pkg/errors/LICENSE, BSD-2-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/client_golang/prometheus/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/client_model/go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/common/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/procfs/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/statsd_exporter/pkg/mapper/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/shurcooL/githubv4/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/shurcooL/graphql/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/sirupsen/logrus/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/spf13/pflag/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/tektoncd/pipeline/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/vdemeester/k8s-pkg-credentialprovider/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.opencensus.io/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/atomic/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/automaxprocs/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/multierr/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/zap/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/crypto/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/net/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/oauth2/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/sync/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/sys/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/term/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/text/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/time/rate/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gomodules.xyz/jsonpatch/v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/api/support/bundler/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/genproto/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/grpc/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/protobuf/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/alecthomas/kingpin.v2/COPYING, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/inf.v0/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/yaml.v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/yaml.v3/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/api/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/apiextensions-apiserver/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/apimachinery/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/client-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/component-base/version/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/klog/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/klog/v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/kube-openapi/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/legacy-cloud-providers/azure/auth/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/utils/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/knative.dev/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/sigs.k8s.io/structured-merge-diff/v4/value/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/sigs.k8s.io/yaml/LICENSE, MIT / BSD-3-Clause +go.mongodb.org/mongo-driver, https://github.com/mongodb/mongo-go-driver/blob/v1.4.4/LICENSE, Apache-2.0 +go.mongodb.org/mongo-driver/., https://github.com/mongodb/mongo-go-driver/blob/v1.4.4/THIRD-PARTY-NOTICES#L1-L29, BSD-2-Clause +go.mongodb.org/mongo-driver/., https://github.com/mongodb/mongo-go-driver/blob/v1.4.4/THIRD-PARTY-NOTICES#L31-L61, BSD-3-Clause +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/LICENSE.txt, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/assert_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/bool.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/bool_ext.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/bool_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/doc.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/duration.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/duration_ext.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/duration_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/error.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/error_ext.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/error_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/example_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/float64.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/float64_ext.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/float64_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/gen.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/int32.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/int32_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/int64.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/int64_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/internal/gen-atomicint/main.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/internal/gen-atomicwrapper/main.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/nocmp.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/nocmp_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/stress_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/string.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/string_ext.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/string_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/uint32.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/uint32_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/uint64.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/uint64_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/uintptr.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/uintptr_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/unsafe_pointer.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/unsafe_pointer_test.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/value.go, MIT +go.uber.org/atomic, https://github.com/uber-go/atomic/blob/v1.8.0/value_test.go, MIT +go.uber.org/multierr, https://github.com/uber-go/multierr/blob/v1.6.0/LICENSE.txt, MIT +go.uber.org/multierr, https://github.com/uber-go/multierr/blob/v1.6.0/benchmarks_test.go, MIT +go.uber.org/multierr, https://github.com/uber-go/multierr/blob/v1.6.0/error.go, MIT +go.uber.org/multierr, https://github.com/uber-go/multierr/blob/v1.6.0/error_test.go, MIT +go.uber.org/multierr, https://github.com/uber-go/multierr/blob/v1.6.0/example_test.go, MIT +go.uber.org/multierr, https://github.com/uber-go/multierr/blob/v1.6.0/go113.go, MIT +go.uber.org/multierr, https://github.com/uber-go/multierr/blob/v1.6.0/go113_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/LICENSE.txt, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/array.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/array_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/buffer/buffer.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/buffer/buffer_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/buffer/pool.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/buffer/pool_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/clock_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/common_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/config.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/config_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/doc.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/encoder.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/encoder_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/error.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/error_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/example_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/field.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/field_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/flag.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/flag_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/global.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/global_go112.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/global_prego112.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/global_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/http_handler.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/http_handler_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/increase_level_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/internal/bufferpool/bufferpool.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/internal/color/color.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/internal/color/color_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/internal/exit/exit.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/internal/exit/exit_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/internal/readme/readme.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/internal/ztest/doc.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/internal/ztest/timeout.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/internal/ztest/writer.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/leak_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/level.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/level_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/logger.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/logger_bench_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/logger_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/options.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/sink.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/sink_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/stacktrace.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/stacktrace_ext_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/stacktrace_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/sugar.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/sugar_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/time.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/time_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/writer.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/writer_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/buffered_write_syncer.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/buffered_write_syncer_bench_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/buffered_write_syncer_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/clock.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/clock_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/console_encoder.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/console_encoder_bench_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/console_encoder_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/core.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/core_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/doc.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/encoder.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/encoder_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/entry.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/entry_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/error.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/error_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/field.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/field_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/hook.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/hook_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/increase_level.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/increase_level_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/json_encoder.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/json_encoder_bench_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/json_encoder_impl_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/json_encoder_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/leak_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/level.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/level_strings.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/level_strings_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/level_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/marshaler.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/memory_encoder.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/memory_encoder_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/sampler.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/sampler_bench_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/sampler_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/tee.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/tee_logger_bench_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/tee_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/write_syncer.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/write_syncer_bench_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapcore/write_syncer_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapgrpc/zapgrpc.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapgrpc/zapgrpc_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapio/example_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapio/writer.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zapio/writer_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zaptest/doc.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zaptest/logger.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zaptest/logger_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zaptest/observer/logged_entry.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zaptest/observer/logged_entry_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zaptest/observer/observer.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zaptest/observer/observer_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zaptest/testingt.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zaptest/testingt_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zaptest/timeout.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zaptest/timeout_test.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zaptest/writer.go, MIT +go.uber.org/zap, https://github.com/uber-go/zap/blob/v1.18.1/zaptest/writer_test.go, MIT +golang.org/x/crypto, https://github.com/golang/crypto/blob/c07d793c2f9a/LICENSE, BSD-3-Clause +golang.org/x/net, https://github.com/golang/net/blob/04defd469f4e/LICENSE, BSD-3-Clause +golang.org/x/oauth2, https://github.com/golang/oauth2/blob/a41e5a781914/LICENSE, BSD-3-Clause +golang.org/x/sys, https://github.com/golang/sys/blob/ebe580a85c40/LICENSE, BSD-3-Clause +golang.org/x/term, https://github.com/golang/term/blob/2321bbc49cbf/LICENSE, BSD-3-Clause +golang.org/x/text, https://github.com/golang/text/blob/v0.3.6/LICENSE, BSD-3-Clause +golang.org/x/time, https://github.com/golang/time/blob/f8bda1e9f3ba/LICENSE, BSD-3-Clause +gomodules.xyz/jsonpatch/v2, https://github.com/gomodules/jsonpatch/blob/v2.2.0/LICENSE, Apache-2.0 +google.golang.org/genproto, https://github.com/googleapis/go-genproto/blob/9910b6c460de/LICENSE, Apache-2.0 +google.golang.org/grpc, https://github.com/grpc/grpc-go/blob/v1.38.0/LICENSE, Apache-2.0 +google.golang.org/protobuf, https://github.com/protocolbuffers/protobuf-go/blob/v1.27.1/LICENSE, BSD-3-Clause +gopkg.in/inf.v0, https://github.com/go-inf/inf/blob/v0.9.1/LICENSE, BSD-3-Clause +gopkg.in/yaml.v2, https://github.com/go-yaml/yaml/blob/v2.4.0/LICENSE, Apache-2.0 / MIT +gopkg.in/yaml.v3, https://github.com/go-yaml/yaml/blob/496545a6307b/LICENSE, MIT +k8s.io/api, https://github.com/kubernetes/api/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/apimachinery, https://github.com/kubernetes/apimachinery/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/client-go, https://github.com/kubernetes/client-go/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/klog/v2, https://github.com/kubernetes/klog/blob/v2.5.0/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/errors/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/spec/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/strfmt/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/validate/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/inotify/LICENSE, BSD-3-Clause +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/third_party/forked/golang/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/cloud.google.com/go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/cloud.google.com/go/storage/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/ocagent/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/prometheus/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/zipkin/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/alecthomas/template/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/alecthomas/units/COPYING, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/beorn7/perks/quantile/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/blang/semver/v4/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/blendle/zapdriver/LICENSE, ISC +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/census-instrumentation/opencensus-proto/gen-go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/cespare/xxhash/v2/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/davecgh/go-spew/spew/LICENSE, ISC +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/evanphx/json-patch/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/evanphx/json-patch/v5/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/go-logr/logr/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/gobuffalo/flect/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/gogo/protobuf/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/golang/glog/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/golang/groupcache/lru/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/golang/protobuf/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/go-cmp/cmp/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/go-github/v27/github/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/go-querystring/query/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/gofuzz/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/mako/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/uuid/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/googleapis/gax-go/v2/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/googleapis/gnostic/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/gorilla/websocket/LICENSE, BSD-2-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/grpc-ecosystem/grpc-gateway/LICENSE.txt, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/imdario/mergo/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/influxdata/tdigest/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/josharian/intern/license.md, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/json-iterator/go/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/kballard/go-shellquote/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/kelseyhightower/envconfig/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/mailru/easyjson/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/matttproud/golang_protobuf_extensions/pbutil/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/modern-go/concurrent/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/modern-go/reflect2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/openzipkin/zipkin-go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/pkg/errors/LICENSE, BSD-2-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/client_golang/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/client_model/go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/common/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/procfs/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/statsd_exporter/pkg/mapper/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/sirupsen/logrus/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/spf13/pflag/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/tsenart/vegeta/v12/lib/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.opencensus.io/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/atomic/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/automaxprocs/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/multierr/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/zap/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/crypto/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/mod/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/net/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/oauth2/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/sync/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/sys/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/term/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/text/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/time/rate/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/tools/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/xerrors/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gomodules.xyz/jsonpatch/v2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/api/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/api/internal/third_party/uritemplates/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/genproto/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/grpc/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/protobuf/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/alecthomas/kingpin.v2/COPYING, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/inf.v0/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/yaml.v2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/yaml.v3/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/api/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/apiextensions-apiserver/pkg/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/apimachinery/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/client-go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/code-generator/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/gengo/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/klog/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/klog/v2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/util/proto/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/utils/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/knative.dev/pkg/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/knative.dev/pkg/third_party/mako/proto/quickstore_go_proto/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/sigs.k8s.io/structured-merge-diff/v4/value/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/LICENSE, MIT / BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/mako/LICENSE, Apache-2.0 +sigs.k8s.io/structured-merge-diff/v4, https://github.com/kubernetes-sigs/structured-merge-diff/blob/v4.0.2/LICENSE, Apache-2.0 +sigs.k8s.io/yaml, https://github.com/kubernetes-sigs/yaml/blob/v1.2.0/LICENSE, MIT / BSD-3-Clause diff --git a/backend/third_party_licenses/persistence_agent.csv b/backend/third_party_licenses/persistence_agent.csv new file mode 100644 index 0000000000..81318ef236 --- /dev/null +++ b/backend/third_party_licenses/persistence_agent.csv @@ -0,0 +1,286 @@ +# Generated by https://github.com/google/go-licenses/v2. DO NOT EDIT. +github.com/kubeflow/pipelines, https://github.com/kubeflow/pipelines/blob/master/LICENSE, Apache-2.0 +cloud.google.com/go, https://github.com/googleapis/google-cloud-go/blob/v0.55.0/LICENSE, Apache-2.0 +cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug/elf, https://github.com/googleapis/google-cloud-go/blob/v0.55.0/cmd/go-cloud-debug-agent/internal/debug/elf/elf.go#L1-L43, BSD-2-Clause +github.com/PuerkitoBio/purell, https://github.com/PuerkitoBio/purell/blob/v1.1.1/LICENSE, BSD-3-Clause +github.com/PuerkitoBio/urlesc, https://github.com/PuerkitoBio/urlesc/blob/de5bf2ad4578/LICENSE, BSD-3-Clause +github.com/asaskevich/govalidator, https://github.com/asaskevich/govalidator/blob/7a23bdc65eef/LICENSE, MIT +github.com/cenkalti/backoff, https://github.com/cenkalti/backoff/blob/v2.2.1/LICENSE, MIT +github.com/davecgh/go-spew, https://github.com/davecgh/go-spew/blob/v1.1.1/LICENSE, ISC +github.com/emicklei/go-restful, https://github.com/emicklei/go-restful/blob/v2.15.0/LICENSE, MIT +github.com/evanphx/json-patch/v5, https://github.com/evanphx/json-patch/blob/v5.5.0/LICENSE, BSD-3-Clause +github.com/ghodss/yaml, https://github.com/ghodss/yaml/blob/25d852aebe32/LICENSE, MIT / BSD-3-Clause +github.com/go-logr/logr, https://github.com/go-logr/logr/blob/v0.4.0/LICENSE, Apache-2.0 +github.com/go-openapi/errors, https://github.com/go-openapi/errors/blob/v0.19.9/LICENSE, Apache-2.0 +github.com/go-openapi/jsonpointer, https://github.com/go-openapi/jsonpointer/blob/v0.19.5/LICENSE, Apache-2.0 +github.com/go-openapi/jsonreference, https://github.com/go-openapi/jsonreference/blob/v0.19.5/LICENSE, Apache-2.0 +github.com/go-openapi/runtime, https://github.com/go-openapi/runtime/blob/v0.19.24/LICENSE, Apache-2.0 +github.com/go-openapi/runtime, https://github.com/go-openapi/runtime/blob/v0.19.24/middleware/denco/LICENSE, MIT +github.com/go-openapi/spec, https://github.com/go-openapi/spec/blob/v0.20.2/LICENSE, Apache-2.0 +github.com/go-openapi/strfmt, https://github.com/go-openapi/strfmt/blob/v0.19.11/LICENSE, Apache-2.0 +github.com/go-openapi/swag, https://github.com/go-openapi/swag/blob/v0.19.15/LICENSE, Apache-2.0 +github.com/go-stack/stack, https://github.com/go-stack/stack/blob/v1.8.0/LICENSE.md, MIT +github.com/gogo/protobuf, https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE, BSD-3-Clause / BSD-2-Clause +github.com/golang/glog, https://github.com/golang/glog/blob/23def4e6c14b/LICENSE, Apache-2.0 +github.com/golang/protobuf, https://github.com/golang/protobuf/blob/v1.5.2/LICENSE, BSD-3-Clause +github.com/google/go-cmp, https://github.com/google/go-cmp/blob/v0.5.6/LICENSE, BSD-3-Clause +github.com/google/go-containerregistry, https://github.com/google/go-containerregistry/blob/19c2b639fab1/LICENSE, Apache-2.0 +github.com/google/gofuzz, https://github.com/google/gofuzz/blob/v1.2.0/LICENSE, Apache-2.0 +github.com/google/uuid, https://github.com/google/uuid/blob/v1.2.0/LICENSE, BSD-3-Clause +github.com/googleapis/gnostic, https://github.com/googleapis/gnostic/blob/v0.5.3/LICENSE, Apache-2.0 +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/LICENSE.txt, BSD-3-Clause +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/internal/casing/LICENSE.md, BSD-3-Clause +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/third_party/googleapis/LICENSE, Apache-2.0 +github.com/hashicorp/golang-lru, https://github.com/hashicorp/golang-lru/blob/v0.5.4/LICENSE, MPL-2.0 +github.com/imdario/mergo, https://github.com/imdario/mergo/blob/v0.3.10/LICENSE, BSD-3-Clause +github.com/josharian/intern, https://github.com/josharian/intern/blob/v1.0.0/license.md, MIT +github.com/json-iterator/go, https://github.com/json-iterator/go/blob/v1.1.11/LICENSE, MIT +github.com/lestrrat-go/strftime, https://github.com/lestrrat-go/strftime/blob/v1.0.4/LICENSE, MIT +github.com/mailru/easyjson, https://github.com/mailru/easyjson/blob/v0.7.7/LICENSE, MIT +github.com/mailru/easyjson, https://github.com/mailru/easyjson/blob/v0.7.7/parser/modulepath.go, BSD-3-Clause +github.com/mitchellh/mapstructure, https://github.com/mitchellh/mapstructure/blob/v1.4.0/LICENSE, MIT +github.com/modern-go/concurrent, https://github.com/modern-go/concurrent/blob/bacd9c7ef1dd/LICENSE, Apache-2.0 +github.com/modern-go/reflect2, https://github.com/modern-go/reflect2/blob/v1.0.1/LICENSE, Apache-2.0 +github.com/pkg/errors, https://github.com/pkg/errors/blob/v0.9.1/LICENSE, BSD-2-Clause +github.com/sirupsen/logrus, https://github.com/sirupsen/logrus/blob/v1.7.0/LICENSE, MIT +github.com/sirupsen/logrus, https://github.com/sirupsen/logrus/blob/v1.7.0/alt_exit.go, MIT +github.com/spf13/pflag, https://github.com/spf13/pflag/blob/v1.0.5/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/cloud.google.com/go/compute/metadata/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/contrib.go.opencensus.io/exporter/ocagent/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/contrib.go.opencensus.io/exporter/prometheus/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/azure-sdk-for-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/adal/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/date/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/to/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/validation/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/logger/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/tracing/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/PuerkitoBio/purell/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/PuerkitoBio/urlesc/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/alecthomas/template/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/alecthomas/units/COPYING, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/aws/aws-sdk-go/LICENSE.txt, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/aws/aws-sdk-go/internal/sync/singleflight/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/beorn7/perks/quantile/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/blang/semver/v4/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/blendle/zapdriver/LICENSE, ISC +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/census-instrumentation/opencensus-proto/gen-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/cespare/xxhash/v2/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/cloudevents/sdk-go/v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/containerd/stargz-snapshotter/estargz/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/davecgh/go-spew/spew/LICENSE, ISC +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/cli/cli/config/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/distribution/registry/client/auth/challenge/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/docker/pkg/homedir/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/docker-credential-helpers/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/emicklei/go-restful/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/evanphx/json-patch/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/evanphx/json-patch/v5/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/form3tech-oss/jwt-go/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/ghodss/yaml/LICENSE, MIT / BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-logr/logr/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/jsonpointer/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/jsonreference/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/spec/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/swag/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/gobuffalo/flect/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/gogo/protobuf/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/golang/groupcache/lru/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/golang/protobuf/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/go-cmp/cmp/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/go-containerregistry/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/go-containerregistry/pkg/authn/k8schain/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/gofuzz/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/uuid/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/googleapis/gnostic/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/grpc-ecosystem/grpc-gateway/LICENSE.txt, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/imdario/mergo/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/jenkins-x/go-scm/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/josharian/intern/license.md, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/json-iterator/go/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/kelseyhightower/envconfig/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/lightstep/tracecontext.go/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/mailru/easyjson/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/matttproud/golang_protobuf_extensions/pbutil/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/mitchellh/go-homedir/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/modern-go/concurrent/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/modern-go/reflect2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/opencontainers/go-digest/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/opencontainers/image-spec/specs-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/openzipkin/zipkin-go/model/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/pkg/errors/LICENSE, BSD-2-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/client_golang/prometheus/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/client_model/go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/common/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/procfs/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/statsd_exporter/pkg/mapper/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/shurcooL/githubv4/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/shurcooL/graphql/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/sirupsen/logrus/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/spf13/pflag/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/tektoncd/pipeline/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/vdemeester/k8s-pkg-credentialprovider/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.opencensus.io/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/atomic/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/automaxprocs/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/multierr/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/zap/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/crypto/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/net/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/oauth2/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/sync/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/sys/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/term/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/text/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/time/rate/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gomodules.xyz/jsonpatch/v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/api/support/bundler/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/genproto/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/grpc/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/protobuf/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/alecthomas/kingpin.v2/COPYING, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/inf.v0/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/yaml.v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/yaml.v3/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/api/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/apiextensions-apiserver/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/apimachinery/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/client-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/component-base/version/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/klog/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/klog/v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/kube-openapi/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/legacy-cloud-providers/azure/auth/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/utils/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/knative.dev/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/sigs.k8s.io/structured-merge-diff/v4/value/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/sigs.k8s.io/yaml/LICENSE, MIT / BSD-3-Clause +go.mongodb.org/mongo-driver, https://github.com/mongodb/mongo-go-driver/blob/v1.4.4/LICENSE, Apache-2.0 +go.mongodb.org/mongo-driver/., https://github.com/mongodb/mongo-go-driver/blob/v1.4.4/THIRD-PARTY-NOTICES#L1-L29, BSD-2-Clause +go.mongodb.org/mongo-driver/., https://github.com/mongodb/mongo-go-driver/blob/v1.4.4/THIRD-PARTY-NOTICES#L31-L61, BSD-3-Clause +golang.org/x/crypto, https://github.com/golang/crypto/blob/c07d793c2f9a/LICENSE, BSD-3-Clause +golang.org/x/net, https://github.com/golang/net/blob/04defd469f4e/LICENSE, BSD-3-Clause +golang.org/x/oauth2, https://github.com/golang/oauth2/blob/a41e5a781914/LICENSE, BSD-3-Clause +golang.org/x/sys, https://github.com/golang/sys/blob/ebe580a85c40/LICENSE, BSD-3-Clause +golang.org/x/term, https://github.com/golang/term/blob/2321bbc49cbf/LICENSE, BSD-3-Clause +golang.org/x/text, https://github.com/golang/text/blob/v0.3.6/LICENSE, BSD-3-Clause +golang.org/x/time, https://github.com/golang/time/blob/f8bda1e9f3ba/LICENSE, BSD-3-Clause +gomodules.xyz/jsonpatch/v2, https://github.com/gomodules/jsonpatch/blob/v2.2.0/LICENSE, Apache-2.0 +google.golang.org/genproto, https://github.com/googleapis/go-genproto/blob/9910b6c460de/LICENSE, Apache-2.0 +google.golang.org/grpc, https://github.com/grpc/grpc-go/blob/v1.38.0/LICENSE, Apache-2.0 +google.golang.org/protobuf, https://github.com/protocolbuffers/protobuf-go/blob/v1.27.1/LICENSE, BSD-3-Clause +gopkg.in/inf.v0, https://github.com/go-inf/inf/blob/v0.9.1/LICENSE, BSD-3-Clause +gopkg.in/yaml.v2, https://github.com/go-yaml/yaml/blob/v2.4.0/LICENSE, Apache-2.0 / MIT +gopkg.in/yaml.v3, https://github.com/go-yaml/yaml/blob/496545a6307b/LICENSE, MIT +k8s.io/api, https://github.com/kubernetes/api/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/apimachinery, https://github.com/kubernetes/apimachinery/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/client-go, https://github.com/kubernetes/client-go/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/klog/v2, https://github.com/kubernetes/klog/blob/v2.5.0/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/errors/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/spec/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/strfmt/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/validate/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/inotify/LICENSE, BSD-3-Clause +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/third_party/forked/golang/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/cloud.google.com/go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/cloud.google.com/go/storage/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/ocagent/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/prometheus/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/zipkin/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/alecthomas/template/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/alecthomas/units/COPYING, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/beorn7/perks/quantile/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/blang/semver/v4/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/blendle/zapdriver/LICENSE, ISC +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/census-instrumentation/opencensus-proto/gen-go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/cespare/xxhash/v2/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/davecgh/go-spew/spew/LICENSE, ISC +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/evanphx/json-patch/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/evanphx/json-patch/v5/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/go-logr/logr/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/gobuffalo/flect/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/gogo/protobuf/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/golang/glog/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/golang/groupcache/lru/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/golang/protobuf/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/go-cmp/cmp/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/go-github/v27/github/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/go-querystring/query/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/gofuzz/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/mako/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/uuid/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/googleapis/gax-go/v2/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/googleapis/gnostic/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/gorilla/websocket/LICENSE, BSD-2-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/grpc-ecosystem/grpc-gateway/LICENSE.txt, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/imdario/mergo/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/influxdata/tdigest/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/josharian/intern/license.md, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/json-iterator/go/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/kballard/go-shellquote/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/kelseyhightower/envconfig/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/mailru/easyjson/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/matttproud/golang_protobuf_extensions/pbutil/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/modern-go/concurrent/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/modern-go/reflect2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/openzipkin/zipkin-go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/pkg/errors/LICENSE, BSD-2-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/client_golang/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/client_model/go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/common/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/procfs/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/statsd_exporter/pkg/mapper/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/sirupsen/logrus/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/spf13/pflag/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/tsenart/vegeta/v12/lib/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.opencensus.io/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/atomic/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/automaxprocs/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/multierr/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/zap/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/crypto/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/mod/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/net/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/oauth2/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/sync/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/sys/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/term/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/text/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/time/rate/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/tools/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/xerrors/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gomodules.xyz/jsonpatch/v2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/api/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/api/internal/third_party/uritemplates/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/genproto/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/grpc/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/protobuf/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/alecthomas/kingpin.v2/COPYING, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/inf.v0/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/yaml.v2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/yaml.v3/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/api/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/apiextensions-apiserver/pkg/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/apimachinery/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/client-go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/code-generator/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/gengo/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/klog/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/klog/v2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/util/proto/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/utils/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/knative.dev/pkg/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/knative.dev/pkg/third_party/mako/proto/quickstore_go_proto/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/sigs.k8s.io/structured-merge-diff/v4/value/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/LICENSE, MIT / BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/mako/LICENSE, Apache-2.0 +sigs.k8s.io/structured-merge-diff/v4, https://github.com/kubernetes-sigs/structured-merge-diff/blob/v4.0.2/LICENSE, Apache-2.0 +sigs.k8s.io/yaml, https://github.com/kubernetes-sigs/yaml/blob/v1.2.0/LICENSE, MIT / BSD-3-Clause diff --git a/backend/third_party_licenses/swf.csv b/backend/third_party_licenses/swf.csv new file mode 100644 index 0000000000..fbf83a8cfb --- /dev/null +++ b/backend/third_party_licenses/swf.csv @@ -0,0 +1,298 @@ +# Generated by https://github.com/google/go-licenses/v2. DO NOT EDIT. +github.com/kubeflow/pipelines, https://github.com/kubeflow/pipelines/blob/master/LICENSE, Apache-2.0 +cloud.google.com/go, https://github.com/googleapis/google-cloud-go/blob/v0.55.0/LICENSE, Apache-2.0 +cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug/elf, https://github.com/googleapis/google-cloud-go/blob/v0.55.0/cmd/go-cloud-debug-agent/internal/debug/elf/elf.go#L1-L43, BSD-2-Clause +github.com/PuerkitoBio/purell, https://github.com/PuerkitoBio/purell/blob/v1.1.1/LICENSE, BSD-3-Clause +github.com/PuerkitoBio/urlesc, https://github.com/PuerkitoBio/urlesc/blob/de5bf2ad4578/LICENSE, BSD-3-Clause +github.com/asaskevich/govalidator, https://github.com/asaskevich/govalidator/blob/7a23bdc65eef/LICENSE, MIT +github.com/cenkalti/backoff, https://github.com/cenkalti/backoff/blob/v2.2.1/LICENSE, MIT +github.com/davecgh/go-spew, https://github.com/davecgh/go-spew/blob/v1.1.1/LICENSE, ISC +github.com/emicklei/go-restful, https://github.com/emicklei/go-restful/blob/v2.15.0/LICENSE, MIT +github.com/evanphx/json-patch/v5, https://github.com/evanphx/json-patch/blob/v5.5.0/LICENSE, BSD-3-Clause +github.com/fsnotify/fsnotify, https://github.com/fsnotify/fsnotify/blob/v1.4.9/LICENSE, BSD-3-Clause +github.com/ghodss/yaml, https://github.com/ghodss/yaml/blob/25d852aebe32/LICENSE, MIT / BSD-3-Clause +github.com/go-logr/logr, https://github.com/go-logr/logr/blob/v0.4.0/LICENSE, Apache-2.0 +github.com/go-openapi/errors, https://github.com/go-openapi/errors/blob/v0.19.9/LICENSE, Apache-2.0 +github.com/go-openapi/jsonpointer, https://github.com/go-openapi/jsonpointer/blob/v0.19.5/LICENSE, Apache-2.0 +github.com/go-openapi/jsonreference, https://github.com/go-openapi/jsonreference/blob/v0.19.5/LICENSE, Apache-2.0 +github.com/go-openapi/runtime, https://github.com/go-openapi/runtime/blob/v0.19.24/LICENSE, Apache-2.0 +github.com/go-openapi/runtime, https://github.com/go-openapi/runtime/blob/v0.19.24/middleware/denco/LICENSE, MIT +github.com/go-openapi/spec, https://github.com/go-openapi/spec/blob/v0.20.2/LICENSE, Apache-2.0 +github.com/go-openapi/strfmt, https://github.com/go-openapi/strfmt/blob/v0.19.11/LICENSE, Apache-2.0 +github.com/go-openapi/swag, https://github.com/go-openapi/swag/blob/v0.19.15/LICENSE, Apache-2.0 +github.com/go-stack/stack, https://github.com/go-stack/stack/blob/v1.8.0/LICENSE.md, MIT +github.com/gogo/protobuf, https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE, BSD-3-Clause / BSD-2-Clause +github.com/golang/glog, https://github.com/golang/glog/blob/23def4e6c14b/LICENSE, Apache-2.0 +github.com/golang/groupcache, https://github.com/golang/groupcache/blob/8c9f03a8e57e/LICENSE, Apache-2.0 +github.com/golang/protobuf, https://github.com/golang/protobuf/blob/v1.5.2/LICENSE, BSD-3-Clause +github.com/google/go-cmp, https://github.com/google/go-cmp/blob/v0.5.6/LICENSE, BSD-3-Clause +github.com/google/go-containerregistry, https://github.com/google/go-containerregistry/blob/19c2b639fab1/LICENSE, Apache-2.0 +github.com/google/gofuzz, https://github.com/google/gofuzz/blob/v1.2.0/LICENSE, Apache-2.0 +github.com/google/uuid, https://github.com/google/uuid/blob/v1.2.0/LICENSE, BSD-3-Clause +github.com/googleapis/gnostic, https://github.com/googleapis/gnostic/blob/v0.5.3/LICENSE, Apache-2.0 +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/LICENSE.txt, BSD-3-Clause +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/internal/casing/LICENSE.md, BSD-3-Clause +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/third_party/googleapis/LICENSE, Apache-2.0 +github.com/hashicorp/golang-lru, https://github.com/hashicorp/golang-lru/blob/v0.5.4/LICENSE, MPL-2.0 +github.com/hashicorp/hcl, https://github.com/hashicorp/hcl/blob/v1.0.0/LICENSE, MPL-2.0 +github.com/imdario/mergo, https://github.com/imdario/mergo/blob/v0.3.10/LICENSE, BSD-3-Clause +github.com/josharian/intern, https://github.com/josharian/intern/blob/v1.0.0/license.md, MIT +github.com/json-iterator/go, https://github.com/json-iterator/go/blob/v1.1.11/LICENSE, MIT +github.com/lestrrat-go/strftime, https://github.com/lestrrat-go/strftime/blob/v1.0.4/LICENSE, MIT +github.com/magiconair/properties, https://github.com/magiconair/properties/blob/v1.8.1/LICENSE, BSD-2-Clause +github.com/mailru/easyjson, https://github.com/mailru/easyjson/blob/v0.7.7/LICENSE, MIT +github.com/mailru/easyjson, https://github.com/mailru/easyjson/blob/v0.7.7/parser/modulepath.go, BSD-3-Clause +github.com/mitchellh/mapstructure, https://github.com/mitchellh/mapstructure/blob/v1.4.0/LICENSE, MIT +github.com/modern-go/concurrent, https://github.com/modern-go/concurrent/blob/bacd9c7ef1dd/LICENSE, Apache-2.0 +github.com/modern-go/reflect2, https://github.com/modern-go/reflect2/blob/v1.0.1/LICENSE, Apache-2.0 +github.com/pelletier/go-toml, https://github.com/pelletier/go-toml/blob/v1.7.0/LICENSE, MIT +github.com/pkg/errors, https://github.com/pkg/errors/blob/v0.9.1/LICENSE, BSD-2-Clause +github.com/robfig/cron, https://github.com/robfig/cron/blob/v1.2.0/LICENSE, MIT +github.com/sirupsen/logrus, https://github.com/sirupsen/logrus/blob/v1.7.0/LICENSE, MIT +github.com/sirupsen/logrus, https://github.com/sirupsen/logrus/blob/v1.7.0/alt_exit.go, MIT +github.com/spf13/afero, https://github.com/spf13/afero/blob/v1.2.2/LICENSE.txt, Apache-2.0 +github.com/spf13/cast, https://github.com/spf13/cast/blob/v1.3.0/LICENSE, MIT +github.com/spf13/jwalterweatherman, https://github.com/spf13/jwalterweatherman/blob/v1.0.0/LICENSE, MIT +github.com/spf13/pflag, https://github.com/spf13/pflag/blob/v1.0.5/LICENSE, BSD-3-Clause +github.com/spf13/viper, https://github.com/spf13/viper/blob/v1.7.0/LICENSE, MIT +github.com/subosito/gotenv, https://github.com/subosito/gotenv/blob/v1.2.0/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/cloud.google.com/go/compute/metadata/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/contrib.go.opencensus.io/exporter/ocagent/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/contrib.go.opencensus.io/exporter/prometheus/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/azure-sdk-for-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/adal/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/date/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/to/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/autorest/validation/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/logger/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/Azure/go-autorest/tracing/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/PuerkitoBio/purell/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/PuerkitoBio/urlesc/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/alecthomas/template/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/alecthomas/units/COPYING, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/aws/aws-sdk-go/LICENSE.txt, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/aws/aws-sdk-go/internal/sync/singleflight/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/beorn7/perks/quantile/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/blang/semver/v4/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/blendle/zapdriver/LICENSE, ISC +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/census-instrumentation/opencensus-proto/gen-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/cespare/xxhash/v2/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/cloudevents/sdk-go/v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/containerd/stargz-snapshotter/estargz/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/davecgh/go-spew/spew/LICENSE, ISC +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/cli/cli/config/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/distribution/registry/client/auth/challenge/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/docker/pkg/homedir/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/docker/docker-credential-helpers/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/emicklei/go-restful/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/evanphx/json-patch/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/evanphx/json-patch/v5/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/form3tech-oss/jwt-go/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/ghodss/yaml/LICENSE, MIT / BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-logr/logr/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/jsonpointer/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/jsonreference/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/spec/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/go-openapi/swag/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/gobuffalo/flect/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/gogo/protobuf/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/golang/groupcache/lru/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/golang/protobuf/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/go-cmp/cmp/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/go-containerregistry/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/go-containerregistry/pkg/authn/k8schain/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/gofuzz/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/google/uuid/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/googleapis/gnostic/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/grpc-ecosystem/grpc-gateway/LICENSE.txt, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/imdario/mergo/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/jenkins-x/go-scm/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/josharian/intern/license.md, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/json-iterator/go/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/kelseyhightower/envconfig/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/lightstep/tracecontext.go/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/mailru/easyjson/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/matttproud/golang_protobuf_extensions/pbutil/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/mitchellh/go-homedir/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/modern-go/concurrent/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/modern-go/reflect2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/opencontainers/go-digest/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/opencontainers/image-spec/specs-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/openzipkin/zipkin-go/model/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/pkg/errors/LICENSE, BSD-2-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/client_golang/prometheus/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/client_model/go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/common/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/procfs/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/prometheus/statsd_exporter/pkg/mapper/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/shurcooL/githubv4/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/shurcooL/graphql/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/sirupsen/logrus/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/spf13/pflag/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/tektoncd/pipeline/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/github.com/vdemeester/k8s-pkg-credentialprovider/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.opencensus.io/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/atomic/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/automaxprocs/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/multierr/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/go.uber.org/zap/LICENSE.txt, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/crypto/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/net/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/oauth2/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/sync/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/sys/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/term/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/text/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/golang.org/x/time/rate/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gomodules.xyz/jsonpatch/v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/api/support/bundler/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/genproto/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/grpc/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/google.golang.org/protobuf/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/alecthomas/kingpin.v2/COPYING, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/inf.v0/LICENSE, BSD-3-Clause +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/yaml.v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/gopkg.in/yaml.v3/LICENSE, MIT +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/api/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/apiextensions-apiserver/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/apimachinery/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/client-go/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/component-base/version/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/klog/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/klog/v2/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/kube-openapi/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/legacy-cloud-providers/azure/auth/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/k8s.io/utils/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/knative.dev/pkg/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/sigs.k8s.io/structured-merge-diff/v4/value/LICENSE, Apache-2.0 +github.com/tektoncd/pipeline, https://github.com/tektoncd/pipeline/blob/v0.27.0/third_party/sigs.k8s.io/yaml/LICENSE, MIT / BSD-3-Clause +go.mongodb.org/mongo-driver, https://github.com/mongodb/mongo-go-driver/blob/v1.4.4/LICENSE, Apache-2.0 +go.mongodb.org/mongo-driver/., https://github.com/mongodb/mongo-go-driver/blob/v1.4.4/THIRD-PARTY-NOTICES#L1-L29, BSD-2-Clause +go.mongodb.org/mongo-driver/., https://github.com/mongodb/mongo-go-driver/blob/v1.4.4/THIRD-PARTY-NOTICES#L31-L61, BSD-3-Clause +golang.org/x/crypto, https://github.com/golang/crypto/blob/c07d793c2f9a/LICENSE, BSD-3-Clause +golang.org/x/net, https://github.com/golang/net/blob/04defd469f4e/LICENSE, BSD-3-Clause +golang.org/x/oauth2, https://github.com/golang/oauth2/blob/a41e5a781914/LICENSE, BSD-3-Clause +golang.org/x/sys, https://github.com/golang/sys/blob/ebe580a85c40/LICENSE, BSD-3-Clause +golang.org/x/term, https://github.com/golang/term/blob/2321bbc49cbf/LICENSE, BSD-3-Clause +golang.org/x/text, https://github.com/golang/text/blob/v0.3.6/LICENSE, BSD-3-Clause +golang.org/x/time, https://github.com/golang/time/blob/f8bda1e9f3ba/LICENSE, BSD-3-Clause +gomodules.xyz/jsonpatch/v2, https://github.com/gomodules/jsonpatch/blob/v2.2.0/LICENSE, Apache-2.0 +google.golang.org/genproto, https://github.com/googleapis/go-genproto/blob/9910b6c460de/LICENSE, Apache-2.0 +google.golang.org/grpc, https://github.com/grpc/grpc-go/blob/v1.38.0/LICENSE, Apache-2.0 +google.golang.org/protobuf, https://github.com/protocolbuffers/protobuf-go/blob/v1.27.1/LICENSE, BSD-3-Clause +gopkg.in/inf.v0, https://github.com/go-inf/inf/blob/v0.9.1/LICENSE, BSD-3-Clause +gopkg.in/ini.v1, https://github.com/go-ini/ini/blob/v1.51.0/LICENSE, Apache-2.0 +gopkg.in/yaml.v2, https://github.com/go-yaml/yaml/blob/v2.4.0/LICENSE, Apache-2.0 / MIT +gopkg.in/yaml.v3, https://github.com/go-yaml/yaml/blob/496545a6307b/LICENSE, MIT +k8s.io/api, https://github.com/kubernetes/api/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/apimachinery, https://github.com/kubernetes/apimachinery/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/client-go, https://github.com/kubernetes/client-go/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/klog/v2, https://github.com/kubernetes/klog/blob/v2.5.0/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/errors/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/spec/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/strfmt/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/validate/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/inotify/LICENSE, BSD-3-Clause +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/third_party/forked/golang/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/cloud.google.com/go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/cloud.google.com/go/storage/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/ocagent/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/prometheus/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/zipkin/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/alecthomas/template/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/alecthomas/units/COPYING, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/beorn7/perks/quantile/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/blang/semver/v4/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/blendle/zapdriver/LICENSE, ISC +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/census-instrumentation/opencensus-proto/gen-go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/cespare/xxhash/v2/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/davecgh/go-spew/spew/LICENSE, ISC +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/evanphx/json-patch/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/evanphx/json-patch/v5/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/go-logr/logr/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/gobuffalo/flect/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/gogo/protobuf/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/golang/glog/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/golang/groupcache/lru/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/golang/protobuf/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/go-cmp/cmp/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/go-github/v27/github/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/go-querystring/query/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/gofuzz/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/mako/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/google/uuid/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/googleapis/gax-go/v2/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/googleapis/gnostic/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/gorilla/websocket/LICENSE, BSD-2-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/grpc-ecosystem/grpc-gateway/LICENSE.txt, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/imdario/mergo/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/influxdata/tdigest/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/josharian/intern/license.md, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/json-iterator/go/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/kballard/go-shellquote/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/kelseyhightower/envconfig/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/mailru/easyjson/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/matttproud/golang_protobuf_extensions/pbutil/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/modern-go/concurrent/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/modern-go/reflect2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/openzipkin/zipkin-go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/pkg/errors/LICENSE, BSD-2-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/client_golang/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/client_model/go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/common/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/procfs/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/prometheus/statsd_exporter/pkg/mapper/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/sirupsen/logrus/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/spf13/pflag/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/github.com/tsenart/vegeta/v12/lib/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.opencensus.io/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/atomic/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/automaxprocs/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/multierr/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/go.uber.org/zap/LICENSE.txt, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/crypto/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/mod/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/net/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/oauth2/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/sync/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/sys/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/term/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/text/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/time/rate/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/tools/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/golang.org/x/xerrors/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gomodules.xyz/jsonpatch/v2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/api/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/api/internal/third_party/uritemplates/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/genproto/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/grpc/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/google.golang.org/protobuf/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/alecthomas/kingpin.v2/COPYING, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/inf.v0/LICENSE, BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/yaml.v2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/gopkg.in/yaml.v3/LICENSE, MIT +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/api/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/apiextensions-apiserver/pkg/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/apimachinery/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/client-go/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/code-generator/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/gengo/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/klog/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/klog/v2/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/util/proto/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/k8s.io/utils/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/knative.dev/pkg/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/knative.dev/pkg/third_party/mako/proto/quickstore_go_proto/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/sigs.k8s.io/structured-merge-diff/v4/value/LICENSE, Apache-2.0 +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/LICENSE, MIT / BSD-3-Clause +knative.dev/pkg, https://github.com/knative/pkg/blob/bb4aaf09c430/third_party/mako/LICENSE, Apache-2.0 +sigs.k8s.io/structured-merge-diff/v4, https://github.com/kubernetes-sigs/structured-merge-diff/blob/v4.0.2/LICENSE, Apache-2.0 +sigs.k8s.io/yaml, https://github.com/kubernetes-sigs/yaml/blob/v1.2.0/LICENSE, MIT / BSD-3-Clause diff --git a/backend/third_party_licenses/viewer.csv b/backend/third_party_licenses/viewer.csv new file mode 100644 index 0000000000..1c88c756ba --- /dev/null +++ b/backend/third_party_licenses/viewer.csv @@ -0,0 +1,60 @@ +# Generated by https://github.com/google/go-licenses/v2. DO NOT EDIT. +github.com/kubeflow/pipelines, https://github.com/kubeflow/pipelines/blob/master/LICENSE, Apache-2.0 +cloud.google.com/go, https://github.com/googleapis/google-cloud-go/blob/v0.55.0/LICENSE, Apache-2.0 +cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug/elf, https://github.com/googleapis/google-cloud-go/blob/v0.55.0/cmd/go-cloud-debug-agent/internal/debug/elf/elf.go#L1-L43, BSD-2-Clause +github.com/beorn7/perks, https://github.com/beorn7/perks/blob/v1.0.1/LICENSE, MIT +github.com/cespare/xxhash/v2, https://github.com/cespare/xxhash/blob/v2.1.1/LICENSE.txt, MIT +github.com/davecgh/go-spew, https://github.com/davecgh/go-spew/blob/v1.1.1/LICENSE, ISC +github.com/evanphx/json-patch, https://github.com/evanphx/json-patch/blob/v4.9.0/LICENSE, BSD-3-Clause +github.com/fsnotify/fsnotify, https://github.com/fsnotify/fsnotify/blob/v1.4.9/LICENSE, BSD-3-Clause +github.com/go-logr/logr, https://github.com/go-logr/logr/blob/v0.4.0/LICENSE, Apache-2.0 +github.com/gogo/protobuf, https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE, BSD-3-Clause / BSD-2-Clause +github.com/golang/glog, https://github.com/golang/glog/blob/23def4e6c14b/LICENSE, Apache-2.0 +github.com/golang/groupcache, https://github.com/golang/groupcache/blob/8c9f03a8e57e/LICENSE, Apache-2.0 +github.com/golang/protobuf, https://github.com/golang/protobuf/blob/v1.5.2/LICENSE, BSD-3-Clause +github.com/google/go-cmp, https://github.com/google/go-cmp/blob/v0.5.6/LICENSE, BSD-3-Clause +github.com/google/gofuzz, https://github.com/google/gofuzz/blob/v1.2.0/LICENSE, Apache-2.0 +github.com/google/uuid, https://github.com/google/uuid/blob/v1.2.0/LICENSE, BSD-3-Clause +github.com/googleapis/gnostic, https://github.com/googleapis/gnostic/blob/v0.5.3/LICENSE, Apache-2.0 +github.com/hashicorp/golang-lru, https://github.com/hashicorp/golang-lru/blob/v0.5.4/LICENSE, MPL-2.0 +github.com/imdario/mergo, https://github.com/imdario/mergo/blob/v0.3.10/LICENSE, BSD-3-Clause +github.com/json-iterator/go, https://github.com/json-iterator/go/blob/v1.1.11/LICENSE, MIT +github.com/matttproud/golang_protobuf_extensions, https://github.com/matttproud/golang_protobuf_extensions/blob/c182affec369/LICENSE, Apache-2.0 +github.com/modern-go/concurrent, https://github.com/modern-go/concurrent/blob/bacd9c7ef1dd/LICENSE, Apache-2.0 +github.com/modern-go/reflect2, https://github.com/modern-go/reflect2/blob/v1.0.1/LICENSE, Apache-2.0 +github.com/pkg/errors, https://github.com/pkg/errors/blob/v0.9.1/LICENSE, BSD-2-Clause +github.com/prometheus/client_golang, https://github.com/prometheus/client_golang/blob/v1.11.0/LICENSE, Apache-2.0 +github.com/prometheus/client_model, https://github.com/prometheus/client_model/blob/v0.2.0/LICENSE, Apache-2.0 +github.com/prometheus/common, https://github.com/prometheus/common/blob/v0.15.0/LICENSE, Apache-2.0 +github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg, https://github.com/prometheus/common/blob/v0.15.0/internal/bitbucket.org/ww/goautoneg/README.txt, BSD-3-Clause +github.com/prometheus/procfs, https://github.com/prometheus/procfs/blob/v0.6.0/LICENSE, Apache-2.0 +github.com/spf13/pflag, https://github.com/spf13/pflag/blob/v1.0.5/LICENSE, BSD-3-Clause +golang.org/x/crypto, https://github.com/golang/crypto/blob/c07d793c2f9a/LICENSE, BSD-3-Clause +golang.org/x/net, https://github.com/golang/net/blob/04defd469f4e/LICENSE, BSD-3-Clause +golang.org/x/oauth2, https://github.com/golang/oauth2/blob/a41e5a781914/LICENSE, BSD-3-Clause +golang.org/x/sys, https://github.com/golang/sys/blob/ebe580a85c40/LICENSE, BSD-3-Clause +golang.org/x/term, https://github.com/golang/term/blob/2321bbc49cbf/LICENSE, BSD-3-Clause +golang.org/x/text, https://github.com/golang/text/blob/v0.3.6/LICENSE, BSD-3-Clause +golang.org/x/time, https://github.com/golang/time/blob/f8bda1e9f3ba/LICENSE, BSD-3-Clause +gomodules.xyz/jsonpatch/v2, https://github.com/gomodules/jsonpatch/blob/v2.2.0/LICENSE, Apache-2.0 +google.golang.org/protobuf, https://github.com/protocolbuffers/protobuf-go/blob/v1.27.1/LICENSE, BSD-3-Clause +gopkg.in/inf.v0, https://github.com/go-inf/inf/blob/v0.9.1/LICENSE, BSD-3-Clause +gopkg.in/yaml.v2, https://github.com/go-yaml/yaml/blob/v2.4.0/LICENSE, Apache-2.0 / MIT +gopkg.in/yaml.v3, https://github.com/go-yaml/yaml/blob/496545a6307b/LICENSE, MIT +k8s.io/api, https://github.com/kubernetes/api/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/apiextensions-apiserver, https://github.com/kubernetes/apiextensions-apiserver/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/apimachinery, https://github.com/kubernetes/apimachinery/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/client-go, https://github.com/kubernetes/client-go/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/component-base, https://github.com/kubernetes/component-base/blob/v0.19.7/LICENSE, Apache-2.0 +k8s.io/klog/v2, https://github.com/kubernetes/klog/blob/v2.5.0/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/errors/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/spec/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/strfmt/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/8566a335510f/pkg/validation/validate/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/inotify/LICENSE, BSD-3-Clause +k8s.io/utils, https://github.com/kubernetes/utils/blob/fddb29f9d009/third_party/forked/golang/LICENSE, BSD-3-Clause +sigs.k8s.io/controller-runtime, https://github.com/kubernetes-sigs/controller-runtime/blob/v0.7.0/LICENSE, Apache-2.0 +sigs.k8s.io/structured-merge-diff/v4, https://github.com/kubernetes-sigs/structured-merge-diff/blob/v4.0.2/LICENSE, Apache-2.0 +sigs.k8s.io/yaml, https://github.com/kubernetes-sigs/yaml/blob/v1.2.0/LICENSE, MIT / BSD-3-Clause diff --git a/backend/update_requirements.sh b/backend/update_requirements.sh index a0b9cf7b55..1feaa2bb86 100755 --- a/backend/update_requirements.sh +++ b/backend/update_requirements.sh @@ -1,11 +1,24 @@ #!/bin/bash +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # Usage: ./update_requirements.sh <requirements.in >requirements.txt set -euo pipefail IMAGE=${1:-"python:3.7"} -docker run --interactive --rm "$IMAGE" sh -c ' +docker run -i --rm --entrypoint "" "$IMAGE" sh -c ' python3 -m pip install pip setuptools --upgrade --quiet python3 -m pip install pip-tools==5.4.0 --quiet pip-compile --verbose --output-file - - -' +' <requirements.in >requirements.txt diff --git a/docs/Makefile b/docs/Makefile index 18c5668702..b8063538d7 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/docs/conf.py b/docs/conf.py index 3ccece6dda..595f226eba 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -55,8 +55,8 @@ # -- Project information ----------------------------------------------------- project = 'Kubeflow Pipelines' -copyright = '2020, Google' -author = 'Google' +copyright = '2020, The Kubeflow Authors' +author = 'The Kubeflow Authors' # The short X.Y version version = '' diff --git a/docs/make.bat b/docs/make.bat index 27aa1c2afe..f564cf77dc 100644 --- a/docs/make.bat +++ b/docs/make.bat @@ -1,4 +1,4 @@ -REM Copyright 2019 Google LLC +REM Copyright 2019 The Kubeflow Authors REM REM Licensed under the Apache License, Version 2.0 (the "License"); REM you may not use this file except in compliance with the License. diff --git a/frontend/.eslintrc.yaml b/frontend/.eslintrc.yaml index 4c2fdf628f..b4c4ec61c6 100644 --- a/frontend/.eslintrc.yaml +++ b/frontend/.eslintrc.yaml @@ -5,5 +5,6 @@ ignorePatterns: - src/apis # these are generated api clients - '*.test.ts' - '*.test.tsx' + - src/generated # proto generated definition rules: react/jsx-no-target-blank: ['error', { "allowReferrer": true }] diff --git a/frontend/.gitignore b/frontend/.gitignore index 93aed67993..60f9e6dcfc 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -3,6 +3,10 @@ # dependencies /node_modules +# dependency licenses +dependency-licenses.txt +server/dependency-licenses.txt + # dev swagger-codegen-cli.jar @@ -28,3 +32,9 @@ coverage # vscode .vscode + +# Files to built locally. +src/build + +# storybook build result. +storybook-static diff --git a/frontend/.prettierignore b/frontend/.prettierignore index c83f90a2b0..9caa934c38 100644 --- a/frontend/.prettierignore +++ b/frontend/.prettierignore @@ -1 +1,2 @@ src/generated +src/third_party diff --git a/frontend/.storybook/main.js b/frontend/.storybook/main.js new file mode 100644 index 0000000000..d4a54096db --- /dev/null +++ b/frontend/.storybook/main.js @@ -0,0 +1,30 @@ +module.exports = { + // Read https://github.com/storybookjs/storybook/issues/9514 + // for the storybook's maintainer's recommendation for folder location. + "stories": [ + "../src/**/*.stories.mdx", + "../src/**/*.stories.@(js|jsx|ts|tsx)" + ], + "addons": [ + "@storybook/addon-links", + "@storybook/addon-essentials", + "@storybook/preset-create-react-app" + ], + // https://github.com/storybookjs/presets/issues/97 + webpackFinal: async (config) => { + const getFileLoader = (config) => { + const { oneOf = [] } = config.module.rules.find(({ oneOf }) => oneOf); + return oneOf.find(({loader}) => /file-loader/.test(loader)); + }; + + const mutateLoaderToMakePathAbsolute = (loader) => { + if(loader && loader.options && loader.options.name) { + loader.options.name = '/' + loader.options.name; + } + }; + + const fileLoader = getFileLoader(config); + mutateLoaderToMakePathAbsolute(fileLoader); + return config; + }, +} diff --git a/frontend/.storybook/preview.js b/frontend/.storybook/preview.js new file mode 100644 index 0000000000..d712d2c696 --- /dev/null +++ b/frontend/.storybook/preview.js @@ -0,0 +1,11 @@ + +import 'src/build/tailwind.output.css'; +export const parameters = { + actions: { argTypesRegex: "^on[A-Z].*" }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/, + }, + }, +} diff --git a/frontend/README.md b/frontend/README.md index 9908f9ae54..9f19af3e63 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -23,7 +23,7 @@ get package updates.) Run `npm install --save <package>` (or `npm i -S <package>` for short) to install runtime dependencies and save them to package.json. Run `npm install --save-dev <package>` (or `npm i -D <package>` for short) to install dev dependencies and save them to package.json. -To upgrade @kubeflow/frontend, run `npm i -S kubeflow/frontend#<commit-hash>`. Get the commit hash from https://github.com/kubeflow/frontend/commits/master. +After adding a dependency, validate licenses are correctly added for all dependencies first by running `npm run gen-licenses`. ### Daily workflow @@ -140,3 +140,94 @@ swagger-codegen-cli@2.4.7, which you can get [here](https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.7/). Make sure the jar file is somewhere on your path with the name swagger-codegen-cli.jar, then run `npm run apis`. + +After code generation, you should run `npm run format` to format the output and avoid creating a large PR. + +## MLMD components + +* `src/mlmd` - components for visualizing data from an `ml-metadata` store. For more information see the + [google/ml-metadata](https://github.com/google/ml-metadata) repository. + +This module previously lived in [kubeflow/frontend](https://github.com/kubeflow/frontend) repository. It contains tsx files for visualizing MLMD components. + +MLMD protos lives in `pipelines/third_party/ml-metadata/ml_metadata/`, and the generated JS files live in `pipelines/frontend/src/third_party/mlmd`. + +### Building generated metadata Protocol Buffers + +* `build:protos` - for compiling Protocol Buffer definitions + + +This project contains a mix of natively defined classes and classes generated by the Protocol +Buffer Compiler from definitions in the [pipelines/third_party/ml-metadata/ml_metadata/](third_party/ml-metadata/ml_metadata/) directory. Copies of the generated classes are +included in the [pipelines/frontend/src/third_party/mlmd](frontend/src/third_party/mlmd) directory to allow the build process to succeed without a dependency on +the Protocol Buffer compiler, `protoc`, being in the system PATH. + +If a file in [pipelines/third_party/ml-metadata/ml_metadata/proto](third_party/ml-metadata/ml_metadata/proto) is modified or you need to manually re-generate the protos, you'll need to: + +* Add `protoc` ([download](https://github.com/protocolbuffers/protobuf/releases)) to your system + PATH +* Add `protoc-gen-grpc-web` ([download](https://github.com/grpc/grpc-web/releases)) to your system + PATH +* Replace `metadata_store.proto` and `metadata_store_service.proto` proto files with target mlmd version by running + + ```bash + npm run build:replace -- {mlmd_versions} + // example: + // npm run build:replace -- 1.0.0 + ``` + +* Generate new protos by running + + ```bash + npm run build:protos + ``` + +The script run by `npm run build:replace` can be found at `scripts/replace_protos.js`. +The script run by `npm run build:protos` can be found at `scripts/gen_grpc_web_protos.js`. + +The current TypeScript proto library was generated with `protoc-gen-grpc-web` version 1.2.1 with +`protoc` version 3.17.3. + +The Protocol Buffers in [pipelines/third_party/ml-metadata/ml_metadata/proto](third_party/ml-metadata/ml_metadata/proto) are taken from the target version(v1.0.0 by default) of the `ml_metadata` proto +package from +[google/ml-metadata](https://github.com/google/ml-metadata/tree/master/ml_metadata/proto). + + +## Pipeline Spec (IR) API + +For KFP v2, we use pipeline spec or IR(Intermediate Representation) to represent a Pipeline defintion. It is saved as json payload when transmitted. You can find the API in [api/v2alpha1/pipeline_spec.proto](api/v2alpha1/pipeline_spec.proto). To take the latest of this file and compile it to Typescript classes, follow the below step: + +``` +npm run build:pipeline-spec +``` + +See explaination it does below: + + +### Convert buffer to runtime object using protoc + + +Prerequisite: Add `protoc` ([download](https://github.com/protocolbuffers/protobuf/releases)) to your system PATH + +Compile pipeline_spec.proto to Typed classes in TypeScript, +so it can convert a payload stream to a PipelineSpec object during runtime. + +You can check out the result like `pipeline_spec_pb.js`, `pipeline_spec_pb.d.ts` in [frontend/src/generated/pipeline_spec](frontend/src/generated/pipeline_spec). + + +### Encode plain object to buffer using protobuf.js + +protoc doesn't provide a way to convert plain object to +payload stream, therefore we need a helper tool `protobuf.js` to validate and encode plain object. + +You can check out the result like `pbjs_ml_pipelines.js`, `pbjs_ml_pipelines.d.ts` in [frontend/src/generated/pipeline_spec](frontend/src/generated/pipeline_spec). + +## Large features development + +To accommodate KFP v2 development, we create a `frontend feature flag` capability which hides features under development behind a flag. Only when developer explicitly enables these flags, they can see those features. To control the visiblity of these features, check out a webpage similar to pattern http://localhost:3000/#/frontend_features. + +To manage feature flags default values, visit [frontend/src/feature.ts](frontend/src/feature.ts) for `const features`. To apply the default feature flags locally in your browser, run `localStorage.setItem('flags', "")` in browser console. + +## Storybook + +For component driven UI development, KFP UI integrates with Storybook to develop v2 features. To run Storybook locally, run `npm run storybook` and visit `localhost:6006` in browser. diff --git a/frontend/analyze_bundle.js b/frontend/analyze_bundle.js index 30191da452..c4e6385b1f 100644 --- a/frontend/analyze_bundle.js +++ b/frontend/analyze_bundle.js @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/craco.config.js b/frontend/craco.config.js new file mode 100644 index 0000000000..f9e6e33de8 --- /dev/null +++ b/frontend/craco.config.js @@ -0,0 +1,11 @@ +// craco.config.js +module.exports = { + style: { + postcss: { + plugins: [ + require('tailwindcss'), + require('autoprefixer'), + ], + }, + }, + } diff --git a/frontend/gen_licenses.js b/frontend/gen_licenses.js index 78032248b0..0af264f5dd 100644 --- a/frontend/gen_licenses.js +++ b/frontend/gen_licenses.js @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -53,6 +53,8 @@ const whitelist = new Map([ ['jest-snapshot', 'third_party/jest/LICENSE'], ['jest-util', 'third_party/jest/LICENSE'], ['mamacro', 'third_party/mamacro/LICENSE'], + ['watchpack-chokidar2', 'third_party/watchpack/LICENSE'], + ['@tootallnate/once', 'third_party/once/LICENSE'], ]); licenseChecker.init({ diff --git a/frontend/mock-backend/data/v2/pipeline/README.md b/frontend/mock-backend/data/v2/pipeline/README.md new file mode 100644 index 0000000000..d57f3821bf --- /dev/null +++ b/frontend/mock-backend/data/v2/pipeline/README.md @@ -0,0 +1,4 @@ +## V2 mock pipelines specification + +This folder is for KFP UI to mock backend response, the files here are copied from +[sdk/python/kfp/v2/compiler_cli_tests/test_data](sdk/python/kfp/v2/compiler_cli_tests/test_data). This folder doesn't need to be in sync with the code source in sdk/python/kfp/v2/compiler_cli_tests/test_data folder, but you can do it manually if there is a need to facilitate frontend development by using newer version of compiled pipeline definition. diff --git a/frontend/mock-backend/data/v2/pipeline/mock_lightweight_python_functions_v2_pipeline.json b/frontend/mock-backend/data/v2/pipeline/mock_lightweight_python_functions_v2_pipeline.json new file mode 100644 index 0000000000..6de0e17d8c --- /dev/null +++ b/frontend/mock-backend/data/v2/pipeline/mock_lightweight_python_functions_v2_pipeline.json @@ -0,0 +1,257 @@ +{ + "pipelineSpec": { + "components": { + "comp-preprocess": { + "executorLabel": "exec-preprocess", + "inputDefinitions": { + "parameters": { + "message": { + "type": "STRING" + } + } + }, + "outputDefinitions": { + "artifacts": { + "output_dataset_one": { + "artifactType": { + "schemaTitle": "system.Dataset" + } + }, + "output_dataset_two": { + "artifactType": { + "schemaTitle": "system.Dataset" + } + } + }, + "parameters": { + "output_bool_parameter": { + "type": "STRING" + }, + "output_dict_parameter": { + "type": "STRING" + }, + "output_list_parameter": { + "type": "STRING" + }, + "output_parameter": { + "type": "STRING" + } + } + } + }, + "comp-train": { + "executorLabel": "exec-train", + "inputDefinitions": { + "artifacts": { + "dataset_one": { + "artifactType": { + "schemaTitle": "system.Dataset" + } + }, + "dataset_two": { + "artifactType": { + "schemaTitle": "system.Dataset" + } + } + }, + "parameters": { + "input_bool": { + "type": "STRING" + }, + "input_dict": { + "type": "STRING" + }, + "input_list": { + "type": "STRING" + }, + "message": { + "type": "STRING" + }, + "num_steps": { + "type": "INT" + } + } + }, + "outputDefinitions": { + "artifacts": { + "model": { + "artifactType": { + "schemaTitle": "system.Model" + } + } + } + } + } + }, + "deploymentSpec": { + "executors": { + "exec-preprocess": { + "container": { + "args": [ + "--executor_input", + "{{$}}", + "--function_to_execute", + "preprocess", + "--message-output-path", + "{{$.inputs.parameters['message']}}", + "--output-dataset-one-output-path", + "{{$.outputs.artifacts['output_dataset_one'].path}}", + "--output-dataset-two-output-path", + "{{$.outputs.artifacts['output_dataset_two'].path}}", + "--output-parameter-output-path", + "{{$.outputs.parameters['output_parameter'].output_file}}", + "--output-bool-parameter-output-path", + "{{$.outputs.parameters['output_bool_parameter'].output_file}}", + "--output-dict-parameter-output-path", + "{{$.outputs.parameters['output_dict_parameter'].output_file}}", + "--output-list-parameter-output-path", + "{{$.outputs.parameters['output_list_parameter'].output_file}}" + ], + "command": [ + "sh", + "-ec", + "program_path=$(mktemp)\nprintf \"%s\" \"$0\" > \"$program_path\"\npython3 -u \"$program_path\" \"$@\"\n", + "\nimport json\nimport inspect\nfrom typing import *\n\n# Copyright 2021 The Kubeflow Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Classes for input/output types in KFP SDK.\n\nThese are only compatible with v2 Pipelines.\n\"\"\"\n\nimport os\nfrom typing import Dict, Generic, List, Optional, Type, TypeVar, Union\n\n\n_GCS_LOCAL_MOUNT_PREFIX = '/gcs/'\n_MINIO_LOCAL_MOUNT_PREFIX = '/minio/'\n_S3_LOCAL_MOUNT_PREFIX = '/s3/'\n\n\nclass Artifact(object):\n \"\"\"Generic Artifact class.\n\n This class is meant to represent the metadata around an input or output\n machine-learning Artifact. Artifacts have URIs, which can either be a location\n on disk (or Cloud storage) or some other resource identifier such as\n an API resource name.\n\n Artifacts carry a `metadata` field, which is a dictionary for storing\n metadata related to this artifact.\n \"\"\"\n TYPE_NAME = 'system.Artifact'\n\n def __init__(self,\n name: Optional[str] = None,\n uri: Optional[str] = None,\n metadata: Optional[Dict] = None):\n \"\"\"Initializes the Artifact with the given name, URI and metadata.\"\"\"\n self.uri = uri or ''\n self.name = name or ''\n self.metadata = metadata or {}\n\n @property\n def path(self):\n return self._get_path()\n\n @path.setter\n def path(self, path):\n self._set_path(path)\n\n def _get_path(self) -> Optional[str]:\n if self.uri.startswith('gs://'):\n return _GCS_LOCAL_MOUNT_PREFIX + self.uri[len('gs://'):]\n elif self.uri.startswith('minio://'):\n return _MINIO_LOCAL_MOUNT_PREFIX + self.uri[len('minio://'):]\n elif self.uri.startswith('s3://'):\n return _S3_LOCAL_MOUNT_PREFIX + self.uri[len('s3://'):]\n return None\n\n def _set_path(self, path):\n if path.startswith(_GCS_LOCAL_MOUNT_PREFIX):\n path = 'gs://' + path[len(_GCS_LOCAL_MOUNT_PREFIX):]\n elif path.startswith(_MINIO_LOCAL_MOUNT_PREFIX):\n path = 'minio://' + path[len(_MINIO_LOCAL_MOUNT_PREFIX):]\n elif path.startswith(_S3_LOCAL_MOUNT_PREFIX):\n path = 's3://' + path[len(_S3_LOCAL_MOUNT_PREFIX):]\n self.uri = path\n\n\nclass Model(Artifact):\n \"\"\"An artifact representing an ML Model.\"\"\"\n TYPE_NAME = 'system.Model'\n\n def __init__(self,\n name: Optional[str] = None,\n uri: Optional[str] = None,\n metadata: Optional[Dict] = None):\n super().__init__(uri=uri, name=name, metadata=metadata)\n\n @property\n def framework(self) -> str:\n return self._get_framework()\n\n def _get_framework(self) -> str:\n return self.metadata.get('framework', '')\n\n @framework.setter\n def framework(self, framework: str):\n self._set_framework(framework)\n\n def _set_framework(self, framework: str):\n self.metadata['framework'] = framework\n\n\nclass Dataset(Artifact):\n \"\"\"An artifact representing an ML Dataset.\"\"\"\n TYPE_NAME = 'system.Dataset'\n\n def __init__(self,\n name: Optional[str] = None,\n uri: Optional[str] = None,\n metadata: Optional[Dict] = None):\n super().__init__(uri=uri, name=name, metadata=metadata)\n\n\nclass Metrics(Artifact):\n \"\"\"Represent a simple base Artifact type to store key-value scalar metrics.\"\"\"\n TYPE_NAME = 'system.Metrics'\n\n def __init__(self,\n name: Optional[str] = None,\n uri: Optional[str] = None,\n metadata: Optional[Dict] = None):\n super().__init__(uri=uri, name=name, metadata=metadata)\n\n def log_metric(self, metric: str, value: float):\n \"\"\"Sets a custom scalar metric.\n\n Args:\n metric: Metric key\n value: Value of the metric.\n \"\"\"\n self.metadata[metric] = value\n\n\nclass ClassificationMetrics(Artifact):\n \"\"\"Represents Artifact class to store Classification Metrics.\"\"\"\n TYPE_NAME = 'system.ClassificationMetrics'\n\n def __init__(self,\n name: Optional[str] = None,\n uri: Optional[str] = None,\n metadata: Optional[Dict] = None):\n super().__init__(uri=uri, name=name, metadata=metadata)\n\n def log_roc_data_point(self, fpr: float, tpr: float, threshold: float):\n \"\"\"Logs a single data point in the ROC Curve.\n\n Args:\n fpr: False positive rate value of the data point.\n tpr: True positive rate value of the data point.\n threshold: Threshold value for the data point.\n \"\"\"\n\n roc_reading = {\n 'confidenceThreshold': threshold,\n 'recall': tpr,\n 'falsePositiveRate': fpr\n }\n if 'confidenceMetrics' not in self.metadata.keys():\n self.metadata['confidenceMetrics'] = []\n\n self.metadata['confidenceMetrics'].append(roc_reading)\n\n def log_roc_curve(self, fpr: List[float], tpr: List[float],\n threshold: List[float]):\n \"\"\"Logs an ROC curve.\n\n The list length of fpr, tpr and threshold must be the same.\n\n Args:\n fpr: List of false positive rate values.\n tpr: List of true positive rate values.\n threshold: List of threshold values.\n \"\"\"\n if len(fpr) != len(tpr) or len(fpr) != len(threshold) or len(tpr) != len(\n threshold):\n raise ValueError('Length of fpr, tpr and threshold must be the same. '\n 'Got lengths {}, {} and {} respectively.'.format(\n len(fpr), len(tpr), len(threshold)))\n\n for i in range(len(fpr)):\n self.log_roc_data_point(fpr=fpr[i], tpr=tpr[i], threshold=threshold[i])\n\n def set_confusion_matrix_categories(self, categories: List[str]):\n \"\"\"Stores confusion matrix categories.\n\n Args:\n categories: List of strings specifying the categories.\n \"\"\"\n\n self._categories = []\n annotation_specs = []\n for category in categories:\n annotation_spec = {'displayName': category}\n self._categories.append(category)\n annotation_specs.append(annotation_spec)\n\n self._matrix = []\n for row in range(len(self._categories)):\n self._matrix.append({'row': [0] * len(self._categories)})\n\n self._confusion_matrix = {}\n self._confusion_matrix['annotationSpecs'] = annotation_specs\n self._confusion_matrix['rows'] = self._matrix\n self.metadata['confusionMatrix'] = self._confusion_matrix\n\n def log_confusion_matrix_row(self, row_category: str, row: List[float]):\n \"\"\"Logs a confusion matrix row.\n\n Args:\n row_category: Category to which the row belongs.\n row: List of integers specifying the values for the row.\n\n Raises:\n ValueError: If row_category is not in the list of categories\n set in set_categories call.\n \"\"\"\n if row_category not in self._categories:\n raise ValueError('Invalid category: {} passed. Expected one of: {}'.\\\n format(row_category, self._categories))\n\n if len(row) != len(self._categories):\n raise ValueError('Invalid row. Expected size: {} got: {}'.\\\n format(len(self._categories), len(row)))\n\n self._matrix[self._categories.index(row_category)] = {'row': row}\n self.metadata['confusionMatrix'] = self._confusion_matrix\n\n def log_confusion_matrix_cell(self, row_category: str, col_category: str,\n value: int):\n \"\"\"Logs a cell in the confusion matrix.\n\n Args:\n row_category: String representing the name of the row category.\n col_category: String representing the name of the column category.\n value: Int value of the cell.\n\n Raises:\n ValueError: If row_category or col_category is not in the list of\n categories set in set_categories.\n \"\"\"\n if row_category not in self._categories:\n raise ValueError('Invalid category: {} passed. Expected one of: {}'.\\\n format(row_category, self._categories))\n\n if col_category not in self._categories:\n raise ValueError('Invalid category: {} passed. Expected one of: {}'.\\\n format(row_category, self._categories))\n\n self._matrix[self._categories.index(row_category)]['row'][\n self._categories.index(col_category)] = value\n self.metadata['confusionMatrix'] = self._confusion_matrix\n\n def log_confusion_matrix(self, categories: List[str],\n matrix: List[List[int]]):\n \"\"\"Logs a confusion matrix.\n\n Args:\n categories: List of the category names.\n matrix: Complete confusion matrix.\n\n Raises:\n ValueError: Length of categories does not match number of rows or columns.\n \"\"\"\n self.set_confusion_matrix_categories(categories)\n\n if len(matrix) != len(categories):\n raise ValueError('Invalid matrix: {} passed for categories: {}'.\\\n format(matrix, categories))\n\n for index in range(len(categories)):\n if len(matrix[index]) != len(categories):\n raise ValueError('Invalid matrix: {} passed for categories: {}'.\\\n format(matrix, categories))\n\n self.log_confusion_matrix_row(categories[index], matrix[index])\n\n self.metadata['confusionMatrix'] = self._confusion_matrix\n\n\nclass SlicedClassificationMetrics(Artifact):\n \"\"\"Metrics class representing Sliced Classification Metrics.\n\n Similar to ClassificationMetrics clients using this class are expected to use\n log methods of the class to log metrics with the difference being each log\n method takes a slice to associate the ClassificationMetrics.\n\n \"\"\"\n\n TYPE_NAME = 'system.SlicedClassificationMetrics'\n\n def __init__(self,\n name: Optional[str] = None,\n uri: Optional[str] = None,\n metadata: Optional[Dict] = None):\n super().__init__(uri=uri, name=name, metadata=metadata)\n\n def _upsert_classification_metrics_for_slice(self, slice: str):\n \"\"\"Upserts the classification metrics instance for a slice.\"\"\"\n if slice not in self._sliced_metrics:\n self._sliced_metrics[slice] = ClassificationMetrics()\n\n def _update_metadata(self, slice: str):\n \"\"\"Updates metadata to adhere to the metrics schema.\"\"\"\n self.metadata = {}\n self.metadata['evaluationSlices'] = []\n for slice in self._sliced_metrics.keys():\n slice_metrics = {\n 'slice': slice,\n 'sliceClassificationMetrics': self._sliced_metrics[slice].metadata\n }\n self.metadata['evaluationSlices'].append(slice_metrics)\n\n def log_roc_reading(self, slice: str, threshold: float, tpr: float,\n fpr: float):\n \"\"\"Logs a single data point in the ROC Curve of a slice.\n\n Args:\n slice: String representing slice label.\n threshold: Thresold value for the data point.\n tpr: True positive rate value of the data point.\n fpr: False positive rate value of the data point.\n \"\"\"\n\n self._upsert_classification_metrics_for_slice(slice)\n self._sliced_metrics[slice].log_roc_reading(threshold, tpr, fpr)\n self._update_metadata(slice)\n\n def load_roc_readings(self, slice: str, readings: List[List[float]]):\n \"\"\"Supports bulk loading ROC Curve readings for a slice.\n\n Args:\n slice: String representing slice label.\n readings: A 2-D list providing ROC Curve data points.\n The expected order of the data points is: threshold,\n true_positive_rate, false_positive_rate.\n \"\"\"\n self._upsert_classification_metrics_for_slice(slice)\n self._sliced_metrics[slice].load_roc_readings(readings)\n self._update_metadata(slice)\n\n def set_confusion_matrix_categories(self, slice: str, categories: List[str]):\n \"\"\"Stores confusion matrix categories for a slice..\n\n Categories are stored in the internal metrics_utils.ConfusionMatrix\n instance of the slice.\n\n Args:\n slice: String representing slice label.\n categories: List of strings specifying the categories.\n \"\"\"\n self._upsert_classification_metrics_for_slice(slice)\n self._sliced_metrics[slice].set_confusion_matrix_categories(categories)\n self._update_metadata(slice)\n\n def log_confusion_matrix_row(self, slice: str, row_category: str,\n row: List[int]):\n \"\"\"Logs a confusion matrix row for a slice.\n\n Row is updated on the internal metrics_utils.ConfusionMatrix\n instance of the slice.\n\n Args:\n slice: String representing slice label.\n row_category: Category to which the row belongs.\n row: List of integers specifying the values for the row.\n \"\"\"\n self._upsert_classification_metrics_for_slice(slice)\n self._sliced_metrics[slice].log_confusion_matrix_row(row_category, row)\n self._update_metadata(slice)\n\n def log_confusion_matrix_cell(self, slice: str, row_category: str,\n col_category: str, value: int):\n \"\"\"Logs a confusion matrix cell for a slice..\n\n Cell is updated on the internal metrics_utils.ConfusionMatrix\n instance of the slice.\n\n Args:\n slice: String representing slice label.\n row_category: String representing the name of the row category.\n col_category: String representing the name of the column category.\n value: Int value of the cell.\n \"\"\"\n self._upsert_classification_metrics_for_slice(slice)\n self._sliced_metrics[slice].log_confusion_matrix_cell(\n row_category, col_category, value)\n self._update_metadata(slice)\n\n def load_confusion_matrix(self, slice: str, categories: List[str],\n matrix: List[List[int]]):\n \"\"\"Supports bulk loading the whole confusion matrix for a slice.\n\n Args:\n slice: String representing slice label.\n categories: List of the category names.\n matrix: Complete confusion matrix.\n \"\"\"\n self._upsert_classification_metrics_for_slice(slice)\n self._sliced_metrics[slice].log_confusion_matrix_cell(categories, matrix)\n self._update_metadata(slice)\n\n\nT = TypeVar('T')\n\n\nclass InputAnnotation():\n \"\"\"Marker type for input artifacts.\"\"\"\n pass\n\n\n\nclass OutputAnnotation():\n \"\"\"Marker type for output artifacts.\"\"\"\n pass\n\n\n# TODO: Use typing.Annotated instead of this hack.\n# With typing.Annotated (Python 3.9+ or typing_extensions package), the\n# following would look like:\n# Input = typing.Annotated[T, InputAnnotation]\n# Output = typing.Annotated[T, OutputAnnotation]\n\n\n# Input represents an Input artifact of type T.\nInput = Union[T, InputAnnotation]\n\n# Output represents an Output artifact of type T.\nOutput = Union[T, OutputAnnotation]\n\n\ndef is_artifact_annotation(typ) -> bool:\n if hasattr(typ, '_subs_tree'): # Python 3.6\n subs_tree = typ._subs_tree()\n return len(subs_tree) == 3 and subs_tree[0] == Union and subs_tree[2] in [InputAnnotation, OutputAnnotation]\n\n if not hasattr(typ, '__origin__'):\n return False\n\n\n if typ.__origin__ != Union and type(typ.__origin__) != type(Union):\n return False\n\n\n if not hasattr(typ, '__args__') or len(typ.__args__) != 2:\n return False\n\n if typ.__args__[1] not in [InputAnnotation, OutputAnnotation]:\n return False\n\n return True\n\ndef is_input_artifact(typ) -> bool:\n \"\"\"Returns True if typ is of type Input[T].\"\"\"\n if not is_artifact_annotation(typ):\n return False\n\n if hasattr(typ, '_subs_tree'): # Python 3.6\n subs_tree = typ._subs_tree()\n return len(subs_tree) == 3 and subs_tree[2] == InputAnnotation\n\n return typ.__args__[1] == InputAnnotation\n\ndef is_output_artifact(typ) -> bool:\n \"\"\"Returns True if typ is of type Output[T].\"\"\"\n if not is_artifact_annotation(typ):\n return False\n\n if hasattr(typ, '_subs_tree'): # Python 3.6\n subs_tree = typ._subs_tree()\n return len(subs_tree) == 3 and subs_tree[2] == OutputAnnotation\n\n return typ.__args__[1] == OutputAnnotation\n\ndef get_io_artifact_class(typ):\n if not is_artifact_annotation(typ):\n return None\n if typ == Input or typ == Output:\n return None\n\n if hasattr(typ, '_subs_tree'): # Python 3.6\n subs_tree = typ._subs_tree()\n if len(subs_tree) != 3:\n return None\n return subs_tree[1]\n\n return typ.__args__[0]\n\ndef get_io_artifact_annotation(typ):\n if not is_artifact_annotation(typ):\n return None\n\n if hasattr(typ, '_subs_tree'): # Python 3.6\n subs_tree = typ._subs_tree()\n if len(subs_tree) != 3:\n return None\n return subs_tree[2]\n\n return typ.__args__[1]\n\n\n\n_SCHEMA_TITLE_TO_TYPE: Dict[str, Artifact] = {\n x.TYPE_NAME: x\n for x in [Artifact, Model, Dataset, Metrics, ClassificationMetrics]\n}\n\n\ndef create_runtime_artifact(runtime_artifact: Dict) -> Artifact:\n \"\"\"Creates an Artifact instance from the specified RuntimeArtifact.\n\n Args:\n runtime_artifact: Dictionary representing JSON-encoded RuntimeArtifact.\n \"\"\"\n schema_title = runtime_artifact.get('type', {}).get('schemaTitle', '')\n\n artifact_type = _SCHEMA_TITLE_TO_TYPE.get(schema_title)\n if not artifact_type:\n artifact_type = Artifact\n return artifact_type(\n uri=runtime_artifact.get('uri', ''),\n name=runtime_artifact.get('name', ''),\n metadata=runtime_artifact.get('metadata', {}),\n )\n\nclass InputPath:\n '''When creating component from function, :class:`.InputPath` should be used as function parameter annotation to tell the system to pass the *data file path* to the function instead of passing the actual data.'''\n def __init__(self, type=None):\n self.type = type\n\nclass OutputPath:\n '''When creating component from function, :class:`.OutputPath` should be used as function parameter annotation to tell the system that the function wants to output data by writing it into a file with the given path instead of returning the data from the function.'''\n def __init__(self, type=None):\n self.type = type\n\nclass Executor():\n \"\"\"Executor executes v2-based Python function components.\"\"\"\n\n def __init__(self, executor_input: Dict, function_to_execute: Callable):\n self._func = function_to_execute\n self._input = executor_input\n self._input_artifacts: Dict[str, Artifact] = {}\n self._output_artifacts: Dict[str, Artifact] = {}\n\n for name, artifacts in self._input.get('inputs', {}).get('artifacts',\n {}).items():\n artifacts_list = artifacts.get('artifacts')\n if artifacts_list:\n self._input_artifacts[name] = self._make_input_artifact(\n artifacts_list[0])\n\n for name, artifacts in self._input.get('outputs', {}).get('artifacts',\n {}).items():\n artifacts_list = artifacts.get('artifacts')\n if artifacts_list:\n self._output_artifacts[name] = self._make_output_artifact(\n artifacts_list[0])\n\n self._return_annotation = inspect.signature(self._func).return_annotation\n self._executor_output = {}\n\n @classmethod\n def _make_input_artifact(cls, runtime_artifact: Dict):\n return create_runtime_artifact(runtime_artifact)\n\n @classmethod\n def _make_output_artifact(cls, runtime_artifact: Dict):\n import os\n artifact = create_runtime_artifact(runtime_artifact)\n os.makedirs(os.path.dirname(artifact.path), exist_ok=True)\n return artifact\n\n def _get_input_artifact(self, name: str):\n return self._input_artifacts.get(name)\n\n def _get_output_artifact(self, name: str):\n return self._output_artifacts.get(name)\n\n def _get_input_parameter_value(self, parameter_name: str, parameter_type: Any):\n parameter = self._input.get('inputs', {}).get('parameters',\n {}).get(parameter_name, None)\n if parameter is None:\n return None\n\n if parameter.get('stringValue'):\n if parameter_type == str:\n return parameter['stringValue']\n elif parameter_type == bool:\n # Use `.lower()` so it can also handle 'True' and 'False' (resulted from\n # `str(True)` and `str(False)`, respectively.\n return json.loads(parameter['stringValue'].lower())\n else:\n return json.loads(parameter['stringValue'])\n elif parameter.get('intValue'):\n return int(parameter['intValue'])\n elif parameter.get('doubleValue'):\n return float(parameter['doubleValue'])\n\n def _get_output_parameter_path(self, parameter_name: str):\n parameter_name = self._maybe_strip_path_suffix(parameter_name)\n parameter = self._input.get('outputs',\n {}).get('parameters',\n {}).get(parameter_name, None)\n if parameter is None:\n return None\n\n import os\n path = parameter.get('outputFile', None)\n if path:\n os.makedirs(os.path.dirname(path), exist_ok=True)\n return path\n\n def _get_output_artifact_path(self, artifact_name: str):\n artifact_name = self._maybe_strip_path_suffix(artifact_name)\n output_artifact = self._output_artifacts.get(artifact_name)\n if not output_artifact:\n raise ValueError(\n 'Failed to get output artifact path for artifact name {}'.format(\n artifact_name))\n return output_artifact.path\n\n def _get_input_artifact_path(self, artifact_name: str):\n artifact_name = self._maybe_strip_path_suffix(artifact_name)\n input_artifact = self._input_artifacts.get(artifact_name)\n if not input_artifact:\n raise ValueError(\n 'Failed to get input artifact path for artifact name {}'.format(\n artifact_name))\n return input_artifact.path\n\n def _write_output_parameter_value(self, name: str,\n value: Union[str, int, float, bool, dict,\n list, Dict, List]):\n if type(value) == str:\n output = {'stringValue': value}\n elif type(value) == int:\n output = {'intValue': value}\n elif type(value) == float:\n output = {'doubleValue': value}\n else:\n # For bool, list, dict, List, Dict, json serialize the value.\n output = {'stringValue': json.dumps(value)}\n\n if not self._executor_output.get('parameters'):\n self._executor_output['parameters'] = {}\n\n self._executor_output['parameters'][name] = output\n\n def _write_output_artifact_payload(self, name: str, value: Any):\n path = self._get_output_artifact_path(name)\n with open(path, 'w') as f:\n f.write(str(value))\n\n # TODO: extract to a util\n @classmethod\n def _get_short_type_name(cls, type_name: str) -> str:\n \"\"\"Extracts the short form type name.\n\n This method is used for looking up serializer for a given type.\n\n For example:\n typing.List -> List\n typing.List[int] -> List\n typing.Dict[str, str] -> Dict\n List -> List\n str -> str\n\n Args:\n type_name: The original type name.\n\n Returns:\n The short form type name or the original name if pattern doesn't match.\n \"\"\"\n import re\n match = re.match('(typing\\.)?(?P<type>\\w+)(?:\\[.+\\])?', type_name)\n if match:\n return match.group('type')\n else:\n return type_name\n\n # TODO: merge with type_utils.is_parameter_type\n @classmethod\n def _is_parameter(cls, annotation: Any) -> bool:\n if type(annotation) == type:\n return annotation in [str, int, float, bool, dict, list]\n\n # Annotation could be, for instance `typing.Dict[str, str]`, etc.\n return cls._get_short_type_name(str(annotation)) in ['Dict', 'List']\n\n @classmethod\n def _is_artifact(cls, annotation: Any) -> bool:\n if type(annotation) == type:\n return issubclass(annotation, Artifact)\n return False\n\n @classmethod\n def _is_named_tuple(cls, annotation: Any) -> bool:\n if type(annotation) == type:\n return issubclass(annotation, tuple) and hasattr(\n annotation, '_fields') and hasattr(annotation, '__annotations__')\n return False\n\n def _handle_single_return_value(self, output_name: str, annotation_type: Any,\n return_value: Any):\n if self._is_parameter(annotation_type):\n if type(return_value) != annotation_type:\n raise ValueError(\n 'Function `{}` returned value of type {}; want type {}'.format(\n self._func.__name__, type(return_value), annotation_type))\n self._write_output_parameter_value(output_name, return_value)\n elif self._is_artifact(annotation_type):\n self._write_output_artifact_payload(output_name, return_value)\n else:\n raise RuntimeError(\n 'Unknown return type: {}. Must be one of `str`, `int`, `float`, or a'\n ' subclass of `Artifact`'.format(annotation_type))\n\n def _write_executor_output(self, func_output: Optional[Any] = None):\n if self._output_artifacts:\n self._executor_output['artifacts'] = {}\n\n for name, artifact in self._output_artifacts.items():\n runtime_artifact = {\n 'name': artifact.name,\n 'uri': artifact.uri,\n 'metadata': artifact.metadata,\n }\n artifacts_list = {'artifacts': [runtime_artifact]}\n\n self._executor_output['artifacts'][name] = artifacts_list\n\n if func_output is not None:\n if self._is_parameter(self._return_annotation) or self._is_artifact(\n self._return_annotation):\n # Note: single output is named `Output` in component.yaml.\n self._handle_single_return_value('Output', self._return_annotation,\n func_output)\n elif self._is_named_tuple(self._return_annotation):\n if len(self._return_annotation._fields) != len(func_output):\n raise RuntimeError(\n 'Expected {} return values from function `{}`, got {}'.format(\n len(self._return_annotation._fields), self._func.__name__,\n len(func_output)))\n for i in range(len(self._return_annotation._fields)):\n field = self._return_annotation._fields[i]\n field_type = self._return_annotation.__annotations__[field]\n if type(func_output) == tuple:\n field_value = func_output[i]\n else:\n field_value = getattr(func_output, field)\n self._handle_single_return_value(field, field_type, field_value)\n else:\n raise RuntimeError(\n 'Unknown return type: {}. Must be one of `str`, `int`, `float`, a'\n ' subclass of `Artifact`, or a NamedTuple collection of these types.'\n .format(self._return_annotation))\n\n import os\n os.makedirs(\n os.path.dirname(self._input['outputs']['outputFile']), exist_ok=True)\n with open(self._input['outputs']['outputFile'], 'w') as f:\n f.write(json.dumps(self._executor_output))\n\n def _maybe_strip_path_suffix(self, name) -> str:\n if name.endswith('_path'):\n name = name[0:-len('_path')]\n if name.endswith('_file'):\n name = name[0:-len('_file')]\n return name\n\n def execute(self):\n annotations = inspect.getfullargspec(self._func).annotations\n\n # Function arguments.\n func_kwargs = {}\n\n for k, v in annotations.items():\n if k == 'return':\n continue\n\n if self._is_parameter(v):\n func_kwargs[k] = self._get_input_parameter_value(k, v)\n\n if is_artifact_annotation(v):\n if is_input_artifact(v):\n func_kwargs[k] = self._get_input_artifact(k)\n if is_output_artifact(v):\n func_kwargs[k] = self._get_output_artifact(k)\n\n elif isinstance(v, OutputPath):\n if self._is_parameter(v.type):\n func_kwargs[k] = self._get_output_parameter_path(k)\n else:\n func_kwargs[k] = self._get_output_artifact_path(k)\n elif isinstance(v, InputPath):\n func_kwargs[k] = self._get_input_artifact_path(k)\n\n result = self._func(**func_kwargs)\n self._write_executor_output(result)\n\n\ndef preprocess(\n # An input parameter of type string.\n message: str,\n # Use Output[T] to get a metadata-rich handle to the output artifact\n # of type `Dataset`.\n output_dataset_one: Output[Dataset],\n # A locally accessible filepath for another output artifact of type\n # `Dataset`.\n output_dataset_two_path: OutputPath('Dataset'),\n # A locally accessible filepath for an output parameter of type string.\n output_parameter_path: OutputPath(str),\n # A locally accessible filepath for an output parameter of type bool.\n output_bool_parameter_path: OutputPath(bool),\n # A locally accessible filepath for an output parameter of type dict.\n output_dict_parameter_path: OutputPath(Dict[str, int]),\n # A locally accessible filepath for an output parameter of type list.\n output_list_parameter_path: OutputPath(List[str]),\n):\n \"\"\"Dummy preprocessing step\"\"\"\n\n # Use Dataset.path to access a local file path for writing.\n # One can also use Dataset.uri to access the actual URI file path.\n with open(output_dataset_one.path, 'w') as f:\n f.write(message)\n\n # OutputPath is used to just pass the local file path of the output artifact\n # to the function.\n with open(output_dataset_two_path, 'w') as f:\n f.write(message)\n\n with open(output_parameter_path, 'w') as f:\n f.write(message)\n\n with open(output_bool_parameter_path, 'w') as f:\n f.write(str(True)) # use either `str()` or `json.dumps()` for bool values.\n\n import json\n with open(output_dict_parameter_path, 'w') as f:\n f.write(json.dumps({'A': 1, 'B': 2}))\n\n with open(output_list_parameter_path, 'w') as f:\n f.write(json.dumps(['a', 'b', 'c']))\n\n\ndef executor_main():\n import argparse\n import json\n\n parser = argparse.ArgumentParser(description='Process some integers.')\n parser.add_argument('--executor_input', type=str)\n parser.add_argument('--function_to_execute', type=str)\n\n args, _ = parser.parse_known_args()\n executor_input = json.loads(args.executor_input)\n function_to_execute = globals()[args.function_to_execute]\n\n executor = Executor(executor_input=executor_input,\n function_to_execute=function_to_execute)\n\n executor.execute()\n\n\nif __name__ == '__main__':\n executor_main()\n" + ], + "image": "python:3.7" + } + }, + "exec-train": { + "container": { + "args": [ + "--executor_input", + "{{$}}", + "--function_to_execute", + "train", + "--dataset-one-output-path", + "{{$.inputs.artifacts['dataset_one'].path}}", + "--dataset-two-output-path", + "{{$.inputs.artifacts['dataset_two'].path}}", + "--message-output-path", + "{{$.inputs.parameters['message']}}", + "--input-bool-output-path", + "{{$.inputs.parameters['input_bool']}}", + "--input-dict-output-path", + "{{$.inputs.parameters['input_dict']}}", + "--input-list-output-path", + "{{$.inputs.parameters['input_list']}}", + "--num-steps-output-path", + "{{$.inputs.parameters['num_steps']}}", + "--model-output-path", + "{{$.outputs.artifacts['model'].path}}" + ], + "command": [ + "sh", + "-ec", + "program_path=$(mktemp)\nprintf \"%s\" \"$0\" > \"$program_path\"\npython3 -u \"$program_path\" \"$@\"\n", + "\nimport json\nimport inspect\nfrom typing import *\n\n# Copyright 2021 The Kubeflow Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Classes for input/output types in KFP SDK.\n\nThese are only compatible with v2 Pipelines.\n\"\"\"\n\nimport os\nfrom typing import Dict, Generic, List, Optional, Type, TypeVar, Union\n\n\n_GCS_LOCAL_MOUNT_PREFIX = '/gcs/'\n_MINIO_LOCAL_MOUNT_PREFIX = '/minio/'\n_S3_LOCAL_MOUNT_PREFIX = '/s3/'\n\n\nclass Artifact(object):\n \"\"\"Generic Artifact class.\n\n This class is meant to represent the metadata around an input or output\n machine-learning Artifact. Artifacts have URIs, which can either be a location\n on disk (or Cloud storage) or some other resource identifier such as\n an API resource name.\n\n Artifacts carry a `metadata` field, which is a dictionary for storing\n metadata related to this artifact.\n \"\"\"\n TYPE_NAME = 'system.Artifact'\n\n def __init__(self,\n name: Optional[str] = None,\n uri: Optional[str] = None,\n metadata: Optional[Dict] = None):\n \"\"\"Initializes the Artifact with the given name, URI and metadata.\"\"\"\n self.uri = uri or ''\n self.name = name or ''\n self.metadata = metadata or {}\n\n @property\n def path(self):\n return self._get_path()\n\n @path.setter\n def path(self, path):\n self._set_path(path)\n\n def _get_path(self) -> Optional[str]:\n if self.uri.startswith('gs://'):\n return _GCS_LOCAL_MOUNT_PREFIX + self.uri[len('gs://'):]\n elif self.uri.startswith('minio://'):\n return _MINIO_LOCAL_MOUNT_PREFIX + self.uri[len('minio://'):]\n elif self.uri.startswith('s3://'):\n return _S3_LOCAL_MOUNT_PREFIX + self.uri[len('s3://'):]\n return None\n\n def _set_path(self, path):\n if path.startswith(_GCS_LOCAL_MOUNT_PREFIX):\n path = 'gs://' + path[len(_GCS_LOCAL_MOUNT_PREFIX):]\n elif path.startswith(_MINIO_LOCAL_MOUNT_PREFIX):\n path = 'minio://' + path[len(_MINIO_LOCAL_MOUNT_PREFIX):]\n elif path.startswith(_S3_LOCAL_MOUNT_PREFIX):\n path = 's3://' + path[len(_S3_LOCAL_MOUNT_PREFIX):]\n self.uri = path\n\n\nclass Model(Artifact):\n \"\"\"An artifact representing an ML Model.\"\"\"\n TYPE_NAME = 'system.Model'\n\n def __init__(self,\n name: Optional[str] = None,\n uri: Optional[str] = None,\n metadata: Optional[Dict] = None):\n super().__init__(uri=uri, name=name, metadata=metadata)\n\n @property\n def framework(self) -> str:\n return self._get_framework()\n\n def _get_framework(self) -> str:\n return self.metadata.get('framework', '')\n\n @framework.setter\n def framework(self, framework: str):\n self._set_framework(framework)\n\n def _set_framework(self, framework: str):\n self.metadata['framework'] = framework\n\n\nclass Dataset(Artifact):\n \"\"\"An artifact representing an ML Dataset.\"\"\"\n TYPE_NAME = 'system.Dataset'\n\n def __init__(self,\n name: Optional[str] = None,\n uri: Optional[str] = None,\n metadata: Optional[Dict] = None):\n super().__init__(uri=uri, name=name, metadata=metadata)\n\n\nclass Metrics(Artifact):\n \"\"\"Represent a simple base Artifact type to store key-value scalar metrics.\"\"\"\n TYPE_NAME = 'system.Metrics'\n\n def __init__(self,\n name: Optional[str] = None,\n uri: Optional[str] = None,\n metadata: Optional[Dict] = None):\n super().__init__(uri=uri, name=name, metadata=metadata)\n\n def log_metric(self, metric: str, value: float):\n \"\"\"Sets a custom scalar metric.\n\n Args:\n metric: Metric key\n value: Value of the metric.\n \"\"\"\n self.metadata[metric] = value\n\n\nclass ClassificationMetrics(Artifact):\n \"\"\"Represents Artifact class to store Classification Metrics.\"\"\"\n TYPE_NAME = 'system.ClassificationMetrics'\n\n def __init__(self,\n name: Optional[str] = None,\n uri: Optional[str] = None,\n metadata: Optional[Dict] = None):\n super().__init__(uri=uri, name=name, metadata=metadata)\n\n def log_roc_data_point(self, fpr: float, tpr: float, threshold: float):\n \"\"\"Logs a single data point in the ROC Curve.\n\n Args:\n fpr: False positive rate value of the data point.\n tpr: True positive rate value of the data point.\n threshold: Threshold value for the data point.\n \"\"\"\n\n roc_reading = {\n 'confidenceThreshold': threshold,\n 'recall': tpr,\n 'falsePositiveRate': fpr\n }\n if 'confidenceMetrics' not in self.metadata.keys():\n self.metadata['confidenceMetrics'] = []\n\n self.metadata['confidenceMetrics'].append(roc_reading)\n\n def log_roc_curve(self, fpr: List[float], tpr: List[float],\n threshold: List[float]):\n \"\"\"Logs an ROC curve.\n\n The list length of fpr, tpr and threshold must be the same.\n\n Args:\n fpr: List of false positive rate values.\n tpr: List of true positive rate values.\n threshold: List of threshold values.\n \"\"\"\n if len(fpr) != len(tpr) or len(fpr) != len(threshold) or len(tpr) != len(\n threshold):\n raise ValueError('Length of fpr, tpr and threshold must be the same. '\n 'Got lengths {}, {} and {} respectively.'.format(\n len(fpr), len(tpr), len(threshold)))\n\n for i in range(len(fpr)):\n self.log_roc_data_point(fpr=fpr[i], tpr=tpr[i], threshold=threshold[i])\n\n def set_confusion_matrix_categories(self, categories: List[str]):\n \"\"\"Stores confusion matrix categories.\n\n Args:\n categories: List of strings specifying the categories.\n \"\"\"\n\n self._categories = []\n annotation_specs = []\n for category in categories:\n annotation_spec = {'displayName': category}\n self._categories.append(category)\n annotation_specs.append(annotation_spec)\n\n self._matrix = []\n for row in range(len(self._categories)):\n self._matrix.append({'row': [0] * len(self._categories)})\n\n self._confusion_matrix = {}\n self._confusion_matrix['annotationSpecs'] = annotation_specs\n self._confusion_matrix['rows'] = self._matrix\n self.metadata['confusionMatrix'] = self._confusion_matrix\n\n def log_confusion_matrix_row(self, row_category: str, row: List[float]):\n \"\"\"Logs a confusion matrix row.\n\n Args:\n row_category: Category to which the row belongs.\n row: List of integers specifying the values for the row.\n\n Raises:\n ValueError: If row_category is not in the list of categories\n set in set_categories call.\n \"\"\"\n if row_category not in self._categories:\n raise ValueError('Invalid category: {} passed. Expected one of: {}'.\\\n format(row_category, self._categories))\n\n if len(row) != len(self._categories):\n raise ValueError('Invalid row. Expected size: {} got: {}'.\\\n format(len(self._categories), len(row)))\n\n self._matrix[self._categories.index(row_category)] = {'row': row}\n self.metadata['confusionMatrix'] = self._confusion_matrix\n\n def log_confusion_matrix_cell(self, row_category: str, col_category: str,\n value: int):\n \"\"\"Logs a cell in the confusion matrix.\n\n Args:\n row_category: String representing the name of the row category.\n col_category: String representing the name of the column category.\n value: Int value of the cell.\n\n Raises:\n ValueError: If row_category or col_category is not in the list of\n categories set in set_categories.\n \"\"\"\n if row_category not in self._categories:\n raise ValueError('Invalid category: {} passed. Expected one of: {}'.\\\n format(row_category, self._categories))\n\n if col_category not in self._categories:\n raise ValueError('Invalid category: {} passed. Expected one of: {}'.\\\n format(row_category, self._categories))\n\n self._matrix[self._categories.index(row_category)]['row'][\n self._categories.index(col_category)] = value\n self.metadata['confusionMatrix'] = self._confusion_matrix\n\n def log_confusion_matrix(self, categories: List[str],\n matrix: List[List[int]]):\n \"\"\"Logs a confusion matrix.\n\n Args:\n categories: List of the category names.\n matrix: Complete confusion matrix.\n\n Raises:\n ValueError: Length of categories does not match number of rows or columns.\n \"\"\"\n self.set_confusion_matrix_categories(categories)\n\n if len(matrix) != len(categories):\n raise ValueError('Invalid matrix: {} passed for categories: {}'.\\\n format(matrix, categories))\n\n for index in range(len(categories)):\n if len(matrix[index]) != len(categories):\n raise ValueError('Invalid matrix: {} passed for categories: {}'.\\\n format(matrix, categories))\n\n self.log_confusion_matrix_row(categories[index], matrix[index])\n\n self.metadata['confusionMatrix'] = self._confusion_matrix\n\n\nclass SlicedClassificationMetrics(Artifact):\n \"\"\"Metrics class representing Sliced Classification Metrics.\n\n Similar to ClassificationMetrics clients using this class are expected to use\n log methods of the class to log metrics with the difference being each log\n method takes a slice to associate the ClassificationMetrics.\n\n \"\"\"\n\n TYPE_NAME = 'system.SlicedClassificationMetrics'\n\n def __init__(self,\n name: Optional[str] = None,\n uri: Optional[str] = None,\n metadata: Optional[Dict] = None):\n super().__init__(uri=uri, name=name, metadata=metadata)\n\n def _upsert_classification_metrics_for_slice(self, slice: str):\n \"\"\"Upserts the classification metrics instance for a slice.\"\"\"\n if slice not in self._sliced_metrics:\n self._sliced_metrics[slice] = ClassificationMetrics()\n\n def _update_metadata(self, slice: str):\n \"\"\"Updates metadata to adhere to the metrics schema.\"\"\"\n self.metadata = {}\n self.metadata['evaluationSlices'] = []\n for slice in self._sliced_metrics.keys():\n slice_metrics = {\n 'slice': slice,\n 'sliceClassificationMetrics': self._sliced_metrics[slice].metadata\n }\n self.metadata['evaluationSlices'].append(slice_metrics)\n\n def log_roc_reading(self, slice: str, threshold: float, tpr: float,\n fpr: float):\n \"\"\"Logs a single data point in the ROC Curve of a slice.\n\n Args:\n slice: String representing slice label.\n threshold: Thresold value for the data point.\n tpr: True positive rate value of the data point.\n fpr: False positive rate value of the data point.\n \"\"\"\n\n self._upsert_classification_metrics_for_slice(slice)\n self._sliced_metrics[slice].log_roc_reading(threshold, tpr, fpr)\n self._update_metadata(slice)\n\n def load_roc_readings(self, slice: str, readings: List[List[float]]):\n \"\"\"Supports bulk loading ROC Curve readings for a slice.\n\n Args:\n slice: String representing slice label.\n readings: A 2-D list providing ROC Curve data points.\n The expected order of the data points is: threshold,\n true_positive_rate, false_positive_rate.\n \"\"\"\n self._upsert_classification_metrics_for_slice(slice)\n self._sliced_metrics[slice].load_roc_readings(readings)\n self._update_metadata(slice)\n\n def set_confusion_matrix_categories(self, slice: str, categories: List[str]):\n \"\"\"Stores confusion matrix categories for a slice..\n\n Categories are stored in the internal metrics_utils.ConfusionMatrix\n instance of the slice.\n\n Args:\n slice: String representing slice label.\n categories: List of strings specifying the categories.\n \"\"\"\n self._upsert_classification_metrics_for_slice(slice)\n self._sliced_metrics[slice].set_confusion_matrix_categories(categories)\n self._update_metadata(slice)\n\n def log_confusion_matrix_row(self, slice: str, row_category: str,\n row: List[int]):\n \"\"\"Logs a confusion matrix row for a slice.\n\n Row is updated on the internal metrics_utils.ConfusionMatrix\n instance of the slice.\n\n Args:\n slice: String representing slice label.\n row_category: Category to which the row belongs.\n row: List of integers specifying the values for the row.\n \"\"\"\n self._upsert_classification_metrics_for_slice(slice)\n self._sliced_metrics[slice].log_confusion_matrix_row(row_category, row)\n self._update_metadata(slice)\n\n def log_confusion_matrix_cell(self, slice: str, row_category: str,\n col_category: str, value: int):\n \"\"\"Logs a confusion matrix cell for a slice..\n\n Cell is updated on the internal metrics_utils.ConfusionMatrix\n instance of the slice.\n\n Args:\n slice: String representing slice label.\n row_category: String representing the name of the row category.\n col_category: String representing the name of the column category.\n value: Int value of the cell.\n \"\"\"\n self._upsert_classification_metrics_for_slice(slice)\n self._sliced_metrics[slice].log_confusion_matrix_cell(\n row_category, col_category, value)\n self._update_metadata(slice)\n\n def load_confusion_matrix(self, slice: str, categories: List[str],\n matrix: List[List[int]]):\n \"\"\"Supports bulk loading the whole confusion matrix for a slice.\n\n Args:\n slice: String representing slice label.\n categories: List of the category names.\n matrix: Complete confusion matrix.\n \"\"\"\n self._upsert_classification_metrics_for_slice(slice)\n self._sliced_metrics[slice].log_confusion_matrix_cell(categories, matrix)\n self._update_metadata(slice)\n\n\nT = TypeVar('T')\n\n\nclass InputAnnotation():\n \"\"\"Marker type for input artifacts.\"\"\"\n pass\n\n\n\nclass OutputAnnotation():\n \"\"\"Marker type for output artifacts.\"\"\"\n pass\n\n\n# TODO: Use typing.Annotated instead of this hack.\n# With typing.Annotated (Python 3.9+ or typing_extensions package), the\n# following would look like:\n# Input = typing.Annotated[T, InputAnnotation]\n# Output = typing.Annotated[T, OutputAnnotation]\n\n\n# Input represents an Input artifact of type T.\nInput = Union[T, InputAnnotation]\n\n# Output represents an Output artifact of type T.\nOutput = Union[T, OutputAnnotation]\n\n\ndef is_artifact_annotation(typ) -> bool:\n if hasattr(typ, '_subs_tree'): # Python 3.6\n subs_tree = typ._subs_tree()\n return len(subs_tree) == 3 and subs_tree[0] == Union and subs_tree[2] in [InputAnnotation, OutputAnnotation]\n\n if not hasattr(typ, '__origin__'):\n return False\n\n\n if typ.__origin__ != Union and type(typ.__origin__) != type(Union):\n return False\n\n\n if not hasattr(typ, '__args__') or len(typ.__args__) != 2:\n return False\n\n if typ.__args__[1] not in [InputAnnotation, OutputAnnotation]:\n return False\n\n return True\n\ndef is_input_artifact(typ) -> bool:\n \"\"\"Returns True if typ is of type Input[T].\"\"\"\n if not is_artifact_annotation(typ):\n return False\n\n if hasattr(typ, '_subs_tree'): # Python 3.6\n subs_tree = typ._subs_tree()\n return len(subs_tree) == 3 and subs_tree[2] == InputAnnotation\n\n return typ.__args__[1] == InputAnnotation\n\ndef is_output_artifact(typ) -> bool:\n \"\"\"Returns True if typ is of type Output[T].\"\"\"\n if not is_artifact_annotation(typ):\n return False\n\n if hasattr(typ, '_subs_tree'): # Python 3.6\n subs_tree = typ._subs_tree()\n return len(subs_tree) == 3 and subs_tree[2] == OutputAnnotation\n\n return typ.__args__[1] == OutputAnnotation\n\ndef get_io_artifact_class(typ):\n if not is_artifact_annotation(typ):\n return None\n if typ == Input or typ == Output:\n return None\n\n if hasattr(typ, '_subs_tree'): # Python 3.6\n subs_tree = typ._subs_tree()\n if len(subs_tree) != 3:\n return None\n return subs_tree[1]\n\n return typ.__args__[0]\n\ndef get_io_artifact_annotation(typ):\n if not is_artifact_annotation(typ):\n return None\n\n if hasattr(typ, '_subs_tree'): # Python 3.6\n subs_tree = typ._subs_tree()\n if len(subs_tree) != 3:\n return None\n return subs_tree[2]\n\n return typ.__args__[1]\n\n\n\n_SCHEMA_TITLE_TO_TYPE: Dict[str, Artifact] = {\n x.TYPE_NAME: x\n for x in [Artifact, Model, Dataset, Metrics, ClassificationMetrics]\n}\n\n\ndef create_runtime_artifact(runtime_artifact: Dict) -> Artifact:\n \"\"\"Creates an Artifact instance from the specified RuntimeArtifact.\n\n Args:\n runtime_artifact: Dictionary representing JSON-encoded RuntimeArtifact.\n \"\"\"\n schema_title = runtime_artifact.get('type', {}).get('schemaTitle', '')\n\n artifact_type = _SCHEMA_TITLE_TO_TYPE.get(schema_title)\n if not artifact_type:\n artifact_type = Artifact\n return artifact_type(\n uri=runtime_artifact.get('uri', ''),\n name=runtime_artifact.get('name', ''),\n metadata=runtime_artifact.get('metadata', {}),\n )\n\nclass InputPath:\n '''When creating component from function, :class:`.InputPath` should be used as function parameter annotation to tell the system to pass the *data file path* to the function instead of passing the actual data.'''\n def __init__(self, type=None):\n self.type = type\n\nclass OutputPath:\n '''When creating component from function, :class:`.OutputPath` should be used as function parameter annotation to tell the system that the function wants to output data by writing it into a file with the given path instead of returning the data from the function.'''\n def __init__(self, type=None):\n self.type = type\n\nclass Executor():\n \"\"\"Executor executes v2-based Python function components.\"\"\"\n\n def __init__(self, executor_input: Dict, function_to_execute: Callable):\n self._func = function_to_execute\n self._input = executor_input\n self._input_artifacts: Dict[str, Artifact] = {}\n self._output_artifacts: Dict[str, Artifact] = {}\n\n for name, artifacts in self._input.get('inputs', {}).get('artifacts',\n {}).items():\n artifacts_list = artifacts.get('artifacts')\n if artifacts_list:\n self._input_artifacts[name] = self._make_input_artifact(\n artifacts_list[0])\n\n for name, artifacts in self._input.get('outputs', {}).get('artifacts',\n {}).items():\n artifacts_list = artifacts.get('artifacts')\n if artifacts_list:\n self._output_artifacts[name] = self._make_output_artifact(\n artifacts_list[0])\n\n self._return_annotation = inspect.signature(self._func).return_annotation\n self._executor_output = {}\n\n @classmethod\n def _make_input_artifact(cls, runtime_artifact: Dict):\n return create_runtime_artifact(runtime_artifact)\n\n @classmethod\n def _make_output_artifact(cls, runtime_artifact: Dict):\n import os\n artifact = create_runtime_artifact(runtime_artifact)\n os.makedirs(os.path.dirname(artifact.path), exist_ok=True)\n return artifact\n\n def _get_input_artifact(self, name: str):\n return self._input_artifacts.get(name)\n\n def _get_output_artifact(self, name: str):\n return self._output_artifacts.get(name)\n\n def _get_input_parameter_value(self, parameter_name: str, parameter_type: Any):\n parameter = self._input.get('inputs', {}).get('parameters',\n {}).get(parameter_name, None)\n if parameter is None:\n return None\n\n if parameter.get('stringValue'):\n if parameter_type == str:\n return parameter['stringValue']\n elif parameter_type == bool:\n # Use `.lower()` so it can also handle 'True' and 'False' (resulted from\n # `str(True)` and `str(False)`, respectively.\n return json.loads(parameter['stringValue'].lower())\n else:\n return json.loads(parameter['stringValue'])\n elif parameter.get('intValue'):\n return int(parameter['intValue'])\n elif parameter.get('doubleValue'):\n return float(parameter['doubleValue'])\n\n def _get_output_parameter_path(self, parameter_name: str):\n parameter_name = self._maybe_strip_path_suffix(parameter_name)\n parameter = self._input.get('outputs',\n {}).get('parameters',\n {}).get(parameter_name, None)\n if parameter is None:\n return None\n\n import os\n path = parameter.get('outputFile', None)\n if path:\n os.makedirs(os.path.dirname(path), exist_ok=True)\n return path\n\n def _get_output_artifact_path(self, artifact_name: str):\n artifact_name = self._maybe_strip_path_suffix(artifact_name)\n output_artifact = self._output_artifacts.get(artifact_name)\n if not output_artifact:\n raise ValueError(\n 'Failed to get output artifact path for artifact name {}'.format(\n artifact_name))\n return output_artifact.path\n\n def _get_input_artifact_path(self, artifact_name: str):\n artifact_name = self._maybe_strip_path_suffix(artifact_name)\n input_artifact = self._input_artifacts.get(artifact_name)\n if not input_artifact:\n raise ValueError(\n 'Failed to get input artifact path for artifact name {}'.format(\n artifact_name))\n return input_artifact.path\n\n def _write_output_parameter_value(self, name: str,\n value: Union[str, int, float, bool, dict,\n list, Dict, List]):\n if type(value) == str:\n output = {'stringValue': value}\n elif type(value) == int:\n output = {'intValue': value}\n elif type(value) == float:\n output = {'doubleValue': value}\n else:\n # For bool, list, dict, List, Dict, json serialize the value.\n output = {'stringValue': json.dumps(value)}\n\n if not self._executor_output.get('parameters'):\n self._executor_output['parameters'] = {}\n\n self._executor_output['parameters'][name] = output\n\n def _write_output_artifact_payload(self, name: str, value: Any):\n path = self._get_output_artifact_path(name)\n with open(path, 'w') as f:\n f.write(str(value))\n\n # TODO: extract to a util\n @classmethod\n def _get_short_type_name(cls, type_name: str) -> str:\n \"\"\"Extracts the short form type name.\n\n This method is used for looking up serializer for a given type.\n\n For example:\n typing.List -> List\n typing.List[int] -> List\n typing.Dict[str, str] -> Dict\n List -> List\n str -> str\n\n Args:\n type_name: The original type name.\n\n Returns:\n The short form type name or the original name if pattern doesn't match.\n \"\"\"\n import re\n match = re.match('(typing\\.)?(?P<type>\\w+)(?:\\[.+\\])?', type_name)\n if match:\n return match.group('type')\n else:\n return type_name\n\n # TODO: merge with type_utils.is_parameter_type\n @classmethod\n def _is_parameter(cls, annotation: Any) -> bool:\n if type(annotation) == type:\n return annotation in [str, int, float, bool, dict, list]\n\n # Annotation could be, for instance `typing.Dict[str, str]`, etc.\n return cls._get_short_type_name(str(annotation)) in ['Dict', 'List']\n\n @classmethod\n def _is_artifact(cls, annotation: Any) -> bool:\n if type(annotation) == type:\n return issubclass(annotation, Artifact)\n return False\n\n @classmethod\n def _is_named_tuple(cls, annotation: Any) -> bool:\n if type(annotation) == type:\n return issubclass(annotation, tuple) and hasattr(\n annotation, '_fields') and hasattr(annotation, '__annotations__')\n return False\n\n def _handle_single_return_value(self, output_name: str, annotation_type: Any,\n return_value: Any):\n if self._is_parameter(annotation_type):\n if type(return_value) != annotation_type:\n raise ValueError(\n 'Function `{}` returned value of type {}; want type {}'.format(\n self._func.__name__, type(return_value), annotation_type))\n self._write_output_parameter_value(output_name, return_value)\n elif self._is_artifact(annotation_type):\n self._write_output_artifact_payload(output_name, return_value)\n else:\n raise RuntimeError(\n 'Unknown return type: {}. Must be one of `str`, `int`, `float`, or a'\n ' subclass of `Artifact`'.format(annotation_type))\n\n def _write_executor_output(self, func_output: Optional[Any] = None):\n if self._output_artifacts:\n self._executor_output['artifacts'] = {}\n\n for name, artifact in self._output_artifacts.items():\n runtime_artifact = {\n 'name': artifact.name,\n 'uri': artifact.uri,\n 'metadata': artifact.metadata,\n }\n artifacts_list = {'artifacts': [runtime_artifact]}\n\n self._executor_output['artifacts'][name] = artifacts_list\n\n if func_output is not None:\n if self._is_parameter(self._return_annotation) or self._is_artifact(\n self._return_annotation):\n # Note: single output is named `Output` in component.yaml.\n self._handle_single_return_value('Output', self._return_annotation,\n func_output)\n elif self._is_named_tuple(self._return_annotation):\n if len(self._return_annotation._fields) != len(func_output):\n raise RuntimeError(\n 'Expected {} return values from function `{}`, got {}'.format(\n len(self._return_annotation._fields), self._func.__name__,\n len(func_output)))\n for i in range(len(self._return_annotation._fields)):\n field = self._return_annotation._fields[i]\n field_type = self._return_annotation.__annotations__[field]\n if type(func_output) == tuple:\n field_value = func_output[i]\n else:\n field_value = getattr(func_output, field)\n self._handle_single_return_value(field, field_type, field_value)\n else:\n raise RuntimeError(\n 'Unknown return type: {}. Must be one of `str`, `int`, `float`, a'\n ' subclass of `Artifact`, or a NamedTuple collection of these types.'\n .format(self._return_annotation))\n\n import os\n os.makedirs(\n os.path.dirname(self._input['outputs']['outputFile']), exist_ok=True)\n with open(self._input['outputs']['outputFile'], 'w') as f:\n f.write(json.dumps(self._executor_output))\n\n def _maybe_strip_path_suffix(self, name) -> str:\n if name.endswith('_path'):\n name = name[0:-len('_path')]\n if name.endswith('_file'):\n name = name[0:-len('_file')]\n return name\n\n def execute(self):\n annotations = inspect.getfullargspec(self._func).annotations\n\n # Function arguments.\n func_kwargs = {}\n\n for k, v in annotations.items():\n if k == 'return':\n continue\n\n if self._is_parameter(v):\n func_kwargs[k] = self._get_input_parameter_value(k, v)\n\n if is_artifact_annotation(v):\n if is_input_artifact(v):\n func_kwargs[k] = self._get_input_artifact(k)\n if is_output_artifact(v):\n func_kwargs[k] = self._get_output_artifact(k)\n\n elif isinstance(v, OutputPath):\n if self._is_parameter(v.type):\n func_kwargs[k] = self._get_output_parameter_path(k)\n else:\n func_kwargs[k] = self._get_output_artifact_path(k)\n elif isinstance(v, InputPath):\n func_kwargs[k] = self._get_input_artifact_path(k)\n\n result = self._func(**func_kwargs)\n self._write_executor_output(result)\n\n\ndef train(\n # Use InputPath to get a locally accessible path for the input artifact\n # of type `Dataset`.\n dataset_one_path: InputPath('Dataset'),\n # Use Input[T] to get a metadata-rich handle to the input artifact\n # of type `Dataset`.\n dataset_two: Input[Dataset],\n # An input parameter of type string.\n message: str,\n # Use Output[T] to get a metadata-rich handle to the output artifact\n # of type `Dataset`.\n model: Output[Model],\n # An input parameter of type bool.\n input_bool: bool,\n # An input parameter of type dict.\n input_dict: Dict[str, int],\n # An input parameter of type List[str].\n input_list: List[str],\n # An input parameter of type int with a default value.\n num_steps: int = 100,\n):\n \"\"\"Dummy Training step\"\"\"\n with open(dataset_one_path, 'r') as input_file:\n dataset_one_contents = input_file.read()\n\n with open(dataset_two.path, 'r') as input_file:\n dataset_two_contents = input_file.read()\n\n line = (f'dataset_one_contents: {dataset_one_contents} || '\n f'dataset_two_contents: {dataset_two_contents} || '\n f'message: {message} || '\n f'input_bool: {input_bool}, type {type(input_bool)} || '\n f'input_dict: {input_dict}, type {type(input_dict)} || '\n f'input_list: {input_list}, type {type(input_list)} \\n')\n\n with open(model.path, 'w') as output_file:\n for i in range(num_steps):\n output_file.write('Step {}\\n{}\\n=====\\n'.format(i, line))\n\n # Use model.get() to get a Model artifact, which has a .metadata dictionary\n # to store arbitrary metadata for the output artifact.\n model.metadata['accuracy'] = 0.9\n\n\ndef executor_main():\n import argparse\n import json\n\n parser = argparse.ArgumentParser(description='Process some integers.')\n parser.add_argument('--executor_input', type=str)\n parser.add_argument('--function_to_execute', type=str)\n\n args, _ = parser.parse_known_args()\n executor_input = json.loads(args.executor_input)\n function_to_execute = globals()[args.function_to_execute]\n\n executor = Executor(executor_input=executor_input,\n function_to_execute=function_to_execute)\n\n executor.execute()\n\n\nif __name__ == '__main__':\n executor_main()\n" + ], + "image": "python:3.7" + } + } + } + }, + "pipelineInfo": { + "name": "my-test-pipeline-beta" + }, + "root": { + "dag": { + "tasks": { + "preprocess": { + "cachingOptions": { + "enableCache": true + }, + "componentRef": { + "name": "comp-preprocess" + }, + "inputs": { + "parameters": { + "message": { + "componentInputParameter": "message" + } + } + }, + "taskInfo": { + "name": "preprocess" + } + }, + "train": { + "cachingOptions": { + "enableCache": true + }, + "componentRef": { + "name": "comp-train" + }, + "dependentTasks": [ + "preprocess" + ], + "inputs": { + "artifacts": { + "dataset_one": { + "taskOutputArtifact": { + "outputArtifactKey": "output_dataset_one", + "producerTask": "preprocess" + } + }, + "dataset_two": { + "taskOutputArtifact": { + "outputArtifactKey": "output_dataset_two", + "producerTask": "preprocess" + } + } + }, + "parameters": { + "input_bool": { + "taskOutputParameter": { + "outputParameterKey": "output_bool_parameter", + "producerTask": "preprocess" + } + }, + "input_dict": { + "taskOutputParameter": { + "outputParameterKey": "output_dict_parameter", + "producerTask": "preprocess" + } + }, + "input_list": { + "taskOutputParameter": { + "outputParameterKey": "output_list_parameter", + "producerTask": "preprocess" + } + }, + "message": { + "taskOutputParameter": { + "outputParameterKey": "output_parameter", + "producerTask": "preprocess" + } + }, + "num_steps": { + "runtimeValue": { + "constantValue": { + "intValue": "100" + } + } + } + } + }, + "taskInfo": { + "name": "train" + } + } + } + }, + "inputDefinitions": { + "parameters": { + "message": { + "type": "STRING" + } + } + } + }, + "schemaVersion": "2.0.0", + "sdkVersion": "kfp-1.6.4" + }, + "runtimeConfig": { + "gcsOutputDirectory": "dummy_root" + } +} \ No newline at end of file diff --git a/frontend/mock-backend/fixed-data.ts b/frontend/mock-backend/fixed-data.ts index 0ecbc07773..fdb18c2c9c 100644 --- a/frontend/mock-backend/fixed-data.ts +++ b/frontend/mock-backend/fixed-data.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ import { ApiExperiment } from '../src/apis/experiment'; import { ApiJob } from '../src/apis/job'; -import { ApiPipeline } from '../src/apis/pipeline'; +import { ApiPipeline, ApiPipelineVersion } from '../src/apis/pipeline'; import { ApiRelationship, ApiResourceType, ApiRunDetail, RunMetricFormat } from '../src/apis/run'; import helloWorldRun from './hello-world-runtime'; import helloWorldWithStepsRun from './hello-world-with-steps-runtime'; @@ -38,58 +38,100 @@ const NUM_DUMMY_PIPELINES = 30; const NUM_DUMMY_JOBS = 20; const NUM_DUMMY_RUNS = 20; +const PIPELINE_ID_V2_PYTHON_TWO_STEPS = '8fbe3bd6-a01f-11e8-98d0-529269fb1470'; +const PIPELINE_V2_PYTHON_TWO_STEPS_DEFAULT: ApiPipelineVersion = { + created_at: new Date('2021-08-01T20:58:23.000Z'), + id: PIPELINE_ID_V2_PYTHON_TWO_STEPS, + name: 'v2_lightweight_python_functions_pipeline', + parameters: [ + { + name: 'message', + }, + ], +}; +const PIPELINE_V2_PYTHON_TWO_STEPS: ApiPipeline = { + description: 'V2 two steps: preprocess and training.', + ...PIPELINE_V2_PYTHON_TWO_STEPS_DEFAULT, + default_version: PIPELINE_V2_PYTHON_TWO_STEPS_DEFAULT, +}; + +const PIPELINE_UNSTRUCTED_TEXT_DEFAULT: ApiPipelineVersion = { + created_at: new Date('2018-04-01T20:58:23.000Z'), + id: '8fbe3bd6-a01f-11e8-98d0-529269fb1459', + name: 'Unstructured text', + description: 'Pipeline version description', + parameters: [ + { + name: 'x', + }, + { + name: 'y', + }, + { + name: 'output', + }, + ], +}; +const PIPELINE_UNSTRUCTED_TEXT: ApiPipeline = { + description: 'An unstructured text pipeline.', + ...PIPELINE_UNSTRUCTED_TEXT_DEFAULT, + default_version: PIPELINE_UNSTRUCTED_TEXT_DEFAULT, +}; + +const PIPELINE_IMAGE_CLASSIFICATION_DEFAULT: ApiPipelineVersion = { + created_at: new Date('2018-04-02T20:59:29.000Z'), + id: '8fbe3f78-a01f-11e8-98d0-529269fb1459', + name: 'Image classification', + parameters: [ + { + name: 'project', + }, + { + name: 'workers', + }, + { + name: 'rounds', + }, + { + name: 'output', + }, + ], +}; +const PIPELINE_IMAGE_CLASSIFICATION: ApiPipeline = { + description: 'An awesome image classification pipeline.', + ...PIPELINE_IMAGE_CLASSIFICATION_DEFAULT, + default_version: PIPELINE_IMAGE_CLASSIFICATION_DEFAULT, +}; + +const PIPELINE_NO_PARAM_DEFAULT: ApiPipelineVersion = { + created_at: new Date('2018-04-03T20:58:23.000Z'), + id: '8fbe41b2-a01f-11e8-98d0-529269fb1459', + name: 'No parameters', + parameters: [], +}; +const PIPELINE_NO_PARAM: ApiPipeline = { + description: 'This pipeline has no parameters', + ...PIPELINE_NO_PARAM_DEFAULT, + default_version: PIPELINE_NO_PARAM_DEFAULT, +}; + +const PIPELINE_UNDEFINED_PARAM_DEFAULT: ApiPipelineVersion = { + created_at: new Date('2018-04-04T20:58:23.000Z'), + id: '8fbe42f2-a01f-11e8-98d0-529269fb1459', + name: 'Undefined parameters', + parameters: undefined as any, +}; +const PIPELINE_UNDEFINED_PARAM: ApiPipeline = { + description: 'This pipeline has undefined parameters', + ...PIPELINE_UNDEFINED_PARAM_DEFAULT, + default_version: PIPELINE_UNDEFINED_PARAM_DEFAULT, +}; + const pipelines: ApiPipeline[] = [ - { - created_at: new Date('2018-04-01T20:58:23.000Z'), - description: 'An awesome unstructured text pipeline.', - id: '8fbe3bd6-a01f-11e8-98d0-529269fb1459', - name: 'Unstructured text', - parameters: [ - { - name: 'x', - }, - { - name: 'y', - }, - { - name: 'output', - }, - ], - }, - { - created_at: new Date('2018-04-02T20:59:29.000Z'), - description: 'An awesome image classification pipeline.', - id: '8fbe3f78-a01f-11e8-98d0-529269fb1459', - name: 'Image classification', - parameters: [ - { - name: 'project', - }, - { - name: 'workers', - }, - { - name: 'rounds', - }, - { - name: 'output', - }, - ], - }, - { - created_at: new Date('2018-04-03T20:58:23.000Z'), - description: 'This pipeline has no parameters', - id: '8fbe41b2-a01f-11e8-98d0-529269fb1459', - name: 'No parameters', - parameters: [], - }, - { - created_at: new Date('2018-04-04T20:58:23.000Z'), - description: 'This pipeline has undefined parameters', - id: '8fbe42f2-a01f-11e8-98d0-529269fb1459', - name: 'Undefined parameters', - parameters: undefined as any, - }, + PIPELINE_UNSTRUCTED_TEXT, + PIPELINE_IMAGE_CLASSIFICATION, + PIPELINE_NO_PARAM, + PIPELINE_UNDEFINED_PARAM, { created_at: new Date('2018-04-01T20:59:23.000Z'), description: 'Trying to delete this Pipeline will result in an error.', @@ -122,6 +164,7 @@ const pipelines: ApiPipeline[] = [ name: 'A pipeline with a very very very very very very very long name', parameters: [], }, + PIPELINE_V2_PYTHON_TWO_STEPS, ]; pipelines.push(...generateNPipelines()); @@ -294,6 +337,8 @@ const experiments: ApiExperiment[] = [ }, ]; +const versions: ApiPipelineVersion[] = [PIPELINE_UNSTRUCTED_TEXT_DEFAULT]; + const runs: ApiRunDetail[] = [ { pipeline_runtime: { @@ -827,14 +872,23 @@ export const data = { experiments, jobs, pipelines, + versions, runs, }; // tslint:disable:object-literal-sort-keys export const namedPipelines = { - unstructuredTextPipeline: pipelines[0], - imageClassificationPipeline: pipelines[1], - noParamsPipeline: pipelines[2], - undefinedParamsPipeline: pipelines[3], + v2PythonTwoSteps: PIPELINE_V2_PYTHON_TWO_STEPS, + unstructuredText: PIPELINE_UNSTRUCTED_TEXT, + imageClassification: PIPELINE_IMAGE_CLASSIFICATION, + noParams: PIPELINE_NO_PARAM, + undefinedParams: PIPELINE_UNDEFINED_PARAM, }; // tslint:enable:object-literal-sort-keys + +export const v2PipelineSpecMap: Map<string, string> = new Map([ + [ + PIPELINE_ID_V2_PYTHON_TWO_STEPS, + './mock-backend/data/v2/pipeline/mock_lightweight_python_functions_v2_pipeline.json', + ], +]); diff --git a/frontend/mock-backend/hello-world-runtime.ts b/frontend/mock-backend/hello-world-runtime.ts index ab74a1d601..44ded8448d 100644 --- a/frontend/mock-backend/hello-world-runtime.ts +++ b/frontend/mock-backend/hello-world-runtime.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/hello-world-with-steps-runtime.ts b/frontend/mock-backend/hello-world-with-steps-runtime.ts index 3c581afe11..445e098abb 100644 --- a/frontend/mock-backend/hello-world-with-steps-runtime.ts +++ b/frontend/mock-backend/hello-world-with-steps-runtime.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/integration-test-runtime.ts b/frontend/mock-backend/integration-test-runtime.ts index b63cd071be..132984d1bb 100644 --- a/frontend/mock-backend/integration-test-runtime.ts +++ b/frontend/mock-backend/integration-test-runtime.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/json-runtime.ts b/frontend/mock-backend/json-runtime.ts index f68c4ff98e..ace747a21d 100644 --- a/frontend/mock-backend/json-runtime.ts +++ b/frontend/mock-backend/json-runtime.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/large-graph-runtime.ts b/frontend/mock-backend/large-graph-runtime.ts index 61e06255d6..b6e3bc9a29 100644 --- a/frontend/mock-backend/large-graph-runtime.ts +++ b/frontend/mock-backend/large-graph-runtime.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/mock-api-middleware.ts b/frontend/mock-backend/mock-api-middleware.ts index 176929502e..4b19cfe2ba 100644 --- a/frontend/mock-backend/mock-api-middleware.ts +++ b/frontend/mock-backend/mock-api-middleware.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,16 @@ import proxyMiddleware from './proxy-middleware'; import { ApiFilter, PredicateOp } from '../src/apis/filter'; import { ApiListExperimentsResponse, ApiExperiment } from '../src/apis/experiment'; import { ApiListJobsResponse, ApiJob } from '../src/apis/job'; -import { ApiListPipelinesResponse, ApiPipeline } from '../src/apis/pipeline'; -import { ApiListRunsResponse, ApiResourceType, ApiRun, RunStorageState } from '../src/apis/run'; +import { + ApiListPipelinesResponse, + ApiPipeline, + ApiListPipelineVersionsResponse, + ApiPipelineVersion, +} from '../src/apis/pipeline'; +import { ApiListRunsResponse, ApiResourceType, ApiRun, ApiRunStorageState } from '../src/apis/run'; import { ExperimentSortKeys, PipelineSortKeys, RunSortKeys } from '../src/lib/Apis'; import { Response } from 'express-serve-static-core'; -import { data as fixedData, namedPipelines } from './fixed-data'; +import { data as fixedData, namedPipelines, v2PipelineSpecMap } from './fixed-data'; const rocMetadataJsonPath = './eval-output/metadata.json'; const rocMetadataJsonPath2 = './eval-output/metadata2.json'; @@ -336,7 +341,9 @@ export default (app: express.Application) => { const runDetail = fixedData.runs.find(r => r.run!.id === req.params.rid); if (runDetail) { runDetail.run!.storage_state = - req.params.method === 'archive' ? RunStorageState.ARCHIVED : RunStorageState.AVAILABLE; + req.params.method === 'archive' + ? ApiRunStorageState.ARCHIVED + : ApiRunStorageState.AVAILABLE; res.json({}); } else { res.status(500).send('Cannot find a run with id ' + req.params.rid); @@ -461,6 +468,26 @@ export default (app: express.Application) => { res.json(response); }); + app.get(v1beta1Prefix + '/pipeline_versions', (req, res) => { + res.header('Content-Type', 'application/json'); + const response: ApiListPipelineVersionsResponse = { + next_page_token: '', + versions: [], + }; + + let versions: ApiPipelineVersion[] = fixedData.versions; + + const start = req.query.page_token ? +req.query.page_token : 0; + const end = start + (+req.query.page_size || 20); + response.versions = versions.slice(start, end); + + if (end < versions.length) { + response.next_page_token = end + ''; + } + + res.json(response); + }); + app.delete(v1beta1Prefix + '/pipelines/:pid', (req, res) => { res.header('Content-Type', 'application/json'); const i = fixedData.pipelines.findIndex(p => p.id === req.params.pid); @@ -497,16 +524,68 @@ export default (app: express.Application) => { return; } let filePath = ''; - if (req.params.pid === namedPipelines.noParamsPipeline.id) { + if (req.params.pid === namedPipelines.noParams.id) { filePath = './mock-backend/mock-conditional-template.yaml'; - } else if (req.params.pid === namedPipelines.unstructuredTextPipeline.id) { + } else if (req.params.pid === namedPipelines.unstructuredText.id) { filePath = './mock-backend/mock-recursive-template.yaml'; } else { filePath = './mock-backend/mock-template.yaml'; } + if (v2PipelineSpecMap.has(req.params.pid)) { + const specPath = v2PipelineSpecMap.get(req.params.pid); + if (specPath) { + filePath = specPath; + } + console.log(filePath); + } res.send(JSON.stringify({ template: fs.readFileSync(filePath, 'utf-8') })); }); + app.get(v1beta1Prefix + '/pipeline_versions', (req, res) => { + // Sample query format: + // query: { + // 'resource_key.type': 'PIPELINE', + // 'resource_key.id': '8fbe3bd6-a01f-11e8-98d0-529269fb1459', + // page_size: '50', + // sort_by: 'created_at desc' + // }, + if ( + req.query['resource_key.id'] && + req.query['resource_key.type'] === 'PIPELINE' && + req.query.page_size > 0 + ) { + const pipeline = fixedData.pipelines.find(p => p.id === req.query['resource_key.id']); + + if (pipeline == null) { + return; + } + const pipeline_versions_list_response: ApiListPipelinesResponse = { + total_size: 1, + pipelines: [pipeline], + }; + res.send(JSON.stringify(pipeline_versions_list_response)); + } + return; + }); + + app.get(v1beta1Prefix + '/pipeline_versions/:pid', (req, res) => { + // TODO: Temporary returning default version only. It requires + // keeping a record of all pipeline id in order to search non-default version. + res.header('Content-Type', 'application/json'); + const pipeline = fixedData.pipelines.find(p => p.id === req.params.pid); + if (!pipeline) { + res + .status(404) + .send( + `No pipeline found with ID: ${req.params.pid}, non-default version can't be found yet.`, + ); + return; + } + if (pipeline.default_version) { + res.json(pipeline.default_version); + } + }); + function mockCreatePipeline(res: Response, name: string, body?: any): void { res.header('Content-Type', 'application/json'); // Don't allow uploading multiple pipelines with the same name diff --git a/frontend/mock-backend/mock-api-server.ts b/frontend/mock-backend/mock-api-server.ts index 24c8a9b680..d51dd95329 100644 --- a/frontend/mock-backend/mock-api-server.ts +++ b/frontend/mock-backend/mock-api-server.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/mock-coinflip-runtime.ts b/frontend/mock-backend/mock-coinflip-runtime.ts index e8d2d4abce..93838d44f5 100644 --- a/frontend/mock-backend/mock-coinflip-runtime.ts +++ b/frontend/mock-backend/mock-coinflip-runtime.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/mock-conditional-template.yaml b/frontend/mock-backend/mock-conditional-template.yaml index 5bb546326d..713e7ef2a9 100644 --- a/frontend/mock-backend/mock-conditional-template.yaml +++ b/frontend/mock-backend/mock-conditional-template.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/mock-error-runtime.ts b/frontend/mock-backend/mock-error-runtime.ts index 05c93e03f0..142d2f037a 100644 --- a/frontend/mock-backend/mock-error-runtime.ts +++ b/frontend/mock-backend/mock-error-runtime.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/mock-retry-runtime.ts b/frontend/mock-backend/mock-retry-runtime.ts index e3e2345c30..ca4f25fdd0 100644 --- a/frontend/mock-backend/mock-retry-runtime.ts +++ b/frontend/mock-backend/mock-retry-runtime.ts @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/mock-template.yaml b/frontend/mock-backend/mock-template.yaml index aaaf245b9b..f35e3d03a6 100644 --- a/frontend/mock-backend/mock-template.yaml +++ b/frontend/mock-backend/mock-template.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/mock-xgboost-runtime.ts b/frontend/mock-backend/mock-xgboost-runtime.ts index a25784eadc..69d8c2de65 100644 --- a/frontend/mock-backend/mock-xgboost-runtime.ts +++ b/frontend/mock-backend/mock-xgboost-runtime.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/mock-xgboost-small-runtime.ts b/frontend/mock-backend/mock-xgboost-small-runtime.ts index 650a70f077..99979ff82d 100644 --- a/frontend/mock-backend/mock-xgboost-small-runtime.ts +++ b/frontend/mock-backend/mock-xgboost-small-runtime.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/model-output/hello-world-big.html b/frontend/mock-backend/model-output/hello-world-big.html index 9d8f746371..a987f02421 100644 --- a/frontend/mock-backend/model-output/hello-world-big.html +++ b/frontend/mock-backend/model-output/hello-world-big.html @@ -1,5 +1,5 @@ <!-- - Copyright 2018 Google LLC + Copyright 2018 The Kubeflow Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/model-output/hello-world.html b/frontend/mock-backend/model-output/hello-world.html index ba5ed8a0d1..370f689ba1 100644 --- a/frontend/mock-backend/model-output/hello-world.html +++ b/frontend/mock-backend/model-output/hello-world.html @@ -1,5 +1,5 @@ <!-- - Copyright 2018 Google LLC + Copyright 2018 The Kubeflow Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/proxy-middleware.ts b/frontend/mock-backend/proxy-middleware.ts index 0a4cdf8b11..e19ee8f598 100644 --- a/frontend/mock-backend/proxy-middleware.ts +++ b/frontend/mock-backend/proxy-middleware.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/mock-backend/tsconfig.json b/frontend/mock-backend/tsconfig.json index b10066e77f..767c7d5754 100644 --- a/frontend/mock-backend/tsconfig.json +++ b/frontend/mock-backend/tsconfig.json @@ -14,11 +14,14 @@ "noImplicitReturns": true, "noImplicitThis": true, "noImplicitAny": true, + "paths": { + "src/*": ["src/*"], + }, "strictBindCallApply": true, "strictNullChecks": true, "suppressImplicitAnyIndexErrors": true, "skipLibCheck": true, - "esModuleInterop": true + "esModuleInterop": true, }, - "exclude": ["dist", "coverage"] + "exclude": ["dist", "coverage"], } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f419964cd3..0928dc6343 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -14,63 +14,62 @@ } }, "@babel/compat-data": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", - "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", "dev": true }, "@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "dev": true, - "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", + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.1", + "@babel/parser": "^7.12.3", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.14.5" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } }, @@ -92,529 +91,524 @@ } }, "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "dev": true, "requires": { - "@babel/types": "^7.12.11", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-annotate-as-pure": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", - "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-compilation-targets": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", - "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "dev": true, "requires": { - "@babel/compat-data": "^7.12.5", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.14.5", - "semver": "^5.5.0" + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" }, "dependencies": { "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "node-releases": "^1.1.71" } }, - "caniuse-lite": { - "version": "1.0.30001181", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001181.tgz", - "integrity": "sha512-m5ul/ARCX50JB8BSNM+oiPmQrR5UmngaQ3QThTTp5HcIIQGP/nPBs82BYLE+tigzm3VW+F4BJIhUyaVtEweelQ==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.650", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.650.tgz", - "integrity": "sha512-j6pRuNylFBbroG6NB8Lw/Im9oDY74s2zWHBP5TmdYg73cBuL6cz//SMgolVa0gIJk/DSL+kO7baJ1DSXW1FUZg==", - "dev": true - }, - "node-releases": { - "version": "1.1.70", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", - "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", - "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.14.5", "regexpu-core": "^4.7.1" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" + "@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" }, "dependencies": { - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", "dev": true, "requires": { - "@babel/types": "^7.12.7" + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dev": true, "requires": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dev": true, "requires": { - "@babel/types": "^7.12.11" + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz", - "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } @@ -645,153 +639,199 @@ } }, "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", "dev": true }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + } + }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz", - "integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", + "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^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==", + "@babel/plugin-proposal-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", + "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", "dev": true, "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/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, - "@babel/plugin-proposal-dynamic-import": { + "@babel/plugin-proposal-decorators": { "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz", + "integrity": "sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ==", "dev": true, "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "@babel/plugin-syntax-decorators": "^7.12.1" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.14.5.tgz", + "integrity": "sha512-T8KZ5abXvKMjF6JcoXjgac3ElmXf0AWzJwi2O/42Jk+HmCky3D9+i1B7NPP1FblyceqTevKeV/9szeikFoaMDg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-default-from": "^7.14.5" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", - "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", - "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-async-generators": { @@ -803,22 +843,40 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "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==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@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==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-decorators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz", - "integrity": "sha512-ir9YW5daRrTYiy9UJ2TzdNIJEZu8KclVzDcfSt4iEmOtwQ4llPtWInNKJyKnVXp1vE4bbVd5S31M/im3mYMO1w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", + "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-dynamic-import": { @@ -830,6 +888,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.14.5.tgz", + "integrity": "sha512-snWDxjuaPEobRBnhpqEfZ8RMxDbHt8+87fiEioGuE+Uc0xAKgSD8QiuL3lF93hPVQfZFAcYwrrf+H5qUhike3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@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", @@ -840,9 +907,18 @@ } }, "@babel/plugin-syntax-flow": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.1.tgz", - "integrity": "sha512-1lBLLmtxrwpm4VKmtVFselI/P3pX+G63fAtUUt6b2Nzgao77KNDwyuRt90Mj2/9pKobtt68FdvjfqohZjg/FCA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz", + "integrity": "sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -858,12 +934,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -920,461 +996,468 @@ "@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==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "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==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", - "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz", - "integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@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==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz", + "integrity": "sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-flow": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-flow": "^7.12.1" } }, "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", + "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" + "@babel/helper-create-regexp-features-plugin": "^7.14.5" } }, "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" } }, "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-react-constant-elements": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.1.tgz", - "integrity": "sha512-KOHd0tIRLoER+J+8f9DblZDa1fLGPwaaN1DI1TVHuQFOpjHV22C3CUB3obeC4fexHY9nx+fH0hQNvLFFfA1mxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz", + "integrity": "sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", - "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz", + "integrity": "sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.12.tgz", - "integrity": "sha512-JDWGuzGNWscYcq8oJVCtSE61a5+XAOos+V0HrxnDieUus4UMnBEosDnY1VJqU5iZ4pA04QY7l0+JvHL1hZEfsw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz", + "integrity": "sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.12.10", - "@babel/helper-module-imports": "^7.12.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.12.1", - "@babel/types": "^7.12.12" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.14.5", + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.12.tgz", - "integrity": "sha512-i1AxnKxHeMxUaWVXQOSIco4tvVvvCxMSfeBMnMM06mpaJt3g+MpxYQQrDfojUQldP1xxraPSJYSMEljoWM/dCg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", + "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.12.12" + "@babel/plugin-transform-react-jsx": "^7.14.5" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", - "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.14.5.tgz", + "integrity": "sha512-M/fmDX6n0cfHK/NLTcPmrfVAORKDhK8tyjDhyxlUjYyPYYO8FRWwuxBA3WBx8kWN/uBUuwGa3s/0+hQ9JIN3Tg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz", - "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.5.tgz", + "integrity": "sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", - "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", + "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@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==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", + "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", "resolve": "^1.8.1", "semver": "^5.5.1" }, "dependencies": { "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "is-core-module": "^2.1.0", + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } } } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", - "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", - "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", - "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", + "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-typescript": "^7.12.1" + "@babel/helper-create-class-features-plugin": "^7.14.6", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-typescript": "^7.14.5" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/polyfill": { @@ -1399,89 +1482,124 @@ } }, "@babel/preset-env": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz", - "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.12.7", - "@babel/helper-compilation-targets": "^7.12.5", - "@babel/helper-module-imports": "^7.12.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.11", - "@babel/plugin-proposal-async-generator-functions": "^7.12.1", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.1", - "@babel/plugin-proposal-json-strings": "^7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.7", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", + "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-async-generator-functions": "^7.14.7", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@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-json-strings": "^7.8.0", + "@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.0", + "@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.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.12.1", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-async-to-generator": "^7.12.1", - "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.11", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-computed-properties": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-dotall-regex": "^7.12.1", - "@babel/plugin-transform-duplicate-keys": "^7.12.1", - "@babel/plugin-transform-exponentiation-operator": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-function-name": "^7.12.1", - "@babel/plugin-transform-literals": "^7.12.1", - "@babel/plugin-transform-member-expression-literals": "^7.12.1", - "@babel/plugin-transform-modules-amd": "^7.12.1", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-modules-systemjs": "^7.12.1", - "@babel/plugin-transform-modules-umd": "^7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", - "@babel/plugin-transform-new-target": "^7.12.1", - "@babel/plugin-transform-object-super": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-property-literals": "^7.12.1", - "@babel/plugin-transform-regenerator": "^7.12.1", - "@babel/plugin-transform-reserved-words": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.7", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.10", - "@babel/plugin-transform-unicode-escapes": "^7.12.1", - "@babel/plugin-transform-unicode-regex": "^7.12.1", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.11", - "core-js-compat": "^3.8.0", - "semver": "^5.5.0" + "@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.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.5", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.14.6", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.15.0", + "semver": "^6.3.0" }, "dependencies": { "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/preset-flow": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.14.5.tgz", + "integrity": "sha512-pP5QEb4qRUSVGzzKx9xqRuHUrM/jEzMqdrZpdMA+oUCRgd5zM1qGr5y5+ZgAL/1tVv1H0dyk5t4SKJntqyiVtg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-flow-strip-types": "^7.14.5" + }, + "dependencies": { + "@babel/plugin-transform-flow-strip-types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.14.5.tgz", + "integrity": "sha512-KhcolBKfXbvjwI3TV7r7TkYm8oNXHNBqGOy6JDVwtecFaRoKYsUUqJdS10q0YDKW1c6aZQgO+Ys3LfGkox8pXA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-flow": "^7.14.5" + } } } }, @@ -1499,26 +1617,58 @@ } }, "@babel/preset-react": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.10.tgz", - "integrity": "sha512-vtQNjaHRl4DUpp+t+g4wvTHsLQuye+n0H/wsXIZRn69oz/fvNC7gQ4IK73zGJBaxvHoxElDvnYCthMcT7uzFoQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", + "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-react-display-name": "^7.12.1", - "@babel/plugin-transform-react-jsx": "^7.12.10", - "@babel/plugin-transform-react-jsx-development": "^7.12.7", - "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx-development": "^7.14.5", + "@babel/plugin-transform-react-pure-annotations": "^7.14.5" } }, "@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==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz", + "integrity": "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.12.1" + } + }, + "@babel/register": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.14.5.tgz", + "integrity": "sha512-TjJpGz/aDjFGWsItRBQMOFTrmTI9tr79CHOK+KIvLeCkbxuOAk2M5QHjvruIMGoo9OuccMh5euplPzc5FjAKGg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-transform-typescript": "^7.9.0" + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } } }, "@babel/runtime": { @@ -1548,94 +1698,92 @@ } }, "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.14.5" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.14.5" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } }, @@ -1675,6 +1823,18 @@ } } }, + "@base2/pretty-print-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.0.tgz", + "integrity": "sha512-4Th98KlMHr5+JkxfcoDT//6vY8vM+iSPrLNpHhRyLx2CFYi8e2RfqPLdpbnpo0Q5lQC5hNB79yes07zb02fvCw==", + "dev": true + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, "@cnakazawa/watch": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", @@ -1685,6 +1845,63 @@ "minimist": "^1.2.0" } }, + "@craco/craco": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@craco/craco/-/craco-6.2.0.tgz", + "integrity": "sha512-kLc4GSdgR9D5JiZmSxtzbvBKcUFSJqMXImRjjYf5pacwiyAs3XfQwai7T+pExfLQNUnytgkL8jRFUJeYrkVr7g==", + "requires": { + "cross-spawn": "^7.0.0", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "webpack-merge": "^4.2.2" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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==" + }, + "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" + } + } + } + }, "@csstools/convert-colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", @@ -1697,6 +1914,218 @@ "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==", "dev": true }, + "@emotion/cache": { + "version": "10.0.29", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", + "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", + "dev": true, + "requires": { + "@emotion/sheet": "0.9.4", + "@emotion/stylis": "0.8.5", + "@emotion/utils": "0.11.3", + "@emotion/weak-memoize": "0.2.5" + } + }, + "@emotion/core": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.1.1.tgz", + "integrity": "sha512-ZMLG6qpXR8x031NXD8HJqugy/AZSkAuMxxqB46pmAR7ze47MhNJ56cdoX243QPZdGctrdfo+s08yZTiwaUcRKA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.5", + "@emotion/cache": "^10.0.27", + "@emotion/css": "^10.0.27", + "@emotion/serialize": "^0.11.15", + "@emotion/sheet": "0.9.4", + "@emotion/utils": "0.11.3" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "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==", + "dev": true + } + } + }, + "@emotion/css": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz", + "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==", + "dev": true, + "requires": { + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3", + "babel-plugin-emotion": "^10.0.27" + } + }, + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", + "dev": true + }, + "@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==", + "dev": true, + "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==", + "dev": true + }, + "@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", + "dev": true, + "requires": { + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" + } + }, + "@emotion/sheet": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz", + "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==", + "dev": true + }, + "@emotion/styled": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.27.tgz", + "integrity": "sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==", + "dev": true, + "requires": { + "@emotion/styled-base": "^10.0.27", + "babel-plugin-emotion": "^10.0.27" + } + }, + "@emotion/styled-base": { + "version": "10.0.31", + "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.31.tgz", + "integrity": "sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.5", + "@emotion/is-prop-valid": "0.8.8", + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "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==", + "dev": true + } + } + }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", + "dev": true + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", + "dev": true + }, + "@emotion/utils": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", + "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", + "dev": true + }, + "@emotion/weak-memoize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "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==", + "dev": true + } + } + }, "@google-cloud/common": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-2.2.3.tgz", @@ -1938,2824 +2367,11764 @@ "@hapi/hoek": "^8.3.0" } }, - "@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==", + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true } } }, - "@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", - "dev": true, - "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" - } - }, - "@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - } + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true }, - "@jest/reporters": { + "@jest/console": { "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", "dev": true, "requires": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", + "@jest/source-map": "^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": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@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==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" + "slash": "^2.0.0" }, "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true } } }, - "@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==", - "dev": true, - "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==", - "dev": true, - "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==", + "@jest/core": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", "dev": true, "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" + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@kubeflow/frontend": { - "version": "github:kubeflow/frontend#61966eefef771f6ae88dbbb090ffde24f6e5def0", - "from": "github:kubeflow/frontend#61966eefef771f6ae88dbbb090ffde24f6e5def0", - "requires": { - "@material-ui/core": "^3.7.1", - "@material-ui/icons": "^3.0.1", - "@types/lodash.groupby": "^4.6.6", - "google-protobuf": "^3.11.2", - "grpc-web": "^1.0.7", - "lodash.debounce": "^4.0.8", - "lodash.flatten": "^4.4.0", - "lodash.groupby": "^4.6.0", - "lodash.isfunction": "^3.0.9", - "react-svg-line-chart": "^2.0.2", - "request": "^2.88.2" - }, - "dependencies": { - "google-protobuf": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.14.0.tgz", - "integrity": "sha512-bwa8dBuMpOxg7COyqkW6muQuvNnWgVN8TX/epDRGW5m0jcrmq2QJyCyiV8ZE2/6LaIIqJtiv9bYokFhfpy/o6w==" - }, - "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" + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" } - } - } - }, - "@material-ui/core": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-3.7.1.tgz", - "integrity": "sha512-CjIGwvzn84BgzXWzC9M/Tz2gDI7AfUe3G1JXkZQAVy+ddPikh+iZwn5snnElfcjuC+ahXxaIyK49ARt3NM49vQ==", - "requires": { - "@babel/runtime": "7.2.0", - "@material-ui/utils": "^3.0.0-alpha.1", - "@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", - "keycode": "^2.1.9", - "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" - } - }, - "@material-ui/icons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-3.0.1.tgz", - "integrity": "sha512-1kNcxYiIT1x8iDPEAlgmKrfRTIV8UyK6fLVcZ9kMHIKGWft9I451V5mvSrbCjbf7MX1TbLWzZjph0aVCRf9MqQ==", - "requires": { - "@babel/runtime": "7.0.0", - "recompose": "^0.29.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", - "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==", + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, "requires": { - "regenerator-runtime": "^0.12.0" + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" } }, - "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==" + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } }, - "recompose": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.29.0.tgz", - "integrity": "sha512-J/qLXNU4W+AeHCDR70ajW8eMd1uroqZaECTj6qqDLPMILz3y0EzpYlvrnxKB9DnqcngWrtGwjXY9JeXaW9kS1A==", + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, "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" + "@types/istanbul-lib-report": "*" } - } - } - }, - "@material-ui/utils": { - "version": "3.0.0-alpha.2", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-3.0.0-alpha.2.tgz", - "integrity": "sha512-dnxwCXMSLFFXiQm3EK/Ikxm4oYvr3WxxVoPZ0Uh4CBqZNr0J8nzDNlDcGP/0UeC134UUz2ZwgbTL/smxrGZ8sg==", - "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==", - "dev": true, - "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==", - "dev": true - }, - "@sheerun/mutationobserver-shim": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz", - "integrity": "sha512-vTCdPp/T/Q3oSqwHmZ5Kpa9oI7iLtGl3RQaA/NyLHikvcrPxACkkKVr/XzkSPJWXHRhKGzVvb0urJsbMlRxi1Q==", - "dev": true - }, - "@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==", - "dev": true - }, - "@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==", - "dev": true - }, - "@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==", - "dev": true - }, - "@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==", - "dev": true - }, - "@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==", - "dev": true - }, - "@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==", - "dev": true - }, - "@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==", - "dev": true - }, - "@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==", - "dev": true - }, - "@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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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" - } - }, - "@testing-library/dom": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-6.12.2.tgz", - "integrity": "sha512-KCnvHra5fV+wDxg3wJObGvZFxq7v1DJt829GNFLuRDjKxVNc/B5AdsylNF5PMHFbWMXDsHwM26d2NZcZO9KjbQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.6.2", - "@sheerun/mutationobserver-shim": "^0.3.2", - "@types/testing-library__dom": "^6.0.0", - "aria-query": "3.0.0", - "pretty-format": "^24.9.0", - "wait-for-expect": "^3.0.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz", - "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==", + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.2" + "@types/yargs-parser": "*" } }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "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==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", "dev": true }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "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==", "dev": true, "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "to-regex-range": "^5.0.1" } }, - "react-is": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", - "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "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==", + "dev": true + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "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==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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==", + "dev": true, + "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" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "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==", "dev": true } } }, - "@testing-library/react": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-9.4.0.tgz", - "integrity": "sha512-XdhDWkI4GktUPsz0AYyeQ8M9qS/JFie06kcSnUVcpgOwFjAu9vhwR83qBl+lw9yZWkbECjL8Hd+n5hH6C0oWqg==", + "@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", "dev": true, "requires": { - "@babel/runtime": "^7.7.6", - "@testing-library/dom": "^6.11.0", - "@types/testing-library__react": "^9.1.2" + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" }, "dependencies": { - "@babel/runtime": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz", - "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==", + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.2" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" } }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", - "dev": true - } - } - }, - "@types/babel__core": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", - "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", - "dev": true, - "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.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.0", + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/fake-timers": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/reporters": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "node-notifier": "^8.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "dependencies": { + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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==", + "dev": true, + "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" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.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==", + "dev": true + } + } + }, + "@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==", + "dev": true, + "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==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@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==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "dev": true, + "requires": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + }, + "dependencies": { + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "is-number": "^7.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==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@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" + } + }, + "@material-ui/icons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-3.0.1.tgz", + "integrity": "sha512-1kNcxYiIT1x8iDPEAlgmKrfRTIV8UyK6fLVcZ9kMHIKGWft9I451V5mvSrbCjbf7MX1TbLWzZjph0aVCRf9MqQ==", + "requires": { + "@babel/runtime": "7.0.0", + "recompose": "^0.29.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", + "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==", + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "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==" + }, + "recompose": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.29.0.tgz", + "integrity": "sha512-J/qLXNU4W+AeHCDR70ajW8eMd1uroqZaECTj6qqDLPMILz3y0EzpYlvrnxKB9DnqcngWrtGwjXY9JeXaW9kS1A==", + "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" + } + } + } + }, + "@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" + } + }, + "@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" + } + }, + "@mdx-js/loader": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.6.22.tgz", + "integrity": "sha512-9CjGwy595NaxAYp0hF9B/A0lH6C8Rms97e2JS9d3jVUtILn6pT5i5IV965ra3lIWc7Rs1GG1tBdVF7dCowYe6Q==", + "dev": true, + "requires": { + "@mdx-js/mdx": "1.6.22", + "@mdx-js/react": "1.6.22", + "loader-utils": "2.0.0" + } + }, + "@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + } + } + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "dev": true + }, + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "dev": true + }, + "@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==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz", + "integrity": "sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==", + "dev": true, + "requires": { + "ansi-html": "^0.0.7", + "error-stack-parser": "^2.0.6", + "html-entities": "^1.2.1", + "native-url": "^0.2.6", + "schema-utils": "^2.6.5", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@popperjs/core": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.3.tgz", + "integrity": "sha512-xDu17cEfh7Kid/d95kB6tZsLOmSWKCZKtprnhVepjsSaCij+lM3mItSJDuuHDMbCWTh8Ejmebwb+KONcCJ0eXQ==", + "dev": true + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, + "@reach/router": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@reach/router/-/router-1.3.4.tgz", + "integrity": "sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA==", + "dev": true, + "requires": { + "create-react-context": "0.3.0", + "invariant": "^2.2.3", + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4" + } + }, + "@rollup/plugin-node-resolve": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", + "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8", + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.14.2" + }, + "dependencies": { + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + } + } + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@storybook/addon-actions": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.3.6.tgz", + "integrity": "sha512-1MBqCbFiupGEDyIXqFkzF4iR8AduuB7qSNduqtsFauvIkrG5bnlbg5JC7WjnixkCaaWlufgbpasEHioXO9EXGw==", + "dev": true, + "requires": { + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/client-api": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/theming": "6.3.6", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.20", + "polished": "^4.0.5", + "prop-types": "^15.7.2", + "react-inspector": "^5.1.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "uuid-browser": "^3.1.0" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "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==", + "dev": true + } + } + }, + "@storybook/addon-backgrounds": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.3.6.tgz", + "integrity": "sha512-1lBVAem2M+ggb1UNVgB7/56LaQAor9lI8q0xtQdAzAkt9K4RbbOsLGRhyUm3QH5OiB3qHHG5WQBujWUD6Qfy4g==", + "dev": true, + "requires": { + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/theming": "6.3.6", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "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==", + "dev": true + } + } + }, + "@storybook/addon-controls": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.3.6.tgz", + "integrity": "sha512-wTWmnZl2qEAUqgLh8a7TL5f6w37Q51lAoJNlwxFFBSKtGS7xFUnou4qTUArNy5iKu1cWoVvofJ9RnP1maGByYA==", + "dev": true, + "requires": { + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/client-api": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/node-logger": "6.3.6", + "@storybook/theming": "6.3.6", + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + } + } + }, + "@storybook/addon-docs": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.3.6.tgz", + "integrity": "sha512-/ZPB9u3lfc6ZUrgt9HENU1BxAHNfTbh9r2LictQ8o9gYE/BqvZutl2zqilTpVuutQtTgQ6JycVhxtpk9+TDcuA==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@jest/transform": "^26.6.2", + "@mdx-js/loader": "^1.6.22", + "@mdx-js/mdx": "^1.6.22", + "@mdx-js/react": "^1.6.22", + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/builder-webpack4": "6.3.6", + "@storybook/client-api": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/core": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/csf": "0.0.1", + "@storybook/csf-tools": "6.3.6", + "@storybook/node-logger": "6.3.6", + "@storybook/postinstall": "6.3.6", + "@storybook/source-loader": "6.3.6", + "@storybook/theming": "6.3.6", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "core-js": "^3.8.2", + "doctrine": "^3.0.0", + "escodegen": "^2.0.0", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "html-tags": "^3.1.0", + "js-string-escape": "^1.0.1", + "loader-utils": "^2.0.0", + "lodash": "^4.17.20", + "p-limit": "^3.1.0", + "prettier": "~2.2.1", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^14.3.2", + "regenerator-runtime": "^0.13.7", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true + }, + "@babel/core": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", + "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.0", + "@babel/helper-module-transforms": "^7.15.0", + "@babel/helpers": "^7.14.8", + "@babel/parser": "^7.15.0", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "dev": true, + "requires": { + "@babel/types": "^7.15.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/parser": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.0.tgz", + "integrity": "sha512-0v7oNOjr6YT9Z2RAOTv4T9aP+ubfx4Q/OhVtAet7PFDt0t9Oy6Jn+/rfC6b8HJ5zEqrQCiMxJfgtHpmIminmJQ==", + "dev": true + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", + "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", + "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", + "dev": true, + "requires": { + "@babel/types": "^7.15.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", + "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + } + } + }, + "@babel/helper-replace-supers": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", + "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.15.0", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "dev": true, + "requires": { + "@babel/types": "^7.14.8" + } + }, + "@babel/helpers": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.8.tgz", + "integrity": "sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==", + "dev": true, + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/traverse": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", + "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "dev": true, + "requires": { + "@babel/types": "^7.15.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/parser": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.0.tgz", + "integrity": "sha512-0v7oNOjr6YT9Z2RAOTv4T9aP+ubfx4Q/OhVtAet7PFDt0t9Oy6Jn+/rfC6b8HJ5zEqrQCiMxJfgtHpmIminmJQ==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + } + } + }, + "browserslist": { + "version": "4.16.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", + "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001248", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.793", + "escalade": "^3.1.1", + "node-releases": "^1.1.73" + } + }, + "caniuse-lite": { + "version": "1.0.30001249", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001249.tgz", + "integrity": "sha512-vcX4U8lwVXPdqzPWi6cAJ3FnQaqXbBqy/GZseKNQzRj37J7qZdGcBtxq/QLFNLLlfsoXLUdHw8Iwenri86Tagw==", + "dev": true + }, + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "electron-to-chromium": { + "version": "1.3.799", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.799.tgz", + "integrity": "sha512-V2rbYWdGvSqrg+95KjkVuSi41bGfrhrOzjl1tSi2VLnm0mRe3FsSvhiqidSiSll9WiMhrQAhpDcW/wcqK3c+Yw==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "dev": true + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "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==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@storybook/addon-essentials": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.3.6.tgz", + "integrity": "sha512-FUrpCeINaN4L9L81FswtQFEq2xLwj3W7EyhmqsZcYSr64nscpQyjlPVjs5zhrEanOGIf+4E+mBmWafxbYufXwQ==", + "dev": true, + "requires": { + "@storybook/addon-actions": "6.3.6", + "@storybook/addon-backgrounds": "6.3.6", + "@storybook/addon-controls": "6.3.6", + "@storybook/addon-docs": "6.3.6", + "@storybook/addon-measure": "^2.0.0", + "@storybook/addon-toolbars": "6.3.6", + "@storybook/addon-viewport": "6.3.6", + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/node-logger": "6.3.6", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7", + "storybook-addon-outline": "^1.4.1", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "@storybook/addon-links": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.3.6.tgz", + "integrity": "sha512-PaeAJTjwtPlhrLZlaSQ1YIFA8V0C1yI0dc351lPbTiE7fJ7DwTE03K6xIF/jEdTo+xzhi2PM1Fgvi/SsSecI8w==", + "dev": true, + "requires": { + "@storybook/addons": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/csf": "0.0.1", + "@storybook/router": "6.3.6", + "@types/qs": "^6.9.5", + "core-js": "^3.8.2", + "global": "^4.4.0", + "prop-types": "^15.7.2", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "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==", + "dev": true + } + } + }, + "@storybook/addon-measure": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-2.0.0.tgz", + "integrity": "sha512-ZhdT++cX+L9LwjhGYggvYUUVQH/MGn2rwbrAwCMzA/f2QTFvkjxzX8nDgMxIhaLCDC+gHIxfJG2wrWN0jkBr3g==", + "dev": true + }, + "@storybook/addon-toolbars": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.3.6.tgz", + "integrity": "sha512-VpwkMtvT/4KNjqdO2SCkFw4koMgYN2k8hckbTGRzuUYYTHBvl9yK4q0A7RELEnkm/tsmDI1TjenV/MBifp2Aiw==", + "dev": true, + "requires": { + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/client-api": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/theming": "6.3.6", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "@storybook/addon-viewport": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.3.6.tgz", + "integrity": "sha512-Z5eztFFGd6vd+38sDurfTkIr9lY6EYWtMJzr5efedRZGg2IZLXZxQCoyjKEB29VB/IIjHEYHhHSh4SFsHT/m6g==", + "dev": true, + "requires": { + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/theming": "6.3.6", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "prop-types": "^15.7.2", + "regenerator-runtime": "^0.13.7" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "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==", + "dev": true + } + } + }, + "@storybook/addons": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.3.6.tgz", + "integrity": "sha512-tVV0vqaEEN9Md4bgScwfrnZYkN8iKZarpkIOFheLev+PHjSp8lgWMK5SNWDlbBYqfQfzrz9xbs+F07bMjfx9jQ==", + "dev": true, + "requires": { + "@storybook/api": "6.3.6", + "@storybook/channels": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/router": "6.3.6", + "@storybook/theming": "6.3.6", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "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==", + "dev": true + } + } + }, + "@storybook/api": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.3.6.tgz", + "integrity": "sha512-F5VuR1FrEwD51OO/EDDAZXNfF5XmJedYHJLwwCB4az2ZMrzG45TxGRmiEohrSTO6wAHGkAvjlEoX5jWOCqQ4pw==", + "dev": true, + "requires": { + "@reach/router": "^1.3.4", + "@storybook/channels": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/csf": "0.0.1", + "@storybook/router": "6.3.6", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.3.6", + "@types/reach__router": "^1.3.7", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.20", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^5.3.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + } + }, + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "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==", + "dev": true + } + } + }, + "@storybook/builder-webpack4": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.3.6.tgz", + "integrity": "sha512-LhTPQQowS2t6BRnyfusWZLbhjjf54/HiQyovJTTDnqrCiO6QoCMbVnp79LeO1aSkpQCKoeqOZ7TzH87fCytnZA==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/channel-postmessage": "6.3.6", + "@storybook/channels": "6.3.6", + "@storybook/client-api": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/core-common": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/node-logger": "6.3.6", + "@storybook/router": "6.3.6", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.3.6", + "@storybook/ui": "6.3.6", + "@types/node": "^14.0.10", + "@types/webpack": "^4.41.26", + "autoprefixer": "^9.8.6", + "babel-loader": "^8.2.2", + "babel-plugin-macros": "^2.8.0", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "dotenv-webpack": "^1.8.0", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^4.1.6", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "global": "^4.4.0", + "html-webpack-plugin": "^4.0.0", + "pnp-webpack-plugin": "1.6.4", + "postcss": "^7.0.36", + "postcss-flexbugs-fixes": "^4.2.1", + "postcss-loader": "^4.2.0", + "raw-loader": "^4.0.2", + "react-dev-utils": "^11.0.3", + "stable": "^0.1.8", + "style-loader": "^1.3.0", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-filter-warnings-plugin": "^1.2.1", + "webpack-hot-middleware": "^2.25.0", + "webpack-virtual-modules": "^0.2.2" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true + }, + "@babel/core": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", + "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.0", + "@babel/helper-module-transforms": "^7.15.0", + "@babel/helpers": "^7.14.8", + "@babel/parser": "^7.15.0", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "dev": true, + "requires": { + "@babel/types": "^7.15.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", + "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", + "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", + "dev": true, + "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" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", + "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", + "dev": true, + "requires": { + "@babel/types": "^7.15.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", + "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + } + } + }, + "@babel/helper-replace-supers": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", + "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.15.0", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "dev": true, + "requires": { + "@babel/types": "^7.14.8" + } + }, + "@babel/helpers": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.8.tgz", + "integrity": "sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==", + "dev": true, + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.0.tgz", + "integrity": "sha512-0v7oNOjr6YT9Z2RAOTv4T9aP+ubfx4Q/OhVtAet7PFDt0t9Oy6Jn+/rfC6b8HJ5zEqrQCiMxJfgtHpmIminmJQ==", + "dev": true + }, + "@babel/plugin-proposal-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz", + "integrity": "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-decorators": "^7.14.5" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.0.tgz", + "integrity": "sha512-WIIEazmngMEEHDaPTx0IZY48SaAmjVWe3TRSX7cmJXn0bEv9midFzAjxiruOWYIVf5iQ10vFx7ASDpgEO08L5w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.15.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-typescript": "^7.14.5" + }, + "dependencies": { + "@babel/helper-create-class-features-plugin": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz", + "integrity": "sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.15.0", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-split-export-declaration": "^7.14.5" + } + } + } + }, + "@babel/preset-typescript": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz", + "integrity": "sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-typescript": "^7.15.0" + } + }, + "@babel/traverse": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", + "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + } + } + }, + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + } + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/node": { + "version": "14.17.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.9.tgz", + "integrity": "sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==", + "dev": true + }, + "babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", + "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" + } + }, + "browserslist": { + "version": "4.16.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", + "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001248", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.793", + "escalade": "^3.1.1", + "node-releases": "^1.1.73" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001249", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001249.tgz", + "integrity": "sha512-vcX4U8lwVXPdqzPWi6cAJ3FnQaqXbBqy/GZseKNQzRj37J7qZdGcBtxq/QLFNLLlfsoXLUdHw8Iwenri86Tagw==", + "dev": true + }, + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "dev": true, + "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.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "electron-to-chromium": { + "version": "1.3.799", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.799.tgz", + "integrity": "sha512-V2rbYWdGvSqrg+95KjkVuSi41bGfrhrOzjl1tSi2VLnm0mRe3FsSvhiqidSiSll9WiMhrQAhpDcW/wcqK3c+Yw==", + "dev": true + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "dependencies": { + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + } + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "minimist": "^1.2.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==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + } + } + }, + "postcss-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", + "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "@storybook/channel-postmessage": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.3.6.tgz", + "integrity": "sha512-GK7hXnaa+1pxEeMpREDzAZ3+2+k1KN1lbrZf+V7Kc1JZv1/Ji/vxk8AgxwiuzPAMx5J0yh/FduPscIPZ87Pibw==", + "dev": true, + "requires": { + "@storybook/channels": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/core-events": "6.3.6", + "core-js": "^3.8.2", + "global": "^4.4.0", + "qs": "^6.10.0", + "telejson": "^5.3.2" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "@storybook/channels": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.3.6.tgz", + "integrity": "sha512-gCIQVr+dS/tg3AyCxIvkOXMVAs08BCIHXsaa2+XzmacnJBSP+CEHtI6IZ8WEv7tzZuXOiKLVg+wugeIh4j2I4g==", + "dev": true, + "requires": { + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + } + } + }, + "@storybook/client-api": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.3.6.tgz", + "integrity": "sha512-Q/bWuH691L6k7xkiKtBmZo8C+ijgmQ+vc2Fz8pzIRZuMV8ROL74qhrS4BMKV4LhiYm4f8todtWfaQPBjawZMIA==", + "dev": true, + "requires": { + "@storybook/addons": "6.3.6", + "@storybook/channel-postmessage": "6.3.6", + "@storybook/channels": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/csf": "0.0.1", + "@types/qs": "^6.9.5", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.20", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "stable": "^0.1.8", + "store2": "^2.12.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "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==", + "dev": true + } + } + }, + "@storybook/client-logger": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.3.6.tgz", + "integrity": "sha512-qpXQ52ylxPm7l3+WAteV42NmqWA+L1FaJhMOvm2gwl3PxRd2cNXn2BwEhw++eA6qmJH/7mfOKXG+K+QQwOTpRA==", + "dev": true, + "requires": { + "core-js": "^3.8.2", + "global": "^4.4.0" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + } + } + }, + "@storybook/components": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.3.6.tgz", + "integrity": "sha512-aZkmtAY8b+LFXG6dVp6cTS6zGJuxkHRHcesRSWRQPxtgitaz1G58clRHxbKPRokfjPHNgYA3snogyeqxSA7YNQ==", + "dev": true, + "requires": { + "@popperjs/core": "^2.6.0", + "@storybook/client-logger": "6.3.6", + "@storybook/csf": "0.0.1", + "@storybook/theming": "6.3.6", + "@types/color-convert": "^2.0.0", + "@types/overlayscrollbars": "^1.12.0", + "@types/react-syntax-highlighter": "11.0.5", + "color-convert": "^2.0.1", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.20", + "markdown-to-jsx": "^7.1.3", + "memoizerific": "^1.11.3", + "overlayscrollbars": "^1.13.1", + "polished": "^4.0.5", + "prop-types": "^15.7.2", + "react-colorful": "^5.1.2", + "react-popper-tooltip": "^3.1.1", + "react-syntax-highlighter": "^13.5.3", + "react-textarea-autosize": "^8.3.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "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==", + "dev": true, + "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==", + "dev": true + }, + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "markdown-to-jsx": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.3.tgz", + "integrity": "sha512-jtQ6VyT7rMT5tPV0g2EJakEnXLiPksnvlYtwQsVVZ611JsWGN8bQ1tVSDX4s6JllfEH6wmsYxNjTUAMrPmNA8w==", + "dev": true + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "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==", + "dev": true + } + } + }, + "@storybook/core": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.3.6.tgz", + "integrity": "sha512-y71VvVEbqCpG28fDBnfNg3RnUPnicwFYq9yuoFVRF0LYcJCy5cYhkIfW3JG8mN2m0P+LzH80mt2Rj6xlSXrkdQ==", + "dev": true, + "requires": { + "@storybook/core-client": "6.3.6", + "@storybook/core-server": "6.3.6" + } + }, + "@storybook/core-client": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.3.6.tgz", + "integrity": "sha512-Bq86flEdXdMNbdHrGMNQ6OT1tcBQU8ym56d+nG46Ctjf5GN+Dl+rPtRWuu7cIZs10KgqJH+86DXp+tvpQIDidg==", + "dev": true, + "requires": { + "@storybook/addons": "6.3.6", + "@storybook/channel-postmessage": "6.3.6", + "@storybook/client-api": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/csf": "0.0.1", + "@storybook/ui": "6.3.6", + "airbnb-js-shims": "^2.2.1", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.20", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "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==", + "dev": true + } + } + }, + "@storybook/core-common": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.3.6.tgz", + "integrity": "sha512-nHolFOmTPymI50j180bCtcf1UJZ2eOnYaECRtHvVrCUod5KFF7wh2EHrgWoKqrKrsn84UOY/LkX2C2WkbYtWRg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@babel/register": "^7.12.1", + "@storybook/node-logger": "6.3.6", + "@storybook/semver": "^7.3.2", + "@types/glob-base": "^0.3.0", + "@types/micromatch": "^4.0.1", + "@types/node": "^14.0.10", + "@types/pretty-hrtime": "^1.0.0", + "babel-loader": "^8.2.2", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "glob": "^7.1.6", + "glob-base": "^0.3.0", + "interpret": "^2.2.0", + "json5": "^2.1.3", + "lazy-universal-dotenv": "^3.0.1", + "micromatch": "^4.0.2", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true + }, + "@babel/core": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", + "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.0", + "@babel/helper-module-transforms": "^7.15.0", + "@babel/helpers": "^7.14.8", + "@babel/parser": "^7.15.0", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "dev": true, + "requires": { + "@babel/types": "^7.15.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", + "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", + "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", + "dev": true, + "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" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", + "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", + "dev": true, + "requires": { + "@babel/types": "^7.15.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", + "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + } + } + }, + "@babel/helper-replace-supers": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", + "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.15.0", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "dev": true, + "requires": { + "@babel/types": "^7.14.8" + } + }, + "@babel/helpers": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.8.tgz", + "integrity": "sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==", + "dev": true, + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.0.tgz", + "integrity": "sha512-0v7oNOjr6YT9Z2RAOTv4T9aP+ubfx4Q/OhVtAet7PFDt0t9Oy6Jn+/rfC6b8HJ5zEqrQCiMxJfgtHpmIminmJQ==", + "dev": true + }, + "@babel/plugin-proposal-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz", + "integrity": "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-decorators": "^7.14.5" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.0.tgz", + "integrity": "sha512-WIIEazmngMEEHDaPTx0IZY48SaAmjVWe3TRSX7cmJXn0bEv9midFzAjxiruOWYIVf5iQ10vFx7ASDpgEO08L5w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.15.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-typescript": "^7.14.5" + }, + "dependencies": { + "@babel/helper-create-class-features-plugin": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz", + "integrity": "sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.15.0", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-split-export-declaration": "^7.14.5" + } + } + } + }, + "@babel/preset-typescript": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz", + "integrity": "sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-typescript": "^7.15.0" + } + }, + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/traverse": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", + "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + } + } + }, + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + } + } + }, + "@types/node": { + "version": "14.17.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.9.tgz", + "integrity": "sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==", + "dev": true + }, + "babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", + "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.16.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", + "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001248", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.793", + "escalade": "^3.1.1", + "node-releases": "^1.1.73" + } + }, + "caniuse-lite": { + "version": "1.0.30001249", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001249.tgz", + "integrity": "sha512-vcX4U8lwVXPdqzPWi6cAJ3FnQaqXbBqy/GZseKNQzRj37J7qZdGcBtxq/QLFNLLlfsoXLUdHw8Iwenri86Tagw==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.799", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.799.tgz", + "integrity": "sha512-V2rbYWdGvSqrg+95KjkVuSi41bGfrhrOzjl1tSi2VLnm0mRe3FsSvhiqidSiSll9WiMhrQAhpDcW/wcqK3c+Yw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "dependencies": { + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + } + } + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.3.2.tgz", + "integrity": "sha512-L3n1lrV20pRa7ocAuM2YW4Ux1yHM8+dV4shqPdHf1xoeG5KQhp3o0YySvNsBKBISQOCN4N2Db9DV4xYN6xXwyQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "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" + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "minimist": "^1.2.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==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "requires": { + "find-up": "^5.0.0" + } + }, + "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==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "@storybook/core-events": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.3.6.tgz", + "integrity": "sha512-Ut1dz96bJ939oSn5t1ckPXd3WcFejK96Sb3+R/z23vEHUWGBFtygGyw8r/SX/WNDVzGmQU8c+mzJJTZwCBJz8A==", + "dev": true, + "requires": { + "core-js": "^3.8.2" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + } + } + }, + "@storybook/core-server": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.3.6.tgz", + "integrity": "sha512-47ZcfxYn7t891oAMG98iH1BQIgQT9Yk/2BBNVCWY43Ong+ME1xJ6j4C/jkRUOseP7URlfLUQsUYKAYJNVijDvg==", + "dev": true, + "requires": { + "@storybook/builder-webpack4": "6.3.6", + "@storybook/core-client": "6.3.6", + "@storybook/core-common": "6.3.6", + "@storybook/csf-tools": "6.3.6", + "@storybook/manager-webpack4": "6.3.6", + "@storybook/node-logger": "6.3.6", + "@storybook/semver": "^7.3.2", + "@types/node": "^14.0.10", + "@types/node-fetch": "^2.5.7", + "@types/pretty-hrtime": "^1.0.0", + "@types/webpack": "^4.41.26", + "better-opn": "^2.1.1", + "boxen": "^4.2.0", + "chalk": "^4.1.0", + "cli-table3": "0.6.0", + "commander": "^6.2.1", + "compression": "^1.7.4", + "core-js": "^3.8.2", + "cpy": "^8.1.1", + "detect-port": "^1.3.0", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "fs-extra": "^9.0.1", + "globby": "^11.0.2", + "ip": "^1.1.5", + "node-fetch": "^2.6.1", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "regenerator-runtime": "^0.13.7", + "serve-favicon": "^2.5.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "4" + }, + "dependencies": { + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + } + }, + "@types/node": { + "version": "14.17.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.9.tgz", + "integrity": "sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "dev": true, + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@storybook/csf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", + "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "@storybook/csf-tools": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.3.6.tgz", + "integrity": "sha512-MQevelkEUVNCSjKMXLNc/G8q/BB5babPnSeI0IcJq4k+kLUSHtviimLNpPowMgGJBPx/y9VihH8N7vdJUWVj9w==", + "dev": true, + "requires": { + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/traverse": "^7.12.11", + "@babel/types": "^7.12.11", + "@mdx-js/mdx": "^1.6.22", + "@storybook/csf": "^0.0.1", + "core-js": "^3.8.2", + "fs-extra": "^9.0.1", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.20", + "prettier": "~2.2.1", + "regenerator-runtime": "^0.13.7" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + }, + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + }, + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "@storybook/manager-webpack4": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.3.6.tgz", + "integrity": "sha512-qh/jV4b6mFRpRFfhk1JSyO2gKRz8PLPvDt2AD52/bTAtNRzypKoiWqyZNR2CJ9hgNQtDrk2CO3eKPrcdKYGizQ==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.3.6", + "@storybook/core-client": "6.3.6", + "@storybook/core-common": "6.3.6", + "@storybook/node-logger": "6.3.6", + "@storybook/theming": "6.3.6", + "@storybook/ui": "6.3.6", + "@types/node": "^14.0.10", + "@types/webpack": "^4.41.26", + "babel-loader": "^8.2.2", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "dotenv-webpack": "^1.8.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^4.0.0", + "node-fetch": "^2.6.1", + "pnp-webpack-plugin": "1.6.4", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^1.3.0", + "telejson": "^5.3.2", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-virtual-modules": "^0.2.2" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true + }, + "@babel/core": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", + "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.0", + "@babel/helper-module-transforms": "^7.15.0", + "@babel/helpers": "^7.14.8", + "@babel/parser": "^7.15.0", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "dev": true, + "requires": { + "@babel/types": "^7.15.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", + "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", + "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", + "dev": true, + "requires": { + "@babel/types": "^7.15.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", + "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + } + } + }, + "@babel/helper-replace-supers": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", + "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.15.0", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "dev": true, + "requires": { + "@babel/types": "^7.14.8" + } + }, + "@babel/helpers": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.8.tgz", + "integrity": "sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==", + "dev": true, + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.0.tgz", + "integrity": "sha512-0v7oNOjr6YT9Z2RAOTv4T9aP+ubfx4Q/OhVtAet7PFDt0t9Oy6Jn+/rfC6b8HJ5zEqrQCiMxJfgtHpmIminmJQ==", + "dev": true + }, + "@babel/traverse": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", + "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + } + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/node": { + "version": "14.17.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.9.tgz", + "integrity": "sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==", + "dev": true + }, + "babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "browserslist": { + "version": "4.16.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", + "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001248", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.793", + "escalade": "^3.1.1", + "node-releases": "^1.1.73" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001249", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001249.tgz", + "integrity": "sha512-vcX4U8lwVXPdqzPWi6cAJ3FnQaqXbBqy/GZseKNQzRj37J7qZdGcBtxq/QLFNLLlfsoXLUdHw8Iwenri86Tagw==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "dev": true, + "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.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + } + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "electron-to-chromium": { + "version": "1.3.799", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.799.tgz", + "integrity": "sha512-V2rbYWdGvSqrg+95KjkVuSi41bGfrhrOzjl1tSi2VLnm0mRe3FsSvhiqidSiSll9WiMhrQAhpDcW/wcqK3c+Yw==", + "dev": true + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "dependencies": { + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "minimist": "^1.2.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==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true + }, + "node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + } + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "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==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@storybook/node-logger": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.3.6.tgz", + "integrity": "sha512-XMDkMN7nVRojjiezrURlkI57+nz3OoH4UBV6qJZICKclxtdKAy0wwOlUSYEUq+axcJ4nvdfzPPoDfGoj37SW7A==", + "dev": true, + "requires": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^4.1.2", + "pretty-hrtime": "^1.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@storybook/postinstall": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.3.6.tgz", + "integrity": "sha512-90Izr8/GwLiXvdF2A3v1PCpWoxUBgqA0TrWGuiWXfJnfFRVlVrX9A/ClGUPSh80L3oE01E6raaOG4wW4JTRKfw==", + "dev": true, + "requires": { + "core-js": "^3.8.2" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + } + } + }, + "@storybook/preset-create-react-app": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@storybook/preset-create-react-app/-/preset-create-react-app-3.2.0.tgz", + "integrity": "sha512-lLoWCGr5cV+JNDRKYHC2gD+P2eyBqdN8qhmBa+PxDgPSNKfgUf9Wnoh+C7WTG5q2DEeR9SvUpQpZomX9DDQa4Q==", + "dev": true, + "requires": { + "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", + "@types/babel__core": "^7.1.7", + "@types/webpack": "^4.41.13", + "babel-plugin-react-docgen": "^4.1.0", + "pnp-webpack-plugin": "^1.6.4", + "react-docgen-typescript-plugin": "^1.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@storybook/react": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.3.6.tgz", + "integrity": "sha512-2c30XTe7WzKnvgHBGOp1dzBVlhcbc3oEX0SIeVE9ZYkLvRPF+J1jG948a26iqOCOgRAW13Bele37mG1gbl4tiw==", + "dev": true, + "requires": { + "@babel/preset-flow": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", + "@storybook/addons": "6.3.6", + "@storybook/core": "6.3.6", + "@storybook/core-common": "6.3.6", + "@storybook/node-logger": "6.3.6", + "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.253f8c1.0", + "@storybook/semver": "^7.3.2", + "@types/webpack-env": "^1.16.0", + "babel-plugin-add-react-displayname": "^0.0.5", + "babel-plugin-named-asset-import": "^0.3.1", + "babel-plugin-react-docgen": "^4.2.1", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.20", + "prop-types": "^15.7.2", + "react-dev-utils": "^11.0.3", + "react-refresh": "^0.8.3", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "webpack": "4" + }, + "dependencies": { + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + } + }, + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "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==", + "dev": true + } + } + }, + "@storybook/react-docgen-typescript-plugin": { + "version": "1.0.2-canary.253f8c1.0", + "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.2-canary.253f8c1.0.tgz", + "integrity": "sha512-mmoRG/rNzAiTbh+vGP8d57dfcR2aP+5/Ll03KKFyfy5FqWFm/Gh7u27ikx1I3LmVMI8n6jh5SdWMkMKon7/tDw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "endent": "^2.0.1", + "find-cache-dir": "^3.3.1", + "flat-cache": "^3.0.4", + "micromatch": "^4.0.2", + "react-docgen-typescript": "^2.0.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "react-docgen-typescript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.1.0.tgz", + "integrity": "sha512-7kpzLsYzVxff//HUVz1sPWLCdoSNvHD3M8b/iQLdF8fgf7zp26eVysRrAUSxiAT4yQv2zl09zHjJEYSYNxQ8Jw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + } + } + }, + "@storybook/router": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.3.6.tgz", + "integrity": "sha512-fQ1n7cm7lPFav7I+fStQciSVMlNdU+yLY6Fue252rpV5Q68bMTjwKpjO9P2/Y3CCj4QD3dPqwEkn4s0qUn5tNA==", + "dev": true, + "requires": { + "@reach/router": "^1.3.4", + "@storybook/client-logger": "6.3.6", + "@types/reach__router": "^1.3.7", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.20", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "@storybook/source-loader": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.3.6.tgz", + "integrity": "sha512-om3iS3a+D287FzBrbXB/IXB6Z5Ql2yc4dFKTy6FPe5v4N3U0p5puWOKUYWWbTX1JbcpRj0IXXo7952G68tcC1g==", + "dev": true, + "requires": { + "@storybook/addons": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/csf": "0.0.1", + "core-js": "^3.8.2", + "estraverse": "^5.2.0", + "global": "^4.4.0", + "loader-utils": "^2.0.0", + "lodash": "^4.17.20", + "prettier": "~2.2.1", + "regenerator-runtime": "^0.13.7" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "@storybook/theming": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.3.6.tgz", + "integrity": "sha512-mPrQrMUREajNEWxzgR8t0YIZsI9avPv25VNA08fANnwVsc887p4OL5eCTL2dFIlD34YDzAwiyRKYoLj2vDW4nw==", + "dev": true, + "requires": { + "@emotion/core": "^10.1.1", + "@emotion/is-prop-valid": "^0.8.6", + "@emotion/styled": "^10.0.27", + "@storybook/client-logger": "6.3.6", + "core-js": "^3.8.2", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.27", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "polished": "^4.0.5", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@storybook/ui": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.3.6.tgz", + "integrity": "sha512-S9FjISUiAmbBR7d6ubUEcELQdffDfRxerloxkXs5Ou7n8fEPqpgQB01Hw5MLRUwTEpxPzHn+xtIGYritAGxt/Q==", + "dev": true, + "requires": { + "@emotion/core": "^10.1.1", + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/channels": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/router": "6.3.6", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.3.6", + "@types/markdown-to-jsx": "^6.11.3", + "copy-to-clipboard": "^3.3.1", + "core-js": "^3.8.2", + "core-js-pure": "^3.8.2", + "downshift": "^6.0.15", + "emotion-theming": "^10.0.27", + "fuse.js": "^3.6.1", + "global": "^4.4.0", + "lodash": "^4.17.20", + "markdown-to-jsx": "^6.11.4", + "memoizerific": "^1.11.3", + "polished": "^4.0.5", + "qs": "^6.10.0", + "react-draggable": "^4.4.3", + "react-helmet-async": "^1.0.7", + "react-sizeme": "^3.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "store2": "^2.12.0" + }, + "dependencies": { + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + } + }, + "@types/markdown-to-jsx": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/@types/markdown-to-jsx/-/markdown-to-jsx-6.11.3.tgz", + "integrity": "sha512-30nFYpceM/ZEvhGiqWjm5quLUxNeld0HCzJEXMZZDpq53FPkS85mTwkWtCXzCqq8s5JYLgM5W392a02xn8Bdaw==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "markdown-to-jsx": { + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz", + "integrity": "sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw==", + "dev": true, + "requires": { + "prop-types": "^15.6.2", + "unquote": "^1.1.0" + } + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "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==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@surma/rollup-plugin-off-main-thread": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz", + "integrity": "sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==", + "dev": true, + "requires": { + "ejs": "^2.6.1", + "magic-string": "^0.25.0" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "dev": true + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "dev": true + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "dev": true + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "dev": true + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "dev": true + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "dev": true + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "dev": true + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "dev": true + }, + "@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dev": true, + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + } + }, + "@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "dev": true, + "requires": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dev": true, + "requires": { + "@babel/types": "^7.12.6" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + } + }, + "@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "dependencies": { + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + } + } + }, + "@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + } + }, + "@testing-library/dom": { + "version": "7.30.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.30.4.tgz", + "integrity": "sha512-GObDVMaI4ARrZEXaRy4moolNAxWPKvEYNV/fa6Uc2eAzR/t4otS6A7EhrntPBIQLeehL9DbVhscvvv7gd6hWqA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^4.2.2", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.4", + "lz-string": "^1.4.4", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + } + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + } + } + }, + "@testing-library/react": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-11.2.6.tgz", + "integrity": "sha512-TXMCg0jT8xmuU8BkKMtp8l7Z50Ykew5WNX8UoIKTaLFwKkP2+1YDhOLA2Ga3wY4x29jyntk7EWfum0kjlYiSjQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^7.28.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + } + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/aria-query": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.1.tgz", + "integrity": "sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg==", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "dev": true, + "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.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.0", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", "dev": true, "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", + "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/body-parser": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", + "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/braces": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.1.tgz", + "integrity": "sha512-+euflG6ygo4bn0JHtn4pYqcXwRtLvElQ7/nnjDu7iYG56H0+OhCd7d6Ug0IE3WcFpZozBKW2+80FUbv5QGk5AQ==", + "dev": true + }, + "@types/cheerio": { + "version": "0.22.13", + "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.13.tgz", + "integrity": "sha512-OZd7dCUOUkiTorf97vJKwZnSja/DmHfuBAroe1kREZZTCf/tlFecwHhsOos3uVHxeKGZDwzolIrCUApClkdLuA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/color-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.0.tgz", + "integrity": "sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==", + "dev": true, + "requires": { + "@types/color-name": "*" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "@types/connect": { + "version": "3.4.32", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", + "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/d3": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-5.5.0.tgz", + "integrity": "sha512-Bz9EAhWnaO93jLYSAT13blgzwP5Z0grO5THBOXSMeWHIIFHA7ntJSLpHSCr1kDtQunEZKCYT9OfE+4lYY/PwlA==", + "dev": true, + "requires": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-collection": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-voronoi": "*", + "@types/d3-zoom": "*" + } + }, + "@types/d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-3r1fOAAb+SGfcOGXty/LGvoP0ovMec4UtGNUyHOSzYyvSGpmt+eNMxLowol/3HryusevznSfcHZebEShXMwsZA==" + }, + "@types/d3-axis": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-1.0.11.tgz", + "integrity": "sha512-cuigApCyCwYJxaQPghj+BqaxzbdRdT/lpZBMtF7EuEIJ61NMQ8yvGnqFvHCIgJEmUu2Wb2wiZqy9kiHi3Ddftg==", + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-brush": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-1.0.9.tgz", + "integrity": "sha512-mAx8IVc0luUHfk51pl0UN1vzybnAzLMUsvIwLt3fbsqqPkSXr+Pu1AxOPPeyNc27LhHJnfH/LCV7Jlv+Yzqu1A==", + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-chord": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-1.0.8.tgz", + "integrity": "sha512-F0ftYOo7FenAIxsRjXLt8vbij0NLDuVcL+xaGY7R9jUmF2Mrpj1T5XukBI9Cad+Ei7YSxEWREIO+CYcaKCl2qQ==" + }, + "@types/d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-vR3BT0GwHc5y93Jv6bxn3zoxP/vGu+GdXu/r1ApjbP9dLk9I2g6NiV7iP/QMQSuFZd0It0n/qWrfXHxCWwHIkg==", + "dev": true + }, + "@types/d3-color": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.2.1.tgz", + "integrity": "sha512-xwb1tqvYNWllbHuhMFhiXk63Imf+QNq/dJdmbXmr2wQVnwGenCuj3/0IWJ9hdIFQIqzvhT7T37cvx93jtAsDbQ==" + }, + "@types/d3-contour": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-1.3.0.tgz", + "integrity": "sha512-AUCUIjEnC5lCGBM9hS+MryRaFLIrPls4Rbv6ktqbd+TK/RXZPwOy9rtBWmGpbeXcSOYCJTUDwNJuEnmYPJRxHQ==", + "requires": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "@types/d3-delaunay": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.0.tgz", + "integrity": "sha512-iGm7ZaGLq11RK3e69VeMM6Oqj2SjKUB9Qhcyd1zIcqn2uE8w9GFB445yCY46NOQO3ByaNyktX1DK+Etz7ZaX+w==" + }, + "@types/d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-xyWJQMr832vqhu6fD/YqX+MSFBWnkxasNhcStvlhqygXxj0cKqPft0wuGoH5TIq5ADXgP83qeNVa4R7bEYN3uA==" + }, + "@types/d3-drag": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-1.2.2.tgz", + "integrity": "sha512-+UKFeaMVTfSQvMO0PTzOyLXSr7OZbF2Rx1iNVwo2XsyiOsd4MSuLyJKUwRmGn67044QpbNzr+VD6/8iBBLExWw==", + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-dsv": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-1.0.35.tgz", + "integrity": "sha512-QeH7cN9phcm68TDwpSGmzE71/JtGoKZ2rZJABNUMQ7nYIhHkm2UldqI1Cp2pjEo8ycSeutudjzq+Lfim/ZCadQ==" + }, + "@types/d3-ease": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha1-k6MBhovp4VBh89RDQ7GrP4rLbwk=" + }, + "@types/d3-fetch": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-1.1.5.tgz", + "integrity": "sha512-o9c0ItT5/Gl3wbNuVpzRnYX1t3RghzeWAjHUVLuyZJudiTxC4f/fC0ZPFWLQ2lVY8pAMmxpV8TJ6ETYCgPeI3A==", + "requires": { + "@types/d3-dsv": "*" + } + }, + "@types/d3-force": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-1.1.1.tgz", + "integrity": "sha512-ePkELuaFWY4yOuf+Bvx5Xd+ihFiYG4bdnW0BlvigovIm8Sob2t76e9RGO6lybQbv6AlW9Icn9HuZ9fmdzEoJyg==" + }, + "@types/d3-format": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.3.0.tgz", + "integrity": "sha512-ZiY4j3iJvAdOwzwW24WjlZbUNvqOsnPAMfPBmdXqxj3uKJbrzBlRrdGl5uC89pZpFs9Dc92E81KcwG2uEgkIZA==" + }, + "@types/d3-geo": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-1.10.3.tgz", + "integrity": "sha512-hfdaxM2L0wA9mDZrrSf2o+DyhEpnJYCiAN+lHFtpfZOVCQrYBA5g33sGRpUbAvjSMyO5jkHbftMWPEhuCMChSg==", + "requires": { + "@types/geojson": "*" + } + }, + "@types/d3-hierarchy": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz", + "integrity": "sha512-DKhqURrURt2c7MsF9sHiF2wrWf2+yZR4Q9oIG026t/ZY4VWoM0Yd7UonaR+rygyReWcFSEjKC/+5A27TgD8R8g==" + }, + "@types/d3-interpolate": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.3.0.tgz", + "integrity": "sha512-Ng4ds7kPSvP/c3W3J5PPUQlgewif1tGBqCeh5lgY+UG82Y7H9zQ8c2gILsEFDLg7wRGOwnuKZ940Q/LSN14w9w==", + "requires": { + "@types/d3-color": "*" + } + }, + "@types/d3-path": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.7.tgz", + "integrity": "sha512-U8dFRG+8WhkLJr2sxZ9Cw/5WeRgBnNqMxGdA1+Z0+ZG6tK0s75OQ4OXnxeyfKuh6E4wQPY8OAKr1+iNDx01BEQ==" + }, + "@types/d3-polygon": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-1.0.6.tgz", + "integrity": "sha512-E6Kyodn9JThgLq20nxSbEce9ow5/ePgm9PX2EO6W1INIL4DayM7cFaiG10DStuamjYAd0X4rntW2q+GRjiIktw==" + }, + "@types/d3-quadtree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-1.0.6.tgz", + "integrity": "sha512-sphVuDdiSIaxLt9kQgebJW98pTktQ/xuN7Ysd8X68Rnjeg/q8+c36/ShlqU52qoKg9nob/JEHH1uQMdxURZidQ==" + }, + "@types/d3-random": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-1.1.1.tgz", + "integrity": "sha512-jUPeBq1XKK9/5XasTvy5QAUwFeMsjma2yt/nP02yC2Tijovx7i/W5776U/HZugxc5SSmtpx4Z3g9KFVon0QrjQ==" + }, + "@types/d3-scale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-2.1.0.tgz", + "integrity": "sha512-vLzRDF5lRxZdCLUOvmw90pkiuSsZdgroBQaat0Ov7Z7OnO9iJsPSm/TZw3wW6m2z/NhIn1E4N0RLNfEi1k4kAA==", + "requires": { + "@types/d3-time": "*" + } + }, + "@types/d3-scale-chromatic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-1.3.0.tgz", + "integrity": "sha512-JqQH5uu1kmdQEa6XSu7NYzQM71lL1YreBPS5o8SnmEDcBRKL6ooykXa8iFPPOEUiTah25ydi+cTrbsogBSMNSQ==" + }, + "@types/d3-selection": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-1.3.4.tgz", + "integrity": "sha512-WQ6Ivy7VuUlZ/Grqc8493ZxC+y/fpvZLy5+8ELvmCr2hll8eJPUqC05l6fgRRA7kjqlpbH7lbmvY6pRKf6yzxw==" + }, + "@types/d3-shape": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.2.7.tgz", + "integrity": "sha512-b2jpGcddOseeNxchaR1SNLqA5xZAbgKix3cXiFeuGeYIEAEUu91UbtelCxOHIUTbNURFnjcbkf4plRbejNzVaQ==", + "requires": { + "@types/d3-path": "*" + } + }, + "@types/d3-time": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-1.0.9.tgz", + "integrity": "sha512-m+D4NbQdDlTVaO7QgXAnatR3IDxQYDMBtRhgSCi5rs9R1LPq1y7/2aqa1FJ2IWjFm1mOV63swDxonnCDlHgHMA==" + }, + "@types/d3-time-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.1.0.tgz", + "integrity": "sha512-/myT3I7EwlukNOX2xVdMzb8FRgNzRMpsZddwst9Ld/VFe6LyJyRp0s32l/V9XoUzk+Gqu56F/oGk6507+8BxrA==" + }, + "@types/d3-timer": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-1.0.8.tgz", + "integrity": "sha512-AKUgQ/nljUFcUO2P3gK24weVI5XwUTdJvjoh8gJ0yxT4aJ+d7t2Or3TB+k9dEYl14BAjoj32D0ky+YzQSVszfg==" + }, + "@types/d3-transition": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-1.1.3.tgz", + "integrity": "sha512-1EukXNuVu/z2G1GZpZagzFJnie9C5zze17ox/vhTgGXNy46rYAm4UkhLLlUeeZ1ndq88k95SOeC8898RpKMLOQ==", + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-voronoi": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-voronoi/-/d3-voronoi-1.1.8.tgz", + "integrity": "sha512-zqNhW7QsYQGlfOdrwPNPG3Wk64zUa4epKRurkJ/dVc6oeXrB+iTDt8sRZ0KZKOOXvvfa1dcdB0e45TZeLBiodQ==", + "dev": true + }, + "@types/d3-zoom": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-1.7.3.tgz", + "integrity": "sha512-Tz7+z4+Id0MxERw/ozinC5QHJmGLARs9Mpi/7VVfiR+9AHcFGe9q+fjQa30/oPNY8WPuCh5p5uuXmBYAJ3y91Q==", + "requires": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "@types/dagre": { + "version": "0.7.40", + "resolved": "https://registry.npmjs.org/@types/dagre/-/dagre-0.7.40.tgz", + "integrity": "sha512-XvaIdpHNW4AeyvPpKuvdpN8yn4RZBztPhJtLeHRtspCNUcgrZn/B9lA0KMIUlyVdIH77f82KzErR+H/ayrnoyQ==", + "dev": true + }, + "@types/enzyme": { + "version": "3.10.3", + "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.3.tgz", + "integrity": "sha512-f/Kcb84sZOSZiBPCkr4He9/cpuSLcKRyQaEE20Q30Prx0Dn6wcyMAWI0yofL6yvd9Ht9G7EVkQeRqK0n5w8ILw==", + "dev": true, + "requires": { + "@types/cheerio": "*", + "@types/react": "*" + } + }, + "@types/enzyme-adapter-react-16": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.0.5.tgz", + "integrity": "sha512-K7HLFTkBDN5RyRmU90JuYt8OWEY2iKUn43SDWEoBOXd/PowUWjLZ3Q6qMBiQuZeFYK/TOstaZxsnI0fXoAfLpg==", + "dev": true, + "requires": { + "@types/enzyme": "*" + } + }, + "@types/eslint": { + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", + "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/estree": { + "version": "0.0.48", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.48.tgz", + "integrity": "sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==", + "dev": true + }, + "@types/events": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", + "dev": true + }, + "@types/express": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz", + "integrity": "sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz", + "integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/node": "*", + "@types/range-parser": "*" + } + }, + "@types/geojson": { + "version": "7946.0.4", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.4.tgz", + "integrity": "sha512-MHmwBtCb7OCv1DSivz2UNJXPGU/1btAWRKlqJ2saEhVJkpkvqHMMaOpKg0v4sAbDWSQekHGvPVMM8nQ+Jen03Q==" + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@types/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-pYHWiDR+EOUN18F9byiAoQNUMZ0=", + "dev": true + }, + "@types/google-protobuf": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@types/google-protobuf/-/google-protobuf-3.7.2.tgz", + "integrity": "sha512-ifFemzjNchFBCtHS6bZNhSZCBu7tbtOe0e8qY0z2J4HtFXmPJjm6fXSaQsTG7yhShBEZtt2oP/bkwu5k+emlkQ==", + "dev": true + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/hast": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.2.tgz", + "integrity": "sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/history": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.2.tgz", + "integrity": "sha512-ui3WwXmjTaY73fOQ3/m3nnajU/Orhi6cEu5rzX+BrAAJxa3eITXZ5ch9suPqtM03OWhAHhPSyBGCN4UKoxO20Q==", + "dev": true + }, + "@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/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha512-GgqePmC3rlsn1nv+kx5OviPuUBU2omhnlXOaJSXFgOdsTcScNFap+OaCb2ip9Bm4m5L8EOehgT5d9M4uNB90zg==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/node": "*" + } + }, + "@types/http-proxy-middleware": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/http-proxy-middleware/-/http-proxy-middleware-0.17.6.tgz", + "integrity": "sha512-NocuMc3omR+yySlkgZlNUDyJa9ENGuwX8Ev7Y9zO//H989drWp18Fn+oAgZZIPu+JWtNinIxENK2TZvo53o3tw==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/http-proxy": "*", + "@types/node": "*" + } + }, + "@types/is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.0.tgz", + "integrity": "sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "23.3.11", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-23.3.11.tgz", + "integrity": "sha512-eroF85PoG87XjCwzxey7yBsQNkIY/TV5myKKSG/022A0FW25afdu/uub6JDMS5eT68zBBt82S+w/MFOTjeLM3Q==", + "dev": true + }, + "@types/js-yaml": { + "version": "3.12.3", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.3.tgz", + "integrity": "sha512-otRe77JNNWzoVGLKw8TCspKswRoQToys4tuL6XYVBFxjgeM0RUrx7m3jkaTdxILxeGry3zM8mGYkGXMeQ02guA==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "@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/lodash": { + "version": "4.14.119", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.119.tgz", + "integrity": "sha512-Z3TNyBL8Vd/M9D9Ms2S3LmFq2sSMzahodD6rCS9V2N44HUMINb75jNkSuwAx7eo2ufqTdfOdtGQpNbieUjPQmw==" + }, + "@types/lodash.groupby": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/@types/lodash.groupby/-/lodash.groupby-4.6.6.tgz", + "integrity": "sha512-kwg3T7Ia63KtDNoQQR8hKrLHCAgrH4I44l5uEMuA6JCbj7DiSccaV4tNV1vbjtAOpX990SolVthJCmBVtRVRgw==", + "requires": { + "@types/lodash": "*" + } + }, + "@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + }, + "@types/markdown-to-jsx": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@types/markdown-to-jsx/-/markdown-to-jsx-6.9.0.tgz", + "integrity": "sha512-LO/oxz+ZfwBDciiVGqLhhdyeWt196kgICe0QS88K1a2u/FgUF1QkeMAm4zdnAo1kNgo2KgFP1Uqy2IiPJLWppA==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/mdast": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.7.tgz", + "integrity": "sha512-YwR7OK8aPmaBvMMUi+pZXBNoW2unbVbfok4YRqGMJBe1dpDlzpRkJrYEYmvjxgs5JhuQmKfDexrN98u941Zasg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==", + "dev": true, + "requires": { + "@types/braces": "*" + } + }, + "@types/mime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", + "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", + "dev": true + }, + "@types/node": { + "version": "10.17.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.11.tgz", + "integrity": "sha512-dNd2pp8qTzzNLAs3O8nH3iU9DG9866KHq9L3ISPB7DOGERZN81nW/5/g/KzMJpCU8jrbCiMRBzV9/sCEdRosig==", + "dev": true + }, + "@types/node-fetch": { + "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/npmlog": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.3.tgz", + "integrity": "sha512-1TcL7YDYCtnHmLhTWbum+IIwLlvpaHoEKS2KNIngEwLzwgDeHaebaEHHbQp8IqzNQ9IYiboLKUjAf7MZqG63+w==", + "dev": true + }, + "@types/overlayscrollbars": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.1.tgz", + "integrity": "sha512-V25YHbSoKQN35UasHf0EKD9U2vcmexRSp78qa8UglxFH8H3D+adEa9zGZwrqpH4TdvqeMrgMqVqsLB4woAryrQ==", + "dev": true + }, + "@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==", + "dev": true + }, + "@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", + "dev": true + }, + "@types/prettier": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.0.tgz", + "integrity": "sha512-gDE8JJEygpay7IjA/u3JiIURvwZW08f0cZSZLAzFoX/ZmeqvS0Sqv+97aKuHpNsalAMMhwPe+iAS6fQbfmbt7A==", + "dev": true + }, + "@types/pretty-hrtime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", + "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", + "dev": true + }, + "@types/prop-types": { + "version": "15.5.8", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.8.tgz", + "integrity": "sha512-3AQoUxQcQtLHsK25wtTWIoIpgYjH3vSDroZOUr7PpCHw/jLY1RB9z9E8dBT/OSmwStVgkRNvdh+ZHNiomRieaw==" + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true + }, + "@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.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "dev": true + }, + "@types/reach__router": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.9.tgz", + "integrity": "sha512-N6rqQqTTAV/zKLfK3iq9Ww3wqCEhTZvsilhl0zI09zETdVq1QGmJH6+/xnj8AFUWIrle2Cqo+PGM/Ltr1vBb9w==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react": { + "version": "16.9.22", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.22.tgz", + "integrity": "sha512-7OSt4EGiLvy0h5R7X+r0c7S739TCU/LvWbkNOrm10lUwNHe7XPz5OLhLOSZeCkqO9JSCly1NkYJ7ODTUqVnHJQ==", + "requires": { + "@types/prop-types": "*", + "csstype": "^2.2.0" + } + }, + "@types/react-dom": { + "version": "16.9.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.5.tgz", + "integrity": "sha512-BX6RQ8s9D+2/gDhxrj8OW+YD4R+8hj7FEM/OJHGNR0KipE1h1mSsf39YeyC81qafkq+N3rU3h3RFbLSwE5VqUg==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-redux": { + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.18.tgz", + "integrity": "sha512-9iwAsPyJ9DLTRH+OFeIrm9cAbIj1i2ANL3sKQFATqnPWRbg+jEFXyZOKHiQK/N86pNRXbb4HRxAxo0SIX1XwzQ==", + "requires": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "@types/react-router": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-4.4.3.tgz", + "integrity": "sha512-8GmjakEBFNCLJbpg9jtDp1EDvFP0VkIPPKBpVwmB3Q+9whFoHu8rluMUXUE5SoGkEQvVOtgJzWmUsJojNpFMQQ==", + "dev": true, + "requires": { + "@types/history": "*", + "@types/react": "*" + } + }, + "@types/react-router-dom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-4.3.1.tgz", + "integrity": "sha512-GbztJAScOmQ/7RsQfO4cd55RuH1W4g6V1gDW3j4riLlt+8yxYLqqsiMzmyuXBLzdFmDtX/uU2Bpcm0cmudv44A==", + "dev": true, + "requires": { + "@types/history": "*", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "@types/react-syntax-highlighter": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz", + "integrity": "sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-test-renderer": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-16.0.3.tgz", + "integrity": "sha512-NWOAxVQeJxpXuNKgw83Hah0nquiw1nUexM9qY/Hk3a+XhZwgMtaa6GLA9E1TKMT75Odb3/KE/jiBO4enTuEJjQ==", + "dev": true, + "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/react-virtualized": { + "version": "9.18.11", + "resolved": "https://registry.npmjs.org/@types/react-virtualized/-/react-virtualized-9.18.11.tgz", + "integrity": "sha512-KT2FzDtV9YT2uN+5g9HPaME4Dtdlh7tEHEqTsOExWYzJGZjGKqHgBHTZC0vnHkzU1rXF9rVDxpi5MZuApoO7rA==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/react": "*" + } + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=", + "dev": true + }, + "@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true + }, + "@types/tapable": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.7.tgz", + "integrity": "sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.0.tgz", + "integrity": "sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@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==", + "dev": true + }, + "@types/webpack": { + "version": "4.41.29", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.29.tgz", + "integrity": "sha512-6pLaORaVNZxiB3FSHbyBiWM7QdazAWda1zvAq4SbZObZqHSDbWLi62iFdblVea6SK9eyBIVp5yHhKt/yNQdR7Q==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/webpack-env": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.2.tgz", + "integrity": "sha512-vKx7WNQNZDyJveYcHAm9ZxhqSGLYwoyLhrHjLBOkw3a7cT76sTdjgtwyijhk1MaHyRIuSztcVwrUOO/NEu68Dw==", + "dev": true + }, + "@types/webpack-sources": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz", + "integrity": "sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@types/yargs": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz", + "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.0.tgz", + "integrity": "sha512-KcF6p3zWhf1f8xO84tuBailV5cN92vhS+VT7UJsPzGBm9VnQqfI9AsiMUFUCYHTYPg1uCCo+HyiDnpDuvkAMfQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.28.0", + "@typescript-eslint/scope-manager": "4.28.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.0.tgz", + "integrity": "sha512-9XD9s7mt3QWMk82GoyUpc/Ji03vz4T5AYlHF9DcoFNfJ/y3UAclRsfGiE2gLfXtyC+JRA3trR7cR296TEb1oiQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.28.0", + "@typescript-eslint/types": "4.28.0", + "@typescript-eslint/typescript-estree": "4.28.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.0.tgz", + "integrity": "sha512-7x4D22oPY8fDaOCvkuXtYYTQ6mTMmkivwEzS+7iml9F9VkHGbbZ3x4fHRwxAb5KeuSkLqfnYjs46tGx2Nour4A==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.28.0", + "@typescript-eslint/types": "4.28.0", + "@typescript-eslint/typescript-estree": "4.28.0", + "debug": "^4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.0.tgz", + "integrity": "sha512-eCALCeScs5P/EYjwo6se9bdjtrh8ByWjtHzOkC4Tia6QQWtQr3PHovxh3TdYTuFcurkYI4rmFsRFpucADIkseg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.28.0", + "@typescript-eslint/visitor-keys": "4.28.0" + } + }, + "@typescript-eslint/types": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.0.tgz", + "integrity": "sha512-p16xMNKKoiJCVZY5PW/AfILw2xe1LfruTcfAKBj3a+wgNYP5I9ZEKNDOItoRt53p4EiPV6iRSICy8EPanG9ZVA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.0.tgz", + "integrity": "sha512-m19UQTRtxMzKAm8QxfKpvh6OwQSXaW1CdZPoCaQuLwAq7VZMNuhJmZR4g5281s2ECt658sldnJfdpSZZaxUGMQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.28.0", + "@typescript-eslint/visitor-keys": "4.28.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.0.tgz", + "integrity": "sha512-PjJyTWwrlrvM5jazxYF5ZPs/nl0kHDZMVbuIcbpawVXaDPelp3+S9zpOz5RmVUfS/fD5l5+ZXNKnWhNYjPzCvw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.28.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@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==", + "dev": true + }, + "@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==", + "dev": true + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "dependencies": { + "mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dev": true, + "requires": { + "mime-db": "1.48.0" + } + } + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "airbnb-js-shims": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz", + "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", + "array.prototype.flatmap": "^1.2.1", + "es5-shim": "^4.5.13", + "es6-shim": "^0.35.5", + "function.prototype.name": "^1.1.0", + "globalthis": "^1.0.0", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.0 || ^1.0.0", + "object.getownpropertydescriptors": "^2.0.3", + "object.values": "^1.1.0", + "promise.allsettled": "^1.0.0", + "promise.prototype.finally": "^3.1.0", + "string.prototype.matchall": "^4.0.0 || ^3.0.1", + "string.prototype.padend": "^3.0.0", + "string.prototype.padstart": "^3.0.0", + "symbol.prototype.description": "^1.0.0" + } + }, + "airbnb-prop-types": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz", + "integrity": "sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA==", + "dev": true, + "requires": { + "array.prototype.find": "^2.1.0", + "function.prototype.name": "^1.1.1", + "has": "^1.0.3", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object.assign": "^4.1.0", + "object.entries": "^1.1.0", + "prop-types": "^15.7.2", + "prop-types-exact": "^1.2.0", + "react-is": "^16.9.0" + }, + "dependencies": { + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "react-is": { + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", + "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==", + "dev": true + } + } + }, + "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==", + "dev": true + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.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==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansi-to-html": { + "version": "0.6.15", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", + "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", + "dev": true, + "requires": { + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "app-root-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", + "integrity": "sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "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": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + } + } + }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "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": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "array.prototype.find": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", + "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.13.0" + } + }, + "array.prototype.flat": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.2.tgz", + "integrity": "sha512-VXjh7lAL4KXKF2hY4FnEW9eRW6IhdvFW1sN/JwLbmECbCgACCnBHNyP3lFiYuttr0jxRN9Bsc5+G27dMseSWqQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.15.0", + "function-bind": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz", + "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } + } + }, + "array.prototype.map": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.3.tgz", + "integrity": "sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "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==", + "dev": true, + "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==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "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": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "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": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "dev": true, + "requires": { + "tslib": "^2.0.1" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + } + } + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "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==", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "attr-accept": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-1.1.3.tgz", + "integrity": "sha512-iT40nudw8zmCweivz6j58g+RT33I4KbaIvRUhjNmDwO2WmsQUxFEZZYZ5w3vXe5x5MX9D7mfvA/XaLOZYFR9EQ==", + "requires": { + "core-js": "^2.5.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", + "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==" + } + } + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "axe-core": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.2.3.tgz", + "integrity": "sha512-pXnVMfJKSIWU2Ml4JHP7pZEPIrgBO1Fd3WGx+fPBsS+KRGhE4vxooD8XBGWbQOIVSZsVK7pUDBBkCicNu80yzQ==", + "dev": true + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "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==", + "dev": true, + "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" + }, + "dependencies": { + "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==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "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==", + "dev": true, + "requires": { + "babylon": "^6.18.0" + } + }, + "babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "dev": true, + "requires": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.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==", + "dev": true, + "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" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "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==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "babel-plugin-add-react-displayname": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", + "integrity": "sha1-M51M3be2X9YtHfnbn+BN4TQSK9U=", + "dev": true + }, + "babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } + } + }, + "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==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-emotion": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz", + "integrity": "sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/serialize": "^0.11.16", + "babel-plugin-macros": "^2.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^1.0.5", + "find-root": "^1.1.0", + "source-map": "^0.5.7" + } + }, + "babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } + } + }, + "babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "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" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "babel-plugin-named-asset-import": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz", + "integrity": "sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw==", + "dev": true + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", + "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.14.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + } + }, + "babel-plugin-react-docgen": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz", + "integrity": "sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==", + "dev": true, + "requires": { + "ast-types": "^0.14.2", + "lodash": "^4.17.15", + "react-docgen": "^5.0.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": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", + "dev": true + }, + "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": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "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": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "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==", + "dev": true + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "babel-preset-react-app": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz", + "integrity": "sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg==", + "dev": true, + "requires": { + "@babel/core": "7.12.3", + "@babel/plugin-proposal-class-properties": "7.12.1", + "@babel/plugin-proposal-decorators": "7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "7.12.1", + "@babel/plugin-proposal-numeric-separator": "7.12.1", + "@babel/plugin-proposal-optional-chaining": "7.12.1", + "@babel/plugin-transform-flow-strip-types": "7.12.1", + "@babel/plugin-transform-react-display-name": "7.12.1", + "@babel/plugin-transform-runtime": "7.12.1", + "@babel/preset-env": "7.12.1", + "@babel/preset-react": "7.12.1", + "@babel/preset-typescript": "7.12.1", + "@babel/runtime": "7.12.1", + "babel-plugin-macros": "2.8.0", + "babel-plugin-transform-react-remove-prop-types": "0.4.24" + }, + "dependencies": { + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", + "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", + "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", + "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", + "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.12.1", + "@babel/helper-compilation-targets": "^7.12.1", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.1", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@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.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.1", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.1", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.1", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.1", + "core-js-compat": "^3.6.2", + "semver": "^5.5.0" + } + }, + "@babel/preset-react": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.1.tgz", + "integrity": "sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-react-display-name": "^7.12.1", + "@babel/plugin-transform-react-jsx": "^7.12.1", + "@babel/plugin-transform-react-jsx-development": "^7.12.1", + "@babel/plugin-transform-react-jsx-self": "^7.12.1", + "@babel/plugin-transform-react-jsx-source": "^7.12.1", + "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + } + }, + "@babel/runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", + "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", + "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==" + }, + "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==", + "dev": true + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "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-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" + } + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "batch-processor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", + "integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-opn": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", + "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", + "dev": true, + "requires": { + "open": "^7.0.3" } }, - "@types/babel__traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz", - "integrity": "sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==", + "bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", "dev": true, "requires": { - "@babel/types": "^7.3.0" + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "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==", + "dev": true + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "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": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.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==", + "dev": true + } + } + }, + "brace": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/brace/-/brace-0.11.1.tgz", + "integrity": "sha1-SJb8ydVE7vRfS7dmDbMg07N5/lg=" + }, + "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" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + } + } + }, + "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": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", - "dev": true, + "brcast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/brcast/-/brcast-3.0.2.tgz", + "integrity": "sha512-f5XwwFCCuvgqP2nMH/hJ74FqnGmb4X3D+NC//HphxJzzhsZvSZa+Hk/syB7j3ZHpPDLMoYU8oBgviRWfNvEfKA==" + }, + "broadcast-channel": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.6.0.tgz", + "integrity": "sha512-0x87tKJULniTOfECZP/LCsqWyMEbz0Oa+4yJ4i5dosOMxWUjx6mZ6nt9QmD2ox0r3MaCPojHrTQ2dj4ASZupeA==", "requires": { - "@types/connect": "*", - "@types/node": "*" + "@babel/runtime": "^7.7.2", + "detect-node": "^2.1.0", + "js-sha3": "0.8.0", + "microseconds": "0.2.0", + "nano-time": "1.0.0", + "rimraf": "3.0.2", + "unload": "2.2.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + } } }, - "@types/cheerio": { - "version": "0.22.13", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.13.tgz", - "integrity": "sha512-OZd7dCUOUkiTorf97vJKwZnSja/DmHfuBAroe1kREZZTCf/tlFecwHhsOos3uVHxeKGZDwzolIrCUApClkdLuA==", + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "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==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", "dev": true, "requires": { - "@types/node": "*" + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } } }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "@types/node": "*" + "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" } }, - "@types/d3": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/d3/-/d3-5.5.0.tgz", - "integrity": "sha512-Bz9EAhWnaO93jLYSAT13blgzwP5Z0grO5THBOXSMeWHIIFHA7ntJSLpHSCr1kDtQunEZKCYT9OfE+4lYY/PwlA==", + "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==", "dev": true, "requires": { - "@types/d3-array": "*", - "@types/d3-axis": "*", - "@types/d3-brush": "*", - "@types/d3-chord": "*", - "@types/d3-collection": "*", - "@types/d3-color": "*", - "@types/d3-contour": "*", - "@types/d3-dispatch": "*", - "@types/d3-drag": "*", - "@types/d3-dsv": "*", - "@types/d3-ease": "*", - "@types/d3-fetch": "*", - "@types/d3-force": "*", - "@types/d3-format": "*", - "@types/d3-geo": "*", - "@types/d3-hierarchy": "*", - "@types/d3-interpolate": "*", - "@types/d3-path": "*", - "@types/d3-polygon": "*", - "@types/d3-quadtree": "*", - "@types/d3-random": "*", - "@types/d3-scale": "*", - "@types/d3-scale-chromatic": "*", - "@types/d3-selection": "*", - "@types/d3-shape": "*", - "@types/d3-time": "*", - "@types/d3-time-format": "*", - "@types/d3-timer": "*", - "@types/d3-transition": "*", - "@types/d3-voronoi": "*", - "@types/d3-zoom": "*" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "@types/d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-3r1fOAAb+SGfcOGXty/LGvoP0ovMec4UtGNUyHOSzYyvSGpmt+eNMxLowol/3HryusevznSfcHZebEShXMwsZA==", - "dev": true - }, - "@types/d3-axis": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-1.0.11.tgz", - "integrity": "sha512-cuigApCyCwYJxaQPghj+BqaxzbdRdT/lpZBMtF7EuEIJ61NMQ8yvGnqFvHCIgJEmUu2Wb2wiZqy9kiHi3Ddftg==", + "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==", "dev": true, "requires": { - "@types/d3-selection": "*" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "@types/d3-brush": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-1.0.9.tgz", - "integrity": "sha512-mAx8IVc0luUHfk51pl0UN1vzybnAzLMUsvIwLt3fbsqqPkSXr+Pu1AxOPPeyNc27LhHJnfH/LCV7Jlv+Yzqu1A==", + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { - "@types/d3-selection": "*" + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" } }, - "@types/d3-chord": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-1.0.8.tgz", - "integrity": "sha512-F0ftYOo7FenAIxsRjXLt8vbij0NLDuVcL+xaGY7R9jUmF2Mrpj1T5XukBI9Cad+Ei7YSxEWREIO+CYcaKCl2qQ==", - "dev": true - }, - "@types/d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-vR3BT0GwHc5y93Jv6bxn3zoxP/vGu+GdXu/r1ApjbP9dLk9I2g6NiV7iP/QMQSuFZd0It0n/qWrfXHxCWwHIkg==", - "dev": true - }, - "@types/d3-color": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.2.1.tgz", - "integrity": "sha512-xwb1tqvYNWllbHuhMFhiXk63Imf+QNq/dJdmbXmr2wQVnwGenCuj3/0IWJ9hdIFQIqzvhT7T37cvx93jtAsDbQ==", - "dev": true - }, - "@types/d3-contour": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-1.3.0.tgz", - "integrity": "sha512-AUCUIjEnC5lCGBM9hS+MryRaFLIrPls4Rbv6ktqbd+TK/RXZPwOy9rtBWmGpbeXcSOYCJTUDwNJuEnmYPJRxHQ==", + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { - "@types/d3-array": "*", - "@types/geojson": "*" + "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": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true + } } }, - "@types/d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-xyWJQMr832vqhu6fD/YqX+MSFBWnkxasNhcStvlhqygXxj0cKqPft0wuGoH5TIq5ADXgP83qeNVa4R7bEYN3uA==", - "dev": true - }, - "@types/d3-drag": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-1.2.2.tgz", - "integrity": "sha512-+UKFeaMVTfSQvMO0PTzOyLXSr7OZbF2Rx1iNVwo2XsyiOsd4MSuLyJKUwRmGn67044QpbNzr+VD6/8iBBLExWw==", + "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==", "dev": true, "requires": { - "@types/d3-selection": "*" + "pako": "~1.0.5" } }, - "@types/d3-dsv": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-1.0.35.tgz", - "integrity": "sha512-QeH7cN9phcm68TDwpSGmzE71/JtGoKZ2rZJABNUMQ7nYIhHkm2UldqI1Cp2pjEo8ycSeutudjzq+Lfim/ZCadQ==", - "dev": true - }, - "@types/d3-ease": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-1.0.7.tgz", - "integrity": "sha1-k6MBhovp4VBh89RDQ7GrP4rLbwk=", - "dev": true - }, - "@types/d3-fetch": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-1.1.5.tgz", - "integrity": "sha512-o9c0ItT5/Gl3wbNuVpzRnYX1t3RghzeWAjHUVLuyZJudiTxC4f/fC0ZPFWLQ2lVY8pAMmxpV8TJ6ETYCgPeI3A==", + "browserslist": { + "version": "4.16.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.5.tgz", + "integrity": "sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==", "dev": true, "requires": { - "@types/d3-dsv": "*" - } - }, - "@types/d3-force": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-1.1.1.tgz", - "integrity": "sha512-ePkELuaFWY4yOuf+Bvx5Xd+ihFiYG4bdnW0BlvigovIm8Sob2t76e9RGO6lybQbv6AlW9Icn9HuZ9fmdzEoJyg==", - "dev": true - }, - "@types/d3-format": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.3.0.tgz", - "integrity": "sha512-ZiY4j3iJvAdOwzwW24WjlZbUNvqOsnPAMfPBmdXqxj3uKJbrzBlRrdGl5uC89pZpFs9Dc92E81KcwG2uEgkIZA==", - "dev": true + "caniuse-lite": "^1.0.30001214", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.719", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001230", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", + "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "dev": true + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + } + } }, - "@types/d3-geo": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-1.10.3.tgz", - "integrity": "sha512-hfdaxM2L0wA9mDZrrSf2o+DyhEpnJYCiAN+lHFtpfZOVCQrYBA5g33sGRpUbAvjSMyO5jkHbftMWPEhuCMChSg==", + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "requires": { - "@types/geojson": "*" + "node-int64": "^0.4.0" } }, - "@types/d3-hierarchy": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz", - "integrity": "sha512-DKhqURrURt2c7MsF9sHiF2wrWf2+yZR4Q9oIG026t/ZY4VWoM0Yd7UonaR+rygyReWcFSEjKC/+5A27TgD8R8g==", - "dev": true - }, - "@types/d3-interpolate": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.3.0.tgz", - "integrity": "sha512-Ng4ds7kPSvP/c3W3J5PPUQlgewif1tGBqCeh5lgY+UG82Y7H9zQ8c2gILsEFDLg7wRGOwnuKZ940Q/LSN14w9w==", + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "requires": { - "@types/d3-color": "*" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "@types/d3-path": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.7.tgz", - "integrity": "sha512-U8dFRG+8WhkLJr2sxZ9Cw/5WeRgBnNqMxGdA1+Z0+ZG6tK0s75OQ4OXnxeyfKuh6E4wQPY8OAKr1+iNDx01BEQ==", - "dev": true - }, - "@types/d3-polygon": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-1.0.6.tgz", - "integrity": "sha512-E6Kyodn9JThgLq20nxSbEce9ow5/ePgm9PX2EO6W1INIL4DayM7cFaiG10DStuamjYAd0X4rntW2q+GRjiIktw==", + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", "dev": true }, - "@types/d3-quadtree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-1.0.6.tgz", - "integrity": "sha512-sphVuDdiSIaxLt9kQgebJW98pTktQ/xuN7Ysd8X68Rnjeg/q8+c36/ShlqU52qoKg9nob/JEHH1uQMdxURZidQ==", + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "@types/d3-random": { + "buffer-indexof": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-1.1.1.tgz", - "integrity": "sha512-jUPeBq1XKK9/5XasTvy5QAUwFeMsjma2yt/nP02yC2Tijovx7i/W5776U/HZugxc5SSmtpx4Z3g9KFVon0QrjQ==", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", "dev": true }, - "@types/d3-scale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-2.1.0.tgz", - "integrity": "sha512-vLzRDF5lRxZdCLUOvmw90pkiuSsZdgroBQaat0Ov7Z7OnO9iJsPSm/TZw3wW6m2z/NhIn1E4N0RLNfEi1k4kAA==", - "dev": true, - "requires": { - "@types/d3-time": "*" - } - }, - "@types/d3-scale-chromatic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-1.3.0.tgz", - "integrity": "sha512-JqQH5uu1kmdQEa6XSu7NYzQM71lL1YreBPS5o8SnmEDcBRKL6ooykXa8iFPPOEUiTah25ydi+cTrbsogBSMNSQ==", + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "@types/d3-selection": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-1.3.4.tgz", - "integrity": "sha512-WQ6Ivy7VuUlZ/Grqc8493ZxC+y/fpvZLy5+8ELvmCr2hll8eJPUqC05l6fgRRA7kjqlpbH7lbmvY6pRKf6yzxw==", + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "@types/d3-shape": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.2.7.tgz", - "integrity": "sha512-b2jpGcddOseeNxchaR1SNLqA5xZAbgKix3cXiFeuGeYIEAEUu91UbtelCxOHIUTbNURFnjcbkf4plRbejNzVaQ==", - "dev": true, - "requires": { - "@types/d3-path": "*" - } - }, - "@types/d3-time": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-1.0.9.tgz", - "integrity": "sha512-m+D4NbQdDlTVaO7QgXAnatR3IDxQYDMBtRhgSCi5rs9R1LPq1y7/2aqa1FJ2IWjFm1mOV63swDxonnCDlHgHMA==", + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, - "@types/d3-time-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.1.0.tgz", - "integrity": "sha512-/myT3I7EwlukNOX2xVdMzb8FRgNzRMpsZddwst9Ld/VFe6LyJyRp0s32l/V9XoUzk+Gqu56F/oGk6507+8BxrA==", + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true }, - "@types/d3-timer": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-1.0.8.tgz", - "integrity": "sha512-AKUgQ/nljUFcUO2P3gK24weVI5XwUTdJvjoh8gJ0yxT4aJ+d7t2Or3TB+k9dEYl14BAjoj32D0ky+YzQSVszfg==", - "dev": true + "c8": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.8.0.tgz", + "integrity": "sha512-x2Bx+IIEd608B1LmjiNQ/kizRPkCWo5XzuV57J9afPjAHSnYXALwbCSOkQ7cSaNXBNblfqcvdycj+klmL+j6yA==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.2", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "rimraf": "^3.0.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^8.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.7" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "v8-to-istanbul": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", + "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } }, - "@types/d3-transition": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-1.1.3.tgz", - "integrity": "sha512-1EukXNuVu/z2G1GZpZagzFJnie9C5zze17ox/vhTgGXNy46rYAm4UkhLLlUeeZ1ndq88k95SOeC8898RpKMLOQ==", + "cacache": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", + "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", "dev": true, "requires": { - "@types/d3-selection": "*" + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, - "@types/d3-voronoi": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@types/d3-voronoi/-/d3-voronoi-1.1.8.tgz", - "integrity": "sha512-zqNhW7QsYQGlfOdrwPNPG3Wk64zUa4epKRurkJ/dVc6oeXrB+iTDt8sRZ0KZKOOXvvfa1dcdB0e45TZeLBiodQ==", - "dev": true + "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" + } }, - "@types/d3-zoom": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-1.7.3.tgz", - "integrity": "sha512-Tz7+z4+Id0MxERw/ozinC5QHJmGLARs9Mpi/7VVfiR+9AHcFGe9q+fjQa30/oPNY8WPuCh5p5uuXmBYAJ3y91Q==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "@types/d3-interpolate": "*", - "@types/d3-selection": "*" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "@types/dagre": { - "version": "0.7.40", - "resolved": "https://registry.npmjs.org/@types/dagre/-/dagre-0.7.40.tgz", - "integrity": "sha512-XvaIdpHNW4AeyvPpKuvdpN8yn4RZBztPhJtLeHRtspCNUcgrZn/B9lA0KMIUlyVdIH77f82KzErR+H/ayrnoyQ==", + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", "dev": true }, - "@types/enzyme": { - "version": "3.10.3", - "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.3.tgz", - "integrity": "sha512-f/Kcb84sZOSZiBPCkr4He9/cpuSLcKRyQaEE20Q30Prx0Dn6wcyMAWI0yofL6yvd9Ht9G7EVkQeRqK0n5w8ILw==", + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, "requires": { - "@types/cheerio": "*", - "@types/react": "*" + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } } }, - "@types/enzyme-adapter-react-16": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.0.5.tgz", - "integrity": "sha512-K7HLFTkBDN5RyRmU90JuYt8OWEY2iKUn43SDWEoBOXd/PowUWjLZ3Q6qMBiQuZeFYK/TOstaZxsnI0fXoAfLpg==", + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "dev": true, "requires": { - "@types/enzyme": "*" + "caller-callsite": "^2.0.0" } }, - "@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==", - "dev": true - }, - "@types/events": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", - "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "@types/express": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz", - "integrity": "sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==", + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, - "@types/express-serve-static-core": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz", - "integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==", + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha1-7pePaUeRTMMMa0R0G27R338EP9U=", + "dev": true + }, + "camelize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" + }, + "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==", "dev": true, "requires": { - "@types/events": "*", - "@types/node": "*", - "@types/range-parser": "*" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "@types/geojson": { - "version": "7946.0.4", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.4.tgz", - "integrity": "sha512-MHmwBtCb7OCv1DSivz2UNJXPGU/1btAWRKlqJ2saEhVJkpkvqHMMaOpKg0v4sAbDWSQekHGvPVMM8nQ+Jen03Q==", + "caniuse-lite": { + "version": "1.0.30001239", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz", + "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==", "dev": true }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "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==", "dev": true, "requires": { - "@types/minimatch": "*", - "@types/node": "*" + "rsvp": "^4.8.4" } }, - "@types/google-protobuf": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@types/google-protobuf/-/google-protobuf-3.7.2.tgz", - "integrity": "sha512-ifFemzjNchFBCtHS6bZNhSZCBu7tbtOe0e8qY0z2J4HtFXmPJjm6fXSaQsTG7yhShBEZtt2oP/bkwu5k+emlkQ==", + "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==", "dev": true }, - "@types/history": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.2.tgz", - "integrity": "sha512-ui3WwXmjTaY73fOQ3/m3nnajU/Orhi6cEu5rzX+BrAAJxa3eITXZ5ch9suPqtM03OWhAHhPSyBGCN4UKoxO20Q==", + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", "dev": true }, - "@types/http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha512-GgqePmC3rlsn1nv+kx5OviPuUBU2omhnlXOaJSXFgOdsTcScNFap+OaCb2ip9Bm4m5L8EOehgT5d9M4uNB90zg==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "@types/events": "*", - "@types/node": "*" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "@types/http-proxy-middleware": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@types/http-proxy-middleware/-/http-proxy-middleware-0.17.6.tgz", - "integrity": "sha512-NocuMc3omR+yySlkgZlNUDyJa9ENGuwX8Ev7Y9zO//H989drWp18Fn+oAgZZIPu+JWtNinIxENK2TZvo53o3tw==", + "change-case": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", + "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", "dev": true, "requires": { - "@types/connect": "*", - "@types/http-proxy": "*", - "@types/node": "*" + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" } }, - "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "change-emitter": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", + "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, - "@types/istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true + }, + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "*" + "css-select": "~1.2.0", + "dom-serializer": "~0.1.1", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + }, + "dependencies": { + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, - "@types/istanbul-reports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", - "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "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": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } } }, - "@types/jest": { - "version": "23.3.11", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-23.3.11.tgz", - "integrity": "sha512-eroF85PoG87XjCwzxey7yBsQNkIY/TV5myKKSG/022A0FW25afdu/uub6JDMS5eT68zBBt82S+w/MFOTjeLM3Q==", + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, - "@types/js-yaml": { - "version": "3.12.3", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.3.tgz", - "integrity": "sha512-otRe77JNNWzoVGLKw8TCspKswRoQToys4tuL6XYVBFxjgeM0RUrx7m3jkaTdxILxeGry3zM8mGYkGXMeQ02guA==", + "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==", "dev": true }, - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, - "@types/jss": { - "version": "9.5.7", - "resolved": "https://registry.npmjs.org/@types/jss/-/jss-9.5.7.tgz", - "integrity": "sha512-OZimStu2QdDMtZ0h72JXqvLVbWUjXd5ZLk8vxLmfuC/nM1AabRyyGoxSufnzixrbpEcVcyy/JV5qeQu2JnjVZw==", + "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==", + "dev": true, "requires": { - "csstype": "^2.0.0", - "indefinite-observable": "^1.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "@types/lodash": { - "version": "4.14.119", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.119.tgz", - "integrity": "sha512-Z3TNyBL8Vd/M9D9Ms2S3LmFq2sSMzahodD6rCS9V2N44HUMINb75jNkSuwAx7eo2ufqTdfOdtGQpNbieUjPQmw==" + "cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true }, - "@types/lodash.groupby": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/@types/lodash.groupby/-/lodash.groupby-4.6.6.tgz", - "integrity": "sha512-kwg3T7Ia63KtDNoQQR8hKrLHCAgrH4I44l5uEMuA6JCbj7DiSccaV4tNV1vbjtAOpX990SolVthJCmBVtRVRgw==", + "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": { - "@types/lodash": "*" + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } } }, - "@types/markdown-to-jsx": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@types/markdown-to-jsx/-/markdown-to-jsx-6.9.0.tgz", - "integrity": "sha512-LO/oxz+ZfwBDciiVGqLhhdyeWt196kgICe0QS88K1a2u/FgUF1QkeMAm4zdnAo1kNgo2KgFP1Uqy2IiPJLWppA==", + "classcat": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.3.tgz", + "integrity": "sha512-6dK2ke4VEJZOFx2ZfdDAl5OhEL8lvkl6EHF92IfRePfHxQTqir5NlcNVUv+2idjDqCX2NDc8m8YSAI5NI975ZQ==" + }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", "dev": true, "requires": { - "@types/react": "*" + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "@types/mime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", - "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "10.17.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.11.tgz", - "integrity": "sha512-dNd2pp8qTzzNLAs3O8nH3iU9DG9866KHq9L3ISPB7DOGERZN81nW/5/g/KzMJpCU8jrbCiMRBzV9/sCEdRosig==", - "dev": true - }, - "@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==", - "dev": true - }, - "@types/prettier": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.0.tgz", - "integrity": "sha512-gDE8JJEygpay7IjA/u3JiIURvwZW08f0cZSZLAzFoX/ZmeqvS0Sqv+97aKuHpNsalAMMhwPe+iAS6fQbfmbt7A==", - "dev": true - }, - "@types/prop-types": { - "version": "15.5.8", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.8.tgz", - "integrity": "sha512-3AQoUxQcQtLHsK25wtTWIoIpgYjH3vSDroZOUr7PpCHw/jLY1RB9z9E8dBT/OSmwStVgkRNvdh+ZHNiomRieaw==" - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true }, - "@types/react": { - "version": "16.9.22", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.22.tgz", - "integrity": "sha512-7OSt4EGiLvy0h5R7X+r0c7S739TCU/LvWbkNOrm10lUwNHe7XPz5OLhLOSZeCkqO9JSCly1NkYJ7ODTUqVnHJQ==", - "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - }, - "@types/react-dom": { - "version": "16.9.5", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.5.tgz", - "integrity": "sha512-BX6RQ8s9D+2/gDhxrj8OW+YD4R+8hj7FEM/OJHGNR0KipE1h1mSsf39YeyC81qafkq+N3rU3h3RFbLSwE5VqUg==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/react-router": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-4.4.3.tgz", - "integrity": "sha512-8GmjakEBFNCLJbpg9jtDp1EDvFP0VkIPPKBpVwmB3Q+9whFoHu8rluMUXUE5SoGkEQvVOtgJzWmUsJojNpFMQQ==", + "cli-table3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", + "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", "dev": true, "requires": { - "@types/history": "*", - "@types/react": "*" + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^4.2.0" } }, - "@types/react-router-dom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-4.3.1.tgz", - "integrity": "sha512-GbztJAScOmQ/7RsQfO4cd55RuH1W4g6V1gDW3j4riLlt+8yxYLqqsiMzmyuXBLzdFmDtX/uU2Bpcm0cmudv44A==", + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "@types/react-test-renderer": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-16.0.3.tgz", - "integrity": "sha512-NWOAxVQeJxpXuNKgw83Hah0nquiw1nUexM9qY/Hk3a+XhZwgMtaa6GLA9E1TKMT75Odb3/KE/jiBO4enTuEJjQ==", + "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==", "dev": true, "requires": { - "@types/react": "*" - } - }, - "@types/react-transition-group": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-2.0.15.tgz", - "integrity": "sha512-S0QnNzbHoWXDbKBl/xk5dxA4FT+BNlBcI3hku991cl8Cz3ytOkUMcCRtzdX11eb86E131bSsQqy5WrPCdJYblw==", - "requires": { - "@types/react": "*" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, - "@types/react-virtualized": { - "version": "9.18.11", - "resolved": "https://registry.npmjs.org/@types/react-virtualized/-/react-virtualized-9.18.11.tgz", - "integrity": "sha512-KT2FzDtV9YT2uN+5g9HPaME4Dtdlh7tEHEqTsOExWYzJGZjGKqHgBHTZC0vnHkzU1rXF9rVDxpi5MZuApoO7rA==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/react": "*" - } + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "dev": true, "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" } }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, - "@types/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=", + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", "dev": true }, - "@types/strip-json-comments": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", - "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, - "@types/testing-library__dom": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-6.12.1.tgz", - "integrity": "sha512-cgqnEjxKk31tQt29j4baSWaZPNjQf3bHalj2gcHQTpW5SuHRal76gOpF0vypeEo6o+sS5inOvvNdzLY0B3FB2A==", + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", "dev": true, "requires": { - "pretty-format": "^24.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "react-is": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", - "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", - "dev": true - } + "color-convert": "^1.9.1", + "color-string": "^1.5.4" } }, - "@types/testing-library__react": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@types/testing-library__react/-/testing-library__react-9.1.2.tgz", - "integrity": "sha512-CYaMqrswQ+cJACy268jsLAw355DZtPZGt3Jwmmotlcu8O/tkoXBI6AeZ84oZBJsIsesozPKzWzmv/0TIU+1E9Q==", + "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==", "dev": true, "requires": { - "@types/react-dom": "*", - "@types/testing-library__dom": "*" + "color-name": "1.1.3" } }, - "@types/yargs": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz", - "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==", + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", "dev": true, "requires": { - "@types/yargs-parser": "*" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "@types/yargs-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", - "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==", + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, - "@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==", + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, + "optional": true + }, + "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": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" + "delayed-stream": "~1.0.0" } }, - "@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==", + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "dev": true + }, + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", "dev": true, "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "arity-n": "^1.0.4" } }, - "@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==", + "compressible": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", + "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", "dev": true, "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" + "mime-db": ">= 1.36.0 < 2" } }, - "@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==", + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "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" + "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": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "mime-db": ">= 1.43.0 < 2" } }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "ms": "2.0.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", "dev": true - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } } } }, - "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "compute-scroll-into-view": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz", + "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "@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==", + "confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", "dev": true }, - "@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==", + "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==", "dev": true }, - "@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==", + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, - "@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==", + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", + "dev": true, + "requires": { + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "safe-buffer": "5.1.2" } }, - "@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==", + "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==", "dev": true }, - "@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==", + "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==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "safe-buffer": "~5.1.1" } }, - "@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==", + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true }, - "@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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true }, - "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "@xtuc/long": "4.2.2" + "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" } }, - "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", - "dev": true + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, - "@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==", + "copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", "dev": true, "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" + "toggle-selection": "^1.0.6" } }, - "@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==", - "dev": true, - "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" - } + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" }, - "@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==", + "core-js-compat": { + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.1.tgz", + "integrity": "sha512-xGhzYMX6y7oEGQGAJmP2TmtBLvR4nZmRGEcFa3ubHOq5YEp51gGN9AovVa0AoujGZIq+Wm6dISiYyGNfdflYww==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "browserslist": "^4.16.6", + "semver": "7.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } } }, - "@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==", - "dev": true, - "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" - } + "core-js-pure": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.8.3.tgz", + "integrity": "sha512-V5qQZVAr9K0xu7jXg1M7qTEwuxUgqr7dUOezGaNa7i+Xn9oXAU/d1fzqD9ObuwpVQOaorO5s70ckyi1woP9lVA==", + "dev": true }, - "@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==", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, "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" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "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==", + "dev": true, + "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==", + "dev": true + } } }, - "@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==", + "coveralls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.2.tgz", + "integrity": "sha512-Tv0LKe/MkBOilH2v7WBiTBdudg2ChfGbdXafc/s330djpF3zKOmuehTeRwjXWc7pzfj9FrDUTA7tEx6Div8NFw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", - "@xtuc/long": "4.2.2" + "growl": "~> 1.10.0", + "js-yaml": "^3.11.0", + "lcov-parse": "^0.0.10", + "log-driver": "^1.2.7", + "minimist": "^1.2.0", + "request": "^2.85.0" } }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@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==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "cp-file": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", + "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", "dev": true, "requires": { - "event-target-shim": "^5.0.0" + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "nested-error-stacks": "^2.0.0", + "p-event": "^4.1.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "cpy": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", + "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", "dev": true, "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "arrify": "^2.0.1", + "cp-file": "^7.0.0", + "globby": "^9.2.0", + "has-glob": "^1.0.0", + "junk": "^3.1.0", + "nested-error-stacks": "^2.1.0", + "p-all": "^2.1.0", + "p-filter": "^2.1.0", + "p-map": "^3.0.0" }, "dependencies": { - "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "@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==", "dev": true }, - "mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "mime-db": "1.45.0" + "array-uniq": "^1.0.1" } - } - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "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" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": 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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "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==", "dev": true, "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" }, "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "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==", "dev": true } } }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true + "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==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } }, - "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", - "dev": true + "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==", + "dev": true, + "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" + } }, - "adjust-sourcemap-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", - "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", + "create-react-context": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz", + "integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==", "dev": true, "requires": { - "assert": "1.4.1", - "camelcase": "5.0.0", - "loader-utils": "1.2.3", - "object-path": "0.11.4", - "regex-parser": "2.2.10" + "gud": "^1.0.0", + "warning": "^4.0.3" }, "dependencies": { - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "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==", + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "loose-envify": "^1.0.0" } } } }, - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "es6-promisify": "^5.0.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "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==", "dev": true, "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "dependencies": { - "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==", - "dev": true - } + "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" } }, - "airbnb-prop-types": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz", - "integrity": "sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA==", + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", "dev": true, "requires": { - "array.prototype.find": "^2.1.0", - "function.prototype.name": "^1.1.1", - "has": "^1.0.3", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object.assign": "^4.1.0", - "object.entries": "^1.1.0", - "prop-types": "^15.7.2", - "prop-types-exact": "^1.2.0", - "react-is": "^16.9.0" + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" }, "dependencies": { - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "react-is": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", - "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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==", "dev": true, "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" + "postcss": "^7.0.5" } }, - "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==", - "dev": true - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true + "css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", "dev": true }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true + "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==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } }, - "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==", + "css-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.3.0.tgz", + "integrity": "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "camelcase": "^6.0.0", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^2.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.3", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.1", + "semver": "^7.3.2" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, - "ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "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==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "postcss": "^7.0.5" } }, - "aproba": { + "css-select": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.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==", "dev": true }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "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": { - "sprintf-js": "~1.0.2" + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^3.3.0" } }, - "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "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==", "dev": true, "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==", "dev": true }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "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": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "css-vendor": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-0.3.8.tgz", + "integrity": "sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo=", + "requires": { + "is-in-browser": "^1.0.2" + } }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "css-what": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", + "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", "dev": true }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "cssdb": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", + "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==", "dev": true }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, - "array-includes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", - "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", + "cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "get-intrinsic": "^1.0.1", - "is-string": "^1.0.5" + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" }, "dependencies": { - "es-abstract": { - "version": "1.18.0-next.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", - "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.1", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.3", - "string.prototype.trimstart": "^1.0.3" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" } }, - "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==", + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } } } }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "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==", "dev": true, "requires": { - "array-uniq": "^1.0.1" + "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" } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + }, + "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": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "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": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true }, - "array.prototype.find": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", - "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", + "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==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.13.0" + "postcss": "^7.0.0" } }, - "array.prototype.flat": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.2.tgz", - "integrity": "sha512-VXjh7lAL4KXKF2hY4FnEW9eRW6IhdvFW1sN/JwLbmECbCgACCnBHNyP3lFiYuttr0jxRN9Bsc5+G27dMseSWqQ==", + "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==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.15.0", - "function-bind": "^1.1.1" + "css-tree": "^1.1.2" }, "dependencies": { - "es-abstract": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz", - "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==", + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.0", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", - "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" } }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "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==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "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==", + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "cssom": "~0.3.6" }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true } } }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "csstype": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.0.tgz", + "integrity": "sha512-by8hi8BlLbowQq0qtkx54d9aN73R9oUW20HISpka5kmgsR9F7nnxgfsemuR2sdCKZh+CDNf5egW9UZMm4mgJRg==" + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, "requires": { - "util": "0.10.3" + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "d3": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-5.7.0.tgz", + "integrity": "sha512-8KEIfx+dFm8PlbJN9PI0suazrZ41QcaAufsKE9PRcqYPWLngHIyWJZX96n6IQKePGgeSu0l7rtlueSSNq8Zc3g==", + "requires": { + "d3-array": "1", + "d3-axis": "1", + "d3-brush": "1", + "d3-chord": "1", + "d3-collection": "1", + "d3-color": "1", + "d3-contour": "1", + "d3-dispatch": "1", + "d3-drag": "1", + "d3-dsv": "1", + "d3-ease": "1", + "d3-fetch": "1", + "d3-force": "1", + "d3-format": "1", + "d3-geo": "1", + "d3-hierarchy": "1", + "d3-interpolate": "1", + "d3-path": "1", + "d3-polygon": "1", + "d3-quadtree": "1", + "d3-random": "1", + "d3-scale": "2", + "d3-scale-chromatic": "1", + "d3-selection": "1", + "d3-shape": "1", + "d3-time": "1", + "d3-time-format": "2", + "d3-timer": "1", + "d3-transition": "1", + "d3-voronoi": "1", + "d3-zoom": "1" + } }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true + "d3-axis": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", + "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true + "d3-brush": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.6.tgz", + "integrity": "sha512-lGSiF5SoSqO5/mYGD5FAeGKKS62JdA1EV7HPrU2b5rTX4qEJJtpjaGLJngjnkewQy7UnGstnFd3168wpf5z76w==", + "requires": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "d3-chord": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", + "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", + "requires": { + "d3-array": "1", + "d3-path": "1" + } + }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + }, + "d3-color": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.2.3.tgz", + "integrity": "sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw==" + }, + "d3-contour": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", + "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", + "requires": { + "d3-array": "^1.1.1" + } + }, + "d3-dispatch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.5.tgz", + "integrity": "sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g==" + }, + "d3-drag": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.3.tgz", + "integrity": "sha512-8S3HWCAg+ilzjJsNtWW1Mutl74Nmzhb9yU6igspilaJzeZVFktmY6oO9xOh5TDk+BM2KrNFjttZNoJJmDnkjkg==", + "requires": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "d3-dsv": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.10.tgz", + "integrity": "sha512-vqklfpxmtO2ZER3fq/B33R/BIz3A1PV0FaZRuFM8w6jLo7sUX1BZDh73fPlr0s327rzq4H6EN1q9U+eCBCSN8g==", + "requires": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + } + }, + "d3-ease": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.5.tgz", + "integrity": "sha512-Ct1O//ly5y5lFM9YTdu+ygq7LleSgSE4oj7vUt9tPLHUi8VCV7QoizGpdWRWAwCO9LdYzIrQDg97+hGVdsSGPQ==" + }, + "d3-fetch": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.1.2.tgz", + "integrity": "sha512-S2loaQCV/ZeyTyIF2oP8D1K9Z4QizUzW7cWeAOAS4U88qOt3Ucf6GsmgthuYSdyB2HyEm4CeGvkQxWsmInsIVA==", + "requires": { + "d3-dsv": "1" + } }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, + "d3-force": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.2.tgz", + "integrity": "sha512-p1vcHAUF1qH7yR+e8ip7Bs61AHjLeKkIn8Z2gzwU2lwEf2wkSpWdjXG0axudTHsVFnYGlMkFaEsVy2l8tAg1Gw==", "requires": { - "lodash": "^4.17.14" + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" } }, - "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==", - "dev": true + "d3-format": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz", + "integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ==" }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true + "d3-geo": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.11.3.tgz", + "integrity": "sha512-n30yN9qSKREvV2fxcrhmHUdXP9TNH7ZZj3C/qnaoU0cVf/Ea85+yT7HY7i8ySPwkwjCNYtmKqQFTvLFngfkItQ==", + "requires": { + "d3-array": "1" + } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "d3-hexbin": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/d3-hexbin/-/d3-hexbin-0.2.2.tgz", + "integrity": "sha1-nFg32s/UcasFM3qeke8Qv8T5iDE=" }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "d3-hierarchy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz", + "integrity": "sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w==" }, - "attr-accept": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-1.1.3.tgz", - "integrity": "sha512-iT40nudw8zmCweivz6j58g+RT33I4KbaIvRUhjNmDwO2WmsQUxFEZZYZ5w3vXe5x5MX9D7mfvA/XaLOZYFR9EQ==", + "d3-interpolate": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.3.2.tgz", + "integrity": "sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==", "requires": { - "core-js": "^2.5.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", - "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==" - } + "d3-color": "1" } }, - "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", - "escalade": "^3.1.1", - "node-releases": "^1.1.70" - } - }, - "caniuse-lite": { - "version": "1.0.30001181", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001181.tgz", - "integrity": "sha512-m5ul/ARCX50JB8BSNM+oiPmQrR5UmngaQ3QThTTp5HcIIQGP/nPBs82BYLE+tigzm3VW+F4BJIhUyaVtEweelQ==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.650", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.650.tgz", - "integrity": "sha512-j6pRuNylFBbroG6NB8Lw/Im9oDY74s2zWHBP5TmdYg73cBuL6cz//SMgolVa0gIJk/DSL+kO7baJ1DSXW1FUZg==", - "dev": true - }, - "node-releases": { - "version": "1.1.70", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", - "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==", - "dev": true - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - } - } + "d3-path": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.7.tgz", + "integrity": "sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA==" }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "d3-polygon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.5.tgz", + "integrity": "sha512-RHhh1ZUJZfhgoqzWWuRhzQJvO7LavchhitSTHGu9oj6uuLFzYZVeBzaWTQ2qSO6bz2w55RMoOCf0MsLCDB6e0w==" }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "d3-quadtree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.5.tgz", + "integrity": "sha512-U2tjwDFbZ75JRAg8A+cqMvqPg1G3BE7UTJn3h8DHjY/pnsAfWdbJKgyfcy7zKjqGtLAmI0q8aDSeG1TVIKRaHQ==" }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true + "d3-random": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", + "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==" }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, + "d3-sankey": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.7.1.tgz", + "integrity": "sha1-0imDImj8aaf+yEgD6WwiVqYUxSE=", "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": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "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": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "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": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "d3-array": "1", + "d3-collection": "1", + "d3-shape": "^1.2.0" } }, - "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==", - "dev": true, + "d3-scale": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.1.2.tgz", + "integrity": "sha512-bESpd64ylaKzCDzvULcmHKZTlzA/6DGSVwx7QSDj/EnX9cpSevsdiwdHFYI9ouo9tNBbV3v5xztHS2uFeOzh8Q==", "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" - }, - "dependencies": { - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - } + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" } }, - "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==", - "dev": true, + "d3-scale-chromatic": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.3.3.tgz", + "integrity": "sha512-BWTipif1CimXcYfT02LKjAyItX5gKiwxuPRgr4xM58JwlLocWbjPLI7aMEjkcoOQXMkYsmNsvv3d2yl/OKuHHw==", "requires": { - "babylon": "^6.18.0" + "d3-color": "1", + "d3-interpolate": "1" } }, - "babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "dev": true, - "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" - } + "d3-selection": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.2.tgz", + "integrity": "sha512-OoXdv1nZ7h2aKMVg3kaUFbLLK5jXUFAMLD/Tu5JA96mjf8f2a9ZUESGY+C36t8R1WFeWk/e55hy54Ml2I62CRQ==" }, - "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==", - "dev": true, - "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" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } + "d3-shape": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.2.tgz", + "integrity": "sha512-hUGEozlKecFZ2bOSNt7ENex+4Tk9uc/m0TtTEHBvitCBxUNjhzm5hS2GrrVRD/ae4IylSmxGeqX5tWC2rASMlQ==", + "requires": { + "d3-path": "1" } }, - "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==", - "dev": true, + "d3-time": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.10.tgz", + "integrity": "sha512-hF+NTLCaJHF/JqHN5hE8HVGAXPStEq6/omumPE/SxyHVrR7/qQxusFDo0t0c/44+sCGHthC7yNGFZIEgju0P8g==" + }, + "d3-time-format": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.3.tgz", + "integrity": "sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==", "requires": { - "object.assign": "^4.1.0" + "d3-time": "1" } }, - "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==", - "dev": true, + "d3-timer": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.9.tgz", + "integrity": "sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg==" + }, + "d3-transition": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.3.tgz", + "integrity": "sha512-tEvo3qOXL6pZ1EzcXxFcPNxC/Ygivu5NoBY6mbzidATAeML86da+JfVIUzon3dNM6UX6zjDx+xbYDmMVtTSjuA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" } }, - "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==", - "dev": true, + "d3-voronoi": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", + "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" + }, + "d3-zoom": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.3.tgz", + "integrity": "sha512-xEBSwFx5Z9T3/VrwDkMt+mr0HCzv7XjpGURJ8lWmIC8wxe32L39eWHIasEe/e7Ox8MPU4p1hvH8PKN2olLzIBg==", "requires": { - "@types/babel__traverse": "^7.0.6" + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" } }, - "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==", - "dev": true, + "dagre": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.4.tgz", + "integrity": "sha512-Dj0csFDrWYKdavwROb9FccHfTC4fJbyF/oJdL9LNZJ8WUvl968P6PAKEriGqfbdArVJEmmfA+UyumgWEwcHU6A==", "requires": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "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==", - "dev": true - } + "graphlib": "^2.1.7", + "lodash": "^4.17.4" } }, - "babel-plugin-named-asset-import": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz", - "integrity": "sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw==", - "dev": true - }, - "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": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "damerau-levenshtein": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", + "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", "dev": true }, - "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": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" + "assert-plus": "^1.0.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==", - "dev": true - }, - "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==", + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.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==", - "dev": true, - "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/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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", - "escalade": "^3.1.1", - "node-releases": "^1.1.70" - } - }, - "caniuse-lite": { - "version": "1.0.30001181", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001181.tgz", - "integrity": "sha512-m5ul/ARCX50JB8BSNM+oiPmQrR5UmngaQ3QThTTp5HcIIQGP/nPBs82BYLE+tigzm3VW+F4BJIhUyaVtEweelQ==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.650", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.650.tgz", - "integrity": "sha512-j6pRuNylFBbroG6NB8Lw/Im9oDY74s2zWHBP5TmdYg73cBuL6cz//SMgolVa0gIJk/DSL+kO7baJ1DSXW1FUZg==", - "dev": true - }, - "node-releases": { - "version": "1.1.70", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", - "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true - } - } + "date-and-time": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.11.0.tgz", + "integrity": "sha512-VyzhHurex4wlg9oMszn7O+kxHchphWjzDn7Mv0WfkFKI6hSNOQePpTBFGsnRakvLNzQKXqPBAVV8DOxUGtUxqA==", + "dev": true + }, + "debounce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", + "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", - "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==" - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } + "ms": "2.0.0" } }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "debuglog": { + "version": "1.0.1", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", "dev": true }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deep-object-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.0.tgz", + "integrity": "sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==", + "dev": true + }, + "deepmerge": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, "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" + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "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" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", @@ -4784,96 +14153,134 @@ } } }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bfj": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", - "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { - "bluebird": "^3.5.5", - "check-types": "^8.0.3", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" + "@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": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "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": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, - "optional": true, "requires": { - "file-uri-to-path": "1.0.0" + "inherits": "^2.0.1", + "minimalistic-assert": "^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==", + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", + "detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dev": true, + "requires": { + "repeat-string": "^1.5.4" + } + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" + }, + "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==", "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" }, "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -4882,1268 +14289,1530 @@ "requires": { "ms": "2.0.0" } - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true } } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", "dev": true, "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" + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dezalgo": { + "version": "1.0.3", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, - "brace": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/brace/-/brace-0.11.1.tgz", - "integrity": "sha1-SJb8ydVE7vRfS7dmDbMg07N5/lg=" + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "diff-match-patch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz", + "integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==" + }, + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" }, "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "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==", "dev": true } } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "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" + "path-type": "^4.0.0" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true } } }, - "brcast": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/brcast/-/brcast-3.0.1.tgz", - "integrity": "sha512-eI3yqf9YEqyGl9PCNTR46MGvDylGtaHjalcz6Q3fAPnP/PhpKkkve52vFdfGpwp4VUvK6LUr4TQN+2stCrEwTg==" + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", + "dev": true }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true }, - "browser-process-hrtime": { + "dns-equal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", "dev": true }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, "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", + "ip": "^1.1.0", "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "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": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "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==", - "dev": true, - "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==", - "dev": true - } + "buffer-indexof": "^1.0.0" } }, - "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==", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "pako": "~1.0.5" + "esutils": "^2.0.2" } }, - "browserslist": { - "version": "4.8.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.7.tgz", - "integrity": "sha512-gFOnZNYBHrEyUML0xr5NJ6edFaaKbTFX9S9kQHlYfCP0Rit/boRIz4G+Avq6/4haEKJXdGGUnoolx+5MWW2BoA==", + "dom-accessibility-api": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz", + "integrity": "sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ==", + "dev": true + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001027", - "electron-to-chromium": "^1.3.349", - "node-releases": "^1.1.49" + "utila": "~0.4" } }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, + "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": { - "node-int64": "^0.4.0" + "@babel/runtime": "^7.1.2" } }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } } }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "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==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "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==", "dev": true }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, - "cacache": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", - "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, "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" + "webidl-conversions": "^5.0.0" }, "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "dev": true } } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "dev": true, "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" + "domelementtype": "^2.2.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + } } }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "dom-serializer": "0", + "domelementtype": "1" } }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", "dev": true, "requires": { - "callsites": "^2.0.0" + "no-case": "^2.2.0" } }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { - "caller-callsite": "^2.0.0" + "is-obj": "^2.0.0" } }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", "dev": true }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dotenv-defaults": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-1.1.1.tgz", + "integrity": "sha512-6fPRo9o/3MxKvmRZBD3oNFdxODdhJtIy1zcJeUSCs6HCy4tarUpd+G67UTU9tF6OWXeSPqsm4fPAB+2eY9Rt9Q==", "dev": true, "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "dotenv": "^6.2.0" + }, + "dependencies": { + "dotenv": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", + "dev": true + } } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "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==", "dev": true }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dotenv-webpack": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-1.8.0.tgz", + "integrity": "sha512-o8pq6NLBehtrqA8Jv8jFQNtG9nhRtVqmoD4yWbgUyoU3+9WBlPe+c2EAiaJok9RB28QvrWvdWLZGeTT5aATDMg==", + "dev": true, + "requires": { + "dotenv-defaults": "^1.0.2" + } + }, + "downshift": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.6.tgz", + "integrity": "sha512-Ae+wVfOrS9ZtS4brOSM5X7pcMtOfZOUh9M2L6XU6dUoyLvx6wAXt9D/jUqnI4FpcHuCDwcwmoXFo4Z3z76xh/g==", "dev": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "@babel/runtime": "^7.14.8", + "compute-scroll-into-view": "^1.0.17", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" }, "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "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==", "dev": true } } }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, - "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==", - "dev": true, - "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.30001028", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001028.tgz", - "integrity": "sha512-Vnrq+XMSHpT7E+LWoIYhs3Sne8h9lx9YJV3acH3THNCwU/9zV93/ta4xVfzTtnqd3rvnuVpVjE3DFqf56tr3aQ==", + "duplexer": { + "version": "0.1.1", + "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, - "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==", + "duplexify": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", + "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "rsvp": "^4.8.4" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, - "cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE=", "dev": true, "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" + "xtend": "^4.0.0" } }, - "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==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "change-case": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", - "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dev": true, "requires": { - "camel-case": "^3.0.0", - "constant-case": "^2.0.0", - "dot-case": "^2.1.0", - "header-case": "^1.0.0", - "is-lower-case": "^1.1.0", - "is-upper-case": "^1.1.0", - "lower-case": "^1.1.1", - "lower-case-first": "^1.0.0", - "no-case": "^2.3.2", - "param-case": "^2.1.0", - "pascal-case": "^2.0.0", - "path-case": "^2.1.0", - "sentence-case": "^2.1.0", - "snake-case": "^2.1.0", - "swap-case": "^1.1.0", - "title-case": "^2.1.0", - "upper-case": "^1.1.1", - "upper-case-first": "^1.1.0" + "safe-buffer": "^5.0.1" } }, - "change-emitter": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", - "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", "dev": true }, - "check-types": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", - "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", + "electron-to-chromium": { + "version": "1.3.739", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", + "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==", "dev": true }, - "cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "element-resize-detector": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.3.tgz", + "integrity": "sha512-+dhNzUgLpq9ol5tyhoG7YLoXL3ssjfFW+0gpszXPwRU6NjGr1fVHMEAF8fVzIiRJq57Nre0RFeIjJwI8Nh2NmQ==", "dev": true, "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" + "batch-processor": "1.0.0" + } + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "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": { - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dev": true, - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "*" - } + "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==", + "dev": true }, - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true } } }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "dev": true + }, + "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==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "emotion-theming": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/emotion-theming/-/emotion-theming-10.0.27.tgz", + "integrity": "sha512-MlF1yu/gYh8u+sLUqA0YuA9JX0P4Hb69WlKc/9OLo+WCXuX6sy/KoIa+qJimgmr2dWqnypYKYPX37esjDBbhdw==", "dev": true, "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "@babel/runtime": "^7.5.5", + "@emotion/weak-memoize": "0.2.5", + "hoist-non-react-statics": "^3.3.0" }, "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", - "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", - "dev": true, - "optional": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "regenerator-runtime": "^0.13.4" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "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==", "dev": true - }, - "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==", + } + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "endent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", + "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", + "dev": true, + "requires": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.5" + } + }, + "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==", + "dev": true, + "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==", "dev": true, "requires": { - "is-number": "^7.0.0" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } } } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { - "tslib": "^1.9.0" + "ansi-colors": "^4.1.1" } }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", "dev": true }, - "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==", + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "enzyme": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz", + "integrity": "sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "array.prototype.flat": "^1.2.1", + "cheerio": "^1.0.0-rc.2", + "function.prototype.name": "^1.1.0", + "has": "^1.0.3", + "html-element-map": "^1.0.0", + "is-boolean-object": "^1.0.0", + "is-callable": "^1.1.4", + "is-number-object": "^1.0.3", + "is-regex": "^1.0.4", + "is-string": "^1.0.4", + "is-subset": "^0.1.1", + "lodash.escape": "^4.0.1", + "lodash.isequal": "^4.5.0", + "object-inspect": "^1.6.0", + "object-is": "^1.0.1", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4", + "object.values": "^1.0.4", + "raf": "^3.4.0", + "rst-selector-parser": "^2.2.3", + "string.prototype.trim": "^1.1.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==", + "enzyme-adapter-react-16": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.1.tgz", + "integrity": "sha512-yMPxrP3vjJP+4wL/qqfkT6JAIctcwKF+zXO6utlGPgUJT2l4tzrdjMDWGd/Pp1BjHBcljhN24OzNEGRteibJhA==", + "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "enzyme-adapter-utils": "^1.12.1", + "enzyme-shallow-equal": "^1.0.0", + "has": "^1.0.3", + "object.assign": "^4.1.0", + "object.values": "^1.1.0", + "prop-types": "^15.7.2", + "react-is": "^16.10.2", + "react-test-renderer": "^16.0.0-0", + "semver": "^5.7.0" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } + }, + "react-is": { + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", + "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "enzyme-adapter-utils": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.1.tgz", + "integrity": "sha512-KWiHzSjZaLEoDCOxY8Z1RAbUResbqKN5bZvenPbfKtWorJFVETUw754ebkuCQ3JKm0adx1kF8JaiR+PHPiP47g==", "dev": true, "requires": { - "source-map": "~0.6.0" + "airbnb-prop-types": "^2.15.0", + "function.prototype.name": "^1.1.1", + "object.assign": "^4.1.0", + "object.fromentries": "^2.0.1", + "prop-types": "^15.7.2", + "semver": "^5.7.0" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "react-is": { + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", + "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "enzyme-shallow-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.0.tgz", + "integrity": "sha512-VUf+q5o1EIv2ZaloNQQtWCJM9gpeux6vudGVH6vLmfPXFLRuxl5+Aq3U260wof9nn0b0i+P5OEUXm1vnxkRpXQ==", "dev": true, "requires": { - "restore-cursor": "^3.1.0" + "has": "^1.0.3", + "object-is": "^1.0.1" } }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "enzyme-to-json": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.3.5.tgz", + "integrity": "sha512-DmH1wJ68HyPqKSYXdQqB33ZotwfUhwQZW3IGXaNXgR69Iodaoj8TF/D9RjLdz4pEhGq2Tx2zwNUIjBuqoZeTgA==", "dev": true, "requires": { - "colors": "1.0.3" + "lodash": "^4.17.4" } }, - "cli-usage": { + "errno": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/cli-usage/-/cli-usage-0.1.8.tgz", - "integrity": "sha512-EZJ+ty1TsqdnhZNt2QbI+ed3IUNHTH31blSOJLVph3oL4IExskPRyCDGJH7RuCBPy3QBmWgpbeUxXPhK0isXIw==", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "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==", "dev": true, "requires": { - "marked": "^0.5.0", - "marked-terminal": "^3.0.0" + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dev": true, + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" } }, - "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==", + "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==", "dev": true }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" }, "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "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==", + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "has-tostringtag": "^1.0.0" } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true } } }, - "clone-deep": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", - "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "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" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", "dev": true, "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "es5-shim": { + "version": "4.5.15", + "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.15.tgz", + "integrity": "sha512-FYpuxEjMeDvU4rulKqFdukQyZSTpzhg4ScQHrAosrlVpR6GFyaw14f74yn2+4BugniIS0Frpg7TvwZocU4ZMTw==", "dev": true }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "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==", + "es6-promise": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", + "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { - "color-name": "1.1.3" + "es6-promise": "^4.0.3" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "es6-shim": { + "version": "0.35.6", + "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz", + "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", "dev": true }, - "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "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==", "dev": true, "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "colors": { + "escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" - }, - "common-tags": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "dev": true, - "requires": { - "arity-n": "^1.0.4" - } - }, - "compressible": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", - "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "requires": { - "mime-db": ">= 1.36.0 < 2" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } } }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==", "dev": true, "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" + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + } + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { - "mime-db": ">= 1.43.0 < 2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, - "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "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.10", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", - "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", - "dev": true - }, - "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==", - "dev": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constant-case": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", - "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", - "dev": true, - "requires": { - "snake-case": "^2.1.0", - "upper-case": "^1.1.1" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "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==", - "dev": true - }, - "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==", + "eslint-config-react-app": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz", + "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "confusing-browser-globals": "^1.0.10" } }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", "dev": true, "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" + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, - "core-js-compat": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.3.tgz", - "integrity": "sha512-1sCb0wBXnBIL16pfFG1Gkvei6UzvKyTNYpiC41yrdjEv0UoJoq9E/abTMzyYJ6JpTkAj15dLjbqifIzEBDVvog==", + "eslint-module-utils": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", + "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", "dev": true, "requires": { - "browserslist": "^4.16.1", - "semver": "7.0.0" + "debug": "^3.2.7", + "pkg-dir": "^2.0.0" }, "dependencies": { - "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", - "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "ms": "^2.1.1" } }, - "caniuse-lite": { - "version": "1.0.30001181", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001181.tgz", - "integrity": "sha512-m5ul/ARCX50JB8BSNM+oiPmQrR5UmngaQ3QThTTp5HcIIQGP/nPBs82BYLE+tigzm3VW+F4BJIhUyaVtEweelQ==", - "dev": true + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } }, - "electron-to-chromium": { - "version": "1.3.650", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.650.tgz", - "integrity": "sha512-j6pRuNylFBbroG6NB8Lw/Im9oDY74s2zWHBP5TmdYg73cBuL6cz//SMgolVa0gIJk/DSL+kO7baJ1DSXW1FUZg==", + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node-releases": { - "version": "1.1.70", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", - "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==", + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "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": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "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": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } } } }, - "core-js-pure": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.8.3.tgz", - "integrity": "sha512-V5qQZVAr9K0xu7jXg1M7qTEwuxUgqr7dUOezGaNa7i+Xn9oXAU/d1fzqD9ObuwpVQOaorO5s70ckyi1woP9lVA==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "eslint-plugin-flowtype": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.7.2.tgz", + "integrity": "sha512-7Oq/N0+3nijBnYWQYzz/Mp/7ZCpwxYvClRyW/PLAmimY9uLCBvoXsNsERcJdkKceyOjgRbFhhxs058KTrne9Mg==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "string-natural-compare": "^3.0.1" + } }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "eslint-plugin-import": { + "version": "2.23.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz", + "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==", "dev": true, "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "array-includes": "^3.1.3", + "array.prototype.flat": "^1.2.4", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.1", + "find-up": "^2.0.0", + "has": "^1.0.3", + "is-core-module": "^2.4.0", + "minimatch": "^3.0.4", + "object.values": "^1.1.3", + "pkg-up": "^2.0.0", + "read-pkg-up": "^3.0.0", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.9.0" }, "dependencies": { + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "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": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "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": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -6153,4344 +15822,4902 @@ "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } - } - } - }, - "coveralls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.2.tgz", - "integrity": "sha512-Tv0LKe/MkBOilH2v7WBiTBdudg2ChfGbdXafc/s330djpF3zKOmuehTeRwjXWc7pzfj9FrDUTA7tEx6Div8NFw==", - "dev": true, - "requires": { - "growl": "~> 1.10.0", - "js-yaml": "^3.11.0", - "lcov-parse": "^0.0.10", - "log-driver": "^1.2.7", - "minimist": "^1.2.0", - "request": "^2.85.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==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "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==", - "dev": true, - "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": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, - "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==", + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "pify": "^3.0.0" } - } - } - }, - "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==", - "dev": true, - "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" - }, - "dependencies": { - "normalize-path": { + }, + "pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - } - } - }, - "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==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } } }, - "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==", - "dev": true - }, - "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==", + "eslint-plugin-jest": { + "version": "24.3.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz", + "integrity": "sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg==", + "dev": true, "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^3.3.0" + "@typescript-eslint/experimental-utils": "^4.0.1" } }, - "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==", + "eslint-plugin-jsx-a11y": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", + "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==", "dev": true, "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" + "@babel/runtime": "^7.11.2", + "aria-query": "^4.2.2", + "array-includes": "^3.1.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.0.2", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.6", + "emoji-regex": "^9.0.0", + "has": "^1.0.3", + "jsx-ast-utils": "^3.1.0", + "language-tags": "^1.0.5" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true } } }, - "css-vendor": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-0.3.8.tgz", - "integrity": "sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo=", - "requires": { - "is-in-browser": "^1.0.2" - } - }, - "css-what": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", - "dev": true - }, - "cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dev": true, - "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.2", - "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": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "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": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "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==", + "eslint-plugin-react": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", + "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", "dev": true, "requires": { - "postcss": "^7.0.0" + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.5" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "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==", + "dev": true, + "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.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, + "object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "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==", + "dev": true + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } } }, - "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==", + "eslint-plugin-react-hooks": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", + "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", "dev": true }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "eslint-plugin-testing-library": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz", + "integrity": "sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA==", "dev": true, "requires": { - "css-tree": "^1.1.2" + "@typescript-eslint/experimental-utils": "^3.10.1" }, "dependencies": { - "css-tree": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz", - "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==", + "@typescript-eslint/experimental-utils": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", + "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", "dev": true, "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" } }, - "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==", + "@typescript-eslint/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", + "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@typescript-eslint/typescript-estree": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", + "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/visitor-keys": "3.10.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", + "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "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==", + "dev": true + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "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==", "dev": true, "requires": { - "cssom": "0.3.x" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" } }, - "csstype": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.0.tgz", - "integrity": "sha512-by8hi8BlLbowQq0qtkx54d9aN73R9oUW20HISpka5kmgsR9F7nnxgfsemuR2sdCKZh+CDNf5egW9UZMm4mgJRg==" - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "array-find-index": "^1.0.1" + "eslint-visitor-keys": "^2.0.0" } }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "eslint-webpack-plugin": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.4.tgz", + "integrity": "sha512-7rYh0m76KyKSDE+B+2PUQrlNS4HJ51t3WKpkJg6vo2jFMbEPTG99cBV0Dm7LXSHucN4WGCG65wQcRiTFrj7iWw==", "dev": true, "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "d3": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-5.7.0.tgz", - "integrity": "sha512-8KEIfx+dFm8PlbJN9PI0suazrZ41QcaAufsKE9PRcqYPWLngHIyWJZX96n6IQKePGgeSu0l7rtlueSSNq8Zc3g==", - "requires": { - "d3-array": "1", - "d3-axis": "1", - "d3-brush": "1", - "d3-chord": "1", - "d3-collection": "1", - "d3-color": "1", - "d3-contour": "1", - "d3-dispatch": "1", - "d3-drag": "1", - "d3-dsv": "1", - "d3-ease": "1", - "d3-fetch": "1", - "d3-force": "1", - "d3-format": "1", - "d3-geo": "1", - "d3-hierarchy": "1", - "d3-interpolate": "1", - "d3-path": "1", - "d3-polygon": "1", - "d3-quadtree": "1", - "d3-random": "1", - "d3-scale": "2", - "d3-scale-chromatic": "1", - "d3-selection": "1", - "d3-shape": "1", - "d3-time": "1", - "d3-time-format": "2", - "d3-timer": "1", - "d3-transition": "1", - "d3-voronoi": "1", - "d3-zoom": "1" - } - }, - "d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" - }, - "d3-axis": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", - "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" - }, - "d3-brush": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.6.tgz", - "integrity": "sha512-lGSiF5SoSqO5/mYGD5FAeGKKS62JdA1EV7HPrU2b5rTX4qEJJtpjaGLJngjnkewQy7UnGstnFd3168wpf5z76w==", - "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "d3-chord": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", - "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", - "requires": { - "d3-array": "1", - "d3-path": "1" - } - }, - "d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" - }, - "d3-color": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.2.3.tgz", - "integrity": "sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw==" - }, - "d3-contour": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", - "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", - "requires": { - "d3-array": "^1.1.1" - } - }, - "d3-dispatch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.5.tgz", - "integrity": "sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g==" - }, - "d3-drag": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.3.tgz", - "integrity": "sha512-8S3HWCAg+ilzjJsNtWW1Mutl74Nmzhb9yU6igspilaJzeZVFktmY6oO9xOh5TDk+BM2KrNFjttZNoJJmDnkjkg==", - "requires": { - "d3-dispatch": "1", - "d3-selection": "1" + "@types/eslint": "^7.2.6", + "arrify": "^2.0.1", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "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==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } } }, - "d3-dsv": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.10.tgz", - "integrity": "sha512-vqklfpxmtO2ZER3fq/B33R/BIz3A1PV0FaZRuFM8w6jLo7sUX1BZDh73fPlr0s327rzq4H6EN1q9U+eCBCSN8g==", + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, "requires": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "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==", + "dev": true + } } }, - "d3-ease": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.5.tgz", - "integrity": "sha512-Ct1O//ly5y5lFM9YTdu+ygq7LleSgSE4oj7vUt9tPLHUi8VCV7QoizGpdWRWAwCO9LdYzIrQDg97+hGVdsSGPQ==" + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, - "d3-fetch": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.1.2.tgz", - "integrity": "sha512-S2loaQCV/ZeyTyIF2oP8D1K9Z4QizUzW7cWeAOAS4U88qOt3Ucf6GsmgthuYSdyB2HyEm4CeGvkQxWsmInsIVA==", + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, "requires": { - "d3-dsv": "1" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, - "d3-force": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.2.tgz", - "integrity": "sha512-p1vcHAUF1qH7yR+e8ip7Bs61AHjLeKkIn8Z2gzwU2lwEf2wkSpWdjXG0axudTHsVFnYGlMkFaEsVy2l8tAg1Gw==", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "requires": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, - "d3-format": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz", - "integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ==" + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true }, - "d3-geo": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.11.3.tgz", - "integrity": "sha512-n30yN9qSKREvV2fxcrhmHUdXP9TNH7ZZj3C/qnaoU0cVf/Ea85+yT7HY7i8ySPwkwjCNYtmKqQFTvLFngfkItQ==", + "estree-to-babel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/estree-to-babel/-/estree-to-babel-3.2.1.tgz", + "integrity": "sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==", + "dev": true, "requires": { - "d3-array": "1" + "@babel/traverse": "^7.1.6", + "@babel/types": "^7.2.0", + "c8": "^7.6.0" } }, - "d3-hexbin": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/d3-hexbin/-/d3-hexbin-0.2.2.tgz", - "integrity": "sha1-nFg32s/UcasFM3qeke8Qv8T5iDE=" - }, - "d3-hierarchy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz", - "integrity": "sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w==" - }, - "d3-interpolate": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.3.2.tgz", - "integrity": "sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==", - "requires": { - "d3-color": "1" - } + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true }, - "d3-path": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.7.tgz", - "integrity": "sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA==" + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, - "d3-polygon": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.5.tgz", - "integrity": "sha512-RHhh1ZUJZfhgoqzWWuRhzQJvO7LavchhitSTHGu9oj6uuLFzYZVeBzaWTQ2qSO6bz2w55RMoOCf0MsLCDB6e0w==" + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true }, - "d3-quadtree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.5.tgz", - "integrity": "sha512-U2tjwDFbZ75JRAg8A+cqMvqPg1G3BE7UTJn3h8DHjY/pnsAfWdbJKgyfcy7zKjqGtLAmI0q8aDSeG1TVIKRaHQ==" + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true }, - "d3-random": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", - "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==" + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true }, - "d3-sankey": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.7.1.tgz", - "integrity": "sha1-0imDImj8aaf+yEgD6WwiVqYUxSE=", + "eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "dev": true, "requires": { - "d3-array": "1", - "d3-collection": "1", - "d3-shape": "^1.2.0" + "original": "^1.0.0" } }, - "d3-scale": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.1.2.tgz", - "integrity": "sha512-bESpd64ylaKzCDzvULcmHKZTlzA/6DGSVwx7QSDj/EnX9cpSevsdiwdHFYI9ouo9tNBbV3v5xztHS2uFeOzh8Q==", + "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==", + "dev": true, "requires": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "d3-scale-chromatic": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.3.3.tgz", - "integrity": "sha512-BWTipif1CimXcYfT02LKjAyItX5gKiwxuPRgr4xM58JwlLocWbjPLI7aMEjkcoOQXMkYsmNsvv3d2yl/OKuHHw==", + "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==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, "requires": { - "d3-color": "1", - "d3-interpolate": "1" + "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" } }, - "d3-selection": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.2.tgz", - "integrity": "sha512-OoXdv1nZ7h2aKMVg3kaUFbLLK5jXUFAMLD/Tu5JA96mjf8f2a9ZUESGY+C36t8R1WFeWk/e55hy54Ml2I62CRQ==" + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true }, - "d3-shape": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.2.tgz", - "integrity": "sha512-hUGEozlKecFZ2bOSNt7ENex+4Tk9uc/m0TtTEHBvitCBxUNjhzm5hS2GrrVRD/ae4IylSmxGeqX5tWC2rASMlQ==", + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "d3-path": "1" - } - }, - "d3-time": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.10.tgz", - "integrity": "sha512-hF+NTLCaJHF/JqHN5hE8HVGAXPStEq6/omumPE/SxyHVrR7/qQxusFDo0t0c/44+sCGHthC7yNGFZIEgju0P8g==" + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "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": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } }, - "d3-time-format": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.3.tgz", - "integrity": "sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==", + "expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "dev": true, "requires": { - "d3-time": "1" + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "d3-timer": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.9.tgz", - "integrity": "sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg==" + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "dev": true, + "requires": { + "mime-db": "1.43.0" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } }, - "d3-transition": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.3.tgz", - "integrity": "sha512-tEvo3qOXL6pZ1EzcXxFcPNxC/Ygivu5NoBY6mbzidATAeML86da+JfVIUzon3dNM6UX6zjDx+xbYDmMVtTSjuA==", + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, "requires": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "dev": true + } } }, - "d3-voronoi": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", - "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "d3-zoom": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.3.tgz", - "integrity": "sha512-xEBSwFx5Z9T3/VrwDkMt+mr0HCzv7XjpGURJ8lWmIC8wxe32L39eWHIasEe/e7Ox8MPU4p1hvH8PKN2olLzIBg==", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "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" + } + } } }, - "dagre": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.4.tgz", - "integrity": "sha512-Dj0csFDrWYKdavwROb9FccHfTC4fJbyF/oJdL9LNZJ8WUvl968P6PAKEriGqfbdArVJEmmfA+UyumgWEwcHU6A==", + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "graphlib": "^2.1.7", - "lodash": "^4.17.4" + "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "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": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "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-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" + } + } } }, - "damerau-levenshtein": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", - "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==", - "dev": true + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } + "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==" }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "dev": true, "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" }, "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==", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "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==", "dev": true, "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "is-number": "^7.0.0" } } } }, - "date-and-time": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.11.0.tgz", - "integrity": "sha512-VyzhHurex4wlg9oMszn7O+kxHchphWjzDn7Mv0WfkFKI6hSNOQePpTBFGsnRakvLNzQKXqPBAVV8DOxUGtUxqA==", + "fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", "dev": true }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fast-text-encoding": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz", + "integrity": "sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ==", + "dev": true + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "dev": true, "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" + "reusify": "^1.0.4" } }, - "debounce": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", - "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "dev": true, "requires": { - "ms": "2.0.0" + "format": "^0.2.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "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.18" + } }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, - "deepmerge": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.0.0.tgz", - "integrity": "sha512-a8z8bkgHsAML+uHLqmMS83HHlpy3PvZOOuiTQqaa3wu8ZVg3h0hqHk6aCsGdOnZV2XMM/FRimNGjUh0KCcmHBw==" - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "flat-cache": "^3.0.4" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "file-loader": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", + "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "file-system-cache": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.0.5.tgz", + "integrity": "sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08=", + "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "bluebird": "^3.3.5", + "fs-extra": "^0.30.0", + "ramda": "^0.21.0" }, "dependencies": { - "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==", + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, "requires": { - "kind-of": "^6.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" } }, - "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==", + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, "requires": { - "kind-of": "^6.0.0" + "graceful-fs": "^4.1.6" } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + } + } + }, + "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==", + "dev": true, + "optional": true + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "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": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-extendable": "^0.1.0" } } } }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "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" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "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": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "ms": "2.0.0" } }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "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==", "dev": true, "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", "dev": true }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - "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==", + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "ms": "2.0.0" + "glob": "^7.1.3" } } } }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, - "diff-match-patch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz", - "integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==" - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", "dev": true }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "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==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", + "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", + "requires": { + "debug": "=3.1.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "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==", + "dev": true, + "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==", "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", "dev": true, "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" }, "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "pify": "^3.0.0" + "@babel/highlight": "^7.14.5" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } } } }, - "discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", + "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" + } + }, + "format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", "dev": true }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", "dev": true }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dev": true, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "map-cache": "^0.2.2" } }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } + "free-style": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/free-style/-/free-style-2.6.1.tgz", + "integrity": "sha512-uaVA8e57tvhrFKAl6x32SGIrGFBoeTAFtfHDzWxjPhiXQiUxOI6EEdEReRkjNO2H9XcdMJXXEnMHw8Q7iMYLbw==" }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "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" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true } } }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, - "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==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "requires": { - "webidl-conversions": "^4.0.2" + "minipass": "^3.0.0" } }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "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": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, - "dot-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", - "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "requires": { - "no-case": "^2.2.0" - } + "optional": true }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.1.tgz", + "integrity": "sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q==", "dev": true, "requires": { - "is-obj": "^2.0.0" + "define-properties": "^1.1.3", + "function-bind": "^1.1.1", + "functions-have-names": "^1.1.1", + "is-callable": "^1.1.4" } }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "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==", + "functions-have-names": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.1.1.tgz", + "integrity": "sha512-U0kNHUoxwPNPWOJaMG7Z00d4a/qZVrFtzWJRaK8V9goaVOCXBSQSJpt3MYGNtkScKEBKovxLjnNdC9MlXwo5Pw==", "dev": true }, - "duplexer": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "fuse.js": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", + "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==", "dev": true }, - "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "gaxios": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.1.0.tgz", + "integrity": "sha512-Gtpb5sdQmb82sgVkT2GnS2n+Kx4dlFwbeMYcDlD395aEvsLCSQXJJcHt7oJ2LrGxDEAeiOkK79Zv2A8Pzt6CFg==", + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^3.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + }, + "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "https-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", + "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "dev": true + } } }, - "dynamic-dedupe": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", - "integrity": "sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE=", + "gcp-metadata": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.2.2.tgz", + "integrity": "sha512-vR7kcJMCYJG/mYWp/a1OszdOqnLB/XW1GorWW1hc1lWVNL26L497zypWb9cG0CYDQ4Bl1Wk0+fSZFFjwJlTQgQ==", "dev": true, "requires": { - "xtend": "^4.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "gaxios": "^2.1.0", + "json-bigint": "^0.3.0" } }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "gcs-resumable-upload": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-2.3.1.tgz", + "integrity": "sha512-zEO7L+jz99VznQsbsF7vFTnIFbSu+CjdJqt5htnjIrfsp5j+QCVBvbbKdqpaTfCPzpUPYj1Q9O9DhIh/8newfA==", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "abort-controller": "^3.0.0", + "configstore": "^5.0.0", + "gaxios": "^2.0.0", + "google-auth-library": "^5.0.0", + "pumpify": "^2.0.0", + "stream-events": "^1.0.4" + }, + "dependencies": { + "configstore": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.0.tgz", + "integrity": "sha512-eE/hvMs7qw7DlcB5JPRnthmrITuHMmACUJAp89v6PT6iOqzoLS7HRWhBtuHMlhNHo2AhUSA/3Dh1bKNJHcublQ==", + "dev": true, + "requires": { + "dot-prop": "^5.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexify": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", + "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", + "dev": true, + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "make-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", + "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "dev": true, + "requires": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", + "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + } } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "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==", "dev": true }, - "electron-to-chromium": { - "version": "1.3.359", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.359.tgz", - "integrity": "sha512-ewZp4BQftbLclBwmFYoTrlyiLMXQTiYeqh1hn24sWao9bGhUHzQtpytymN8JsenWlQ9SbBWynTPvfghb0Ipn1Q==", + "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==", "dev": true }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "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" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^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==", - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true } } }, - "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==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "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==", "dev": true }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "requires": { - "iconv-lite": "~0.4.13" + "pump": "^3.0.0" } }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "once": "^1.4.0" + "assert-plus": "^1.0.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==", + "github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "emoji-regex": ">=6.0.0 <=6.1.1" }, "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==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } + "emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=", + "dev": true } } }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "enzyme": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz", - "integrity": "sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==", - "dev": true, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "requires": { - "array.prototype.flat": "^1.2.1", - "cheerio": "^1.0.0-rc.2", - "function.prototype.name": "^1.1.0", - "has": "^1.0.3", - "html-element-map": "^1.0.0", - "is-boolean-object": "^1.0.0", - "is-callable": "^1.1.4", - "is-number-object": "^1.0.3", - "is-regex": "^1.0.4", - "is-string": "^1.0.4", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.6.0", - "object-is": "^1.0.1", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4", - "object.values": "^1.0.4", - "raf": "^3.4.0", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.1.2" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "enzyme-adapter-react-16": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.1.tgz", - "integrity": "sha512-yMPxrP3vjJP+4wL/qqfkT6JAIctcwKF+zXO6utlGPgUJT2l4tzrdjMDWGd/Pp1BjHBcljhN24OzNEGRteibJhA==", + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "enzyme-adapter-utils": "^1.12.1", - "enzyme-shallow-equal": "^1.0.0", - "has": "^1.0.3", - "object.assign": "^4.1.0", - "object.values": "^1.1.0", - "prop-types": "^15.7.2", - "react-is": "^16.10.2", - "react-test-renderer": "^16.0.0-0", - "semver": "^5.7.0" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" }, "dependencies": { - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "is-glob": "^2.0.0" } }, - "react-is": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", - "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==", + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } } } }, - "enzyme-adapter-utils": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.1.tgz", - "integrity": "sha512-KWiHzSjZaLEoDCOxY8Z1RAbUResbqKN5bZvenPbfKtWorJFVETUw754ebkuCQ3JKm0adx1kF8JaiR+PHPiP47g==", + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "airbnb-prop-types": "^2.15.0", - "function.prototype.name": "^1.1.1", - "object.assign": "^4.1.0", - "object.fromentries": "^2.0.1", - "prop-types": "^15.7.2", - "semver": "^5.7.0" + "is-glob": "^4.0.1" }, "dependencies": { - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "is-extglob": "^2.1.1" } - }, - "react-is": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", - "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true } } }, - "enzyme-shallow-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.0.tgz", - "integrity": "sha512-VUf+q5o1EIv2ZaloNQQtWCJM9gpeux6vudGVH6vLmfPXFLRuxl5+Aq3U260wof9nn0b0i+P5OEUXm1vnxkRpXQ==", + "glob-promise": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", + "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", "dev": true, "requires": { - "has": "^1.0.3", - "object-is": "^1.0.1" + "@types/glob": "*" } }, - "enzyme-to-json": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.3.5.tgz", - "integrity": "sha512-DmH1wJ68HyPqKSYXdQqB33ZotwfUhwQZW3IGXaNXgR69Iodaoj8TF/D9RjLdz4pEhGq2Tx2zwNUIjBuqoZeTgA==", - "dev": true, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", "requires": { - "lodash": "^4.17.4" + "min-document": "^2.19.0", + "process": "~0.5.1" + }, + "dependencies": { + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + } } }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "requires": { - "prr": "~1.0.1" + "global-prefix": "^3.0.0" } }, - "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==", + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" } }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globalthis": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", + "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", "dev": true, "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "define-properties": "^1.1.3" } }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" } }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "google-auth-library": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.5.1.tgz", + "integrity": "sha512-zCtjQccWS/EHYyFdXRbfeSGM/gW+d7uMAcVnvXRnjBXON5ijo6s0nsObP0ifqileIDSbZjTlLtgo+UoN8IFJcg==", "dev": true, "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "fast-text-encoding": "^1.0.0", + "gaxios": "^2.1.0", + "gcp-metadata": "^3.2.0", + "gtoken": "^4.1.0", + "jws": "^3.1.5", + "lru-cache": "^5.0.0" + }, + "dependencies": { + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } } }, - "es6-iterator": { + "google-p12-pem": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.3.tgz", + "integrity": "sha512-Tq2kBCANxYYPxaBpTgCpRfdoPs9+/lNzc/Iaee4kuMVW5ascD+HwhpBsTLwH85C9Ev4qfB8KKHmpPQYyD2vg2w==", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "node-forge": "^0.9.0" + }, + "dependencies": { + "node-forge": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.1.tgz", + "integrity": "sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ==", + "dev": true + } } }, - "es6-promise": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", - "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", - "dev": true + "google-protobuf": { + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.17.3.tgz", + "integrity": "sha512-OVPzcSWIAJ+d5yiHyeaLrdufQtrvaBrF4JQg+z8ynTkbO3uFcujqXszTumqg1cGsAsjkWnI+M5B1xZ19yR4Wyg==" }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true }, - "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==", - "dev": true, + "graphlib": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.7.tgz", + "integrity": "sha512-TyI9jIy2J4j0qgPmOOrHTCtpPqJGN/aurBwc6ZT+bRii+di1I+Wv3obRhVrmBEXet+qkMaEX67dXrwsd3QQM6w==", "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" + "lodash": "^4.17.5" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true, + "optional": true }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "grpc-web": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/grpc-web/-/grpc-web-1.2.1.tgz", + "integrity": "sha512-ibBaJPzfMVuLPgaST9w0kZl60s+SnkPBQp6QKdpEr85tpc1gXW2QDqSne9xiyiym0logDfdUSm4aX5h9YBA2mw==" }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "gtoken": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.3.tgz", + "integrity": "sha512-ofW+FiXjswyKdkjMcDbe6E4K7cDDdE82dGDhZIc++kUECqaE7MSErf6arJPAjcnYn1qxE1/Ti06qQuqgVusovQ==", "dev": true, "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "gaxios": "^2.1.0", + "google-p12-pem": "^2.0.0", + "jws": "^3.1.5", + "mime": "^2.2.0" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true } } }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==", + "dev": true + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", "dev": true, "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" + "duplexer": "^0.1.1", + "pify": "^4.0.1" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "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==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "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==", + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true } } }, - "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==", - "dev": true, - "requires": { - "confusing-browser-globals": "^1.0.9" - } + "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==", + "dev": true }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^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==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "eslint-loader": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz", - "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==", + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "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==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "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" + "function-bind": "^1.1.1" } }, - "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", "dev": true, "requires": { - "debug": "^2.6.9", - "pkg-dir": "^2.0.0" + "is-glob": "^3.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "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": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "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==", - "dev": true, - "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": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "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": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "find-up": "^2.1.0" + "is-extglob": "^2.1.0" } } } }, - "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==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true }, - "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==", + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "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" + "has-symbols": "^1.0.2" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "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==", - "dev": true, - "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": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "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": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true } } }, - "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==", - "dev": true, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "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" + "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": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { - "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", - "dev": true, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true + "is-buffer": "^1.1.5" + } } } }, - "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==", + "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==", "dev": true, "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" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "es-abstract": { - "version": "1.18.0-next.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", - "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.1", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.3", - "string.prototype.trimstart": "^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==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "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==", - "dev": true, - "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.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - } - }, - "object.fromentries": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", - "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - } - }, - "object.values": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", - "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "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==", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "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==", "dev": true, "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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==", "dev": true } } }, - "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==", - "dev": true + "hash-stream-validation": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.2.tgz", + "integrity": "sha512-cMlva5CxWZOrlS/cY0C+9qAzesn5srhFA8IT1VPiHc9bWWBLkJfEUIZr7MWoi89oOOGmpg8ymchaOjiArsGu5A==", + "dev": true, + "requires": { + "through2": "^2.0.0" + } }, - "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==", + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.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==", + "hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "dev": true, + "requires": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", "dev": true }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.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==" + "hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dev": true, + "requires": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", "dev": true, "requires": { - "estraverse": "^5.1.0" + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.3" + } + }, + "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==", + "dev": true + }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + }, + "history": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", + "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", + "requires": { + "invariant": "^2.2.1", + "loose-envify": "^1.2.0", + "resolve-pathname": "^2.2.0", + "value-equal": "^0.4.0", + "warning": "^3.0.0" }, "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "^1.0.0" + } } } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + }, + "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": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } + "react-is": "^16.7.0" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", "dev": true }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "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==", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", "dev": true }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", "dev": true }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "html-element-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.1.0.tgz", + "integrity": "sha512-iqiG3dTZmy+uUaTmHarTL+3/A2VW9ox/9uasKEZC+R/wAtUrTcRlXPSaPqsnWPfIu8wqn09jQNwMRqzL54jSYA==", "dev": true, "requires": { - "original": "^1.0.0" + "array-filter": "^1.0.0" + }, + "dependencies": { + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "dev": true + } } }, - "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==", + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "whatwg-encoding": "^1.0.5" } }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "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==", "dev": true }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "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": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "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==", + "dev": true, "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" + "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": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, "requires": { - "ms": "2.0.0" + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, "requires": { - "is-extendable": "^0.1.0" + "tslib": "^2.0.3" } - } - } - }, - "expect": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", - "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", - "dev": true, - "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" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + } + } + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=", + "dev": true + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "dev": true + }, + "html-webpack-plugin": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", + "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "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" }, "dependencies": { - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "minimist": "^1.2.0" } }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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==", "dev": true, "requires": { - "ms": "2.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" } - }, - "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { - "mime-db": "1.43.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true + "domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true } } }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", - "dev": true - } + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "dependencies": { - "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" - } + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" } } }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", "dev": true, "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "agent-base": "4", + "debug": "3.1.0" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "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": { - "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "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": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "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-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" - } - } + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } }, - "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==", + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "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" + "agent-base": "6", + "debug": "4" }, "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": 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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "debug": "4" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, - "fast-text-encoding": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz", - "integrity": "sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ==", - "dev": true + "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==" }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "websocket-driver": ">=0.5.1" + "safer-buffer": ">= 2.1.2 < 3" } }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", "dev": true, "requires": { - "bser": "2.1.1" + "postcss": "^7.0.14" } }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", + "dev": true, "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.18" + "harmony-reflect": "^1.4.6" } }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "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": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true }, - "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==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } + "immer": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", + "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" }, - "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==", + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "dev": true, "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.5.0" + "import-from": "^2.1.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==", - "dev": true, - "optional": true - }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "dev": true - }, - "filewatcher": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/filewatcher/-/filewatcher-3.0.1.tgz", - "integrity": "sha1-9KGVc1Xdr0Q8zXiolfPVXiPIoDQ=", + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { - "debounce": "^1.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "resolve-from": "^3.0.0" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true } } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "dev": true, "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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==", "dev": true, "requires": { - "ms": "2.0.0" + "find-up": "^4.0.0" } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true } } }, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, + "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": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "symbol-observable": "1.2.0" } }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "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==", "dev": true }, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", - "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "debug": "=3.1.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "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==", + "dev": true }, - "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==", + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dev": true, "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" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.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==", + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "requires": { - "map-cache": "^0.2.2" + "loose-envify": "^1.0.0" } }, - "free-style": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/free-style/-/free-style-2.6.1.tgz", - "integrity": "sha512-uaVA8e57tvhrFKAl6x32SGIrGFBoeTAFtfHDzWxjPhiXQiUxOI6EEdEReRkjNO2H9XcdMJXXEnMHw8Q7iMYLbw==" + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", "dev": true }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } + "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==", + "dev": true }, - "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==", - "dev": true, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "kind-of": "^3.0.2" }, "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } } } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, "requires": { - "minipass": "^3.0.0" + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.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": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "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==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", "dev": true }, - "function.prototype.name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.1.tgz", - "integrity": "sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q==", + "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==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1", - "functions-have-names": "^1.1.1", - "is-callable": "^1.1.4" + "binary-extensions": "^2.0.0" } }, - "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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "is-boolean-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", + "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", "dev": true }, - "functions-have-names": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.1.1.tgz", - "integrity": "sha512-U0kNHUoxwPNPWOJaMG7Z00d4a/qZVrFtzWJRaK8V9goaVOCXBSQSJpt3MYGNtkScKEBKovxLjnNdC9MlXwo5Pw==", + "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-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, - "gaxios": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.1.0.tgz", - "integrity": "sha512-Gtpb5sdQmb82sgVkT2GnS2n+Kx4dlFwbeMYcDlD395aEvsLCSQXJJcHt7oJ2LrGxDEAeiOkK79Zv2A8Pzt6CFg==", + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^3.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" - }, - "dependencies": { - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "https-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", - "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", - "dev": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", - "dev": true - } + "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": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "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" } }, - "gcp-metadata": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.2.2.tgz", - "integrity": "sha512-vR7kcJMCYJG/mYWp/a1OszdOqnLB/XW1GorWW1hc1lWVNL26L497zypWb9cG0CYDQ4Bl1Wk0+fSZFFjwJlTQgQ==", + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "requires": { - "gaxios": "^2.1.0", - "json-bigint": "^0.3.0" + "has": "^1.0.3" } }, - "gcs-resumable-upload": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-2.3.1.tgz", - "integrity": "sha512-zEO7L+jz99VznQsbsF7vFTnIFbSu+CjdJqt5htnjIrfsp5j+QCVBvbbKdqpaTfCPzpUPYj1Q9O9DhIh/8newfA==", - "dev": true, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "abort-controller": "^3.0.0", - "configstore": "^5.0.0", - "gaxios": "^2.0.0", - "google-auth-library": "^5.0.0", - "pumpify": "^2.0.0", - "stream-events": "^1.0.4" + "kind-of": "^3.0.2" }, "dependencies": { - "configstore": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.0.tgz", - "integrity": "sha512-eE/hvMs7qw7DlcB5JPRnthmrITuHMmACUJAp89v6PT6iOqzoLS7HRWhBtuHMlhNHo2AhUSA/3Dh1bKNJHcublQ==", - "dev": true, - "requires": { - "dot-prop": "^5.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "duplexify": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", - "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", - "dev": true, - "requires": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", - "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", - "dev": true, - "requires": { - "duplexify": "^4.1.1", - "inherits": "^2.0.3", - "pump": "^3.0.0" - } - }, - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "write-file-atomic": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", - "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", - "dev": true, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "is-buffer": "^1.1.5" } - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true } } }, - "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==", + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, - "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==", + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true }, - "get-intrinsic": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.0.tgz", - "integrity": "sha512-M11rgtQp5GZMZzDL7jLTNxbDfurpzuau5uqRWDPvlHjfvg3TdScAZo96GLvhMjImrmR8uAt0FS2RLoMrfWGKlg==", - "dev": true, + "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": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true + "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==" } } }, - "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==", + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "is-dom": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.1.0.tgz", + "integrity": "sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==", + "dev": true, + "requires": { + "is-object": "^1.0.1", + "is-window": "^1.0.2" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "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==", + "dev": true + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true + }, + "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==", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true + }, + "is-in-browser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", + "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" + }, + "is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", "dev": true, "requires": { - "pump": "^3.0.0" + "lower-case": "^1.1.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "is-glob": "^4.0.1" + "kind-of": "^3.0.2" }, "dependencies": { - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-extglob": "^2.1.1" + "is-buffer": "^1.1.5" } } } }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "is-number-object": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", + "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", "dev": true }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - }, - "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - } - } - }, - "global-modules": { + "is-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", "dev": true, "requires": { - "global-prefix": "^3.0.0" + "is-path-inside": "^2.1.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==", + "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==", "dev": true, "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "path-is-inside": "^1.0.2" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "dev": true, + "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": { - "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==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - } + "isobject": "^3.0.1" } }, - "google-auth-library": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.5.1.tgz", - "integrity": "sha512-zCtjQccWS/EHYyFdXRbfeSGM/gW+d7uMAcVnvXRnjBXON5ijo6s0nsObP0ifqileIDSbZjTlLtgo+UoN8IFJcg==", - "dev": true, - "requires": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "fast-text-encoding": "^1.0.0", - "gaxios": "^2.1.0", - "gcp-metadata": "^3.2.0", - "gtoken": "^4.1.0", - "jws": "^3.1.5", - "lru-cache": "^5.0.0" - }, - "dependencies": { - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true }, - "google-p12-pem": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.3.tgz", - "integrity": "sha512-Tq2kBCANxYYPxaBpTgCpRfdoPs9+/lNzc/Iaee4kuMVW5ascD+HwhpBsTLwH85C9Ev4qfB8KKHmpPQYyD2vg2w==", + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "node-forge": "^0.9.0" - }, - "dependencies": { - "node-forge": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.1.tgz", - "integrity": "sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ==", - "dev": true - } + "has": "^1.0.1" } }, - "google-protobuf": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.10.0.tgz", - "integrity": "sha512-d0cMO8TJ6xtB/WrVHCv5U81L2ulX+aCD58IljyAN6mHwdHHJ2jbcauX5glvivi3s3hx7EYEo7eUA9WftzamMnw==" + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, - "graphlib": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.7.tgz", - "integrity": "sha512-TyI9jIy2J4j0qgPmOOrHTCtpPqJGN/aurBwc6ZT+bRii+di1I+Wv3obRhVrmBEXet+qkMaEX67dXrwsd3QQM6w==", - "requires": { - "lodash": "^4.17.5" - } + "is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "dev": true }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-string": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", + "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", + "dev": true + }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", "dev": true }, - "grpc-web": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/grpc-web/-/grpc-web-1.2.1.tgz", - "integrity": "sha512-ibBaJPzfMVuLPgaST9w0kZl60s+SnkPBQp6QKdpEr85tpc1gXW2QDqSne9xiyiym0logDfdUSm4aX5h9YBA2mw==" - }, - "gtoken": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.3.tgz", - "integrity": "sha512-ofW+FiXjswyKdkjMcDbe6E4K7cDDdE82dGDhZIc++kUECqaE7MSErf6arJPAjcnYn1qxE1/Ti06qQuqgVusovQ==", + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, "requires": { - "gaxios": "^2.1.0", - "google-p12-pem": "^2.0.0", - "jws": "^3.1.5", - "mime": "^2.2.0" - }, - "dependencies": { - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", - "dev": true - } + "has-symbols": "^1.0.0" } }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", "dev": true, "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } + "upper-case": "^1.1.0" } }, - "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==", + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", "dev": true }, - "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "is-window": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz", + "integrity": "sha1-LIlspT25feRdPDMTOmXYyfVjSA0=", + "dev": true + }, + "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-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "is-docker": "^2.0.0" } }, - "har-schema": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", - "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "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-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, - "harmony-reflect": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", - "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==", - "dev": true + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "has-flag": { + "istanbul-lib-report": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "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": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "dependencies": { - "kind-of": { + "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, "requires": { - "is-buffer": "^1.1.5" + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } }, - "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==", + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", "dev": true, "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "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==", + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "ms": "2.1.2" } }, - "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==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true - } - } - }, - "hash-stream-validation": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.2.tgz", - "integrity": "sha512-cMlva5CxWZOrlS/cY0C+9qAzesn5srhFA8IT1VPiHc9bWWBLkJfEUIZr7MWoi89oOOGmpg8ymchaOjiArsGu5A==", - "dev": true, - "requires": { - "through2": "^2.0.0" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" } }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "iterate-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", + "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==", "dev": true }, - "header-case": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", - "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", "dev": true, "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.3" + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" } }, - "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==", - "dev": true - }, - "history": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", - "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", + "jest": { + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.0.tgz", + "integrity": "sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA==", + "dev": true, "requires": { - "invariant": "^2.2.1", - "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", - "value-equal": "^0.4.0", - "warning": "^3.0.0" + "@jest/core": "^26.6.0", + "import-local": "^3.0.2", + "jest-cli": "^26.6.0" }, "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, "requires": { - "loose-envify": "^1.0.0" + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "dev": true, + "requires": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + } + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" - }, - "hoist-non-react-statics": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.2.1.tgz", - "integrity": "sha512-TFsu3TV3YLY+zFTZDrN8L2DTFanObwmBLpWvJs1qfUuEQ5bTAdFcwfx2T/bsCXfM9QHSLvjfP+nihEl0yvozxw==", - "requires": { - "react-is": "^16.3.2" - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", "dev": true, "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, - "html-element-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.1.0.tgz", - "integrity": "sha512-iqiG3dTZmy+uUaTmHarTL+3/A2VW9ox/9uasKEZC+R/wAtUrTcRlXPSaPqsnWPfIu8wqn09jQNwMRqzL54jSYA==", + "jest-circus": { + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-26.6.0.tgz", + "integrity": "sha512-L2/Y9szN6FJPWFK8kzWXwfp+FOR7xq0cUL4lIsdbIdwz3Vh6P1nrpcqOleSzr28zOtSHQNV9Z7Tl+KkuK7t5Ng==", "dev": true, "requires": { - "array-filter": "^1.0.0" + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.0", + "@jest/test-result": "^26.6.0", + "@jest/types": "^26.6.0", + "@types/babel__traverse": "^7.0.4", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^26.6.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.0", + "jest-matcher-utils": "^26.6.0", + "jest-message-util": "^26.6.0", + "jest-runner": "^26.6.0", + "jest-runtime": "^26.6.0", + "jest-snapshot": "^26.6.0", + "jest-util": "^26.6.0", + "pretty-format": "^26.6.0", + "stack-utils": "^2.0.2", + "throat": "^5.0.0" }, "dependencies": { - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, - "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==", - "dev": true, - "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==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "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==", + "jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", "dev": true, "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" + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" }, "dependencies": { - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "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==", + "dev": true + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true + "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==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "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==", "dev": true, "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "@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" } }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { - "tslib": "^2.0.3" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } } }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" } }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "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==", "dev": true, "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "has-flag": "^4.0.0" } }, - "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", - "dev": true - } - } - }, - "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==", - "dev": true, - "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": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "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==", + "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==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "is-number": "^7.0.0" } - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true - }, - "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" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - } - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.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": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "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": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "hyphenate-style-name": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz", - "integrity": "sha1-MRYKNpMK2vH8BMYHT360FGXU7Es=" - }, - "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==", - "dev": true, - "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": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", - "dev": true, - "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==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, - "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": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "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": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "^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==", + "dev": true + } } }, - "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==", + "jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", "dev": true, "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "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==", + "jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "dev": true, "requires": { - "symbol-observable": "1.2.0" + "detect-newline": "^3.0.0" } }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", "dev": true, "requires": { - "repeating": "^2.0.0" + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "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==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "jest-environment-jsdom-sixteen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom-sixteen/-/jest-environment-jsdom-sixteen-2.0.0.tgz", + "integrity": "sha512-BF+8P67aEJcd78TQzwSb9P4a73cArOWb5KgqI8eU6cHRWDIJdDRE8XTeZAmOuDSDhKpuEXjKkXwWB3GOJvqHJQ==", "dev": true, "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" + "@jest/fake-timers": "^25.1.0", + "jest-mock": "^25.1.0", + "jest-util": "^25.1.0", + "jsdom": "^16.2.1" }, "dependencies": { - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "@jest/fake-timers": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", + "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "lolex": "^5.0.0" + } + }, + "@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "acorn": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", + "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { - "type-fest": "^0.11.0" + "debug": "4" } }, "ansi-styles": { @@ -10502,10 +20729,19 @@ "color-convert": "^2.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -10527,1239 +20763,2779 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "whatwg-encoding": "^1.0.5" } }, - "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==", + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" } }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true - } - } - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "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==", - "dev": true, - "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" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "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==", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + }, + "jest-message-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", + "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", + "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0" + } + }, + "jest-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", + "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "make-dir": "^3.0.0" + } + }, + "jsdom": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", + "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.5", + "xml-name-validator": "^3.0.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==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + }, + "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==", + "dev": true, "requires": { - "is-buffer": "^1.1.5" + "has-flag": "^4.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "whatwg-url": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", + "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" } + }, + "ws": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "dev": true } } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", - "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", - "dev": true - }, - "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-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "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": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "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.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", "dev": true, "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, "requires": { - "is-buffer": "^1.1.5" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "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-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "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": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" - }, - "is-lower-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", - "dev": true, - "requires": { - "lower-case": "^1.1.0" + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", "dev": true }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, "requires": { - "kind-of": "^3.0.2" + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, "requires": { - "is-buffer": "^1.1.5" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "is-number": "^7.0.0" } } } }, - "is-number-object": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", - "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", - "dev": true - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "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==", + "jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", "dev": true, "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": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "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" + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + }, + "dependencies": { + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + } + }, + "@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", "dev": true, "requires": { - "has": "^1.0.1" + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" } }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", - "dev": true - }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", "dev": true, "requires": { - "html-comment-regex": "^1.1.0" + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { - "has-symbols": "^1.0.0" + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "dev": true + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-upper-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", + "jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", "dev": true, "requires": { - "upper-case": "^1.1.0" + "@jest/types": "^26.6.2", + "@types/node": "*" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "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": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" + "jest-resolve": { + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.0.tgz", + "integrity": "sha512-tRAz2bwraHufNp+CCmAD8ciyCpXCs1NQxB5EJAmtCFy6BN81loFEGWKzYu26Y62lAJJe4X4jg36Kf+NsQyiStQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.0", + "read-pkg-up": "^7.0.1", + "resolve": "^1.17.0", + "slash": "^3.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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==", + "dev": true, + "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" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.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==", + "dev": true + } } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "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==", - "dev": true - }, - "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==", + "jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", "dev": true, "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" + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.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==", + "jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", "dev": true, "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" }, "dependencies": { + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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==", + "dev": true, + "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" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, "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==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.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==", + "dev": true } } }, - "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==", - "dev": true, - "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" + "jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", "dev": true, "requires": { - "ms": "2.1.2" + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "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==", + "dev": true + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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==", + "dev": true, + "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" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.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==", + "dev": true } } }, - "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==", + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "dev": true, "requires": { - "html-escaper": "^2.0.0" + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + } } }, - "jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", - "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", + "jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", "dev": true, "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.9.0" + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" }, "dependencies": { - "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==", + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "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" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/prettier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-hkc1DATxFLQo4VxPDpMH1gCkPpBbpOoJ/4nhuXw4n63/0R6bCpQECj4+K226UJ4JO/eJQz+1mC2I7JsWanAdQw==", + "dev": true + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + } + } + }, + "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==", + "dev": true, + "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" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.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==", + "dev": true } } }, - "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==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "execa": "^1.0.0", - "throat": "^4.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==", - "dev": true, - "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" - } - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-docblock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", - "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", - "dev": true, - "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==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "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==", + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "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" + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" }, "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", "dev": true }, - "jsdom": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", - "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", - "dev": true, - "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" + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" } }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "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==", "dev": true, "requires": { - "async-limiter": "~1.0.0" + "has-flag": "^4.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==", - "dev": true, - "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": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "dev": true - }, - "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==", - "dev": true, - "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==", + }, + "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==", "dev": true, - "optional": true, "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "is-number": "^7.0.0" } } } }, - "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==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "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==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.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==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", - "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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" - } - }, - "jest-runtime": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", - "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", + "jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "dev": true, "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" + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" }, "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", "dev": true - } - } - }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", - "dev": true - }, - "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==", - "dev": true, - "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": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.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==", + "jest-watch-typeahead": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz", + "integrity": "sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg==", "dev": true, "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" + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^26.0.0", + "jest-watcher": "^26.3.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0" }, "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "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==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "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==", "dev": true } } }, - "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==", - "dev": true, - "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" - } - }, - "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==", + "jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", "dev": true, "requires": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", "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" + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" }, "dependencies": { + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", "dev": true }, - "string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", "dev": true, "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" + "has-flag": "^4.0.0" } }, "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "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==", "dev": true } } }, - "jest-watcher": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", - "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", - "dev": true, - "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" - } - }, "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { + "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" + "supports-color": "^7.0.0" }, "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "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==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", + "dev": true + }, + "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.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "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": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsdom": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", + "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.5", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.0.tgz", + "integrity": "sha512-ULr0LDaEqQrMFGyQ3bhJkLsbtrQ8QibAseGZeaSUiT/6zb9IvIkomWHJIvgvwad+hinRAgsI51JcWk2yvwyL+w==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" } } } }, - "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.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "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": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, - "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==", - "dev": true - } - } - }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -11803,17 +23579,7 @@ "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==", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -11842,20 +23608,23 @@ } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -11937,15 +23706,47 @@ } }, "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==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", "dev": true, "requires": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.0" + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } } }, + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true + }, "jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -11967,11 +23768,6 @@ "safe-buffer": "^5.0.1" } }, - "keycode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz", - "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=" - }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -11983,12 +23779,42 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true + }, + "language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, "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", @@ -11999,19 +23825,40 @@ "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": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "lazy-universal-dotenv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz", + "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "@babel/runtime": "^7.5.0", + "app-root-dir": "^1.0.2", + "core-js": "^3.0.4", + "dotenv": "^8.0.0", + "dotenv-expand": "^5.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "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==", + "dev": true + } } }, "lcov-parse": { @@ -12020,27 +23867,12 @@ "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", "dev": true }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, "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==", "dev": true }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "requires": { - "leven": "^3.1.0" - } - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -12051,76 +23883,36 @@ "type-check": "~0.3.2" } }, + "license-checker": { + "version": "25.0.1", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/license-checker/-/license-checker-25.0.1.tgz", + "integrity": "sha1-TRRQRHilJAqFe7PCHNBJGgDXYfo=", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "read-installed": "~4.0.3", + "semver": "^5.5.0", + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-satisfies": "^4.0.0", + "treeify": "^1.1.0" + } + }, + "lilconfig": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz", + "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==", + "dev": true + }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "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==", - "dev": true, - "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": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, - "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": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "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": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "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": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "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", @@ -12128,101 +23920,29 @@ "dev": true }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dev": true, "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==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } + "json5": "^2.1.2" } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" - }, - "lodash._arraycopy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", - "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", - "dev": true - }, - "lodash._arrayeach": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", - "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=", - "dev": true - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash._baseclone": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", - "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=", - "dev": true, - "requires": { - "lodash._arraycopy": "^3.0.0", - "lodash._arrayeach": "^3.0.0", - "lodash._baseassign": "^3.0.0", - "lodash._basefor": "^3.0.0", - "lodash.isarray": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basefor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", - "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", - "dev": true - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true + "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", @@ -12230,16 +23950,6 @@ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", "dev": true }, - "lodash.clonedeep": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz", - "integrity": "sha1-oKHkDYKl6on/WxR7hETtY9koJ9s=", - "dev": true, - "requires": { - "lodash._baseclone": "^3.0.0", - "lodash._bindcallback": "^3.0.0" - } - }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -12272,18 +23982,6 @@ "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", @@ -12294,27 +23992,16 @@ "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "lodash.template": { @@ -12336,10 +24023,16 @@ "lodash._reinterpolate": "^3.0.0" } }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", + "lodash.topath": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", + "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, "lodash.uniq": { @@ -12360,6 +24053,20 @@ "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", "dev": true }, + "lolex": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", + "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -12368,16 +24075,6 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, "lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", @@ -12393,15 +24090,39 @@ "lower-case": "^1.1.2" } }, + "lowlight": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", + "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", + "dev": true, + "requires": { + "fault": "^1.0.0", + "highlight.js": "~10.7.0" + } + }, "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==", - "dev": true, "requires": { "yallist": "^4.0.0" } }, + "lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", + "dev": true + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -12435,30 +24156,15 @@ "tmpl": "1.0.x" } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "map-or-similar": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", + "integrity": "sha1-beJlMXSt+12e3DPGnT6Sobdvrwg=", "dev": true }, "map-visit": { @@ -12469,6 +24175,12 @@ "object-visit": "^1.0.0" } }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "dev": true + }, "markdown-to-jsx": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.10.3.tgz", @@ -12478,24 +24190,28 @@ "unquote": "^1.1.0" } }, - "marked": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.5.2.tgz", - "integrity": "sha512-fdZvBa7/vSQIZCi4uuwo2N3q+7jJURpMVCcbaX0S1Mg65WZ5ilXvC67MviJAsdjqqgD+CEq4RKo5AYGgINkVAA==", - "dev": true - }, - "marked-terminal": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.3.0.tgz", - "integrity": "sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A==", - "dev": true, + "match-sorter": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.0.tgz", + "integrity": "sha512-efYOf/wUpNb8FgNY+cOD2EIJI1S5I7YPKsw0LBp7wqPh5pmMS6i/wr3ZWwfwrAw1NvqTA2KUReVRWDX84lUcOQ==", "requires": { - "ansi-escapes": "^3.1.0", - "cardinal": "^2.1.1", - "chalk": "^2.4.1", - "cli-table": "^0.3.1", - "node-emoji": "^1.4.1", - "supports-hyperlinks": "^1.0.1" + "@babel/runtime": "^7.12.5", + "remove-accents": "0.4.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } } }, "md5.js": { @@ -12509,27 +24225,80 @@ "safe-buffer": "^5.1.2" } }, + "mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "dev": true, + "requires": { + "unist-util-remove": "^2.0.0" + } + }, + "mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true + }, "mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", "dev": true }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "memfs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", + "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", + "dev": true, + "requires": { + "fs-monkey": "1.0.3" + } + }, + "memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha1-fIekZGREwy11Q4VwkF8tvRsagFo=", "dev": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" + "map-or-similar": "^1.5.0" } }, "memory-fs": { @@ -12542,46 +24311,6 @@ "readable-stream": "^2.0.1" } }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "merge-deep": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", - "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "clone-deep": "^0.2.4", - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -12632,6 +24361,11 @@ "to-regex": "^3.0.2" } }, + "microseconds": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", + "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==" + }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", @@ -12643,9 +24377,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -12683,10 +24417,16 @@ "dom-walk": "^0.1.0" } }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, "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==", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz", + "integrity": "sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA==", "dev": true, "requires": { "loader-utils": "^1.1.0", @@ -12695,6 +24435,26 @@ "webpack-sources": "^1.1.0" }, "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "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==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -12724,7 +24484,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -12771,6 +24530,16 @@ "minipass": "^3.0.0" } }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, "mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", @@ -12808,24 +24577,6 @@ } } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "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": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -12835,6 +24586,12 @@ "minimist": "^1.2.5" } }, + "modern-normalize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", + "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==", + "dev": true + }, "moo": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", @@ -12876,12 +24633,6 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, "nan": { "version": "2.14.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", @@ -12889,6 +24640,20 @@ "dev": true, "optional": true }, + "nano-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", + "integrity": "sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8=", + "requires": { + "big-integer": "^1.6.16" + } + }, + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -12907,6 +24672,15 @@ "to-regex": "^3.0.1" } }, + "native-url": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.2.6.tgz", + "integrity": "sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA==", + "dev": true, + "requires": { + "querystring": "^0.2.0" + } + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -12938,6 +24712,12 @@ "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", "dev": true }, + "nested-error-stacks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", + "dev": true + }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -12959,13 +24739,22 @@ "lower-case": "^1.1.1" } }, + "node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", + "dev": true, + "requires": { + "minimatch": "^3.0.2" + } + }, "node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dev": true, "requires": { - "lodash.toarray": "^4.4.0" + "lodash": "^4.17.21" } }, "node-fetch": { @@ -13025,15 +24814,6 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } } } }, @@ -13044,33 +24824,63 @@ "dev": true }, "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", "dev": true, + "optional": true, "requires": { "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", "shellwords": "^0.1.1", - "which": "^1.3.0" + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "node-releases": { - "version": "1.1.50", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.50.tgz", - "integrity": "sha512-lgAmPv9eYZ0bGwUYAKlr8MG6K4CvWliWqnkcT2P8mMAgVrH3lqfBPorFlxiG1pHQnqmavJZ9vbMXUTNyMLbrgQ==", + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "dev": true + }, + "nopt": { + "version": "4.0.3", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha1-o3XK2dAv2SEnjZVMIlTVqlfhXkg=", "dev": true, "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "abbrev": "1", + "osenv": "^0.1.4" } }, "normalize-package-data": { @@ -13086,13 +24896,10 @@ } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-range": { "version": "0.1.2", @@ -13117,6 +24924,12 @@ "sort-keys": "^1.0.0" } }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI=", + "dev": true + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -13126,6 +24939,18 @@ "path-key": "^2.0.0" } }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -13192,9 +25017,9 @@ } }, "object-hash": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.1.1.tgz", - "integrity": "sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", "dev": true }, "object-inspect": { @@ -13215,12 +25040,6 @@ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", "dev": true }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=", - "dev": true - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -13321,6 +25140,12 @@ "has": "^1.0.3" } }, + "objectorarray": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", + "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", + "dev": true + }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -13346,7 +25171,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -13361,24 +25185,13 @@ } }, "open": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.0.tgz", - "integrity": "sha512-PGoBCX/lclIWlpS/R2PQuIR4NJoXh6X5AwVzE7WXnWRGvHg7+4TBCgsujUgiPpm0K1y4qvQeWnCWVTpTKZBtvA==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "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==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - } } }, "opener": { @@ -13394,12 +25207,20 @@ "dev": true, "requires": { "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + } } }, "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==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", + "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", "dev": true, "requires": { "cssnano": "^4.1.10", @@ -13426,45 +25247,90 @@ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "^1.4.3" + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha1-hc36+uso6Gd/QW4odZK18/SepBA=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "overlayscrollbars": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-1.13.1.tgz", + "integrity": "sha512-gIQfzgGgu1wy80EB4/6DaJGHMEGmizq27xHIESrzXq0Y/J0Ay1P3DWk6tuVmEPIZH15zaBlxeEJOqdJKmowHCQ==", "dev": true }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "p-all": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", + "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "p-map": "^2.0.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + } } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", "dev": true }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true + "p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, + "requires": { + "p-timeout": "^3.1.0" + } }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, "requires": { - "p-reduce": "^1.0.0" + "p-map": "^2.0.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + } } }, "p-finally": { @@ -13473,12 +25339,6 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -13489,29 +25349,23 @@ } }, "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==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "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": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - }, "p-retry": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", @@ -13521,6 +25375,15 @@ "retry": "^0.12.0" } }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -13560,14 +25423,6 @@ "dev": true, "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==", - "dev": true - } } }, "parse-asn1": { @@ -13583,19 +25438,36 @@ "safe-buffer": "^5.1.1" } }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { - "error-ex": "^1.2.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" } }, "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, "parseurl": { @@ -13641,16 +25513,15 @@ "dev": true }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { "version": "1.0.2", @@ -13665,9 +25536,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-to-regexp": { @@ -13686,20 +25557,15 @@ } }, "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -13715,15 +25581,15 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pinkie": { @@ -13757,23 +25623,104 @@ "dev": true, "requires": { "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.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==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } } }, "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "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": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "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==", + "dev": true, + "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": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "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": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } } }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, "pnp-webpack-plugin": { "version": "1.6.4", "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", @@ -13783,10 +25730,36 @@ "ts-pnp": "^1.1.6" } }, + "polished": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.3.tgz", + "integrity": "sha512-ocPAcVBUOryJEKe0z2KLd1l9EBa1r5mSwlKpExmrLzsnIzJo4axsoU9O2BjOTkDGDT4mZ0WFE5XKTlR3nLnZOA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.14.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "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==", + "dev": true + } + } + }, "popper.js": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.6.tgz", - "integrity": "sha512-AGwHGQBKumlk/MDfrSOf0JHhJCImdDMcGNoqKmKkU+68GFazv3CQ6q9r7Ja1sKDZmYWTckY/uLyEznheTDycnA==" + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" }, "portable-fetch": { "version": "3.0.0", @@ -13831,9 +25804,9 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -14105,12 +26078,12 @@ } }, "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==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", + "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", "dev": true, "requires": { - "postcss": "^7.0.0" + "postcss": "^7.0.26" } }, "postcss-focus-visible": { @@ -14140,6 +26113,37 @@ "postcss": "^7.0.2" } }, + "postcss-functions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz", + "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=", + "dev": true, + "requires": { + "glob": "^7.1.2", + "object-assign": "^4.1.1", + "postcss": "^6.0.9", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "postcss-gap-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", @@ -14160,15 +26164,24 @@ } }, "postcss-initial": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", - "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", + "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", "dev": true, "requires": { - "lodash.template": "^4.5.0", "postcss": "^7.0.2" } }, + "postcss-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-2.0.3.tgz", + "integrity": "sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1", + "postcss": "^7.0.18" + } + }, "postcss-lab-function": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", @@ -14188,6 +26201,46 @@ "requires": { "cosmiconfig": "^5.0.0", "import-cwd": "^2.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } } }, "postcss-loader": { @@ -14202,6 +26255,26 @@ "schema-utils": "^1.0.0" }, "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "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==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -14382,6 +26455,16 @@ "postcss": "^7.0.6" } }, + "postcss-nested": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.3.tgz", + "integrity": "sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw==", + "dev": true, + "requires": { + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2" + } + }, "postcss-nesting": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", @@ -14658,12 +26741,25 @@ } }, "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==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz", + "integrity": "sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ==", "dev": true, "requires": { - "postcss": "^7.0.0" + "postcss": "^8.1.0" + }, + "dependencies": { + "postcss": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", + "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + } + } } }, "postcss-selector-matches": { @@ -14687,24 +26783,21 @@ } }, "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dev": true, "requires": { "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", "util-deprecate": "^1.0.2" } }, "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", "dev": true, "requires": { - "is-svg": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" @@ -14756,9 +26849,9 @@ "dev": true }, "pretty-bytes": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.5.0.tgz", - "integrity": "sha512-p+T744ZyjjiaFlMUZZv6YPC5JrkNj8maRmPaQCWFJFplUAzpIUTRaTcS+7wmZtUoFXHtESJb23ISliaWyz3SHA==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, "pretty-error": { @@ -14769,74 +26862,363 @@ "requires": { "lodash": "^4.17.20", "renderkid": "^2.0.4" + } + }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" }, "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "prismjs": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", + "integrity": "sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "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" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise.allsettled": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.4.tgz", + "integrity": "sha512-o73CbvQh/OnPFShxHcHxk0baXR2a1m4ozb85ha0H14VEoi/EJJLa9mnPfEWJx9RjA9MLfhdjZ8I6HhWtBa64Ag==", "dev": true, "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "array.prototype.map": "^1.0.3", + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.0.2", + "iterate-value": "^1.0.2" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "es-abstract": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } + } + }, + "promise.prototype.finally": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz", + "integrity": "sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.0", + "function-bind": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, - "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==", + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } } } }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "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" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, "prompts": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", @@ -14867,6 +27249,42 @@ "reflect.ownkeys": "^0.2.0" } }, + "property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + }, + "protobufjs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "16.4.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.10.tgz", + "integrity": "sha512-TmVHsm43br64js9BqHWqiDZA+xMtbUpI1MBIA0EyiBmoV9pcEYFOSdj5fr6enZNfh4fChh+AGOLIzGwJnkshyQ==" + } + } + }, "proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -14903,9 +27321,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -14948,6 +27366,37 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, + "purgecss": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz", + "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==", + "dev": true, + "requires": { + "commander": "^6.0.0", + "glob": "^7.0.0", + "postcss": "^8.2.1", + "postcss-selector-parser": "^6.0.2" + }, + "dependencies": { + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "postcss": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + } + } + } + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -14970,9 +27419,9 @@ } }, "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", "dev": true }, "querystring-es3": { @@ -14987,6 +27436,18 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, "raf": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz", @@ -15001,6 +27462,12 @@ "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", "dev": true }, + "ramda": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz", + "integrity": "sha1-oAGr7bP/YQd9T/HVd9RN536NCjU=", + "dev": true + }, "randexp": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", @@ -15081,6 +27548,35 @@ } } }, + "raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, "re-resizable": { "version": "4.11.0", "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-4.11.0.tgz", @@ -15127,23 +27623,23 @@ } }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-2.0.0.tgz", + "integrity": "sha512-0sF4ny9v/B7s6aoehwze9vJNWcmCemAUYBVasscVr92+UYiEqDXOxfKjXN685mDaMRNF3WdhHQs76oTODMocFA==", "dev": true, "requires": { - "core-js": "^3.5.0", + "core-js": "^3.6.5", "object-assign": "^4.1.1", - "promise": "^8.0.3", + "promise": "^8.1.0", "raf": "^3.4.1", - "regenerator-runtime": "^0.13.3", - "whatwg-fetch": "^3.0.0" + "regenerator-runtime": "^0.13.7", + "whatwg-fetch": "^3.4.1" }, "dependencies": { "core-js": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", - "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.1.tgz", + "integrity": "sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg==", "dev": true }, "promise": { @@ -15169,35 +27665,47 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true + }, + "whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "dev": true } } }, + "react-colorful": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.3.0.tgz", + "integrity": "sha512-zWE5E88zmjPXFhv6mGnRZqKin9s5vip1O3IIGynY9EhZxN8MATUxZkT3e/9OwTEm4DjQBXc6PFWP6AetY+Px+A==", + "dev": true + }, "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==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", + "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", "dev": true, "requires": { - "@babel/code-frame": "7.8.3", + "@babel/code-frame": "7.10.4", "address": "1.1.2", - "browserslist": "4.10.0", + "browserslist": "4.14.2", "chalk": "2.4.2", - "cross-spawn": "7.0.1", + "cross-spawn": "7.0.3", "detect-port-alt": "1.1.6", "escape-string-regexp": "2.0.0", - "filesize": "6.0.1", + "filesize": "6.1.0", "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "3.1.1", + "fork-ts-checker-webpack-plugin": "4.1.6", "global-modules": "2.0.0", - "globby": "8.0.2", + "globby": "11.0.1", "gzip-size": "5.1.1", - "immer": "1.10.0", - "inquirer": "7.0.4", + "immer": "8.0.1", "is-root": "2.1.0", - "loader-utils": "1.2.3", + "loader-utils": "2.0.0", "open": "^7.0.2", "pkg-up": "3.1.0", - "react-error-overlay": "^6.0.7", + "prompts": "2.4.0", + "react-error-overlay": "^6.0.9", "recursive-readdir": "2.2.2", "shell-quote": "1.7.2", "strip-ansi": "6.0.0", @@ -15205,68 +27713,41 @@ }, "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==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.10.4" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, "browserslist": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", - "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", + "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001035", - "electron-to-chromium": "^1.3.378", - "node-releases": "^1.1.52", - "pkg-up": "^3.1.0" + "caniuse-lite": "^1.0.30001125", + "electron-to-chromium": "^1.3.564", + "escalade": "^3.0.2", + "node-releases": "^1.1.61" } }, - "caniuse-lite": { - "version": "1.0.30001181", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001181.tgz", - "integrity": "sha512-m5ul/ARCX50JB8BSNM+oiPmQrR5UmngaQ3QThTTp5HcIIQGP/nPBs82BYLE+tigzm3VW+F4BJIhUyaVtEweelQ==", - "dev": true - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -15274,18 +27755,6 @@ "which": "^2.0.1" } }, - "electron-to-chromium": { - "version": "1.3.650", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.650.tgz", - "integrity": "sha512-j6pRuNylFBbroG6NB8Lw/Im9oDY74s2zWHBP5TmdYg73cBuL6cz//SMgolVa0gIJk/DSL+kO7baJ1DSXW1FUZg==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", @@ -15293,160 +27762,278 @@ "dev": true }, "filesize": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", - "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", + "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", "dev": true }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" } }, - "immer": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", - "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.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==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, - "inquirer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", - "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "dev": true, "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" + "find-up": "^3.0.0" }, "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "locate-path": "^3.0.0" } } } }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "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==", + "dev": true, + "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==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "react-docgen": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.4.0.tgz", + "integrity": "sha512-JBjVQ9cahmNlfjMGxWUxJg919xBBKAoy3hgDgKERbR+BcF4ANpDuzWAScC7j27hZfd8sJNmMPOLWo9+vB/XJEQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@babel/generator": "^7.12.11", + "@babel/runtime": "^7.7.6", + "ast-types": "^0.14.2", + "commander": "^2.19.0", + "doctrine": "^3.0.0", + "estree-to-babel": "^3.1.0", + "neo-async": "^2.6.1", + "node-dir": "^0.1.10", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "react-docgen-typescript": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-1.22.0.tgz", + "integrity": "sha512-MPLbF8vzRwAG3GcjdL+OHQlhgtWsLTXs+7uJiHfEeT3Ur7IsZaNYqRTLQ9sj2nB6M6jylcPCeCmH7qbszJmecg==", + "dev": true + }, + "react-docgen-typescript-plugin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.0.tgz", + "integrity": "sha512-Akc7EtryOA4d2yOX27B5ii+hyf/k15ymb01uB+VnRgtTAdfeDCmNPvyLbRJ6pRNYOuFlEBe1YfCH73bTPtpYVQ==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "endent": "^2.0.1", + "find-cache-dir": "^3.3.1", + "flat-cache": "^3.0.4", + "micromatch": "^4.0.2", + "react-docgen-typescript": "^1.22.0", + "tslib": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { - "minimist": "^1.2.0" + "ms": "2.1.2" } }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "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==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "to-regex-range": "^5.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==", + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, - "node-releases": { - "version": "1.1.70", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", - "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "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==", + "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==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "semver": "^6.0.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==", - "dev": true + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "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==", + "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==", "dev": true, "requires": { - "shebang-regex": "^3.0.0" + "find-up": "^4.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==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - } + "is-number": "^7.0.0" } }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", "dev": true }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", "dev": true, "requires": { - "isexe": "^2.0.0" + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" } } } @@ -15473,6 +28060,15 @@ } } }, + "react-draggable": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.3.tgz", + "integrity": "sha512-jV4TE59MBuWm7gb6Ns3Q1mxX8Azffb7oTtDtBgFkxRvhDp38YAARmRplrj0+XGkhOJB5XziArX+4HUUABtyZ0w==", + "requires": { + "classnames": "^2.2.5", + "prop-types": "^15.6.0" + } + }, "react-dropzone": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-5.1.1.tgz", @@ -15482,26 +28078,209 @@ "prop-types": "^15.6.2" } }, + "react-element-to-jsx-string": { + "version": "14.3.2", + "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.2.tgz", + "integrity": "sha512-WZbvG72cjLXAxV7VOuSzuHEaI3RHj10DZu8EcKQpkKcAj7+qAkG5XUeSdX5FXrA0vPrlx0QsnAzZEBJwzV0e+w==", + "dev": true, + "requires": { + "@base2/pretty-print-object": "1.0.0", + "is-plain-object": "3.0.1" + }, + "dependencies": { + "is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true + } + } + }, "react-error-overlay": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.8.tgz", - "integrity": "sha512-HvPuUQnLp5H7TouGq3kzBeioJmXms1wHy9EGjz2OURWBp4qZO6AfGEcnxts1D/CbwPLRAgTMPCEgYhA3sEM4vw==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", "dev": true }, "react-event-listener": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.5.tgz", - "integrity": "sha512-//lCxOM3DQ0+xmTa/u9mI9mm55zCPdIKp89d8MGjlNsOOnXQ5sFDD1eed+sMBzQXKiRBLBMtSg/2T9RJFtfovw==", + "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", + "@babel/runtime": "^7.2.0", "prop-types": "^15.6.0", "warning": "^4.0.1" } }, + "react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==", + "dev": true + }, + "react-flow-renderer": { + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/react-flow-renderer/-/react-flow-renderer-9.6.5.tgz", + "integrity": "sha512-H5y5wjFcrJJjEjfRZXhOPB3lRfdIFL5l6h2rQ9h7qEecksG6VuMN54HYT+7hvzo8O/2QOSZZdFcObC2p//W2Ng==", + "requires": { + "@babel/runtime": "^7.14.6", + "@types/d3": "^7.0.0", + "@types/react-redux": "^7.1.18", + "classcat": "^5.0.3", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0", + "fast-deep-equal": "^3.1.3", + "react-draggable": "^4.4.3", + "react-redux": "^7.2.4", + "redux": "^4.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@types/d3": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.0.0.tgz", + "integrity": "sha512-7rMMuS5unvbvFCJXAkQXIxWTo2OUlmVXN5q7sfQFesuVICY55PSP6hhbUhWjTTNpfTTB3iLALsIYDFe7KUNABw==", + "requires": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + } + }, + "d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" + }, + "d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "requires": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + } + }, + "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==" + } + } + }, + "react-helmet-async": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.0.9.tgz", + "integrity": "sha512-N+iUlo9WR3/u9qGMmP4jiYfaD6pe9IvDTapZLFJz2D3xlTlCM1Bzy4Ab3g72Nbajo/0ZyW+W9hdz8Hbe4l97pQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "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==", + "dev": true + } + } + }, + "react-inspector": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz", + "integrity": "sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "is-dom": "^1.0.0", + "prop-types": "^15.0.0" + } + }, "react-is": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.7.0.tgz", - "integrity": "sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g==" + "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", @@ -15525,6 +28304,113 @@ } } }, + "react-popper": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz", + "integrity": "sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==", + "dev": true, + "requires": { + "react-fast-compare": "^3.0.1", + "warning": "^4.0.2" + } + }, + "react-popper-tooltip": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz", + "integrity": "sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@popperjs/core": "^2.5.4", + "react-popper": "^2.2.4" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "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==", + "dev": true + } + } + }, + "react-query": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.16.0.tgz", + "integrity": "sha512-YOvI8mO9WG+r4XsyJinjlDMiV5IewUWUcTv2J7z6bIP3KOFvgT6k6HM8vQouz4hPnme7Ktq9j5e7LarUqgJXFQ==", + "requires": { + "@babel/runtime": "^7.5.5", + "broadcast-channel": "^3.4.1", + "match-sorter": "^6.0.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } + } + }, + "react-redux": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.4.tgz", + "integrity": "sha512-hOQ5eOSkEJEXdpIKbnRyl04LhaWabkDPV+Ix97wqQX3T3d2NQ8DUblNXXtNMavc7DpswyQM6xfaN4HQDKNY2JA==", + "requires": { + "@babel/runtime": "^7.12.1", + "@types/react-redux": "^7.1.16", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^16.13.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "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==" + } + } + }, + "react-refresh": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", + "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==", + "dev": true + }, "react-router": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", @@ -15566,83 +28452,120 @@ "dev": true }, "react-scripts": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.1.tgz", - "integrity": "sha512-JpTdi/0Sfd31mZA6Ukx+lq5j1JoKItX7qqEK4OiACjVQletM1P38g49d9/D0yTxp9FrSF+xpJFStkGgKEIRjlQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-4.0.3.tgz", + "integrity": "sha512-S5eO4vjUzUisvkIPB7jVsKtuH2HhWcASREYWHAQ1FP5HyCv3xgn+wpILAEWkmy+A+tTNbSZClhxjT3qz6g4L1A==", "dev": true, "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/core": "7.12.3", + "@pmmmwh/react-refresh-webpack-plugin": "0.4.3", + "@svgr/webpack": "5.5.0", + "@typescript-eslint/eslint-plugin": "^4.5.0", + "@typescript-eslint/parser": "^4.5.0", + "babel-eslint": "^10.1.0", + "babel-jest": "^26.6.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", + "babel-plugin-named-asset-import": "^0.3.7", + "babel-preset-react-app": "^10.0.0", + "bfj": "^7.0.2", + "camelcase": "^6.1.0", "case-sensitive-paths-webpack-plugin": "2.3.0", - "css-loader": "3.4.2", + "css-loader": "4.3.0", "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", + "eslint": "^7.11.0", + "eslint-config-react-app": "^6.0.0", + "eslint-plugin-flowtype": "^5.2.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jest": "^24.1.0", + "eslint-plugin-jsx-a11y": "^6.3.1", + "eslint-plugin-react": "^7.21.5", + "eslint-plugin-react-hooks": "^4.2.0", + "eslint-plugin-testing-library": "^3.9.2", + "eslint-webpack-plugin": "^2.5.2", + "file-loader": "6.1.1", + "fs-extra": "^9.0.1", + "fsevents": "^2.1.3", + "html-webpack-plugin": "4.5.0", "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", + "jest": "26.6.0", + "jest-circus": "26.6.0", + "jest-resolve": "26.6.0", + "jest-watch-typeahead": "0.6.1", + "mini-css-extract-plugin": "0.11.3", + "optimize-css-assets-webpack-plugin": "5.0.4", "pnp-webpack-plugin": "1.6.4", - "postcss-flexbugs-fixes": "4.1.0", + "postcss-flexbugs-fixes": "4.2.1", "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.1", - "sass-loader": "8.0.2", - "semver": "6.3.0", - "style-loader": "0.23.1", - "terser-webpack-plugin": "2.3.5", - "ts-pnp": "1.1.6", - "url-loader": "2.3.0", - "webpack": "4.42.0", - "webpack-dev-server": "3.10.3", + "postcss-safe-parser": "5.0.2", + "prompts": "2.4.0", + "react-app-polyfill": "^2.0.0", + "react-dev-utils": "^11.0.3", + "react-refresh": "^0.8.3", + "resolve": "1.18.1", + "resolve-url-loader": "^3.1.2", + "sass-loader": "^10.0.5", + "semver": "7.3.2", + "style-loader": "1.3.0", + "terser-webpack-plugin": "4.2.3", + "ts-pnp": "1.2.0", + "url-loader": "4.1.1", + "webpack": "4.44.2", + "webpack-dev-server": "3.11.1", "webpack-manifest-plugin": "2.2.0", - "workbox-webpack-plugin": "4.3.1" + "workbox-webpack-plugin": "5.1.4" }, "dependencies": { + "bfj": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", + "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "check-types": "^11.1.1", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "check-types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", + "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==", + "dev": true + }, "resolve": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", - "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", "dev": true, "requires": { + "is-core-module": "^2.0.0", "path-parse": "^1.0.6" } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true } } }, + "react-sizeme": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.1.tgz", + "integrity": "sha512-9Hf1NLgSbny1bha77l9HwvwwxQUJxFUqi44Ih+y3evA+PezBpGdCGlnvye6avss2cIgs9PgdYgMnfuzJWn/RUw==", + "dev": true, + "requires": { + "element-resize-detector": "^1.2.2", + "invariant": "^2.2.4", + "shallowequal": "^1.1.0", + "throttle-debounce": "^3.0.1" + } + }, "react-svg-line-chart": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/react-svg-line-chart/-/react-svg-line-chart-2.0.2.tgz", @@ -15651,24 +28574,87 @@ "styled-components": "^2.4.0" } }, + "react-syntax-highlighter": { + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-13.5.3.tgz", + "integrity": "sha512-crPaF+QGPeHNIblxxCdf2Lg936NAHKhNhuMzRL3F9ct6aYXL3NcZtCL0Rms9+qVo6Y1EQLdXGypBNSbPL/r+qg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.3.1", + "highlight.js": "^10.1.1", + "lowlight": "^1.14.0", + "prismjs": "^1.21.0", + "refractor": "^3.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "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==", + "dev": true + } + } + }, "react-test-renderer": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.7.0.tgz", - "integrity": "sha512-tFbhSjknSQ6+ttzmuGdv+SjQfmvGcq3PFKyPItohwhhOBmRoTf1We3Mlt3rJtIn85mjPXOkKV+TaKK4irvk9Yg==", + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.14.0.tgz", + "integrity": "sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==", "dev": true, "requires": { "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "react-is": "^16.7.0", - "scheduler": "^0.12.0" + "react-is": "^16.8.6", + "scheduler": "^0.19.1" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "react-textarea-autosize": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz", + "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==", + "requires": { + "@babel/runtime": "^7.10.2", + "use-composed-ref": "^1.0.0", + "use-latest": "^1.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "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==" + } } }, "react-transition-group": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.5.2.tgz", - "integrity": "sha512-vwHP++S+f6KL7rg8V1mfs62+MBKtbMeZDR8KiNmD7v98Gs3UPGsDZDahPJH2PVprFW5YHJfh6cbNim3zPndaSQ==", + "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.3.1", + "dom-helpers": "^3.4.0", "loose-envify": "^1.4.0", "prop-types": "^15.6.2", "react-lifecycles-compat": "^3.0.4" @@ -15728,45 +28714,91 @@ } } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "read-installed": { + "version": "4.0.3", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/read-installed/-/read-installed-4.0.3.tgz", + "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "read-package-json": { + "version": "2.1.2", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha1-aZKytmxxdyWf646qxzw6zSi5Iio=", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "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==", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true } } }, @@ -15785,22 +28817,25 @@ "util-deprecate": "~1.0.1" } }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha1-jUVAe0+HCg3K68DihnDRjnRRQwk=", "dev": true, "requires": { - "picomatch": "^2.2.1" + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" } }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "util.promisify": "^1.0.0" + "picomatch": "^2.2.1" } }, "recompose": { @@ -15832,23 +28867,37 @@ "minimatch": "3.0.4" } }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "reduce-css-calc": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", + "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", "dev": true, "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" } }, - "redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", - "dev": true, + "redux": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", + "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==", "requires": { - "esprima": "~4.0.0" + "@babel/runtime": "^7.9.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "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==" + } } }, "reflect.ownkeys": { @@ -15857,6 +28906,17 @@ "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", "dev": true }, + "refractor": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.4.0.tgz", + "integrity": "sha512-dBeD02lC5eytm9Gld2Mx0cMcnR+zhSnsTfPpWqFaMgUMJfC9A6bcN3Br/NaXrnBJcuxnLFR90k1jrkaSyV8umg==", + "dev": true, + "requires": { + "hastscript": "^6.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.24.0" + } + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -15887,9 +28947,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -15913,9 +28973,9 @@ } }, "regex-parser": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", - "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==", + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", "dev": true }, "regexp.prototype.flags": { @@ -15929,9 +28989,9 @@ } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "regexpu-core": { @@ -15955,9 +29015,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.7.tgz", - "integrity": "sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -15977,6 +29037,203 @@ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", "dev": true }, + "remark-external-links": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", + "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", + "dev": true, + "requires": { + "extend": "^3.0.0", + "is-absolute-url": "^3.0.0", + "mdast-util-definitions": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "dev": true + }, + "remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + } + } + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "remark-slug": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", + "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", + "dev": true, + "requires": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "dev": true, + "requires": { + "mdast-squeeze-paragraphs": "^4.0.0" + } + }, + "remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U=" + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -15984,16 +29241,16 @@ "dev": true }, "renderkid": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz", - "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", "dev": true, "requires": { - "css-select": "^2.0.2", - "dom-converter": "^0.2", - "htmlparser2": "^3.10.1", - "lodash": "^4.17.20", - "strip-ansi": "^3.0.0" + "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": { @@ -16003,39 +29260,67 @@ "dev": true }, "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" } }, "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "dev": true + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, + "nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -16057,20 +29342,10 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, + "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", @@ -16079,37 +29354,19 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "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.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } + "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" } }, "request-promise-core": { @@ -16138,6 +29395,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -16159,18 +29422,26 @@ } }, "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve-pathname": { @@ -16184,23 +29455,38 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "resolve-url-loader": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", - "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz", + "integrity": "sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg==", "dev": true, "requires": { - "adjust-sourcemap-loader": "2.0.0", + "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", + "postcss": "7.0.36", "rework": "1.0.1", "rework-visit": "1.0.0", "source-map": "0.6.1" }, "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "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==", + "dev": true, + "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", @@ -16227,44 +29513,14 @@ "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==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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", @@ -16312,6 +29568,12 @@ } } }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rework": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", @@ -16367,6 +29629,107 @@ "inherits": "^2.0.1" } }, + "rollup": { + "version": "1.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", + "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + } + }, + "rollup-plugin-babel": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", + "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-terser": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", + "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^4.0.0", + "terser": "^4.6.2" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.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==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.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==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } + } + }, "rst-selector-parser": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", @@ -16383,11 +29746,14 @@ "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "dev": true }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } }, "run-queue": { "version": "1.0.3", @@ -16398,20 +29764,16 @@ "aproba": "^1.1.1" } }, + "runtypes": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/runtypes/-/runtypes-6.3.0.tgz", + "integrity": "sha512-FTNUs13CIrCTjReBOaeY/8EY1LYIQVkkwyE9z5MCjZe9uew9/8TRbWF1PcTczgTFfGBjkjUKeedFWU2O3ExjPg==" + }, "rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -16445,6 +29807,27 @@ "micromatch": "^3.1.4", "minimist": "^1.1.1", "walker": "~1.0.5" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, "sanitize.css": { @@ -16454,48 +29837,42 @@ "dev": true }, "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==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.2.0.tgz", + "integrity": "sha512-kUceLzC1gIHz0zNJPpqRsJyisWatGYNFRmv2CKZK2/ngMJgLqxTbXwe/hJ85luyvZkgqU3VlJ33UVF2T/0g6mw==", "dev": true, "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" + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" }, "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==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, "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==", "dev": true }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } }, - "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==", + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { - "kind-of": "^6.0.2" + "lru-cache": "^6.0.0" } } } @@ -16507,18 +29884,18 @@ "dev": true }, "saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "requires": { - "xmlchars": "^2.1.1" + "xmlchars": "^2.2.0" } }, "scheduler": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.12.0.tgz", - "integrity": "sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", "dev": true, "requires": { "loose-envify": "^1.1.0", @@ -16543,9 +29920,9 @@ "dev": true }, "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", "dev": true, "requires": { "node-forge": "^0.10.0" @@ -16645,10 +30022,40 @@ } }, "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-favicon": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", + "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=", + "dev": true, + "requires": { + "etag": "~1.8.1", + "fresh": "0.5.2", + "ms": "2.1.1", + "parseurl": "~1.3.2", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + } + } }, "serve-index": { "version": "1.9.1", @@ -16745,34 +30152,20 @@ } }, "shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^2.0.1", - "lazy-cache": "^0.2.3", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", - "dev": true, - "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": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", - "dev": true - } + "kind-of": "^6.0.2" } }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "dev": true + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -16798,7 +30191,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true + "dev": true, + "optional": true }, "side-channel": { "version": "1.0.4", @@ -16812,9 +30206,9 @@ }, "dependencies": { "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "dev": true } } @@ -16849,30 +30243,54 @@ "dev": true }, "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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==", + "dev": true, + "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==", "dev": true } } }, + "slide": { + "version": "1.1.6", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, "snake-case": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", @@ -17173,27 +30591,36 @@ } }, "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", "dev": true, "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } } }, "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==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", + "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", "dev": true, "requires": { - "debug": "^3.2.5", + "debug": "^3.2.6", "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" }, "dependencies": { "debug": { @@ -17205,14 +30632,11 @@ "ms": "^2.1.1" } }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ms": { "version": "2.1.3", @@ -17242,6 +30666,12 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, "source-map-resolve": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", @@ -17277,6 +30707,29 @@ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "dev": true + }, + "spdx-compare": { + "version": "1.0.0", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/spdx-compare/-/spdx-compare-1.0.0.tgz", + "integrity": "sha1-LFXxFzYgeNdAnm17CM5wqFfNPtc=", + "dev": true, + "requires": { + "array-find-index": "^1.0.2", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -17309,6 +30762,23 @@ "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", "dev": true }, + "spdx-ranges": { + "version": "2.1.1", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/spdx-ranges/-/spdx-ranges-2.1.1.tgz", + "integrity": "sha1-h1c5J7pR6Ss/RVCrYL/IPdB7rCA=", + "dev": true + }, + "spdx-satisfies": { + "version": "4.0.1", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/spdx-satisfies/-/spdx-satisfies-4.0.1.tgz", + "integrity": "sha1-mgmmjYD18aMc+uuzhLDGAJ5Jaf4=", + "dev": true, + "requires": { + "spdx-compare": "^1.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } + }, "spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -17395,9 +30865,9 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", - "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -17411,12 +30881,11 @@ } }, "ssri": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", - "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1", "minipass": "^3.1.1" } }, @@ -17432,6 +30901,18 @@ "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", "dev": true }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", + "dev": true + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "dev": true + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -17463,6 +30944,25 @@ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", "dev": true }, + "store2": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.12.0.tgz", + "integrity": "sha512-7t+/wpKLanLzSnQPX8WAcuLCCeuSHoWdQuh9SB3xD0kNOM38DNf+0Oa+wmvxmYueRzkmh6IcdKFtvTa+ecgPDw==", + "dev": true + }, + "storybook-addon-outline": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/storybook-addon-outline/-/storybook-addon-outline-1.4.1.tgz", + "integrity": "sha512-Qvv9X86CoONbi+kYY78zQcTGmCgFaewYnOVR6WL7aOFJoW7TrLiIc/O4hH5X9PsEPZFqjfXEPUPENWVUQim6yw==", + "dev": true, + "requires": { + "@storybook/addons": "^6.3.0", + "@storybook/api": "^6.3.0", + "@storybook/components": "^6.3.0", + "@storybook/core-events": "^6.3.0", + "ts-dedent": "^2.1.1" + } + }, "stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -17518,89 +31018,275 @@ "dev": true }, "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string.prototype.matchall": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", "dev": true, "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } } } }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "string.prototype.padend": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", + "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" }, "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "es-abstract": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "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==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } } } }, - "string.prototype.matchall": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz", - "integrity": "sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw==", + "string.prototype.padstart": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.2.tgz", + "integrity": "sha512-HDpngIP3pd0DeazrfqzuBrQZa+D2arKWquEHfGt5LzVjd+roLC3cjqVI0X8foaZz5rrrhcu8oJAQamW8on9dqw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.3" + "es-abstract": "^1.18.0-next.2" }, "dependencies": { "es-abstract": { - "version": "1.18.0-next.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", - "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.1", - "object-inspect": "^1.9.0", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.3", - "string.prototype.trimstart": "^1.0.3" + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" } }, "es-to-primitive": { @@ -17615,31 +31301,40 @@ } }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "has-tostringtag": "^1.0.0" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" } }, "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, "object-keys": { @@ -17674,12 +31369,12 @@ } }, "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, @@ -17704,12 +31399,12 @@ } }, "string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, @@ -17741,32 +31436,21 @@ } } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "is-utf8": "^0.2.0" + "ansi-regex": "^5.0.0" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, "strip-comments": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", @@ -17783,13 +31467,19 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "requires": { - "get-stdin": "^4.0.1" + "min-indent": "^1.0.0" } }, "strip-json-comments": { @@ -17805,26 +31495,22 @@ "dev": true }, "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==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", "dev": true, "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==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.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==", + "dev": true, + "requires": { + "inline-style-parser": "0.1.1" } }, "styled-components": { @@ -17866,11 +31552,6 @@ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=" }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -17919,24 +31600,6 @@ "has-flag": "^3.0.0" } }, - "supports-hyperlinks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", - "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", - "dev": true, - "requires": { - "has-flag": "^2.0.0", - "supports-color": "^5.0.0" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - } - } - }, "svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", @@ -18036,40 +31699,454 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "symbol.prototype.description": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.4.tgz", + "integrity": "sha512-fZkHwJ8ZNRVRzF/+/2OtygyyH06CjC0YZAQRHu9jKKw8RXlJpbizEHvGRUu22Qkg182wJk1ugb5Aovcv3UPrww==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-abstract": "^1.18.0-next.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + } + } + } + }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "ajv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", + "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + } + } + }, + "tailwindcss": { + "version": "npm:@tailwindcss/postcss7-compat@2.2.7", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss7-compat/-/postcss7-compat-2.2.7.tgz", + "integrity": "sha512-1QkWUEeLV1AoNipMCE6IlL7XYScGb+DAzaXy35ooMDvl0G8kCMHBNqGxyVAnTcK8gyJNUzkKXExkUnbjAndd/g==", + "dev": true, + "requires": { + "arg": "^5.0.0", + "autoprefixer": "^9", + "bytes": "^3.0.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.2", + "color": "^3.2.0", + "cosmiconfig": "^7.0.0", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.7", + "fs-extra": "^10.0.0", + "glob-parent": "^6.0.0", + "html-tags": "^3.1.0", + "is-glob": "^4.0.1", + "lodash": "^4.17.21", + "lodash.topath": "^4.5.2", + "modern-normalize": "^1.1.0", + "node-emoji": "^1.8.1", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss": "^7", + "postcss-functions": "^3", + "postcss-js": "^2", + "postcss-load-config": "^3.1.0", + "postcss-nested": "^4", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", + "purgecss": "^4.0.3", + "quick-lru": "^5.1.1", + "reduce-css-calc": "^2.1.8", + "resolve": "^1.20.0", + "tmp": "^0.2.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "arg": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dev": true, + "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==", + "dev": true, + "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + } + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "color-string": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "glob-parent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz", + "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "requires": { + "import-from": "^3.0.0" + } + }, + "import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "string-width": { + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "postcss-load-config": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz", + "integrity": "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "import-cwd": "^3.0.0", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "is-number": "^7.0.0" } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true } } }, @@ -18079,6 +32156,28 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, + "tar": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, "teeny-request": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-5.3.1.tgz", @@ -18119,6 +32218,148 @@ } } }, + "telejson": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.3.3.tgz", + "integrity": "sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==", + "dev": true, + "requires": { + "@types/is-function": "^1.0.0", + "global": "^4.4.0", + "is-function": "^1.0.2", + "is-regex": "^1.1.2", + "is-symbol": "^1.0.3", + "isobject": "^4.0.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3" + }, + "dependencies": { + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "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==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", + "dev": true + } + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true + }, + "tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "dev": true, + "requires": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true + } + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "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==", + "dev": true + } + } + }, "terser": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", @@ -18155,22 +32396,28 @@ } }, "terser-webpack-plugin": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.5.tgz", - "integrity": "sha512-WlWksUoq+E4+JlJ+h+U+QUzXpcsMSSNXkDy9lBVkSqDn1w23Gg29L/ary9GeJVYCGiNJJX7LnVc4bwL1N3/g1w==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", "dev": true, "requires": { - "cacache": "^13.0.1", - "find-cache-dir": "^3.2.0", - "jest-worker": "^25.1.0", - "p-limit": "^2.2.2", - "schema-utils": "^2.6.4", - "serialize-javascript": "^2.1.2", + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^4.4.3", + "terser": "^5.3.4", "webpack-sources": "^1.4.3" }, "dependencies": { + "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==", + "dev": true + }, "find-cache-dir": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", @@ -18182,41 +32429,6 @@ "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==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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", @@ -18226,128 +32438,102 @@ "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==", - "dev": true, - "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==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^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==", - "dev": true, - "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": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "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==", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "find-up": "^4.0.0" } }, - "path-type": { + "schema-utils": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "pify": "^3.0.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.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==", + "terser": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", + "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", "dev": true, "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true } } }, @@ -18358,15 +32544,15 @@ "dev": true }, "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "throttle-debounce": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", + "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", "dev": true }, "through2": { @@ -18411,12 +32597,23 @@ } }, "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { - "os-tmpdir": "~1.0.2" + "rimraf": "^3.0.0" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "tmpl": { @@ -18475,6 +32672,12 @@ "repeat-string": "^1.6.1" } }, + "toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=", + "dev": true + }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", @@ -18491,18 +32694,42 @@ } }, "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "requires": { - "punycode": "^2.1.0" + "punycode": "^2.1.1" } }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "treeify": { + "version": "1.1.0", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha1-TjHGpGOszQlDh58wZnxP2v9BG7g=", + "dev": true + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true }, "tryer": { @@ -18511,6 +32738,17 @@ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", "dev": true }, + "ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true + }, + "ts-essentials": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz", + "integrity": "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==" + }, "ts-node": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", @@ -18525,47 +32763,82 @@ "mkdirp": "^0.5.1", "source-map-support": "^0.5.6", "yn": "^2.0.0" + }, + "dependencies": { + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + } } }, "ts-node-dev": { - "version": "1.0.0-pre.32", - "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-1.0.0-pre.32.tgz", - "integrity": "sha512-hOy2mp5ncnKAJFjuQtfHOk6tqG7FfTnuARDsV5WGSQz0ldPG9iTQLbDn+q2wwNuvjbCfsAeGWwDMJc/73EraPQ==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-1.1.8.tgz", + "integrity": "sha512-Q/m3vEwzYwLZKmV6/0VlFxcZzVV/xcgOt+Tx/VjaaRHyiBcFlV0541yrT09QjzzCxlDZ34OzKjrFAynlmtflEg==", "dev": true, "requires": { - "dateformat": "~1.0.4-1.2.3", + "chokidar": "^3.5.1", "dynamic-dedupe": "^0.3.0", - "filewatcher": "~3.0.0", - "minimist": "^1.1.3", - "mkdirp": "^0.5.1", - "node-notifier": "^4.0.2", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", "resolve": "^1.0.0", "rimraf": "^2.6.1", - "ts-node": "*", + "source-map-support": "^0.5.12", + "tree-kill": "^1.2.2", + "ts-node": "^9.0.0", "tsconfig": "^7.0.0" }, "dependencies": { - "node-notifier": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-4.6.1.tgz", - "integrity": "sha1-BW0UJE89zBzq3+aK+c/wxUc6M/M=", + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", "dev": true, "requires": { - "cli-usage": "^0.1.1", - "growly": "^1.2.0", - "lodash.clonedeep": "^3.0.0", - "minimist": "^1.1.1", - "semver": "^5.1.0", - "shellwords": "^0.1.0", - "which": "^1.0.5" + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" } } } }, "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==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", "dev": true }, "tsconfig": { @@ -18578,14 +32851,17 @@ "@types/strip-json-comments": "0.0.30", "strip-bom": "^3.0.0", "strip-json-comments": "^2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } + } + }, + "tsconfig-paths": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz", + "integrity": "sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q==", + "dev": true, + "requires": { + "json5": "^2.2.0", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" } }, "tslib": { @@ -18601,9 +32877,9 @@ "dev": true }, "tsutils": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz", - "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -18643,10 +32919,16 @@ "prelude-ls": "~1.1.2" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "type-is": { @@ -18692,9 +32974,9 @@ } }, "typescript": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz", - "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", "dev": true }, "typestyle": { @@ -18707,9 +32989,9 @@ } }, "ua-parser-js": { - "version": "0.7.19", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz", - "integrity": "sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==" + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" }, "uglify-js": { "version": "3.8.1", @@ -18738,6 +33020,42 @@ } } }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, + "unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dev": true, + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -18766,6 +33084,34 @@ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.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==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } + } + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -18807,12 +33153,117 @@ "imurmurhash": "^0.1.4" } }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "dev": true + }, + "unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true + }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true + }, + "unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "dev": true + }, + "unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "dev": true, + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.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==", "dev": true }, + "unload": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", + "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==", + "requires": { + "@babel/runtime": "^7.6.2", + "detect-node": "^2.0.4" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } + } + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -18909,32 +33360,58 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true } } }, "url-loader": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz", - "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", "dev": true, "requires": { - "loader-utils": "^1.2.3", - "mime": "^2.4.4", - "schema-utils": "^2.5.0" + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" }, "dependencies": { - "mime": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.0.tgz", - "integrity": "sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag==", + "mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", "dev": true + }, + "mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dev": true, + "requires": { + "mime-db": "1.48.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } } } }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -18946,21 +33423,34 @@ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, + "use-composed-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz", + "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==", + "requires": { + "ts-essentials": "^2.0.3" + } + }, + "use-isomorphic-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", + "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==" + }, + "use-latest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", + "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", + "requires": { + "use-isomorphic-layout-effect": "^1.0.0" + } + }, "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } + "inherits": "2.0.3" } }, "util-deprecate": { @@ -18969,6 +33459,12 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "util-extend": { + "version": "1.0.3", + "resolved": "https://artifactory.twitter.biz:443/api/npm/js-virtual/util-extend/-/util-extend-1.0.3.tgz", + "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=", + "dev": true + }, "util.promisify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", @@ -18996,12 +33492,37 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, + "uuid-browser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz", + "integrity": "sha1-DwWkCu90+eWVHiDvv0SxGHHlZBA=", + "dev": true + }, "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "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==", "dev": true }, + "v8-to-istanbul": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, "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", @@ -19039,6 +33560,42 @@ "extsprintf": "^1.2.0" } }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.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==", + "dev": true + } + } + }, + "vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "dev": true + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -19055,22 +33612,14 @@ } }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", "xml-name-validator": "^3.0.0" } }, - "wait-for-expect": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/wait-for-expect/-/wait-for-expect-3.0.2.tgz", - "integrity": "sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==", - "dev": true - }, "walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", @@ -19110,6 +33659,29 @@ "chokidar": "^2.1.8" }, "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, "binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", @@ -19182,13 +33754,6 @@ "binary-extensions": "^1.0.0" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "optional": true - }, "readdirp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", @@ -19212,40 +33777,46 @@ "minimalistic-assert": "^1.0.0" } }, + "web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "dev": true + }, "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==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true }, "webpack": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", - "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", "dev": true, "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", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", + "enhanced-resolve": "^4.3.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", + "mkdirp": "^0.5.3", "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", + "watchpack": "^1.7.4", "webpack-sources": "^1.4.1" }, "dependencies": { @@ -19278,6 +33849,12 @@ "y18n": "^4.0.0" } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -19289,9 +33866,9 @@ } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -19302,6 +33879,32 @@ "path-is-absolute": "^1.0.0" } }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "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==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -19344,9 +33947,9 @@ "dev": true }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { "figgy-pudding": "^3.5.1" @@ -19446,17 +34049,17 @@ }, "dependencies": { "mime": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.0.tgz", - "integrity": "sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true } } }, "webpack-dev-server": { - "version": "3.10.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz", - "integrity": "sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz", + "integrity": "sha512-u4R3mRzZkbxQVa+MBWi2uVpB5W59H3ekZAJsQlKUTdl7Elcah2EhygTPLmeFXybQkf9i2+L0kn7ik9SnXa6ihQ==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -19467,31 +34070,31 @@ "debug": "^4.1.1", "del": "^4.1.1", "express": "^4.17.1", - "html-entities": "^1.2.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.6", + "loglevel": "^1.6.8", "opn": "^5.5.0", "p-retry": "^3.0.1", - "portfinder": "^1.0.25", + "portfinder": "^1.0.26", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", + "selfsigned": "^1.10.8", "semver": "^6.3.0", "serve-index": "^1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.4.0", - "spdy": "^4.0.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.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": "12.0.5" + "yargs": "^13.3.2" }, "dependencies": { "ansi-regex": { @@ -19500,12 +34103,39 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, "binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, "chokidar": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", @@ -19527,29 +34157,29 @@ } }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -19563,6 +34193,21 @@ "ms": "2.1.2" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, "fsevents": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", @@ -19574,12 +34219,6 @@ "nan": "^2.12.1" } }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -19601,6 +34240,16 @@ } } }, + "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==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, "is-absolute-url": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", @@ -19622,16 +34271,35 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "normalize-path": { + "p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "readdirp": { @@ -19645,10 +34313,19 @@ "readable-stream": "^2.0.2" } }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "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": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true }, "schema-utils": { @@ -19669,28 +34346,29 @@ "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { + "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "strip-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -19714,70 +34392,64 @@ } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "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==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "ansi-regex": "^4.1.0" } } } }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dev": true, "requires": { "async-limiter": "~1.0.0" } }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -19786,6 +34458,41 @@ } } }, + "webpack-filter-warnings-plugin": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz", + "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==", + "dev": true + }, + "webpack-hot-middleware": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz", + "integrity": "sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "html-entities": "^1.2.0", + "querystring": "^0.2.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "webpack-log": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", @@ -19794,6 +34501,14 @@ "requires": { "ansi-colors": "^3.0.0", "uuid": "^3.3.2" + }, + "dependencies": { + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + } } }, "webpack-manifest-plugin": { @@ -19818,9 +34533,26 @@ "jsonfile": "^4.0.0", "universalify": "^0.1.0" } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } } } }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "requires": { + "lodash": "^4.17.15" + } + }, "webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", @@ -19839,6 +34571,15 @@ } } }, + "webpack-virtual-modules": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", + "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==", + "dev": true, + "requires": { + "debug": "^3.0.0" + } + }, "websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -19877,14 +34618,14 @@ "dev": true }, "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.6.0.tgz", + "integrity": "sha512-os0KkeeqUOl7ccdDT1qqUcS4KH4tcBTSKK5Nl5WKb2lyxInIZ/CpjkqKa1Ss12mjfdcRX9mHmPPs7/SxG1Hbdw==", "dev": true, "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" } }, "which": { @@ -19896,12 +34637,114 @@ "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==", + "dev": true, + "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" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + } + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -19915,196 +34758,272 @@ "dev": true }, "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==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz", + "integrity": "sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "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==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz", + "integrity": "sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "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==", - "dev": true, - "requires": { - "@babel/runtime": "^7.3.4", - "@hapi/joi": "^15.0.0", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-5.1.4.tgz", + "integrity": "sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow==", + "dev": true, + "requires": { + "@babel/core": "^7.8.4", + "@babel/preset-env": "^7.8.4", + "@babel/runtime": "^7.8.4", + "@hapi/joi": "^15.1.0", + "@rollup/plugin-node-resolve": "^7.1.1", + "@rollup/plugin-replace": "^2.3.1", + "@surma/rollup-plugin-off-main-thread": "^1.1.1", "common-tags": "^1.8.0", - "fs-extra": "^4.0.2", - "glob": "^7.1.3", - "lodash.template": "^4.4.0", - "pretty-bytes": "^5.1.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.6", + "lodash.template": "^4.5.0", + "pretty-bytes": "^5.3.0", + "rollup": "^1.31.1", + "rollup-plugin-babel": "^4.3.3", + "rollup-plugin-terser": "^5.3.1", + "source-map": "^0.7.3", + "source-map-url": "^0.4.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" + "tempy": "^0.3.0", + "upath": "^1.2.0", + "workbox-background-sync": "^5.1.4", + "workbox-broadcast-update": "^5.1.4", + "workbox-cacheable-response": "^5.1.4", + "workbox-core": "^5.1.4", + "workbox-expiration": "^5.1.4", + "workbox-google-analytics": "^5.1.4", + "workbox-navigation-preload": "^5.1.4", + "workbox-precaching": "^5.1.4", + "workbox-range-requests": "^5.1.4", + "workbox-routing": "^5.1.4", + "workbox-strategies": "^5.1.4", + "workbox-streams": "^5.1.4", + "workbox-sw": "^5.1.4", + "workbox-window": "^5.1.4" }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, + "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==", + "dev": true + }, "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==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "regenerator-runtime": { "version": "0.13.7", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true } } }, "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==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz", + "integrity": "sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "workbox-core": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", - "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-5.1.4.tgz", + "integrity": "sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg==", "dev": true }, "workbox-expiration": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", - "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-5.1.4.tgz", + "integrity": "sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "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==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz", + "integrity": "sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA==", "dev": true, "requires": { - "workbox-background-sync": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1" + "workbox-background-sync": "^5.1.4", + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4", + "workbox-strategies": "^5.1.4" } }, "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==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz", + "integrity": "sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "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==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-5.1.4.tgz", + "integrity": "sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "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==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz", + "integrity": "sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "workbox-routing": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", - "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-5.1.4.tgz", + "integrity": "sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "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==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-5.1.4.tgz", + "integrity": "sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4" } }, "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==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-5.1.4.tgz", + "integrity": "sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4" } }, "workbox-sw": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", - "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-5.1.4.tgz", + "integrity": "sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA==", "dev": true }, "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==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-PZafF4HpugZndqISi3rZ4ZK4A4DxO8rAqt2FwRptgsDx7NF8TVKP86/huHquUsRjMGQllsNdn4FNl8CD/UvKmQ==", "dev": true, "requires": { - "@babel/runtime": "^7.0.0", - "json-stable-stringify": "^1.0.1", - "workbox-build": "^4.3.1" + "@babel/runtime": "^7.5.5", + "fast-json-stable-stringify": "^2.0.0", + "source-map-url": "^0.4.0", + "upath": "^1.1.2", + "webpack-sources": "^1.3.0", + "workbox-build": "^5.1.4" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + } } }, "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==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-5.1.4.tgz", + "integrity": "sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "worker-farm": { @@ -20126,75 +35045,64 @@ } }, "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==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "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==", + "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==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "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==", + "dev": true } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "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==", + "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==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz", + "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==", + "dev": true }, "xml-name-validator": { "version": "3.0.0", @@ -20208,15 +35116,6 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, - "xregexp": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.4.1.tgz", - "integrity": "sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==", - "dev": true, - "requires": { - "@babel/runtime-corejs3": "^7.12.1" - } - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -20224,80 +35123,75 @@ "dev": true }, "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.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", + "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } + "yargs-parser": "^18.1.2" } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } } }, "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true } } diff --git a/frontend/package.json b/frontend/package.json index 8dc142879b..c68f5c83aa 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,28 +3,41 @@ "version": "0.1.0", "private": true, "dependencies": { - "@kubeflow/frontend": "github:kubeflow/frontend#61966eefef771f6ae88dbbb090ffde24f6e5def0", - "@material-ui/core": "3.7.1", + "@craco/craco": "^6.2.0", + "@material-ui/core": "^3.9.1", "@material-ui/icons": "^3.0.1", + "@types/lodash.groupby": "^4.6.6", "brace": "^0.11.1", "d3": "^5.7.0", "d3-dsv": "^1.0.10", "dagre": "^0.8.2", - "google-protobuf": "^3.6.1", + "google-protobuf": "^3.11.2", + "grpc-web": "^1.2.1", "http-proxy-middleware": "^0.19.0", "immer": "^8.0.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.19", + "lodash": "^4.17.21", + "lodash.debounce": "^4.0.8", + "lodash.flatten": "^4.4.0", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", "markdown-to-jsx": "^6.10.3", "portable-fetch": "^3.0.0", + "protobufjs": "~6.11.2", "re-resizable": "^4.9.0", "react": "^16.12.0", "react-ace": "^7.0.2", "react-dom": "^16.12.0", "react-dropzone": "^5.1.0", + "react-flow-renderer": "^9.6.3", + "react-query": "^3.16.0", "react-router-dom": "^4.3.1", + "react-svg-line-chart": "^2.0.2", + "react-textarea-autosize": "^8.3.3", "react-virtualized": "^9.20.1", "react-vis": "^1.11.2", + "request": "^2.88.2", + "runtypes": "^6.3.0", "typestyle": "^2.0.4" }, "scripts": { @@ -37,31 +50,47 @@ "apis:filter": "java -jar swagger-codegen-cli.jar generate -i ../backend/api/swagger/filter.swagger.json -l typescript-fetch -o ./src/apis/filter -c ./swagger-config.json", "apis:visualization": "java -jar swagger-codegen-cli.jar generate -i ../backend/api/swagger/visualization.swagger.json -l typescript-fetch -o ./src/apis/visualization -c ./swagger-config.json", "apis:auth": "java -jar swagger-codegen-cli.jar generate -i ../backend/api/swagger/auth.swagger.json -l typescript-fetch -o ./server/src/generated/apis/auth -c ./swagger-config.json", - "build": "npm run lint && EXTEND_ESLINT=true react-scripts build", + "build:tailwind": "npx tailwindcss build src/tailwind.css -o src/build/tailwind.output.css", + "prestart": "npm run build:tailwind", + "prebuild": "npm run build:tailwind", + "build": "npm run lint && EXTEND_ESLINT=true craco build", + "build:protos": "cd .. && node frontend/scripts/gen_grpc_web_protos.js", + "build:replace": "node scripts/replace_protos.js", + "build:pipeline-spec": "bash ./scripts/pipelinespec.sh", "docker": "COMMIT_HASH=`git rev-parse HEAD`; docker build -q -t ml-pipelines-frontend:${COMMIT_HASH} --build-arg COMMIT_HASH=${COMMIT_HASH} --build-arg DATE=\"`date -u`\" -f Dockerfile ..", "eject": "react-scripts eject", "format": "prettier --write './**/*.{ts,tsx}'", "format:check": "prettier --check './**/*.{ts,tsx}' || node ./scripts/check-format-error-info.js", + "gen-licenses": "node gen_licenses . && node gen_licenses server && rm dependency-licenses.txt && rm server/dependency-licenses.txt", "java": "java -version", "lint": "eslint --ext js,ts,tsx src", - "mock:api": "ts-node-dev -O '{\"module\": \"commonjs\"}' --project mock-backend/tsconfig.json mock-backend/mock-api-server.ts 3001", + "mock:api": "ts-node-dev -O '{\"module\": \"commonjs\"}' --project mock-backend/tsconfig.json -r tsconfig-paths/register mock-backend/mock-api-server.ts 3001", "mock:server": "node server/dist/server.js build", "mock:server:inspect": "node inspect server/dist/server.js build", "postinstall": "cd ./server && npm ci && cd ../mock-backend && npm ci", "start:proxy": "./scripts/start-proxy.sh", "start:proxy-and-server": "./scripts/start-proxy-and-server.sh", "start:proxy-and-server-inspect": "./scripts/start-proxy-and-server.sh --inspect", - "start": "EXTEND_ESLINT=true react-scripts start", + "start": "EXTEND_ESLINT=true craco start", "sync-backend-sample-config": "node scripts/sync-backend-sample-config.js", - "test": "react-scripts test", + "pretest": "npm run build:tailwind", + "test": "LC_ALL=\"en_US.UTF-8\" craco test --env=jsdom", "test:server:coverage": "cd ./server && npm test -- --coverage && cd ..", "test:coverage": "npm test -- --coverage && npm run test:server:coverage", "test:ci": "export CI=true && npm run format:check && npm run lint && npm run test:coverage", - "test:ci:prow": "npm set unsafe-perm true && npm ci && npm run test:ci && ./scripts/report-coveralls.sh" + "test:ci:prow": "npm set unsafe-perm true && npm ci && npm run test:ci && ./scripts/report-coveralls.sh", + "storybook": "start-storybook -p 6006 -s public", + "build:storybook": "build-storybook -s public" }, "devDependencies": { "@google-cloud/storage": "^4.1.3", - "@testing-library/react": "^9.4.0", + "@storybook/addon-actions": "^6.3.6", + "@storybook/addon-essentials": "^6.3.6", + "@storybook/addon-links": "^6.3.6", + "@storybook/node-logger": "^6.3.6", + "@storybook/preset-create-react-app": "^3.2.0", + "@storybook/react": "^6.3.6", + "@testing-library/react": "^11.2.6", "@types/d3": "^5.0.0", "@types/d3-dsv": "^1.0.33", "@types/dagre": "^0.7.40", @@ -81,21 +110,27 @@ "@types/react-router-dom": "^4.3.1", "@types/react-test-renderer": "^16.0.2", "@types/react-virtualized": "^9.18.7", - "browserslist": "4.8.7", + "autoprefixer": "^9.8.6", + "browserslist": "4.16.5", "coveralls": "^3.0.2", "enzyme": "^3.10.0", "enzyme-adapter-react-16": "^1.15.1", "enzyme-to-json": "^3.3.4", + "jest-environment-jsdom-sixteen": "^2.0.0", + "license-checker": "^25.0.1", + "postcss": "^7.0.36", "prettier": "1.19.1", "react-router-test-context": "^0.1.0", - "react-scripts": "^3.4.1", + "react-scripts": "^4.0.3", "react-test-renderer": "^16.5.2", "snapshot-diff": "^0.6.1", "swagger-ts-client": "^0.9.6", + "tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.2.7", "ts-node": "^7.0.1", - "ts-node-dev": "^1.0.0-pre.30", + "ts-node-dev": "^1.1.8", + "tsconfig-paths": "^3.10.1", "tslint-config-prettier": "^1.18.0", - "typescript": "^3.7.5", + "typescript": "^3.8.3", "webpack-bundle-analyzer": "^3.6.1" }, "homepage": "./", @@ -128,5 +163,17 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "eslintConfig": { + "overrides": [ + { + "files": [ + "**/*.stories.*" + ], + "rules": { + "import/no-anonymous-default-export": "off" + } + } + ] } } diff --git a/frontend/public/index.html b/frontend/public/index.html index cd5e59a930..94b28d29ac 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -1,5 +1,5 @@ <!-- - Copyright 2018 Google LLC + Copyright 2018 The Kubeflow Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/frontend/scripts/check-format-error-info.js b/frontend/scripts/check-format-error-info.js index 8b644f7a1c..2bf3eb8217 100644 --- a/frontend/scripts/check-format-error-info.js +++ b/frontend/scripts/check-format-error-info.js @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/scripts/gen_grpc_web_protos.js b/frontend/scripts/gen_grpc_web_protos.js new file mode 100644 index 0000000000..d2a0ca1e6e --- /dev/null +++ b/frontend/scripts/gen_grpc_web_protos.js @@ -0,0 +1,56 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// NOTE: This script is expected to run from root directory. +// But the frontend/package.json has handled the path navigation for you. +// Make sure you are under path <parent_directory>/pipelines/frontend. +// npm command: npm run build:protos +const fs = require('fs'); +const path = require('path'); +const {spawn} = require('child_process'); + +// TODO: Build process should remove the existing generated proto definitions. +const OUT_DIR = path.join(__dirname, '..', 'src', 'third_party', 'mlmd', 'generated'); + +if (!fs.existsSync(OUT_DIR)) { + fs.mkdirSync(OUT_DIR, { + recursive: true + }); +} +console.log(`Generating PROTOS in: ${OUT_DIR}`); + +// Expects protoc to be on your PATH. +// From npm/google-protobuf: +// The compiler is not currently available via npm, but you can download a +// pre-built binary on GitHub (look for the protoc-*.zip files under Downloads). +// proto_path and target is relative to <parent_directory>/pipelines. +const protocProcess = spawn( + 'protoc', [ + `--js_out="import_style=commonjs,binary:${OUT_DIR}"`, + `--grpc-web_out="import_style=commonjs+dts,mode=grpcweb:${OUT_DIR}"`, + `--proto_path="./third_party/ml-metadata"`, + 'third_party/ml-metadata/ml_metadata/**/*.proto' + ], { + // Allow wildcards in glob to be interpreted + shell: true + } +); +protocProcess.stdout.on('data', buffer => console.log(buffer.toString())); +protocProcess.stderr.on('data', buffer => console.error(buffer.toString())); +protocProcess.on('close', code => { + if (code) return; + console.log(`Protos succesfully generated.`) +}); diff --git a/frontend/scripts/pipelinespec.sh b/frontend/scripts/pipelinespec.sh new file mode 100644 index 0000000000..ac548d70f6 --- /dev/null +++ b/frontend/scripts/pipelinespec.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +set -ex + +# Run the following command under /frontend to execute this file +# npm run build:pipeline-spec + + +# Convert buffer to runtime object using protoc +# Download google protos as dependencies. +curl https://raw.githubusercontent.com/googleapis/googleapis/047d3a8ac7f75383855df0166144f891d7af08d9/google/rpc/status.proto -o ../api/v2alpha1/google/rpc/status.proto + +protoc --js_out="import_style=commonjs,binary:src/generated/pipeline_spec" \ +--grpc-web_out="import_style=commonjs+dts,mode=grpcweb:src/generated/pipeline_spec" \ +--proto_path="../api/v2alpha1" \ +../api/v2alpha1/pipeline_spec.proto \ +../api/v2alpha1/google/rpc/status.proto + +# Encode proto string to buffer using protobuf.js +npx pbjs -t static-module -w commonjs -o src/generated/pipeline_spec/pbjs_ml_pipelines.js ../api/v2alpha1/pipeline_spec.proto +npx pbts -o src/generated/pipeline_spec/pbjs_ml_pipelines.d.ts src/generated/pipeline_spec/pbjs_ml_pipelines.js + +# Explaination of protobufjs cli tool: +# Install protobufjs-cli by using the main library +# Command: npm install protobufjs --save --save-prefix=~ +# In the future, this cli will have its own distribution, and isolate from main library. diff --git a/frontend/scripts/replace_protos.js b/frontend/scripts/replace_protos.js new file mode 100644 index 0000000000..dcbd98075b --- /dev/null +++ b/frontend/scripts/replace_protos.js @@ -0,0 +1,84 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +const fs = require('fs'); +const request = require('request'); + +const default_mlmd_version = "0.25.1"; +const mlmd_version = process.argv.slice(2)[0] || default_mlmd_version; + +// Step#1 delete two original files +const metadata_store_file_path = "../third_party/ml-metadata/ml_metadata/proto/metadata_store.proto"; +const metadata_store_service_file_path = "../third_party/ml-metadata/ml_metadata/proto/metadata_store_service.proto"; + +try { + if (fs.existsSync(metadata_store_file_path)) { + fs.unlinkSync(metadata_store_file_path); + } + + if (fs.existsSync(metadata_store_service_file_path)) { + fs.unlinkSync(metadata_store_service_file_path); + } + console.log("Step#1 finished: deleted two original files!"); +} catch(err) { + console.error(err) +} + +// Step#2 download two new proto files +const new_metadata_store_file_path = "https://raw.githubusercontent.com/google/ml-metadata/v" + mlmd_version + "/ml_metadata/proto/metadata_store.proto"; +const new_metadata_store_service_file_path = "https://raw.githubusercontent.com/google/ml-metadata/v" + mlmd_version + "/ml_metadata/proto/metadata_store_service.proto"; +download( + new_metadata_store_file_path, + metadata_store_file_path, + console.log +); +download( + new_metadata_store_service_file_path, + metadata_store_service_file_path, + console.log +); +console.log("Step#2 finished: downloaded two new files!"); + +function download (url, dest, cb) { + const file = fs.createWriteStream(dest); + const sendReq = request.get(url); + + // verify response code + sendReq.on('response', (response) => { + if (response.statusCode !== 200) { + return cb('Response status was ' + response.statusCode); + } + + console.log("File " + dest + " Downloaded!"); + + sendReq.pipe(file); + }); + + // close() is async, call cb after close completes + file.on('finish', () => file.close(cb)); + + // check for request errors + sendReq.on('error', (err) => { + fs.unlink(dest); + return cb(err.message); + }); + + file.on('error', (err) => { // Handle errors + fs.unlink(dest); // Delete the file async. (But we don't check the result) + return cb(err.message); + }); +} diff --git a/frontend/server/app.test.ts b/frontend/server/app.test.ts index b8efe5ddaf..4eeb3588d9 100644 --- a/frontend/server/app.test.ts +++ b/frontend/server/app.test.ts @@ -1,4 +1,4 @@ -// Copyright 2019-2020 Google LLC +// Copyright 2019-2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,9 +21,6 @@ import { loadConfigs } from './configs'; import { TEST_ONLY as K8S_TEST_EXPORT } from './k8s-helper'; import { Server } from 'http'; import { commonSetup } from './integration-tests/test-helper'; -import * as fs from 'fs'; -import * as path from 'path'; -import * as os from 'os'; jest.mock('node-fetch'); @@ -367,770 +364,6 @@ describe('UIServer apis', () => { }); }); - describe('/apps/tensorboard', () => { - const POD_TEMPLATE_SPEC = { - spec: { - containers: [ - { - volumeMounts: [ - { - name: 'tensorboard', - mountPath: '/logs', - }, - { - name: 'data', - subPath: 'tensorboard', - mountPath: '/data', - }, - ], - }, - ], - volumes: [ - { - name: 'tensorboard', - persistentVolumeClaim: { - claimName: 'logs', - }, - }, - { - name: 'data', - persistentVolumeClaim: { - claimName: 'data', - }, - }, - ], - }, - }; - - let k8sGetCustomObjectSpy: jest.SpyInstance; - let k8sDeleteCustomObjectSpy: jest.SpyInstance; - let k8sCreateCustomObjectSpy: jest.SpyInstance; - let kfpApiServer: Server; - - function newGetTensorboardResponse({ - name = 'viewer-example', - logDir = 'log-dir-example', - tensorflowImage = 'tensorflow:2.0.0', - type = 'tensorboard', - }: { - name?: string; - logDir?: string; - tensorflowImage?: string; - type?: string; - } = {}) { - return { - response: undefined as any, // unused - body: { - metadata: { - name, - }, - spec: { - tensorboardSpec: { logDir, tensorflowImage }, - type, - }, - }, - }; - } - - beforeEach(() => { - k8sGetCustomObjectSpy = jest.spyOn( - K8S_TEST_EXPORT.k8sV1CustomObjectClient, - 'getNamespacedCustomObject', - ); - k8sDeleteCustomObjectSpy = jest.spyOn( - K8S_TEST_EXPORT.k8sV1CustomObjectClient, - 'deleteNamespacedCustomObject', - ); - k8sCreateCustomObjectSpy = jest.spyOn( - K8S_TEST_EXPORT.k8sV1CustomObjectClient, - 'createNamespacedCustomObject', - ); - }); - - afterEach(() => { - if (kfpApiServer) { - kfpApiServer.close(); - } - }); - - describe('get', () => { - it('requires logdir for get tensorboard', done => { - app = new UIServer(loadConfigs(argv, {})); - requests(app.start()) - .get('/apps/tensorboard') - .expect(400, 'logdir argument is required', done); - }); - - it('requires namespace for get tensorboard', done => { - app = new UIServer(loadConfigs(argv, {})); - requests(app.start()) - .get('/apps/tensorboard?logdir=some-log-dir') - .expect(400, 'namespace argument is required', done); - }); - - it('does not crash with a weird query', done => { - app = new UIServer(loadConfigs(argv, {})); - k8sGetCustomObjectSpy.mockImplementation(() => - Promise.resolve(newGetTensorboardResponse()), - ); - // The special case is that, decodeURIComponent('%2') throws an - // exception, so this can verify handler doesn't do extra - // decodeURIComponent on queries. - const weirdLogDir = encodeURIComponent('%2'); - requests(app.start()) - .get(`/apps/tensorboard?logdir=${weirdLogDir}&namespace=test-ns`) - .expect(200, done); - }); - - function setupMockKfpApiService({ port = 3001 }: { port?: number } = {}) { - const receivedHeaders: any[] = []; - kfpApiServer = express() - .get('/apis/v1beta1/auth', (req, res) => { - receivedHeaders.push(req.headers); - res.status(200).send('{}'); // Authorized - }) - .listen(port); - return { receivedHeaders, host: 'localhost', port }; - } - - it('authorizes user requests from KFP auth api', done => { - const { receivedHeaders, host, port } = setupMockKfpApiService(); - app = new UIServer( - loadConfigs(argv, { - ENABLE_AUTHZ: 'true', - ML_PIPELINE_SERVICE_PORT: `${port}`, - ML_PIPELINE_SERVICE_HOST: host, - }), - ); - k8sGetCustomObjectSpy.mockImplementation(() => - Promise.resolve(newGetTensorboardResponse()), - ); - requests(app.start()) - .get(`/apps/tensorboard?logdir=some-log-dir&namespace=test-ns`) - .set('x-goog-authenticated-user-email', 'accounts.google.com:user@google.com') - .expect(200, err => { - expect(receivedHeaders).toHaveLength(1); - expect(receivedHeaders[0]).toMatchInlineSnapshot(` - Object { - "accept": "*/*", - "accept-encoding": "gzip,deflate", - "connection": "close", - "host": "localhost:3001", - "user-agent": "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)", - "x-goog-authenticated-user-email": "accounts.google.com:user@google.com", - } - `); - done(err); - }); - }); - - it('uses configured KUBEFLOW_USERID_HEADER for user identity', done => { - const { receivedHeaders, host, port } = setupMockKfpApiService(); - app = new UIServer( - loadConfigs(argv, { - ENABLE_AUTHZ: 'true', - KUBEFLOW_USERID_HEADER: 'x-kubeflow-userid', - ML_PIPELINE_SERVICE_PORT: `${port}`, - ML_PIPELINE_SERVICE_HOST: host, - }), - ); - k8sGetCustomObjectSpy.mockImplementation(() => - Promise.resolve(newGetTensorboardResponse()), - ); - requests(app.start()) - .get(`/apps/tensorboard?logdir=some-log-dir&namespace=test-ns`) - .set('x-kubeflow-userid', 'user@kubeflow.org') - .expect(200, err => { - expect(receivedHeaders).toHaveLength(1); - expect(receivedHeaders[0]).toHaveProperty('x-kubeflow-userid', 'user@kubeflow.org'); - done(err); - }); - }); - - it('rejects user requests when KFP auth api rejected', done => { - const errorSpy = jest.spyOn(console, 'error'); - errorSpy.mockImplementation(); - - const apiServerPort = 3001; - kfpApiServer = express() - .get('/apis/v1beta1/auth', (_, res) => { - res.status(400).send( - JSON.stringify({ - error: 'User xxx is not unauthorized to list viewers', - details: ['unauthorized', 'callstack'], - }), - ); - }) - .listen(apiServerPort); - app = new UIServer( - loadConfigs(argv, { - ENABLE_AUTHZ: 'true', - ML_PIPELINE_SERVICE_PORT: `${apiServerPort}`, - ML_PIPELINE_SERVICE_HOST: 'localhost', - }), - ); - k8sGetCustomObjectSpy.mockImplementation(() => - Promise.resolve(newGetTensorboardResponse()), - ); - requests(app.start()) - .get(`/apps/tensorboard?logdir=some-log-dir&namespace=test-ns`) - .expect( - 401, - 'User is not authorized to GET VIEWERS in namespace test-ns: User xxx is not unauthorized to list viewers', - err => { - expect(errorSpy).toHaveBeenCalledTimes(1); - expect( - errorSpy, - ).toHaveBeenCalledWith( - 'User is not authorized to GET VIEWERS in namespace test-ns: User xxx is not unauthorized to list viewers', - ['unauthorized', 'callstack'], - ); - done(err); - }, - ); - }); - - it('gets tensorboard url and version', done => { - app = new UIServer(loadConfigs(argv, {})); - k8sGetCustomObjectSpy.mockImplementation(() => - Promise.resolve( - newGetTensorboardResponse({ - name: 'viewer-abcdefg', - logDir: 'log-dir-1', - tensorflowImage: 'tensorflow:2.0.0', - }), - ), - ); - - requests(app.start()) - .get(`/apps/tensorboard?logdir=${encodeURIComponent('log-dir-1')}&namespace=test-ns`) - .expect( - 200, - JSON.stringify({ - podAddress: - 'http://viewer-abcdefg-service.test-ns.svc.cluster.local:80/tensorboard/viewer-abcdefg/', - tfVersion: '2.0.0', - }), - err => { - expect(k8sGetCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - "kubeflow.org", - "v1beta1", - "test-ns", - "viewers", - "viewer-5e1404e679e27b0f0b8ecee8fe515830eaa736c5", - ] - `); - done(err); - }, - ); - }); - }); - - describe('post (create)', () => { - it('requires logdir', done => { - app = new UIServer(loadConfigs(argv, {})); - requests(app.start()) - .post('/apps/tensorboard') - .expect(400, 'logdir argument is required', done); - }); - - it('requires namespace', done => { - app = new UIServer(loadConfigs(argv, {})); - requests(app.start()) - .post('/apps/tensorboard?logdir=some-log-dir') - .expect(400, 'namespace argument is required', done); - }); - - it('requires tfversion', done => { - app = new UIServer(loadConfigs(argv, {})); - requests(app.start()) - .post('/apps/tensorboard?logdir=some-log-dir&namespace=test-ns') - .expect(400, 'tfversion (tensorflow version) argument is required', done); - }); - - it('creates tensorboard viewer custom object and waits for it', done => { - let getRequestCount = 0; - k8sGetCustomObjectSpy.mockImplementation(() => { - ++getRequestCount; - switch (getRequestCount) { - case 1: - return Promise.reject('Not found'); - case 2: - return Promise.resolve( - newGetTensorboardResponse({ - name: 'viewer-abcdefg', - logDir: 'log-dir-1', - tensorflowImage: 'tensorflow:2.0.0', - }), - ); - default: - throw new Error('only expected to be called twice in this test'); - } - }); - k8sCreateCustomObjectSpy.mockImplementation(() => Promise.resolve()); - - app = new UIServer(loadConfigs(argv, {})); - requests(app.start()) - .post( - `/apps/tensorboard?logdir=${encodeURIComponent( - 'log-dir-1', - )}&namespace=test-ns&tfversion=2.0.0`, - ) - .expect( - 200, - 'http://viewer-abcdefg-service.test-ns.svc.cluster.local:80/tensorboard/viewer-abcdefg/', - err => { - expect(k8sGetCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - "kubeflow.org", - "v1beta1", - "test-ns", - "viewers", - "viewer-5e1404e679e27b0f0b8ecee8fe515830eaa736c5", - ] - `); - expect(k8sCreateCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - "kubeflow.org", - "v1beta1", - "test-ns", - "viewers", - Object { - "apiVersion": "kubeflow.org/v1beta1", - "kind": "Viewer", - "metadata": Object { - "name": "viewer-5e1404e679e27b0f0b8ecee8fe515830eaa736c5", - "namespace": "test-ns", - }, - "spec": Object { - "podTemplateSpec": Object { - "spec": Object { - "containers": Array [ - Object {}, - ], - }, - }, - "tensorboardSpec": Object { - "logDir": "log-dir-1", - "tensorflowImage": "tensorflow/tensorflow:2.0.0", - }, - "type": "tensorboard", - }, - }, - ] - `); - expect(k8sGetCustomObjectSpy.mock.calls[1]).toMatchInlineSnapshot(` - Array [ - "kubeflow.org", - "v1beta1", - "test-ns", - "viewers", - "viewer-5e1404e679e27b0f0b8ecee8fe515830eaa736c5", - ] - `); - done(err); - }, - ); - }); - - it('creates tensorboard viewer with exist volume', done => { - let getRequestCount = 0; - k8sGetCustomObjectSpy.mockImplementation(() => { - ++getRequestCount; - switch (getRequestCount) { - case 1: - return Promise.reject('Not found'); - case 2: - return Promise.resolve( - newGetTensorboardResponse({ - name: 'viewer-abcdefg', - logDir: 'Series1:/logs/log-dir-1,Series2:/logs/log-dir-2', - tensorflowImage: 'tensorflow:2.0.0', - }), - ); - default: - throw new Error('only expected to be called twice in this test'); - } - }); - k8sCreateCustomObjectSpy.mockImplementation(() => Promise.resolve()); - - const tempPath = path.join(fs.mkdtempSync(os.tmpdir()), 'config.json'); - fs.writeFileSync(tempPath, JSON.stringify(POD_TEMPLATE_SPEC)); - app = new UIServer( - loadConfigs(argv, { VIEWER_TENSORBOARD_POD_TEMPLATE_SPEC_PATH: tempPath }), - ); - - requests(app.start()) - .post( - `/apps/tensorboard?logdir=${encodeURIComponent( - 'Series1:volume://tensorboard/log-dir-1,Series2:volume://tensorboard/log-dir-2', - )}&namespace=test-ns&tfversion=2.0.0`, - ) - .expect( - 200, - 'http://viewer-abcdefg-service.test-ns.svc.cluster.local:80/tensorboard/viewer-abcdefg/', - err => { - expect(k8sGetCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - "kubeflow.org", - "v1beta1", - "test-ns", - "viewers", - "viewer-a800f945f0934d978f9cce9959b82ff44dac8493", - ] - `); - expect(k8sCreateCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - "kubeflow.org", - "v1beta1", - "test-ns", - "viewers", - Object { - "apiVersion": "kubeflow.org/v1beta1", - "kind": "Viewer", - "metadata": Object { - "name": "viewer-a800f945f0934d978f9cce9959b82ff44dac8493", - "namespace": "test-ns", - }, - "spec": Object { - "podTemplateSpec": Object { - "spec": Object { - "containers": Array [ - Object { - "volumeMounts": Array [ - Object { - "mountPath": "/logs", - "name": "tensorboard", - }, - Object { - "mountPath": "/data", - "name": "data", - "subPath": "tensorboard", - }, - ], - }, - ], - "volumes": Array [ - Object { - "name": "tensorboard", - "persistentVolumeClaim": Object { - "claimName": "logs", - }, - }, - Object { - "name": "data", - "persistentVolumeClaim": Object { - "claimName": "data", - }, - }, - ], - }, - }, - "tensorboardSpec": Object { - "logDir": "Series1:/logs/log-dir-1,Series2:/logs/log-dir-2", - "tensorflowImage": "tensorflow/tensorflow:2.0.0", - }, - "type": "tensorboard", - }, - }, - ] - `); - expect(k8sGetCustomObjectSpy.mock.calls[1]).toMatchInlineSnapshot(` - Array [ - "kubeflow.org", - "v1beta1", - "test-ns", - "viewers", - "viewer-a800f945f0934d978f9cce9959b82ff44dac8493", - ] - `); - done(err); - }, - ); - }); - - it('creates tensorboard viewer with exist subPath volume', done => { - let getRequestCount = 0; - k8sGetCustomObjectSpy.mockImplementation(() => { - ++getRequestCount; - switch (getRequestCount) { - case 1: - return Promise.reject('Not found'); - case 2: - return Promise.resolve( - newGetTensorboardResponse({ - name: 'viewer-abcdefg', - logDir: 'Series1:/data/log-dir-1,Series2:/data/log-dir-2', - tensorflowImage: 'tensorflow:2.0.0', - }), - ); - default: - throw new Error('only expected to be called twice in this test'); - } - }); - k8sCreateCustomObjectSpy.mockImplementation(() => Promise.resolve()); - - const tempPath = path.join(fs.mkdtempSync(os.tmpdir()), 'config.json'); - fs.writeFileSync(tempPath, JSON.stringify(POD_TEMPLATE_SPEC)); - app = new UIServer( - loadConfigs(argv, { VIEWER_TENSORBOARD_POD_TEMPLATE_SPEC_PATH: tempPath }), - ); - - requests(app.start()) - .post( - `/apps/tensorboard?logdir=${encodeURIComponent( - 'Series1:volume://data/tensorboard/log-dir-1,Series2:volume://data/tensorboard/log-dir-2', - )}&namespace=test-ns&tfversion=2.0.0`, - ) - .expect( - 200, - 'http://viewer-abcdefg-service.test-ns.svc.cluster.local:80/tensorboard/viewer-abcdefg/', - err => { - expect(k8sGetCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - "kubeflow.org", - "v1beta1", - "test-ns", - "viewers", - "viewer-82d7d06a6ecb1e4dcba66d06b884d6445a88e4ca", - ] - `); - expect(k8sCreateCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - "kubeflow.org", - "v1beta1", - "test-ns", - "viewers", - Object { - "apiVersion": "kubeflow.org/v1beta1", - "kind": "Viewer", - "metadata": Object { - "name": "viewer-82d7d06a6ecb1e4dcba66d06b884d6445a88e4ca", - "namespace": "test-ns", - }, - "spec": Object { - "podTemplateSpec": Object { - "spec": Object { - "containers": Array [ - Object { - "volumeMounts": Array [ - Object { - "mountPath": "/logs", - "name": "tensorboard", - }, - Object { - "mountPath": "/data", - "name": "data", - "subPath": "tensorboard", - }, - ], - }, - ], - "volumes": Array [ - Object { - "name": "tensorboard", - "persistentVolumeClaim": Object { - "claimName": "logs", - }, - }, - Object { - "name": "data", - "persistentVolumeClaim": Object { - "claimName": "data", - }, - }, - ], - }, - }, - "tensorboardSpec": Object { - "logDir": "Series1:/data/log-dir-1,Series2:/data/log-dir-2", - "tensorflowImage": "tensorflow/tensorflow:2.0.0", - }, - "type": "tensorboard", - }, - }, - ] - `); - expect(k8sGetCustomObjectSpy.mock.calls[1]).toMatchInlineSnapshot(` - Array [ - "kubeflow.org", - "v1beta1", - "test-ns", - "viewers", - "viewer-82d7d06a6ecb1e4dcba66d06b884d6445a88e4ca", - ] - `); - done(err); - }, - ); - }); - - it('creates tensorboard viewer with not exist volume and return error', done => { - const errorSpy = jest.spyOn(console, 'error'); - errorSpy.mockImplementation(); - - k8sGetCustomObjectSpy.mockImplementation(() => { - return Promise.reject('Not found'); - }); - - const tempPath = path.join(fs.mkdtempSync(os.tmpdir()), 'config.json'); - fs.writeFileSync(tempPath, JSON.stringify(POD_TEMPLATE_SPEC)); - app = new UIServer( - loadConfigs(argv, { VIEWER_TENSORBOARD_POD_TEMPLATE_SPEC_PATH: tempPath }), - ); - - requests(app.start()) - .post( - `/apps/tensorboard?logdir=${encodeURIComponent( - 'volume://notexistvolume/logs/log-dir-1', - )}&namespace=test-ns&tfversion=2.0.0`, - ) - .expect( - 500, - `Failed to start Tensorboard app: Cannot find file "volume://notexistvolume/logs/log-dir-1" in pod "unknown": volume "notexistvolume" not configured`, - err => { - expect(errorSpy).toHaveBeenCalledTimes(1); - done(err); - }, - ); - }); - - it('creates tensorboard viewer with not exist subPath volume mount and return error', done => { - const errorSpy = jest.spyOn(console, 'error'); - errorSpy.mockImplementation(); - - k8sGetCustomObjectSpy.mockImplementation(() => { - return Promise.reject('Not found'); - }); - - const tempPath = path.join(fs.mkdtempSync(os.tmpdir()), 'config.json'); - fs.writeFileSync(tempPath, JSON.stringify(POD_TEMPLATE_SPEC)); - app = new UIServer( - loadConfigs(argv, { VIEWER_TENSORBOARD_POD_TEMPLATE_SPEC_PATH: tempPath }), - ); - - requests(app.start()) - .post( - `/apps/tensorboard?logdir=${encodeURIComponent( - 'volume://data/notexit/mountnotexist/log-dir-1', - )}&namespace=test-ns&tfversion=2.0.0`, - ) - .expect( - 500, - `Failed to start Tensorboard app: Cannot find file "volume://data/notexit/mountnotexist/log-dir-1" in pod "unknown": volume "data" not mounted or volume "data" with subPath (which is prefix of notexit/mountnotexist/log-dir-1) not mounted`, - err => { - expect(errorSpy).toHaveBeenCalledTimes(1); - done(err); - }, - ); - }); - - it('returns error when there is an existing tensorboard with different version', done => { - const errorSpy = jest.spyOn(console, 'error'); - errorSpy.mockImplementation(); - k8sGetCustomObjectSpy.mockImplementation(() => - Promise.resolve( - newGetTensorboardResponse({ - name: 'viewer-abcdefg', - logDir: 'log-dir-1', - tensorflowImage: 'tensorflow:2.1.0', - }), - ), - ); - k8sCreateCustomObjectSpy.mockImplementation(() => Promise.resolve()); - - app = new UIServer(loadConfigs(argv, {})); - requests(app.start()) - .post( - `/apps/tensorboard?logdir=${encodeURIComponent( - 'log-dir-1', - )}&namespace=test-ns&tfversion=2.0.0`, - ) - .expect( - 500, - `Failed to start Tensorboard app: There's already an existing tensorboard instance with a different version 2.1.0`, - err => { - expect(errorSpy).toHaveBeenCalledTimes(1); - done(err); - }, - ); - }); - - it('returns existing pod address if there is an existing tensorboard with the same version', done => { - k8sGetCustomObjectSpy.mockImplementation(() => - Promise.resolve( - newGetTensorboardResponse({ - name: 'viewer-abcdefg', - logDir: 'log-dir-1', - tensorflowImage: 'tensorflow:2.0.0', - }), - ), - ); - k8sCreateCustomObjectSpy.mockImplementation(() => Promise.resolve()); - - app = new UIServer(loadConfigs(argv, {})); - requests(app.start()) - .post( - `/apps/tensorboard?logdir=${encodeURIComponent( - 'log-dir-1', - )}&namespace=test-ns&tfversion=2.0.0`, - ) - .expect( - 200, - 'http://viewer-abcdefg-service.test-ns.svc.cluster.local:80/tensorboard/viewer-abcdefg/', - done, - ); - }); - }); - - describe('delete', () => { - it('requires logdir', done => { - app = new UIServer(loadConfigs(argv, {})); - requests(app.start()) - .delete('/apps/tensorboard') - .expect(400, 'logdir argument is required', done); - }); - - it('requires namespace', done => { - app = new UIServer(loadConfigs(argv, {})); - requests(app.start()) - .delete('/apps/tensorboard?logdir=some-log-dir') - .expect(400, 'namespace argument is required', done); - }); - - it('deletes tensorboard viewer custom object', done => { - k8sGetCustomObjectSpy.mockImplementation(() => - Promise.resolve( - newGetTensorboardResponse({ - name: 'viewer-abcdefg', - logDir: 'log-dir-1', - tensorflowImage: 'tensorflow:2.0.0', - }), - ), - ); - k8sDeleteCustomObjectSpy.mockImplementation(() => Promise.resolve()); - - app = new UIServer(loadConfigs(argv, {})); - requests(app.start()) - .delete(`/apps/tensorboard?logdir=${encodeURIComponent('log-dir-1')}&namespace=test-ns`) - .expect(200, 'Tensorboard deleted.', err => { - expect(k8sDeleteCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - "kubeflow.org", - "v1beta1", - "test-ns", - "viewers", - "viewer-5e1404e679e27b0f0b8ecee8fe515830eaa736c5", - V1DeleteOptions {}, - ] - `); - done(err); - }); - }); - }); - }); - // TODO: Add integration tests for k8s helper related endpoints // describe('/k8s/pod/logs', () => {}); diff --git a/frontend/server/app.ts b/frontend/server/app.ts index d820a426f6..c5b089f545 100644 --- a/frontend/server/app.ts +++ b/frontend/server/app.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/aws-helper.test.ts b/frontend/server/aws-helper.test.ts index 6307a09455..66a22ac66b 100644 --- a/frontend/server/aws-helper.test.ts +++ b/frontend/server/aws-helper.test.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/aws-helper.ts b/frontend/server/aws-helper.ts index 029d3559a8..35a023d2ec 100644 --- a/frontend/server/aws-helper.ts +++ b/frontend/server/aws-helper.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/configs.test.ts b/frontend/server/configs.test.ts index 84d86f8a6d..591a4f7cfd 100644 --- a/frontend/server/configs.test.ts +++ b/frontend/server/configs.test.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/configs.ts b/frontend/server/configs.ts index 74042d0e11..cd6acf69e7 100644 --- a/frontend/server/configs.ts +++ b/frontend/server/configs.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/handlers/artifacts.ts b/frontend/server/handlers/artifacts.ts index 2e4f8cecce..e87ee444e4 100644 --- a/frontend/server/handlers/artifacts.ts +++ b/frontend/server/handlers/artifacts.ts @@ -1,4 +1,4 @@ -// Copyright 2019-2020 Google LLC +// Copyright 2019-2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/handlers/gke-metadata.ts b/frontend/server/handlers/gke-metadata.ts index b5a0e1732c..1b65bdec74 100644 --- a/frontend/server/handlers/gke-metadata.ts +++ b/frontend/server/handlers/gke-metadata.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/handlers/healthz.ts b/frontend/server/handlers/healthz.ts index 1df8a8b43f..402721e5d1 100644 --- a/frontend/server/handlers/healthz.ts +++ b/frontend/server/handlers/healthz.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/handlers/index-html.ts b/frontend/server/handlers/index-html.ts index bdb290e1dc..bd61c6e47b 100644 --- a/frontend/server/handlers/index-html.ts +++ b/frontend/server/handlers/index-html.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/handlers/pod-info.ts b/frontend/server/handlers/pod-info.ts index 465ca9c5bf..3008014b95 100644 --- a/frontend/server/handlers/pod-info.ts +++ b/frontend/server/handlers/pod-info.ts @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/handlers/pod-logs.ts b/frontend/server/handlers/pod-logs.ts index 09704b29c9..e93f69fc49 100644 --- a/frontend/server/handlers/pod-logs.ts +++ b/frontend/server/handlers/pod-logs.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/handlers/tensorboard.ts b/frontend/server/handlers/tensorboard.ts index 76c847fcda..5891bfa7ea 100644 --- a/frontend/server/handlers/tensorboard.ts +++ b/frontend/server/handlers/tensorboard.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019-2021 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -63,10 +63,14 @@ export const getTensorboardHandlers = ( * tensorboard instance to be ready, and return the endpoint to the instance. * The handler expects the following query strings in the request: * - `logdir` - * - `tfversion` + * - `tfversion`, optional. TODO: consider deprecate + * - `image`, optional + * - `podtemplatespec`, optional + * + * image or tfversion should be specified. */ const create: Handler = async (req, res) => { - const { logdir, namespace, tfversion } = req.query; + const { logdir, namespace, tfversion, image, podtemplatespec: podTemplateSpecRaw } = req.query; if (!logdir) { res.status(400).send('logdir argument is required'); return; @@ -75,10 +79,23 @@ export const getTensorboardHandlers = ( res.status(400).send('namespace argument is required'); return; } - if (!tfversion) { - res.status(400).send('tfversion (tensorflow version) argument is required'); + if (!tfversion && !image) { + res.status(400).send('missing required argument: tfversion (tensorflow version) or image'); return; } + if (tfversion && image) { + res.status(400).send('tfversion and image cannot be specified at the same time'); + return; + } + let podTemplateSpec: any | undefined; + if (podTemplateSpecRaw) { + try { + podTemplateSpec = JSON.parse(podTemplateSpecRaw); + } catch (err) { + res.status(400).send(`podtemplatespec is not valid JSON: ${err}`); + return; + } + } try { const authError = await authorizeFn( @@ -96,9 +113,9 @@ export const getTensorboardHandlers = ( await k8sHelper.newTensorboardInstance( logdir, namespace, - tensorboardConfig.tfImageName, + image || tensorboardConfig.tfImageName, tfversion, - tensorboardConfig.podTemplateSpec, + podTemplateSpec || tensorboardConfig.podTemplateSpec, ); const tensorboardAddress = await k8sHelper.waitForTensorboardInstance( logdir, diff --git a/frontend/server/handlers/vis.ts b/frontend/server/handlers/vis.ts index efd14c9f5e..65307bee1a 100644 --- a/frontend/server/handlers/vis.ts +++ b/frontend/server/handlers/vis.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/helpers/server-info.ts b/frontend/server/helpers/server-info.ts index 66029e86d2..cc4814e491 100644 --- a/frontend/server/helpers/server-info.ts +++ b/frontend/server/helpers/server-info.ts @@ -1,4 +1,4 @@ -// Copyright 2019-2020 Google LLC +// Copyright 2019-2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/integration-tests/artifact-get.test.ts b/frontend/server/integration-tests/artifact-get.test.ts index 43f98624a5..36aaa375a1 100644 --- a/frontend/server/integration-tests/artifact-get.test.ts +++ b/frontend/server/integration-tests/artifact-get.test.ts @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ import { Storage as GCSStorage } from '@google-cloud/storage'; import * as fs from 'fs'; import * as minio from 'minio'; import fetch from 'node-fetch'; -import * as os from 'os'; import * as path from 'path'; import { PassThrough } from 'stream'; import requests from 'supertest'; @@ -24,7 +23,7 @@ import { UIServer } from '../app'; import { loadConfigs } from '../configs'; import * as serverInfo from '../helpers/server-info'; import * as minioHelper from '../minio-helper'; -import { commonSetup } from './test-helper'; +import { commonSetup, mkTempDir } from './test-helper'; const MinioClient = minio.Client; jest.mock('minio'); @@ -290,7 +289,7 @@ describe('/artifacts', () => { it('responds with a volume artifact if source=volume', done => { const artifactContent = 'hello world'; - const tempPath = path.join(fs.mkdtempSync(os.tmpdir()), 'content'); + const tempPath = path.join(mkTempDir(), 'content'); fs.writeFileSync(tempPath, artifactContent); jest.spyOn(serverInfo, 'getHostPod').mockImplementation(() => @@ -334,7 +333,7 @@ describe('/artifacts', () => { it('responds with a partial volume artifact if peek=5 is set', done => { const artifactContent = 'hello world'; - const tempPath = path.join(fs.mkdtempSync(os.tmpdir()), 'content'); + const tempPath = path.join(mkTempDir(), 'content'); fs.writeFileSync(tempPath, artifactContent); jest.spyOn(serverInfo, 'getHostPod').mockImplementation(() => diff --git a/frontend/server/integration-tests/tensorboard.test.ts b/frontend/server/integration-tests/tensorboard.test.ts new file mode 100644 index 0000000000..26c3090adb --- /dev/null +++ b/frontend/server/integration-tests/tensorboard.test.ts @@ -0,0 +1,829 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import express from 'express'; +import * as fs from 'fs'; +import { Server } from 'http'; +import * as path from 'path'; +import requests from 'supertest'; +import { UIServer } from '../app'; +import { loadConfigs } from '../configs'; +import { TEST_ONLY as K8S_TEST_EXPORT } from '../k8s-helper'; +import { buildQuery, commonSetup, mkTempDir } from './test-helper'; + +beforeEach(() => { + jest.spyOn(global.console, 'info').mockImplementation(); + jest.spyOn(global.console, 'log').mockImplementation(); + jest.spyOn(global.console, 'debug').mockImplementation(); +}); + +describe('/apps/tensorboard', () => { + let app: UIServer; + afterEach(() => { + if (app) { + app.close(); + } + }); + const tagName = '1.0.0'; + const commitHash = 'abcdefg'; + const { argv } = commonSetup({ tagName, commitHash }); + + const POD_TEMPLATE_SPEC = { + spec: { + containers: [ + { + volumeMounts: [ + { + name: 'tensorboard', + mountPath: '/logs', + }, + { + name: 'data', + subPath: 'tensorboard', + mountPath: '/data', + }, + ], + }, + ], + volumes: [ + { + name: 'tensorboard', + persistentVolumeClaim: { + claimName: 'logs', + }, + }, + { + name: 'data', + persistentVolumeClaim: { + claimName: 'data', + }, + }, + ], + }, + }; + + let k8sGetCustomObjectSpy: jest.SpyInstance; + let k8sDeleteCustomObjectSpy: jest.SpyInstance; + let k8sCreateCustomObjectSpy: jest.SpyInstance; + let kfpApiServer: Server; + + function newGetTensorboardResponse({ + name = 'viewer-example', + logDir = 'log-dir-example', + tensorflowImage = 'tensorflow:2.0.0', + type = 'tensorboard', + }: { + name?: string; + logDir?: string; + tensorflowImage?: string; + type?: string; + } = {}) { + return { + response: undefined as any, // unused + body: { + metadata: { + name, + }, + spec: { + tensorboardSpec: { logDir, tensorflowImage }, + type, + }, + }, + }; + } + + beforeEach(() => { + k8sGetCustomObjectSpy = jest.spyOn( + K8S_TEST_EXPORT.k8sV1CustomObjectClient, + 'getNamespacedCustomObject', + ); + k8sDeleteCustomObjectSpy = jest.spyOn( + K8S_TEST_EXPORT.k8sV1CustomObjectClient, + 'deleteNamespacedCustomObject', + ); + k8sCreateCustomObjectSpy = jest.spyOn( + K8S_TEST_EXPORT.k8sV1CustomObjectClient, + 'createNamespacedCustomObject', + ); + }); + + afterEach(() => { + if (kfpApiServer) { + kfpApiServer.close(); + } + }); + + describe('get', () => { + it('requires logdir for get tensorboard', done => { + app = new UIServer(loadConfigs(argv, {})); + requests(app.start()) + .get('/apps/tensorboard') + .expect(400, 'logdir argument is required', done); + }); + + it('requires namespace for get tensorboard', done => { + app = new UIServer(loadConfigs(argv, {})); + requests(app.start()) + .get('/apps/tensorboard?logdir=some-log-dir') + .expect(400, 'namespace argument is required', done); + }); + + it('does not crash with a weird query', done => { + app = new UIServer(loadConfigs(argv, {})); + k8sGetCustomObjectSpy.mockImplementation(() => Promise.resolve(newGetTensorboardResponse())); + // The special case is that, decodeURIComponent('%2') throws an + // exception, so this can verify handler doesn't do extra + // decodeURIComponent on queries. + const weirdLogDir = encodeURIComponent('%2'); + requests(app.start()) + .get(`/apps/tensorboard?logdir=${weirdLogDir}&namespace=test-ns`) + .expect(200, done); + }); + + function setupMockKfpApiService({ port = 3001 }: { port?: number } = {}) { + const receivedHeaders: any[] = []; + kfpApiServer = express() + .get('/apis/v1beta1/auth', (req, res) => { + receivedHeaders.push(req.headers); + res.status(200).send('{}'); // Authorized + }) + .listen(port); + return { receivedHeaders, host: 'localhost', port }; + } + + it('authorizes user requests from KFP auth api', done => { + const { receivedHeaders, host, port } = setupMockKfpApiService(); + app = new UIServer( + loadConfigs(argv, { + ENABLE_AUTHZ: 'true', + ML_PIPELINE_SERVICE_PORT: `${port}`, + ML_PIPELINE_SERVICE_HOST: host, + }), + ); + k8sGetCustomObjectSpy.mockImplementation(() => Promise.resolve(newGetTensorboardResponse())); + requests(app.start()) + .get(`/apps/tensorboard?logdir=some-log-dir&namespace=test-ns`) + .set('x-goog-authenticated-user-email', 'accounts.google.com:user@google.com') + .expect(200, err => { + expect(receivedHeaders).toHaveLength(1); + expect(receivedHeaders[0]).toMatchInlineSnapshot(` + Object { + "accept": "*/*", + "accept-encoding": "gzip,deflate", + "connection": "close", + "host": "localhost:3001", + "user-agent": "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)", + "x-goog-authenticated-user-email": "accounts.google.com:user@google.com", + } + `); + done(err); + }); + }); + + it('uses configured KUBEFLOW_USERID_HEADER for user identity', done => { + const { receivedHeaders, host, port } = setupMockKfpApiService(); + app = new UIServer( + loadConfigs(argv, { + ENABLE_AUTHZ: 'true', + KUBEFLOW_USERID_HEADER: 'x-kubeflow-userid', + ML_PIPELINE_SERVICE_PORT: `${port}`, + ML_PIPELINE_SERVICE_HOST: host, + }), + ); + k8sGetCustomObjectSpy.mockImplementation(() => Promise.resolve(newGetTensorboardResponse())); + requests(app.start()) + .get(`/apps/tensorboard?logdir=some-log-dir&namespace=test-ns`) + .set('x-kubeflow-userid', 'user@kubeflow.org') + .expect(200, err => { + expect(receivedHeaders).toHaveLength(1); + expect(receivedHeaders[0]).toHaveProperty('x-kubeflow-userid', 'user@kubeflow.org'); + done(err); + }); + }); + + it('rejects user requests when KFP auth api rejected', done => { + const errorSpy = jest.spyOn(console, 'error'); + errorSpy.mockImplementation(); + + const apiServerPort = 3001; + kfpApiServer = express() + .get('/apis/v1beta1/auth', (_, res) => { + res.status(400).send( + JSON.stringify({ + error: 'User xxx is not unauthorized to list viewers', + details: ['unauthorized', 'callstack'], + }), + ); + }) + .listen(apiServerPort); + app = new UIServer( + loadConfigs(argv, { + ENABLE_AUTHZ: 'true', + ML_PIPELINE_SERVICE_PORT: `${apiServerPort}`, + ML_PIPELINE_SERVICE_HOST: 'localhost', + }), + ); + k8sGetCustomObjectSpy.mockImplementation(() => Promise.resolve(newGetTensorboardResponse())); + requests(app.start()) + .get(`/apps/tensorboard?logdir=some-log-dir&namespace=test-ns`) + .expect( + 401, + 'User is not authorized to GET VIEWERS in namespace test-ns: User xxx is not unauthorized to list viewers', + err => { + expect(errorSpy).toHaveBeenCalledTimes(1); + expect( + errorSpy, + ).toHaveBeenCalledWith( + 'User is not authorized to GET VIEWERS in namespace test-ns: User xxx is not unauthorized to list viewers', + ['unauthorized', 'callstack'], + ); + done(err); + }, + ); + }); + + it('gets tensorboard url, version and image', done => { + app = new UIServer(loadConfigs(argv, {})); + k8sGetCustomObjectSpy.mockImplementation(() => + Promise.resolve( + newGetTensorboardResponse({ + name: 'viewer-abcdefg', + logDir: 'log-dir-1', + tensorflowImage: 'tensorflow:2.0.0', + }), + ), + ); + + requests(app.start()) + .get(`/apps/tensorboard?logdir=${encodeURIComponent('log-dir-1')}&namespace=test-ns`) + .expect( + 200, + JSON.stringify({ + podAddress: + 'http://viewer-abcdefg-service.test-ns.svc.cluster.local:80/tensorboard/viewer-abcdefg/', + tfVersion: '2.0.0', + image: 'tensorflow:2.0.0', + }), + err => { + expect(k8sGetCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "kubeflow.org", + "v1beta1", + "test-ns", + "viewers", + "viewer-5e1404e679e27b0f0b8ecee8fe515830eaa736c5", + ] + `); + done(err); + }, + ); + }); + }); + + describe('post (create)', () => { + it('requires logdir', done => { + app = new UIServer(loadConfigs(argv, {})); + requests(app.start()) + .post('/apps/tensorboard') + .expect(400, 'logdir argument is required', done); + }); + + it('requires namespace', done => { + app = new UIServer(loadConfigs(argv, {})); + requests(app.start()) + .post('/apps/tensorboard?logdir=some-log-dir') + .expect(400, 'namespace argument is required', done); + }); + + it('requires tfversion or image', done => { + app = new UIServer(loadConfigs(argv, {})); + requests(app.start()) + .post('/apps/tensorboard?logdir=some-log-dir&namespace=test-ns') + .expect(400, 'missing required argument: tfversion (tensorflow version) or image', done); + }); + + it('creates tensorboard viewer custom object and waits for it', done => { + let getRequestCount = 0; + k8sGetCustomObjectSpy.mockImplementation(() => { + ++getRequestCount; + switch (getRequestCount) { + case 1: + return Promise.reject('Not found'); + case 2: + return Promise.resolve( + newGetTensorboardResponse({ + name: 'viewer-abcdefg', + logDir: 'log-dir-1', + tensorflowImage: 'tensorflow:2.0.0', + }), + ); + default: + throw new Error('only expected to be called twice in this test'); + } + }); + k8sCreateCustomObjectSpy.mockImplementation(() => Promise.resolve()); + + app = new UIServer(loadConfigs(argv, {})); + requests(app.start()) + .post( + `/apps/tensorboard?logdir=${encodeURIComponent( + 'log-dir-1', + )}&namespace=test-ns&tfversion=2.0.0`, + ) + .expect( + 200, + 'http://viewer-abcdefg-service.test-ns.svc.cluster.local:80/tensorboard/viewer-abcdefg/', + err => { + expect(k8sGetCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "kubeflow.org", + "v1beta1", + "test-ns", + "viewers", + "viewer-5e1404e679e27b0f0b8ecee8fe515830eaa736c5", + ] + `); + expect(k8sCreateCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "kubeflow.org", + "v1beta1", + "test-ns", + "viewers", + Object { + "apiVersion": "kubeflow.org/v1beta1", + "kind": "Viewer", + "metadata": Object { + "name": "viewer-5e1404e679e27b0f0b8ecee8fe515830eaa736c5", + "namespace": "test-ns", + }, + "spec": Object { + "podTemplateSpec": Object { + "spec": Object { + "containers": Array [ + Object {}, + ], + }, + }, + "tensorboardSpec": Object { + "logDir": "log-dir-1", + "tensorflowImage": "tensorflow/tensorflow:2.0.0", + }, + "type": "tensorboard", + }, + }, + ] + `); + expect(k8sGetCustomObjectSpy.mock.calls[1]).toMatchInlineSnapshot(` + Array [ + "kubeflow.org", + "v1beta1", + "test-ns", + "viewers", + "viewer-5e1404e679e27b0f0b8ecee8fe515830eaa736c5", + ] + `); + done(err); + }, + ); + }); + + it('creates tensorboard viewer with specified image', done => { + let getRequestCount = 0; + const image = 'gcr.io/deeplearning-platform-release/tf2-cpu.2-4'; + k8sGetCustomObjectSpy.mockImplementation(() => { + ++getRequestCount; + switch (getRequestCount) { + case 1: + return Promise.reject('Not found'); + case 2: + return Promise.resolve( + newGetTensorboardResponse({ + tensorflowImage: image, + }), + ); + default: + throw new Error('only expected to be called twice in this test'); + } + }); + k8sCreateCustomObjectSpy.mockImplementation(() => Promise.resolve()); + + app = new UIServer(loadConfigs(argv, {})); + requests(app.start()) + .post( + `/apps/tensorboard${buildQuery({ logdir: 'log-dir-1', namespace: 'test-ns', image })}`, + ) + .expect(200, err => { + expect( + k8sCreateCustomObjectSpy.mock.calls[0][4].spec.tensorboardSpec.tensorflowImage, + ).toEqual(image); + done(err); + }); + }); + + it('creates tensorboard viewer with exist volume', done => { + let getRequestCount = 0; + k8sGetCustomObjectSpy.mockImplementation(() => { + ++getRequestCount; + switch (getRequestCount) { + case 1: + return Promise.reject('Not found'); + case 2: + return Promise.resolve( + newGetTensorboardResponse({ + name: 'viewer-abcdefg', + logDir: 'Series1:/logs/log-dir-1,Series2:/logs/log-dir-2', + tensorflowImage: 'tensorflow:2.0.0', + }), + ); + default: + throw new Error('only expected to be called twice in this test'); + } + }); + k8sCreateCustomObjectSpy.mockImplementation(() => Promise.resolve()); + + const tempPath = path.join(mkTempDir(), 'config.json'); + fs.writeFileSync(tempPath, JSON.stringify(POD_TEMPLATE_SPEC)); + app = new UIServer( + loadConfigs(argv, { VIEWER_TENSORBOARD_POD_TEMPLATE_SPEC_PATH: tempPath }), + ); + + requests(app.start()) + .post( + `/apps/tensorboard?logdir=${encodeURIComponent( + 'Series1:volume://tensorboard/log-dir-1,Series2:volume://tensorboard/log-dir-2', + )}&namespace=test-ns&tfversion=2.0.0`, + ) + .expect( + 200, + 'http://viewer-abcdefg-service.test-ns.svc.cluster.local:80/tensorboard/viewer-abcdefg/', + err => { + expect(k8sGetCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "kubeflow.org", + "v1beta1", + "test-ns", + "viewers", + "viewer-a800f945f0934d978f9cce9959b82ff44dac8493", + ] + `); + expect(k8sCreateCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "kubeflow.org", + "v1beta1", + "test-ns", + "viewers", + Object { + "apiVersion": "kubeflow.org/v1beta1", + "kind": "Viewer", + "metadata": Object { + "name": "viewer-a800f945f0934d978f9cce9959b82ff44dac8493", + "namespace": "test-ns", + }, + "spec": Object { + "podTemplateSpec": Object { + "spec": Object { + "containers": Array [ + Object { + "volumeMounts": Array [ + Object { + "mountPath": "/logs", + "name": "tensorboard", + }, + Object { + "mountPath": "/data", + "name": "data", + "subPath": "tensorboard", + }, + ], + }, + ], + "volumes": Array [ + Object { + "name": "tensorboard", + "persistentVolumeClaim": Object { + "claimName": "logs", + }, + }, + Object { + "name": "data", + "persistentVolumeClaim": Object { + "claimName": "data", + }, + }, + ], + }, + }, + "tensorboardSpec": Object { + "logDir": "Series1:/logs/log-dir-1,Series2:/logs/log-dir-2", + "tensorflowImage": "tensorflow/tensorflow:2.0.0", + }, + "type": "tensorboard", + }, + }, + ] + `); + expect(k8sGetCustomObjectSpy.mock.calls[1]).toMatchInlineSnapshot(` + Array [ + "kubeflow.org", + "v1beta1", + "test-ns", + "viewers", + "viewer-a800f945f0934d978f9cce9959b82ff44dac8493", + ] + `); + done(err); + }, + ); + }); + + it('creates tensorboard viewer with exist subPath volume', done => { + let getRequestCount = 0; + k8sGetCustomObjectSpy.mockImplementation(() => { + ++getRequestCount; + switch (getRequestCount) { + case 1: + return Promise.reject('Not found'); + case 2: + return Promise.resolve( + newGetTensorboardResponse({ + name: 'viewer-abcdefg', + logDir: 'Series1:/data/log-dir-1,Series2:/data/log-dir-2', + tensorflowImage: 'tensorflow:2.0.0', + }), + ); + default: + throw new Error('only expected to be called twice in this test'); + } + }); + k8sCreateCustomObjectSpy.mockImplementation(() => Promise.resolve()); + + const tempPath = path.join(mkTempDir(), 'config.json'); + fs.writeFileSync(tempPath, JSON.stringify(POD_TEMPLATE_SPEC)); + app = new UIServer( + loadConfigs(argv, { VIEWER_TENSORBOARD_POD_TEMPLATE_SPEC_PATH: tempPath }), + ); + + requests(app.start()) + .post( + `/apps/tensorboard?logdir=${encodeURIComponent( + 'Series1:volume://data/tensorboard/log-dir-1,Series2:volume://data/tensorboard/log-dir-2', + )}&namespace=test-ns&tfversion=2.0.0`, + ) + .expect( + 200, + 'http://viewer-abcdefg-service.test-ns.svc.cluster.local:80/tensorboard/viewer-abcdefg/', + err => { + expect(k8sGetCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "kubeflow.org", + "v1beta1", + "test-ns", + "viewers", + "viewer-82d7d06a6ecb1e4dcba66d06b884d6445a88e4ca", + ] + `); + expect(k8sCreateCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "kubeflow.org", + "v1beta1", + "test-ns", + "viewers", + Object { + "apiVersion": "kubeflow.org/v1beta1", + "kind": "Viewer", + "metadata": Object { + "name": "viewer-82d7d06a6ecb1e4dcba66d06b884d6445a88e4ca", + "namespace": "test-ns", + }, + "spec": Object { + "podTemplateSpec": Object { + "spec": Object { + "containers": Array [ + Object { + "volumeMounts": Array [ + Object { + "mountPath": "/logs", + "name": "tensorboard", + }, + Object { + "mountPath": "/data", + "name": "data", + "subPath": "tensorboard", + }, + ], + }, + ], + "volumes": Array [ + Object { + "name": "tensorboard", + "persistentVolumeClaim": Object { + "claimName": "logs", + }, + }, + Object { + "name": "data", + "persistentVolumeClaim": Object { + "claimName": "data", + }, + }, + ], + }, + }, + "tensorboardSpec": Object { + "logDir": "Series1:/data/log-dir-1,Series2:/data/log-dir-2", + "tensorflowImage": "tensorflow/tensorflow:2.0.0", + }, + "type": "tensorboard", + }, + }, + ] + `); + expect(k8sGetCustomObjectSpy.mock.calls[1]).toMatchInlineSnapshot(` + Array [ + "kubeflow.org", + "v1beta1", + "test-ns", + "viewers", + "viewer-82d7d06a6ecb1e4dcba66d06b884d6445a88e4ca", + ] + `); + done(err); + }, + ); + }); + + it('creates tensorboard viewer with not exist volume and return error', done => { + const errorSpy = jest.spyOn(console, 'error'); + errorSpy.mockImplementation(); + + k8sGetCustomObjectSpy.mockImplementation(() => { + return Promise.reject('Not found'); + }); + + const tempPath = path.join(mkTempDir(), 'config.json'); + fs.writeFileSync(tempPath, JSON.stringify(POD_TEMPLATE_SPEC)); + app = new UIServer( + loadConfigs(argv, { VIEWER_TENSORBOARD_POD_TEMPLATE_SPEC_PATH: tempPath }), + ); + + requests(app.start()) + .post( + `/apps/tensorboard?logdir=${encodeURIComponent( + 'volume://notexistvolume/logs/log-dir-1', + )}&namespace=test-ns&tfversion=2.0.0`, + ) + .expect( + 500, + `Failed to start Tensorboard app: Cannot find file "volume://notexistvolume/logs/log-dir-1" in pod "unknown": volume "notexistvolume" not configured`, + err => { + expect(errorSpy).toHaveBeenCalledTimes(1); + done(err); + }, + ); + }); + + it('creates tensorboard viewer with not exist subPath volume mount and return error', done => { + const errorSpy = jest.spyOn(console, 'error'); + errorSpy.mockImplementation(); + + k8sGetCustomObjectSpy.mockImplementation(() => { + return Promise.reject('Not found'); + }); + + const tempPath = path.join(mkTempDir(), 'config.json'); + fs.writeFileSync(tempPath, JSON.stringify(POD_TEMPLATE_SPEC)); + app = new UIServer( + loadConfigs(argv, { VIEWER_TENSORBOARD_POD_TEMPLATE_SPEC_PATH: tempPath }), + ); + + requests(app.start()) + .post( + `/apps/tensorboard?logdir=${encodeURIComponent( + 'volume://data/notexit/mountnotexist/log-dir-1', + )}&namespace=test-ns&tfversion=2.0.0`, + ) + .expect( + 500, + `Failed to start Tensorboard app: Cannot find file "volume://data/notexit/mountnotexist/log-dir-1" in pod "unknown": volume "data" not mounted or volume "data" with subPath (which is prefix of notexit/mountnotexist/log-dir-1) not mounted`, + err => { + expect(errorSpy).toHaveBeenCalledTimes(1); + done(err); + }, + ); + }); + + it('returns error when there is an existing tensorboard with different version', done => { + const errorSpy = jest.spyOn(console, 'error'); + errorSpy.mockImplementation(); + k8sGetCustomObjectSpy.mockImplementation(() => + Promise.resolve( + newGetTensorboardResponse({ + name: 'viewer-abcdefg', + logDir: 'log-dir-1', + tensorflowImage: 'tensorflow:2.1.0', + }), + ), + ); + k8sCreateCustomObjectSpy.mockImplementation(() => Promise.resolve()); + + app = new UIServer(loadConfigs(argv, {})); + requests(app.start()) + .post( + `/apps/tensorboard?logdir=${encodeURIComponent( + 'log-dir-1', + )}&namespace=test-ns&tfversion=2.0.0`, + ) + .expect( + 500, + `Failed to start Tensorboard app: There's already an existing tensorboard instance with a different version 2.1.0`, + err => { + expect(errorSpy).toHaveBeenCalledTimes(1); + done(err); + }, + ); + }); + + it('returns existing pod address if there is an existing tensorboard with the same version', done => { + k8sGetCustomObjectSpy.mockImplementation(() => + Promise.resolve( + newGetTensorboardResponse({ + name: 'viewer-abcdefg', + logDir: 'log-dir-1', + tensorflowImage: 'tensorflow:2.0.0', + }), + ), + ); + k8sCreateCustomObjectSpy.mockImplementation(() => Promise.resolve()); + + app = new UIServer(loadConfigs(argv, {})); + requests(app.start()) + .post( + `/apps/tensorboard?logdir=${encodeURIComponent( + 'log-dir-1', + )}&namespace=test-ns&tfversion=2.0.0`, + ) + .expect( + 200, + 'http://viewer-abcdefg-service.test-ns.svc.cluster.local:80/tensorboard/viewer-abcdefg/', + done, + ); + }); + }); + + describe('delete', () => { + it('requires logdir', done => { + app = new UIServer(loadConfigs(argv, {})); + requests(app.start()) + .delete('/apps/tensorboard') + .expect(400, 'logdir argument is required', done); + }); + + it('requires namespace', done => { + app = new UIServer(loadConfigs(argv, {})); + requests(app.start()) + .delete('/apps/tensorboard?logdir=some-log-dir') + .expect(400, 'namespace argument is required', done); + }); + + it('deletes tensorboard viewer custom object', done => { + k8sGetCustomObjectSpy.mockImplementation(() => + Promise.resolve( + newGetTensorboardResponse({ + name: 'viewer-abcdefg', + logDir: 'log-dir-1', + tensorflowImage: 'tensorflow:2.0.0', + }), + ), + ); + k8sDeleteCustomObjectSpy.mockImplementation(() => Promise.resolve()); + + app = new UIServer(loadConfigs(argv, {})); + requests(app.start()) + .delete(`/apps/tensorboard?logdir=${encodeURIComponent('log-dir-1')}&namespace=test-ns`) + .expect(200, 'Tensorboard deleted.', err => { + expect(k8sDeleteCustomObjectSpy.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "kubeflow.org", + "v1beta1", + "test-ns", + "viewers", + "viewer-5e1404e679e27b0f0b8ecee8fe515830eaa736c5", + V1DeleteOptions {}, + ] + `); + done(err); + }); + }); + }); +}); diff --git a/frontend/server/integration-tests/test-helper.ts b/frontend/server/integration-tests/test-helper.ts index 1e2c5b2a80..fc8ab8e32c 100644 --- a/frontend/server/integration-tests/test-helper.ts +++ b/frontend/server/integration-tests/test-helper.ts @@ -54,3 +54,7 @@ export function buildQuery(queriesMap: { [key: string]: string | undefined }): s } return `?${queryContent}`; } + +export function mkTempDir(): string { + return fs.mkdtempSync(path.join(os.tmpdir(), 'kfp-test-')); +} diff --git a/frontend/server/k8s-helper.test.ts b/frontend/server/k8s-helper.test.ts index 935bf60aea..403b9a20df 100644 --- a/frontend/server/k8s-helper.test.ts +++ b/frontend/server/k8s-helper.test.ts @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/k8s-helper.ts b/frontend/server/k8s-helper.ts index 66b68c794b..3eecde3606 100644 --- a/frontend/server/k8s-helper.ts +++ b/frontend/server/k8s-helper.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -114,6 +114,7 @@ export async function newTensorboardInstance( ); } } + const tensorboardImage = tfImageName + (tfversion ? `:${tfversion}` : ''); const body = { apiVersion: viewerGroup + '/' + viewerVersion, kind: 'Viewer', @@ -125,7 +126,7 @@ export async function newTensorboardInstance( podTemplateSpec, tensorboardSpec: { logDir: parseTensorboardLogDir(logdir, podTemplateSpec), - tensorflowImage: tfImageName + ':' + tfversion, + tensorflowImage: tensorboardImage, }, type: 'tensorboard', }, @@ -146,7 +147,7 @@ export async function newTensorboardInstance( export async function getTensorboardInstance( logdir: string, namespace: string, -): Promise<{ podAddress: string; tfVersion: string }> { +): Promise<{ podAddress: string; tfVersion: string; image: string }> { return await k8sV1CustomObjectClient .getNamespacedCustomObject( viewerGroup, @@ -168,11 +169,12 @@ export async function getTensorboardInstance( (viewer: any) => { if (viewer && viewer.body && viewer.body.spec.type === 'tensorboard') { const address = `http://${viewer.body.metadata.name}-service.${namespace}.svc.cluster.local:80/tensorboard/${viewer.body.metadata.name}/`; - const tfImageParts = viewer.body.spec.tensorboardSpec.tensorflowImage.split(':', 2); + const image = viewer.body.spec.tensorboardSpec.tensorflowImage; + const tfImageParts = image.split(':', 2); const tfVersion = tfImageParts.length == 2 ? tfImageParts[1] : ''; - return { podAddress: address, tfVersion: tfVersion }; + return { podAddress: address, tfVersion: tfVersion, image }; } else { - return { podAddress: '', tfVersion: '' }; + return { podAddress: '', tfVersion: '', image: '' }; } }, // No existing custom object with the given name, i.e., no existing @@ -183,7 +185,7 @@ export async function getTensorboardInstance( `Failed getting viewer custom object for logdir=${logdir} in ${namespace} namespace, err: `, err?.body || err, ); - return { podAddress: '', tfVersion: '' }; + return { podAddress: '', tfVersion: '', image: '' }; }, ); } diff --git a/frontend/server/minio-helper.test.ts b/frontend/server/minio-helper.test.ts index 350df63f06..f4910c404c 100644 --- a/frontend/server/minio-helper.test.ts +++ b/frontend/server/minio-helper.test.ts @@ -1,4 +1,4 @@ -// Copyright 2019-2020 Google LLC +// Copyright 2019-2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/minio-helper.ts b/frontend/server/minio-helper.ts index ceccda3fac..b097a8a32f 100644 --- a/frontend/server/minio-helper.ts +++ b/frontend/server/minio-helper.ts @@ -1,5 +1,5 @@ import { Stream } from 'stream'; -// Copyright 2019-2020 Google LLC +// Copyright 2019-2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/package-lock.json b/frontend/server/package-lock.json index 10a9ac0a25..b00652ca62 100644 --- a/frontend/server/package-lock.json +++ b/frontend/server/package-lock.json @@ -6352,9 +6352,9 @@ } }, "ws": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", - "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true } } @@ -6498,9 +6498,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.memoize": { "version": "4.1.2", @@ -6980,9 +6980,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "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": "0.1.7", @@ -8526,9 +8526,9 @@ } }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "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" } diff --git a/frontend/server/package.json b/frontend/server/package.json index 9960182b02..e44b6cd24e 100644 --- a/frontend/server/package.json +++ b/frontend/server/package.json @@ -9,7 +9,7 @@ "express": "^4.16.3", "gunzip-maybe": "^1.4.1", "http-proxy-middleware": "^0.18.0", - "lodash": ">=4.17.19", + "lodash": ">=4.17.21", "minio": "^7.0.0", "node-fetch": "^2.6.1", "peek-stream": "^1.1.3", diff --git a/frontend/server/proxy-middleware.ts b/frontend/server/proxy-middleware.ts index cdc1ea38eb..bdb05a3869 100644 --- a/frontend/server/proxy-middleware.ts +++ b/frontend/server/proxy-middleware.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/server.ts b/frontend/server/server.ts index 3c7ec18336..160bb9b53f 100644 --- a/frontend/server/server.ts +++ b/frontend/server/server.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/src/generated/apis/auth/api.ts b/frontend/server/src/generated/apis/auth/api.ts index 06f7c76425..9aa3a37107 100644 --- a/frontend/server/src/generated/apis/auth/api.ts +++ b/frontend/server/src/generated/apis/auth/api.ts @@ -130,13 +130,13 @@ export enum AuthorizeRequestVerb { } /** - * `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } + * `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } * @export * @interface ProtobufAny */ export interface ProtobufAny { /** - * A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. + * A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. * @type {string} * @memberof ProtobufAny */ diff --git a/frontend/server/utils.test.ts b/frontend/server/utils.test.ts index 999eee0a70..8068502db5 100644 --- a/frontend/server/utils.test.ts +++ b/frontend/server/utils.test.ts @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/utils.ts b/frontend/server/utils.ts index 386a46cdad..6d31747378 100644 --- a/frontend/server/utils.ts +++ b/frontend/server/utils.ts @@ -1,4 +1,4 @@ -// Copyright 2018-2020 Google LLC +// Copyright 2018-2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/workflow-helper.test.ts b/frontend/server/workflow-helper.test.ts index 7164fe7568..d467cbfdf4 100644 --- a/frontend/server/workflow-helper.test.ts +++ b/frontend/server/workflow-helper.test.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/server/workflow-helper.ts b/frontend/server/workflow-helper.ts index 9561f7d982..e3e51d0678 100644 --- a/frontend/server/workflow-helper.ts +++ b/frontend/server/workflow-helper.ts @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/src/CSSReset.tsx b/frontend/src/CSSReset.tsx index 50a7d6ba71..eab1f9d5dc 100644 --- a/frontend/src/CSSReset.tsx +++ b/frontend/src/CSSReset.tsx @@ -1,7 +1,7 @@ import { cssRaw } from 'typestyle'; /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/Css.test.tsx b/frontend/src/Css.test.tsx index 328aa709d1..6a302a9695 100644 --- a/frontend/src/Css.test.tsx +++ b/frontend/src/Css.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/Css.tsx b/frontend/src/Css.tsx index 222a1d37de..e18595e05f 100644 --- a/frontend/src/Css.tsx +++ b/frontend/src/Css.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,12 @@ import createMuiTheme from '@material-ui/core/styles/createMuiTheme'; import { style, stylesheet } from 'typestyle'; import { NestedCSSProperties } from 'typestyle/lib/types'; +// Gradually migrate the css styling workflow as below: +// 1. Navigate to tailwind.config.js file. +// 2. Extend styling in the way tailwindcss can recognize. +// a. For color: Use https://material.io/resources/color. +// 3. Compile CSS: npm run build:tailwind + export const color = { activeBg: '#eaf1fd', alert: '#f9ab00', // Google yellow 600 @@ -31,7 +37,7 @@ export const color = { graphBg: '#f2f2f2', grey: '#5f6368', // Google grey 500 inactive: '#5f6368', - lightGrey: '#eee', // Google grey 200 + lightGrey: '#eeeeee', // Google grey 200 lowContrast: '#80868b', // Google grey 600 secondaryText: 'rgba(0, 0, 0, .88)', separator: '#e8e8e8', @@ -40,12 +46,15 @@ export const color = { successWeak: '#e6f4ea', // Google green 50 terminated: '#80868b', theme: '#1a73e8', - themeDarker: '#0b59dc', + themeDarker: '#0049b5', warningBg: '#f9f9e1', warningText: '#ee8100', infoBg: '#f3f4ff', infoText: '#1a73e8', weak: '#9aa0a6', + link: '#0d47a1', + linkLight: '#5472d3', + whiteSmoke: '#f3f3f3', }; export const dimension = { @@ -255,7 +264,7 @@ export const commonCss = stylesheet({ link: { $nest: { '&:hover': { - color: color.theme, + color: color.linkLight, textDecoration: 'underline', }, }, @@ -312,6 +321,10 @@ export const commonCss = stylesheet({ }, }); +export const tailwindcss = { + sideNavItem: 'flex flex-row flex-shrink-0', +}; + export function _paddingInternal(units?: number, directions?: string): NestedCSSProperties { units = units || baseSpacing; directions = directions || 'blrt'; diff --git a/frontend/src/TestUtils.ts b/frontend/src/TestUtils.ts index c24206b892..a94fab9517 100644 --- a/frontend/src/TestUtils.ts +++ b/frontend/src/TestUtils.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,17 +17,20 @@ /* eslint-disable */ // Because this is test utils. +import 'src/build/tailwind.output.css'; +import { mount, ReactWrapper } from 'enzyme'; +import { format } from 'prettier'; +import { object } from 'prop-types'; import * as React from 'react'; +import { QueryClient } from 'react-query'; +import { match } from 'react-router'; // @ts-ignore import createRouterContext from 'react-router-test-context'; -import { PageProps, Page } from './pages/Page'; -import { ToolbarActionConfig } from './components/Toolbar'; -import { match } from 'react-router'; -import { mount, ReactWrapper } from 'enzyme'; -import { object } from 'prop-types'; -import { format } from 'prettier'; import snapshotDiff from 'snapshot-diff'; +import { ToolbarActionConfig } from './components/Toolbar'; +import { Feature } from './features'; import { logger } from './lib/Utils'; +import { Page, PageProps } from './pages/Page'; export default class TestUtils { /** @@ -64,6 +67,18 @@ export default class TestUtils { }); } + /** + * Adds a mock implementation to the provided spy that mimics an error + * network response + */ + public static makeErrorResponse(spy: jest.MockInstance<unknown>, message: string): void { + spy.mockImplementation(() => { + throw { + text: () => Promise.resolve(message), + }; + }); + } + /** * Generates a customizable PageProps object that can be passed to initialize * Page components, taking care of setting ToolbarProps properly, which have @@ -162,9 +177,31 @@ export function expectWarnings() { }; } +export const queryClientTest = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + }, + }, +}); export function testBestPractices() { beforeEach(async () => { + queryClientTest.clear(); jest.resetAllMocks(); jest.restoreAllMocks(); }); } + +export function forceSetFeatureFlag(features: Feature[]) { + window.__FEATURE_FLAGS__ = JSON.stringify(features); +} + +export function mockResizeObserver() { + // Required by reactflow render. + (window as any).ResizeObserver = jest.fn(); + (window as any).ResizeObserver.mockImplementation(() => ({ + disconnect: jest.fn(), + observe: jest.fn(), + unobserve: jest.fn(), + })); +} diff --git a/frontend/src/TestWrapper.tsx b/frontend/src/TestWrapper.tsx new file mode 100644 index 0000000000..789c3df8c6 --- /dev/null +++ b/frontend/src/TestWrapper.tsx @@ -0,0 +1,31 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { QueryClientProvider } from 'react-query'; +import { BrowserRouter } from 'react-router-dom'; +import { queryClientTest } from './TestUtils'; + +interface CommonTestWrapperProps { + children: React.ReactElement; +} +export const CommonTestWrapper: React.FC<CommonTestWrapperProps> = props => { + return ( + <BrowserRouter> + <QueryClientProvider client={queryClientTest}>{props.children}</QueryClientProvider> + </BrowserRouter> + ); +}; diff --git a/frontend/src/__mocks__/typestyle.js b/frontend/src/__mocks__/typestyle.js index 3af66208ec..afa6527f63 100644 --- a/frontend/src/__mocks__/typestyle.js +++ b/frontend/src/__mocks__/typestyle.js @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/__serializers__/mock-function.js b/frontend/src/__serializers__/mock-function.js index 601149c39e..376abbb200 100644 --- a/frontend/src/__serializers__/mock-function.js +++ b/frontend/src/__serializers__/mock-function.js @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/apis/experiment/api.ts b/frontend/src/apis/experiment/api.ts index e9b49e0471..8d503f085c 100644 --- a/frontend/src/apis/experiment/api.ts +++ b/frontend/src/apis/experiment/api.ts @@ -118,11 +118,22 @@ export interface ApiExperiment { */ resource_references?: Array<ApiResourceReference>; /** - * - * @type {ExperimentStorageState} + * Output. Specifies whether this experiment is in archived or available state. + * @type {ApiExperimentStorageState} * @memberof ApiExperiment */ - storage_state?: ExperimentStorageState; + storage_state?: ApiExperimentStorageState; +} + +/** + * + * @export + * @enum {string} + */ +export enum ApiExperimentStorageState { + UNSPECIFIED = <any>'STORAGESTATE_UNSPECIFIED', + AVAILABLE = <any>'STORAGESTATE_AVAILABLE', + ARCHIVED = <any>'STORAGESTATE_ARCHIVED', } /** @@ -249,24 +260,13 @@ export interface ApiStatus { } /** - * - * @export - * @enum {string} - */ -export enum ExperimentStorageState { - UNSPECIFIED = <any>'STORAGESTATE_UNSPECIFIED', - AVAILABLE = <any>'STORAGESTATE_AVAILABLE', - ARCHIVED = <any>'STORAGESTATE_ARCHIVED', -} - -/** - * `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } + * `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } * @export * @interface ProtobufAny */ export interface ProtobufAny { /** - * A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. + * A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. * @type {string} * @memberof ProtobufAny */ @@ -287,8 +287,8 @@ export const ExperimentServiceApiFetchParamCreator = function(configuration?: Co return { /** * - * @summary Archive an experiment. - * @param {string} id + * @summary Archives an experiment and the experiment's runs and jobs. + * @param {string} id The ID of the experiment to be archived. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -335,7 +335,7 @@ export const ExperimentServiceApiFetchParamCreator = function(configuration?: Co }, /** * - * @summary Create a new experiment. + * @summary Creates a new experiment. * @param {ApiExperiment} body The experiment to be created. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -386,7 +386,7 @@ export const ExperimentServiceApiFetchParamCreator = function(configuration?: Co }, /** * - * @summary Delete an experiment. + * @summary Deletes an experiment without deleting the experiment's runs and jobs. To avoid unexpected behaviors, delete an experiment's runs and jobs before deleting the experiment. * @param {string} id The ID of the experiment to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -434,7 +434,7 @@ export const ExperimentServiceApiFetchParamCreator = function(configuration?: Co }, /** * - * @summary Find a specific experiment by ID. + * @summary Finds a specific experiment by ID. * @param {string} id The ID of the experiment to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -482,10 +482,10 @@ export const ExperimentServiceApiFetchParamCreator = function(configuration?: Co }, /** * - * @summary Find all experiments. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. + * @summary Finds all experiments. Supports pagination, and sorting on certain fields. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListExperiment call or can be omitted when fetching the first page. + * @param {number} [page_size] The number of experiments to be listed per page. If there are more experiments than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. * @param {string} [resource_reference_key_id] The ID of the resource that referred to. @@ -563,8 +563,8 @@ export const ExperimentServiceApiFetchParamCreator = function(configuration?: Co }, /** * - * @summary Restore an archived experiment. - * @param {string} id + * @summary Restores an archived experiment. The experiment's archived runs and jobs will stay archived. + * @param {string} id The ID of the experiment to be restored. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -620,8 +620,8 @@ export const ExperimentServiceApiFp = function(configuration?: Configuration) { return { /** * - * @summary Archive an experiment. - * @param {string} id + * @summary Archives an experiment and the experiment's runs and jobs. + * @param {string} id The ID of the experiment to be archived. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -644,7 +644,7 @@ export const ExperimentServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Create a new experiment. + * @summary Creates a new experiment. * @param {ApiExperiment} body The experiment to be created. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -668,7 +668,7 @@ export const ExperimentServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Delete an experiment. + * @summary Deletes an experiment without deleting the experiment's runs and jobs. To avoid unexpected behaviors, delete an experiment's runs and jobs before deleting the experiment. * @param {string} id The ID of the experiment to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -692,7 +692,7 @@ export const ExperimentServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Find a specific experiment by ID. + * @summary Finds a specific experiment by ID. * @param {string} id The ID of the experiment to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -717,10 +717,10 @@ export const ExperimentServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Find all experiments. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. + * @summary Finds all experiments. Supports pagination, and sorting on certain fields. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListExperiment call or can be omitted when fetching the first page. + * @param {number} [page_size] The number of experiments to be listed per page. If there are more experiments than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. * @param {string} [resource_reference_key_id] The ID of the resource that referred to. @@ -763,8 +763,8 @@ export const ExperimentServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Restore an archived experiment. - * @param {string} id + * @summary Restores an archived experiment. The experiment's archived runs and jobs will stay archived. + * @param {string} id The ID of the experiment to be restored. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -800,8 +800,8 @@ export const ExperimentServiceApiFactory = function( return { /** * - * @summary Archive an experiment. - * @param {string} id + * @summary Archives an experiment and the experiment's runs and jobs. + * @param {string} id The ID of the experiment to be archived. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -810,7 +810,7 @@ export const ExperimentServiceApiFactory = function( }, /** * - * @summary Create a new experiment. + * @summary Creates a new experiment. * @param {ApiExperiment} body The experiment to be created. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -820,7 +820,7 @@ export const ExperimentServiceApiFactory = function( }, /** * - * @summary Delete an experiment. + * @summary Deletes an experiment without deleting the experiment's runs and jobs. To avoid unexpected behaviors, delete an experiment's runs and jobs before deleting the experiment. * @param {string} id The ID of the experiment to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -830,7 +830,7 @@ export const ExperimentServiceApiFactory = function( }, /** * - * @summary Find a specific experiment by ID. + * @summary Finds a specific experiment by ID. * @param {string} id The ID of the experiment to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -840,10 +840,10 @@ export const ExperimentServiceApiFactory = function( }, /** * - * @summary Find all experiments. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. + * @summary Finds all experiments. Supports pagination, and sorting on certain fields. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListExperiment call or can be omitted when fetching the first page. + * @param {number} [page_size] The number of experiments to be listed per page. If there are more experiments than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. * @param {string} [resource_reference_key_id] The ID of the resource that referred to. @@ -877,8 +877,8 @@ export const ExperimentServiceApiFactory = function( }, /** * - * @summary Restore an archived experiment. - * @param {string} id + * @summary Restores an archived experiment. The experiment's archived runs and jobs will stay archived. + * @param {string} id The ID of the experiment to be restored. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -900,8 +900,8 @@ export const ExperimentServiceApiFactory = function( export class ExperimentServiceApi extends BaseAPI { /** * - * @summary Archive an experiment. - * @param {string} id + * @summary Archives an experiment and the experiment's runs and jobs. + * @param {string} id The ID of the experiment to be archived. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof ExperimentServiceApi @@ -915,7 +915,7 @@ export class ExperimentServiceApi extends BaseAPI { /** * - * @summary Create a new experiment. + * @summary Creates a new experiment. * @param {ApiExperiment} body The experiment to be created. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -930,7 +930,7 @@ export class ExperimentServiceApi extends BaseAPI { /** * - * @summary Delete an experiment. + * @summary Deletes an experiment without deleting the experiment's runs and jobs. To avoid unexpected behaviors, delete an experiment's runs and jobs before deleting the experiment. * @param {string} id The ID of the experiment to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -945,7 +945,7 @@ export class ExperimentServiceApi extends BaseAPI { /** * - * @summary Find a specific experiment by ID. + * @summary Finds a specific experiment by ID. * @param {string} id The ID of the experiment to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -960,10 +960,10 @@ export class ExperimentServiceApi extends BaseAPI { /** * - * @summary Find all experiments. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. + * @summary Finds all experiments. Supports pagination, and sorting on certain fields. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListExperiment call or can be omitted when fetching the first page. + * @param {number} [page_size] The number of experiments to be listed per page. If there are more experiments than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. * @param {string} [resource_reference_key_id] The ID of the resource that referred to. @@ -999,8 +999,8 @@ export class ExperimentServiceApi extends BaseAPI { /** * - * @summary Restore an archived experiment. - * @param {string} id + * @summary Restores an archived experiment. The experiment's archived runs and jobs will stay archived. + * @param {string} id The ID of the experiment to be restored. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof ExperimentServiceApi diff --git a/frontend/src/apis/job/api.ts b/frontend/src/apis/job/api.ts index cb6ba656a3..9bdc005722 100644 --- a/frontend/src/apis/job/api.ts +++ b/frontend/src/apis/job/api.ts @@ -218,13 +218,13 @@ export interface ApiListJobsResponse { */ jobs?: Array<ApiJob>; /** - * + * The total number of jobs for the given query. * @type {number} * @memberof ApiListJobsResponse */ total_size?: number; /** - * + * The token to list the next page of jobs. * @type {string} * @memberof ApiListJobsResponse */ @@ -444,13 +444,13 @@ export enum JobMode { } /** - * `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } + * `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } * @export * @interface ProtobufAny */ export interface ProtobufAny { /** - * A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. + * A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. * @type {string} * @memberof ProtobufAny */ @@ -471,7 +471,7 @@ export const JobServiceApiFetchParamCreator = function(configuration?: Configura return { /** * - * @summary Create a new job. + * @summary Creates a new job. * @param {ApiJob} body The job to be created * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -522,7 +522,7 @@ export const JobServiceApiFetchParamCreator = function(configuration?: Configura }, /** * - * @summary Delete a job. + * @summary Deletes a job. * @param {string} id The ID of the job to be deleted * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -666,7 +666,7 @@ export const JobServiceApiFetchParamCreator = function(configuration?: Configura }, /** * - * @summary Find a specific job by ID. + * @summary Finds a specific job by ID. * @param {string} id The ID of the job to be retrieved * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -714,10 +714,10 @@ export const JobServiceApiFetchParamCreator = function(configuration?: Configura }, /** * - * @summary Find all jobs. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\". Ascending by default. + * @summary Finds all jobs. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListJobs call or can be omitted when fetching the first page. + * @param {number} [page_size] The number of jobs to be listed per page. If there are more jobs than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\". Ascending by default. * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. * @param {string} [resource_reference_key_id] The ID of the resource that referred to. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). @@ -804,7 +804,7 @@ export const JobServiceApiFp = function(configuration?: Configuration) { return { /** * - * @summary Create a new job. + * @summary Creates a new job. * @param {ApiJob} body The job to be created * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -829,7 +829,7 @@ export const JobServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Delete a job. + * @summary Deletes a job. * @param {string} id The ID of the job to be deleted * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -895,7 +895,7 @@ export const JobServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Find a specific job by ID. + * @summary Finds a specific job by ID. * @param {string} id The ID of the job to be retrieved * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -914,10 +914,10 @@ export const JobServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Find all jobs. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\". Ascending by default. + * @summary Finds all jobs. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListJobs call or can be omitted when fetching the first page. + * @param {number} [page_size] The number of jobs to be listed per page. If there are more jobs than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\". Ascending by default. * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. * @param {string} [resource_reference_key_id] The ID of the resource that referred to. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). @@ -973,7 +973,7 @@ export const JobServiceApiFactory = function( return { /** * - * @summary Create a new job. + * @summary Creates a new job. * @param {ApiJob} body The job to be created * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -983,7 +983,7 @@ export const JobServiceApiFactory = function( }, /** * - * @summary Delete a job. + * @summary Deletes a job. * @param {string} id The ID of the job to be deleted * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1013,7 +1013,7 @@ export const JobServiceApiFactory = function( }, /** * - * @summary Find a specific job by ID. + * @summary Finds a specific job by ID. * @param {string} id The ID of the job to be retrieved * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1023,10 +1023,10 @@ export const JobServiceApiFactory = function( }, /** * - * @summary Find all jobs. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\". Ascending by default. + * @summary Finds all jobs. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListJobs call or can be omitted when fetching the first page. + * @param {number} [page_size] The number of jobs to be listed per page. If there are more jobs than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\". Ascending by default. * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. * @param {string} [resource_reference_key_id] The ID of the resource that referred to. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). @@ -1070,7 +1070,7 @@ export const JobServiceApiFactory = function( export class JobServiceApi extends BaseAPI { /** * - * @summary Create a new job. + * @summary Creates a new job. * @param {ApiJob} body The job to be created * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1082,7 +1082,7 @@ export class JobServiceApi extends BaseAPI { /** * - * @summary Delete a job. + * @summary Deletes a job. * @param {string} id The ID of the job to be deleted * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1118,7 +1118,7 @@ export class JobServiceApi extends BaseAPI { /** * - * @summary Find a specific job by ID. + * @summary Finds a specific job by ID. * @param {string} id The ID of the job to be retrieved * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1130,10 +1130,10 @@ export class JobServiceApi extends BaseAPI { /** * - * @summary Find all jobs. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\". Ascending by default. + * @summary Finds all jobs. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListJobs call or can be omitted when fetching the first page. + * @param {number} [page_size] The number of jobs to be listed per page. If there are more jobs than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\". Ascending by default. * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. * @param {string} [resource_reference_key_id] The ID of the resource that referred to. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). diff --git a/frontend/src/apis/pipeline/api.ts b/frontend/src/apis/pipeline/api.ts index 58c78d963a..1df92f7572 100644 --- a/frontend/src/apis/pipeline/api.ts +++ b/frontend/src/apis/pipeline/api.ts @@ -88,7 +88,7 @@ export class RequiredError extends Error { */ export interface ApiGetTemplateResponse { /** - * + * The template of the pipeline specified in a GetTemplate request, or of a pipeline version specified in a GetPipelinesVersionTemplate request. * @type {string} * @memberof ApiGetTemplateResponse */ @@ -108,13 +108,13 @@ export interface ApiListPipelineVersionsResponse { */ versions?: Array<ApiPipelineVersion>; /** - * + * The token to list the next page of pipeline versions. * @type {string} * @memberof ApiListPipelineVersionsResponse */ next_page_token?: string; /** - * + * The total number of pipeline versions for the given query. * @type {number} * @memberof ApiListPipelineVersionsResponse */ @@ -134,13 +134,13 @@ export interface ApiListPipelinesResponse { */ pipelines?: Array<ApiPipeline>; /** - * + * The total number of pipelines for the given query. * @type {number} * @memberof ApiListPipelinesResponse */ total_size?: number; /** - * + * The token to list the next page of pipelines. * @type {string} * @memberof ApiListPipelinesResponse */ @@ -221,6 +221,12 @@ export interface ApiPipeline { * @memberof ApiPipeline */ default_version?: ApiPipelineVersion; + /** + * Input field. Specify which resource this pipeline belongs to. For Pipeline, the only valid resource reference is a single Namespace. + * @type {Array<ApiResourceReference>} + * @memberof ApiPipeline + */ + resource_references?: Array<ApiResourceReference>; } /** @@ -266,11 +272,17 @@ export interface ApiPipelineVersion { */ package_url?: ApiUrl; /** - * Input. Required. E.g., specify which pipeline this pipeline version belongs to. + * Input field. Specify which resource this pipeline version belongs to. For Experiment, the only valid resource reference is a single Namespace. * @type {Array<ApiResourceReference>} * @memberof ApiPipelineVersion */ resource_references?: Array<ApiResourceReference>; + /** + * Input. Optional. Description for the pipeline version. + * @type {string} + * @memberof ApiPipelineVersion + */ + description?: string; } /** @@ -377,7 +389,7 @@ export interface ApiStatus { */ export interface ApiUrl { /** - * + * URL of the pipeline definition or the pipeline version definition. * @type {string} * @memberof ApiUrl */ @@ -385,13 +397,13 @@ export interface ApiUrl { } /** - * `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } + * `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } * @export * @interface ProtobufAny */ export interface ProtobufAny { /** - * A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. + * A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. * @type {string} * @memberof ProtobufAny */ @@ -412,7 +424,7 @@ export const PipelineServiceApiFetchParamCreator = function(configuration?: Conf return { /** * - * @summary Add a pipeline. + * @summary Creates a pipeline. * @param {ApiPipeline} body * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -463,6 +475,7 @@ export const PipelineServiceApiFetchParamCreator = function(configuration?: Conf }, /** * + * @summary Adds a pipeline version to the specified pipeline. * @param {ApiPipelineVersion} body ResourceReference inside PipelineVersion specifies the pipeline that this version belongs to. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -513,8 +526,8 @@ export const PipelineServiceApiFetchParamCreator = function(configuration?: Conf }, /** * - * @summary Delete a pipeline. - * @param {string} id + * @summary Deletes a pipeline and its pipeline versions. + * @param {string} id The ID of the pipeline to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -561,7 +574,8 @@ export const PipelineServiceApiFetchParamCreator = function(configuration?: Conf }, /** * - * @param {string} version_id + * @summary Deletes a pipeline version by pipeline version ID. If the deleted pipeline version is the default pipeline version, the pipeline's default version changes to the pipeline's most recent pipeline version. If there are no remaining pipeline versions, the pipeline will have no default version. Examines the run_service_api.ipynb notebook to learn more about creating a run using a pipeline version (https://github.com/kubeflow/pipelines/blob/master/tools/benchmarks/run_service_api.ipynb). + * @param {string} version_id The ID of the pipeline version to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -608,8 +622,8 @@ export const PipelineServiceApiFetchParamCreator = function(configuration?: Conf }, /** * - * @summary Find a specific pipeline by ID. - * @param {string} id + * @summary Finds a specific pipeline by ID. + * @param {string} id The ID of the pipeline to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -656,7 +670,8 @@ export const PipelineServiceApiFetchParamCreator = function(configuration?: Conf }, /** * - * @param {string} version_id + * @summary Gets a pipeline version by pipeline version ID. + * @param {string} version_id The ID of the pipeline version to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -703,7 +718,8 @@ export const PipelineServiceApiFetchParamCreator = function(configuration?: Conf }, /** * - * @param {string} version_id + * @summary Returns a YAML template that contains the specified pipeline version's description, parameters and metadata. + * @param {string} version_id The ID of the pipeline version whose template is to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -751,7 +767,7 @@ export const PipelineServiceApiFetchParamCreator = function(configuration?: Conf /** * * @summary Returns a single YAML template that contains the description, parameters, and metadata associated with the pipeline provided. - * @param {string} id + * @param {string} id The ID of the pipeline whose template is to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -798,11 +814,12 @@ export const PipelineServiceApiFetchParamCreator = function(configuration?: Conf }, /** * + * @summary Lists all pipeline versions of a given pipeline. * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_key_type] The type of the resource that referred to. * @param {string} [resource_key_id] The ID of the resource that referred to. - * @param {number} [page_size] - * @param {string} [page_token] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. + * @param {number} [page_size] The number of pipeline versions to be listed per page. If there are more pipeline versions than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListPipelineVersions call or can be omitted when fetching the first page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. * @param {string} [filter] A base-64 encoded, JSON-serialized Filter protocol buffer (see filter.proto). * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -878,11 +895,13 @@ export const PipelineServiceApiFetchParamCreator = function(configuration?: Conf }, /** * - * @summary Find all pipelines. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. + * @summary Finds all pipelines. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListPipelines call. + * @param {number} [page_size] The number of pipelines to be listed per page. If there are more pipelines than this number, the response message will contain a valid value in the nextPageToken field. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). + * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. + * @param {string} [resource_reference_key_id] The ID of the resource that referred to. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -891,6 +910,14 @@ export const PipelineServiceApiFetchParamCreator = function(configuration?: Conf page_size?: number, sort_by?: string, filter?: string, + resource_reference_key_type?: + | 'UNKNOWN_RESOURCE_TYPE' + | 'EXPERIMENT' + | 'JOB' + | 'PIPELINE' + | 'PIPELINE_VERSION' + | 'NAMESPACE', + resource_reference_key_id?: string, options: any = {}, ): FetchArgs { const localVarPath = `/apis/v1beta1/pipelines`; @@ -924,6 +951,73 @@ export const PipelineServiceApiFetchParamCreator = function(configuration?: Conf localVarQueryParameter['filter'] = filter; } + if (resource_reference_key_type !== undefined) { + localVarQueryParameter['resource_reference_key.type'] = resource_reference_key_type; + } + + if (resource_reference_key_id !== undefined) { + localVarQueryParameter['resource_reference_key.id'] = resource_reference_key_id; + } + + localVarUrlObj.query = Object.assign( + {}, + localVarUrlObj.query, + localVarQueryParameter, + options.query, + ); + // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943 + delete localVarUrlObj.search; + localVarRequestOptions.headers = Object.assign({}, localVarHeaderParameter, options.headers); + + return { + url: url.format(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the default pipeline version of a specific pipeline. + * @param {string} pipeline_id The ID of the pipeline to be updated. + * @param {string} version_id The ID of the default version. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + updatePipelineDefaultVersion( + pipeline_id: string, + version_id: string, + options: any = {}, + ): FetchArgs { + // verify required parameter 'pipeline_id' is not null or undefined + if (pipeline_id === null || pipeline_id === undefined) { + throw new RequiredError( + 'pipeline_id', + 'Required parameter pipeline_id was null or undefined when calling updatePipelineDefaultVersion.', + ); + } + // verify required parameter 'version_id' is not null or undefined + if (version_id === null || version_id === undefined) { + throw new RequiredError( + 'version_id', + 'Required parameter version_id was null or undefined when calling updatePipelineDefaultVersion.', + ); + } + const localVarPath = `/apis/v1beta1/pipelines/{pipeline_id}/default_version/{version_id}` + .replace(`{${'pipeline_id'}}`, encodeURIComponent(String(pipeline_id))) + .replace(`{${'version_id'}}`, encodeURIComponent(String(version_id))); + const localVarUrlObj = url.parse(localVarPath, true); + const localVarRequestOptions = Object.assign({ method: 'POST' }, options); + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication Bearer required + if (configuration && configuration.apiKey) { + const localVarApiKeyValue = + typeof configuration.apiKey === 'function' + ? configuration.apiKey('authorization') + : configuration.apiKey; + localVarHeaderParameter['authorization'] = localVarApiKeyValue; + } + localVarUrlObj.query = Object.assign( {}, localVarUrlObj.query, @@ -950,7 +1044,7 @@ export const PipelineServiceApiFp = function(configuration?: Configuration) { return { /** * - * @summary Add a pipeline. + * @summary Creates a pipeline. * @param {ApiPipeline} body * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -975,6 +1069,7 @@ export const PipelineServiceApiFp = function(configuration?: Configuration) { }, /** * + * @summary Adds a pipeline version to the specified pipeline. * @param {ApiPipelineVersion} body ResourceReference inside PipelineVersion specifies the pipeline that this version belongs to. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -998,8 +1093,8 @@ export const PipelineServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Delete a pipeline. - * @param {string} id + * @summary Deletes a pipeline and its pipeline versions. + * @param {string} id The ID of the pipeline to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1023,7 +1118,8 @@ export const PipelineServiceApiFp = function(configuration?: Configuration) { }, /** * - * @param {string} version_id + * @summary Deletes a pipeline version by pipeline version ID. If the deleted pipeline version is the default pipeline version, the pipeline's default version changes to the pipeline's most recent pipeline version. If there are no remaining pipeline versions, the pipeline will have no default version. Examines the run_service_api.ipynb notebook to learn more about creating a run using a pipeline version (https://github.com/kubeflow/pipelines/blob/master/tools/benchmarks/run_service_api.ipynb). + * @param {string} version_id The ID of the pipeline version to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1046,8 +1142,8 @@ export const PipelineServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Find a specific pipeline by ID. - * @param {string} id + * @summary Finds a specific pipeline by ID. + * @param {string} id The ID of the pipeline to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1071,7 +1167,8 @@ export const PipelineServiceApiFp = function(configuration?: Configuration) { }, /** * - * @param {string} version_id + * @summary Gets a pipeline version by pipeline version ID. + * @param {string} version_id The ID of the pipeline version to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1094,7 +1191,8 @@ export const PipelineServiceApiFp = function(configuration?: Configuration) { }, /** * - * @param {string} version_id + * @summary Returns a YAML template that contains the specified pipeline version's description, parameters and metadata. + * @param {string} version_id The ID of the pipeline version whose template is to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1118,7 +1216,7 @@ export const PipelineServiceApiFp = function(configuration?: Configuration) { /** * * @summary Returns a single YAML template that contains the description, parameters, and metadata associated with the pipeline provided. - * @param {string} id + * @param {string} id The ID of the pipeline whose template is to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1142,11 +1240,12 @@ export const PipelineServiceApiFp = function(configuration?: Configuration) { }, /** * + * @summary Lists all pipeline versions of a given pipeline. * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_key_type] The type of the resource that referred to. * @param {string} [resource_key_id] The ID of the resource that referred to. - * @param {number} [page_size] - * @param {string} [page_token] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. + * @param {number} [page_size] The number of pipeline versions to be listed per page. If there are more pipeline versions than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListPipelineVersions call or can be omitted when fetching the first page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. * @param {string} [filter] A base-64 encoded, JSON-serialized Filter protocol buffer (see filter.proto). * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1189,11 +1288,13 @@ export const PipelineServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Find all pipelines. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. + * @summary Finds all pipelines. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListPipelines call. + * @param {number} [page_size] The number of pipelines to be listed per page. If there are more pipelines than this number, the response message will contain a valid value in the nextPageToken field. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). + * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. + * @param {string} [resource_reference_key_id] The ID of the resource that referred to. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1202,6 +1303,14 @@ export const PipelineServiceApiFp = function(configuration?: Configuration) { page_size?: number, sort_by?: string, filter?: string, + resource_reference_key_type?: + | 'UNKNOWN_RESOURCE_TYPE' + | 'EXPERIMENT' + | 'JOB' + | 'PIPELINE' + | 'PIPELINE_VERSION' + | 'NAMESPACE', + resource_reference_key_id?: string, options?: any, ): (fetch?: FetchAPI, basePath?: string) => Promise<ApiListPipelinesResponse> { const localVarFetchArgs = PipelineServiceApiFetchParamCreator(configuration).listPipelines( @@ -1209,6 +1318,8 @@ export const PipelineServiceApiFp = function(configuration?: Configuration) { page_size, sort_by, filter, + resource_reference_key_type, + resource_reference_key_id, options, ); return (fetch: FetchAPI = portableFetch, basePath: string = BASE_PATH) => { @@ -1221,6 +1332,32 @@ export const PipelineServiceApiFp = function(configuration?: Configuration) { }); }; }, + /** + * + * @summary Update the default pipeline version of a specific pipeline. + * @param {string} pipeline_id The ID of the pipeline to be updated. + * @param {string} version_id The ID of the default version. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + updatePipelineDefaultVersion( + pipeline_id: string, + version_id: string, + options?: any, + ): (fetch?: FetchAPI, basePath?: string) => Promise<any> { + const localVarFetchArgs = PipelineServiceApiFetchParamCreator( + configuration, + ).updatePipelineDefaultVersion(pipeline_id, version_id, options); + return (fetch: FetchAPI = portableFetch, basePath: string = BASE_PATH) => { + return fetch(basePath + localVarFetchArgs.url, localVarFetchArgs.options).then(response => { + if (response.status >= 200 && response.status < 300) { + return response.json(); + } else { + throw response; + } + }); + }; + }, }; }; @@ -1236,7 +1373,7 @@ export const PipelineServiceApiFactory = function( return { /** * - * @summary Add a pipeline. + * @summary Creates a pipeline. * @param {ApiPipeline} body * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1246,6 +1383,7 @@ export const PipelineServiceApiFactory = function( }, /** * + * @summary Adds a pipeline version to the specified pipeline. * @param {ApiPipelineVersion} body ResourceReference inside PipelineVersion specifies the pipeline that this version belongs to. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1258,8 +1396,8 @@ export const PipelineServiceApiFactory = function( }, /** * - * @summary Delete a pipeline. - * @param {string} id + * @summary Deletes a pipeline and its pipeline versions. + * @param {string} id The ID of the pipeline to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1268,7 +1406,8 @@ export const PipelineServiceApiFactory = function( }, /** * - * @param {string} version_id + * @summary Deletes a pipeline version by pipeline version ID. If the deleted pipeline version is the default pipeline version, the pipeline's default version changes to the pipeline's most recent pipeline version. If there are no remaining pipeline versions, the pipeline will have no default version. Examines the run_service_api.ipynb notebook to learn more about creating a run using a pipeline version (https://github.com/kubeflow/pipelines/blob/master/tools/benchmarks/run_service_api.ipynb). + * @param {string} version_id The ID of the pipeline version to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1280,8 +1419,8 @@ export const PipelineServiceApiFactory = function( }, /** * - * @summary Find a specific pipeline by ID. - * @param {string} id + * @summary Finds a specific pipeline by ID. + * @param {string} id The ID of the pipeline to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1290,7 +1429,8 @@ export const PipelineServiceApiFactory = function( }, /** * - * @param {string} version_id + * @summary Gets a pipeline version by pipeline version ID. + * @param {string} version_id The ID of the pipeline version to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1302,7 +1442,8 @@ export const PipelineServiceApiFactory = function( }, /** * - * @param {string} version_id + * @summary Returns a YAML template that contains the specified pipeline version's description, parameters and metadata. + * @param {string} version_id The ID of the pipeline version whose template is to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1315,7 +1456,7 @@ export const PipelineServiceApiFactory = function( /** * * @summary Returns a single YAML template that contains the description, parameters, and metadata associated with the pipeline provided. - * @param {string} id + * @param {string} id The ID of the pipeline whose template is to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1324,11 +1465,12 @@ export const PipelineServiceApiFactory = function( }, /** * + * @summary Lists all pipeline versions of a given pipeline. * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_key_type] The type of the resource that referred to. * @param {string} [resource_key_id] The ID of the resource that referred to. - * @param {number} [page_size] - * @param {string} [page_token] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. + * @param {number} [page_size] The number of pipeline versions to be listed per page. If there are more pipeline versions than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListPipelineVersions call or can be omitted when fetching the first page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. * @param {string} [filter] A base-64 encoded, JSON-serialized Filter protocol buffer (see filter.proto). * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1360,11 +1502,13 @@ export const PipelineServiceApiFactory = function( }, /** * - * @summary Find all pipelines. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. + * @summary Finds all pipelines. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListPipelines call. + * @param {number} [page_size] The number of pipelines to be listed per page. If there are more pipelines than this number, the response message will contain a valid value in the nextPageToken field. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). + * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. + * @param {string} [resource_reference_key_id] The ID of the resource that referred to. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1373,6 +1517,14 @@ export const PipelineServiceApiFactory = function( page_size?: number, sort_by?: string, filter?: string, + resource_reference_key_type?: + | 'UNKNOWN_RESOURCE_TYPE' + | 'EXPERIMENT' + | 'JOB' + | 'PIPELINE' + | 'PIPELINE_VERSION' + | 'NAMESPACE', + resource_reference_key_id?: string, options?: any, ) { return PipelineServiceApiFp(configuration).listPipelines( @@ -1380,6 +1532,23 @@ export const PipelineServiceApiFactory = function( page_size, sort_by, filter, + resource_reference_key_type, + resource_reference_key_id, + options, + )(fetch, basePath); + }, + /** + * + * @summary Update the default pipeline version of a specific pipeline. + * @param {string} pipeline_id The ID of the pipeline to be updated. + * @param {string} version_id The ID of the default version. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + updatePipelineDefaultVersion(pipeline_id: string, version_id: string, options?: any) { + return PipelineServiceApiFp(configuration).updatePipelineDefaultVersion( + pipeline_id, + version_id, options, )(fetch, basePath); }, @@ -1395,7 +1564,7 @@ export const PipelineServiceApiFactory = function( export class PipelineServiceApi extends BaseAPI { /** * - * @summary Add a pipeline. + * @summary Creates a pipeline. * @param {ApiPipeline} body * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1410,6 +1579,7 @@ export class PipelineServiceApi extends BaseAPI { /** * + * @summary Adds a pipeline version to the specified pipeline. * @param {ApiPipelineVersion} body ResourceReference inside PipelineVersion specifies the pipeline that this version belongs to. * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1424,8 +1594,8 @@ export class PipelineServiceApi extends BaseAPI { /** * - * @summary Delete a pipeline. - * @param {string} id + * @summary Deletes a pipeline and its pipeline versions. + * @param {string} id The ID of the pipeline to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof PipelineServiceApi @@ -1439,7 +1609,8 @@ export class PipelineServiceApi extends BaseAPI { /** * - * @param {string} version_id + * @summary Deletes a pipeline version by pipeline version ID. If the deleted pipeline version is the default pipeline version, the pipeline's default version changes to the pipeline's most recent pipeline version. If there are no remaining pipeline versions, the pipeline will have no default version. Examines the run_service_api.ipynb notebook to learn more about creating a run using a pipeline version (https://github.com/kubeflow/pipelines/blob/master/tools/benchmarks/run_service_api.ipynb). + * @param {string} version_id The ID of the pipeline version to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof PipelineServiceApi @@ -1453,8 +1624,8 @@ export class PipelineServiceApi extends BaseAPI { /** * - * @summary Find a specific pipeline by ID. - * @param {string} id + * @summary Finds a specific pipeline by ID. + * @param {string} id The ID of the pipeline to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof PipelineServiceApi @@ -1468,7 +1639,8 @@ export class PipelineServiceApi extends BaseAPI { /** * - * @param {string} version_id + * @summary Gets a pipeline version by pipeline version ID. + * @param {string} version_id The ID of the pipeline version to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof PipelineServiceApi @@ -1482,7 +1654,8 @@ export class PipelineServiceApi extends BaseAPI { /** * - * @param {string} version_id + * @summary Returns a YAML template that contains the specified pipeline version's description, parameters and metadata. + * @param {string} version_id The ID of the pipeline version whose template is to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof PipelineServiceApi @@ -1497,7 +1670,7 @@ export class PipelineServiceApi extends BaseAPI { /** * * @summary Returns a single YAML template that contains the description, parameters, and metadata associated with the pipeline provided. - * @param {string} id + * @param {string} id The ID of the pipeline whose template is to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof PipelineServiceApi @@ -1511,11 +1684,12 @@ export class PipelineServiceApi extends BaseAPI { /** * + * @summary Lists all pipeline versions of a given pipeline. * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_key_type] The type of the resource that referred to. * @param {string} [resource_key_id] The ID of the resource that referred to. - * @param {number} [page_size] - * @param {string} [page_token] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. + * @param {number} [page_size] The number of pipeline versions to be listed per page. If there are more pipeline versions than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListPipelineVersions call or can be omitted when fetching the first page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. * @param {string} [filter] A base-64 encoded, JSON-serialized Filter protocol buffer (see filter.proto). * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1549,11 +1723,13 @@ export class PipelineServiceApi extends BaseAPI { /** * - * @summary Find all pipelines. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. + * @summary Finds all pipelines. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListPipelines call. + * @param {number} [page_size] The number of pipelines to be listed per page. If there are more pipelines than this number, the response message will contain a valid value in the nextPageToken field. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). + * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. + * @param {string} [resource_reference_key_id] The ID of the resource that referred to. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof PipelineServiceApi @@ -1563,6 +1739,14 @@ export class PipelineServiceApi extends BaseAPI { page_size?: number, sort_by?: string, filter?: string, + resource_reference_key_type?: + | 'UNKNOWN_RESOURCE_TYPE' + | 'EXPERIMENT' + | 'JOB' + | 'PIPELINE' + | 'PIPELINE_VERSION' + | 'NAMESPACE', + resource_reference_key_id?: string, options?: any, ) { return PipelineServiceApiFp(this.configuration).listPipelines( @@ -1570,6 +1754,25 @@ export class PipelineServiceApi extends BaseAPI { page_size, sort_by, filter, + resource_reference_key_type, + resource_reference_key_id, + options, + )(this.fetch, this.basePath); + } + + /** + * + * @summary Update the default pipeline version of a specific pipeline. + * @param {string} pipeline_id The ID of the pipeline to be updated. + * @param {string} version_id The ID of the default version. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof PipelineServiceApi + */ + public updatePipelineDefaultVersion(pipeline_id: string, version_id: string, options?: any) { + return PipelineServiceApiFp(this.configuration).updatePipelineDefaultVersion( + pipeline_id, + version_id, options, )(this.fetch, this.basePath); } diff --git a/frontend/src/apis/run/api.ts b/frontend/src/apis/run/api.ts index 4fb09ec6a6..2c77aaccda 100644 --- a/frontend/src/apis/run/api.ts +++ b/frontend/src/apis/run/api.ts @@ -94,13 +94,13 @@ export interface ApiListRunsResponse { */ runs?: Array<ApiRun>; /** - * + * The total number of runs for the given query. * @type {number} * @memberof ApiListRunsResponse */ total_size?: number; /** - * + * The token to list the next page of runs. * @type {string} * @memberof ApiListRunsResponse */ @@ -323,11 +323,11 @@ export interface ApiRun { */ name?: string; /** - * - * @type {RunStorageState} + * Output. Specify whether this run is in archived or available mode. + * @type {ApiRunStorageState} * @memberof ApiRun */ - storage_state?: RunStorageState; + storage_state?: ApiRunStorageState; /** * * @type {string} @@ -341,7 +341,7 @@ export interface ApiRun { */ pipeline_spec?: ApiPipelineSpec; /** - * Optional input field. Specify which resource this run belongs to. + * Optional input field. Specify which resource this run belongs to. When creating a run from a particular pipeline version, the pipeline version can be specified here. * @type {Array<ApiResourceReference>} * @memberof ApiRun */ @@ -442,6 +442,16 @@ export interface ApiRunMetric { format?: RunMetricFormat; } +/** + * + * @export + * @enum {string} + */ +export enum ApiRunStorageState { + AVAILABLE = <any>'STORAGESTATE_AVAILABLE', + ARCHIVED = <any>'STORAGESTATE_ARCHIVED', +} + /** * * @export @@ -469,13 +479,13 @@ export interface ApiStatus { } /** - * `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } + * `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } * @export * @interface ProtobufAny */ export interface ProtobufAny { /** - * A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. + * A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. * @type {string} * @memberof ProtobufAny */ @@ -544,16 +554,6 @@ export enum RunMetricFormat { PERCENTAGE = <any>'PERCENTAGE', } -/** - * - * @export - * @enum {string} - */ -export enum RunStorageState { - AVAILABLE = <any>'STORAGESTATE_AVAILABLE', - ARCHIVED = <any>'STORAGESTATE_ARCHIVED', -} - /** * RunServiceApi - fetch parameter creator * @export @@ -562,8 +562,8 @@ export const RunServiceApiFetchParamCreator = function(configuration?: Configura return { /** * - * @summary Archive a run. - * @param {string} id + * @summary Archives a run. + * @param {string} id The ID of the run to be archived. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -610,7 +610,7 @@ export const RunServiceApiFetchParamCreator = function(configuration?: Configura }, /** * - * @summary Create a new run. + * @summary Creates a new run. * @param {ApiRun} body * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -661,8 +661,8 @@ export const RunServiceApiFetchParamCreator = function(configuration?: Configura }, /** * - * @summary Delete a run. - * @param {string} id + * @summary Deletes a run. + * @param {string} id The ID of the run to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -709,8 +709,8 @@ export const RunServiceApiFetchParamCreator = function(configuration?: Configura }, /** * - * @summary Find a specific run by ID. - * @param {string} run_id + * @summary Finds a specific run by ID. + * @param {string} run_id The ID of the run to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -757,10 +757,10 @@ export const RunServiceApiFetchParamCreator = function(configuration?: Configura }, /** * - * @summary Find all runs. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" (Example, \"name asc\" or \"id des\"). Ascending by default. + * @summary Finds all runs. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListRuns call or can be omitted when fetching the first page. + * @param {number} [page_size] The number of runs to be listed per page. If there are more runs than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" (Example, \"name asc\" or \"id desc\"). Ascending by default. * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. * @param {string} [resource_reference_key_id] The ID of the resource that referred to. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). @@ -838,7 +838,7 @@ export const RunServiceApiFetchParamCreator = function(configuration?: Configura }, /** * - * @summary Find a run's artifact data. + * @summary Finds a run's artifact data. * @param {string} run_id The ID of the run. * @param {string} node_id The ID of the running node. * @param {string} artifact_name The name of the artifact. @@ -973,8 +973,8 @@ export const RunServiceApiFetchParamCreator = function(configuration?: Configura }, /** * - * @summary Re-initiate a failed or terminated run. - * @param {string} run_id + * @summary Re-initiates a failed or terminated run. + * @param {string} run_id The ID of the run to be retried. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1021,8 +1021,8 @@ export const RunServiceApiFetchParamCreator = function(configuration?: Configura }, /** * - * @summary Terminate an active run. - * @param {string} run_id + * @summary Terminates an active run. + * @param {string} run_id The ID of the run to be terminated. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1069,8 +1069,8 @@ export const RunServiceApiFetchParamCreator = function(configuration?: Configura }, /** * - * @summary Restore an archived run. - * @param {string} id + * @summary Restores an archived run. + * @param {string} id The ID of the run to be restored. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1126,8 +1126,8 @@ export const RunServiceApiFp = function(configuration?: Configuration) { return { /** * - * @summary Archive a run. - * @param {string} id + * @summary Archives a run. + * @param {string} id The ID of the run to be archived. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1148,7 +1148,7 @@ export const RunServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Create a new run. + * @summary Creates a new run. * @param {ApiRun} body * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1173,8 +1173,8 @@ export const RunServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Delete a run. - * @param {string} id + * @summary Deletes a run. + * @param {string} id The ID of the run to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1195,8 +1195,8 @@ export const RunServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Find a specific run by ID. - * @param {string} run_id + * @summary Finds a specific run by ID. + * @param {string} run_id The ID of the run to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1220,10 +1220,10 @@ export const RunServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Find all runs. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" (Example, \"name asc\" or \"id des\"). Ascending by default. + * @summary Finds all runs. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListRuns call or can be omitted when fetching the first page. + * @param {number} [page_size] The number of runs to be listed per page. If there are more runs than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" (Example, \"name asc\" or \"id desc\"). Ascending by default. * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. * @param {string} [resource_reference_key_id] The ID of the resource that referred to. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). @@ -1266,7 +1266,7 @@ export const RunServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Find a run's artifact data. + * @summary Finds a run's artifact data. * @param {string} run_id The ID of the run. * @param {string} node_id The ID of the running node. * @param {string} artifact_name The name of the artifact. @@ -1325,8 +1325,8 @@ export const RunServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Re-initiate a failed or terminated run. - * @param {string} run_id + * @summary Re-initiates a failed or terminated run. + * @param {string} run_id The ID of the run to be retried. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1347,8 +1347,8 @@ export const RunServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Terminate an active run. - * @param {string} run_id + * @summary Terminates an active run. + * @param {string} run_id The ID of the run to be terminated. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1372,8 +1372,8 @@ export const RunServiceApiFp = function(configuration?: Configuration) { }, /** * - * @summary Restore an archived run. - * @param {string} id + * @summary Restores an archived run. + * @param {string} id The ID of the run to be restored. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1407,8 +1407,8 @@ export const RunServiceApiFactory = function( return { /** * - * @summary Archive a run. - * @param {string} id + * @summary Archives a run. + * @param {string} id The ID of the run to be archived. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1417,7 +1417,7 @@ export const RunServiceApiFactory = function( }, /** * - * @summary Create a new run. + * @summary Creates a new run. * @param {ApiRun} body * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1427,8 +1427,8 @@ export const RunServiceApiFactory = function( }, /** * - * @summary Delete a run. - * @param {string} id + * @summary Deletes a run. + * @param {string} id The ID of the run to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1437,8 +1437,8 @@ export const RunServiceApiFactory = function( }, /** * - * @summary Find a specific run by ID. - * @param {string} run_id + * @summary Finds a specific run by ID. + * @param {string} run_id The ID of the run to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1447,10 +1447,10 @@ export const RunServiceApiFactory = function( }, /** * - * @summary Find all runs. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" (Example, \"name asc\" or \"id des\"). Ascending by default. + * @summary Finds all runs. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListRuns call or can be omitted when fetching the first page. + * @param {number} [page_size] The number of runs to be listed per page. If there are more runs than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" (Example, \"name asc\" or \"id desc\"). Ascending by default. * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. * @param {string} [resource_reference_key_id] The ID of the resource that referred to. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). @@ -1484,7 +1484,7 @@ export const RunServiceApiFactory = function( }, /** * - * @summary Find a run's artifact data. + * @summary Finds a run's artifact data. * @param {string} run_id The ID of the run. * @param {string} node_id The ID of the running node. * @param {string} artifact_name The name of the artifact. @@ -1516,8 +1516,8 @@ export const RunServiceApiFactory = function( }, /** * - * @summary Re-initiate a failed or terminated run. - * @param {string} run_id + * @summary Re-initiates a failed or terminated run. + * @param {string} run_id The ID of the run to be retried. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1526,8 +1526,8 @@ export const RunServiceApiFactory = function( }, /** * - * @summary Terminate an active run. - * @param {string} run_id + * @summary Terminates an active run. + * @param {string} run_id The ID of the run to be terminated. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1536,8 +1536,8 @@ export const RunServiceApiFactory = function( }, /** * - * @summary Restore an archived run. - * @param {string} id + * @summary Restores an archived run. + * @param {string} id The ID of the run to be restored. * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1556,8 +1556,8 @@ export const RunServiceApiFactory = function( export class RunServiceApi extends BaseAPI { /** * - * @summary Archive a run. - * @param {string} id + * @summary Archives a run. + * @param {string} id The ID of the run to be archived. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof RunServiceApi @@ -1568,7 +1568,7 @@ export class RunServiceApi extends BaseAPI { /** * - * @summary Create a new run. + * @summary Creates a new run. * @param {ApiRun} body * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -1580,8 +1580,8 @@ export class RunServiceApi extends BaseAPI { /** * - * @summary Delete a run. - * @param {string} id + * @summary Deletes a run. + * @param {string} id The ID of the run to be deleted. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof RunServiceApi @@ -1592,8 +1592,8 @@ export class RunServiceApi extends BaseAPI { /** * - * @summary Find a specific run by ID. - * @param {string} run_id + * @summary Finds a specific run by ID. + * @param {string} run_id The ID of the run to be retrieved. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof RunServiceApi @@ -1604,10 +1604,10 @@ export class RunServiceApi extends BaseAPI { /** * - * @summary Find all runs. - * @param {string} [page_token] - * @param {number} [page_size] - * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" (Example, \"name asc\" or \"id des\"). Ascending by default. + * @summary Finds all runs. + * @param {string} [page_token] A page token to request the next page of results. The token is acquried from the nextPageToken field of the response from the previous ListRuns call or can be omitted when fetching the first page. + * @param {number} [page_size] The number of runs to be listed per page. If there are more runs than this number, the response message will contain a nextPageToken field you can use to fetch the next page. + * @param {string} [sort_by] Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" (Example, \"name asc\" or \"id desc\"). Ascending by default. * @param {'UNKNOWN_RESOURCE_TYPE' | 'EXPERIMENT' | 'JOB' | 'PIPELINE' | 'PIPELINE_VERSION' | 'NAMESPACE'} [resource_reference_key_type] The type of the resource that referred to. * @param {string} [resource_reference_key_id] The ID of the resource that referred to. * @param {string} [filter] A url-encoded, JSON-serialized Filter protocol buffer (see [filter.proto](https://github.com/kubeflow/pipelines/ blob/master/backend/api/filter.proto)). @@ -1643,7 +1643,7 @@ export class RunServiceApi extends BaseAPI { /** * - * @summary Find a run's artifact data. + * @summary Finds a run's artifact data. * @param {string} run_id The ID of the run. * @param {string} node_id The ID of the running node. * @param {string} artifact_name The name of the artifact. @@ -1679,8 +1679,8 @@ export class RunServiceApi extends BaseAPI { /** * - * @summary Re-initiate a failed or terminated run. - * @param {string} run_id + * @summary Re-initiates a failed or terminated run. + * @param {string} run_id The ID of the run to be retried. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof RunServiceApi @@ -1691,8 +1691,8 @@ export class RunServiceApi extends BaseAPI { /** * - * @summary Terminate an active run. - * @param {string} run_id + * @summary Terminates an active run. + * @param {string} run_id The ID of the run to be terminated. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof RunServiceApi @@ -1706,8 +1706,8 @@ export class RunServiceApi extends BaseAPI { /** * - * @summary Restore an archived run. - * @param {string} id + * @summary Restores an archived run. + * @param {string} id The ID of the run to be restored. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof RunServiceApi diff --git a/frontend/src/apis/visualization/api.ts b/frontend/src/apis/visualization/api.ts index 7031ee5087..46bc0e7b14 100644 --- a/frontend/src/apis/visualization/api.ts +++ b/frontend/src/apis/visualization/api.ts @@ -159,13 +159,13 @@ export enum ApiVisualizationType { } /** - * `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } + * `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": <string>, \"lastName\": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } * @export * @interface ProtobufAny */ export interface ProtobufAny { /** - * A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. + * A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. * @type {string} * @memberof ProtobufAny */ diff --git a/frontend/src/assets.d.ts b/frontend/src/assets.d.ts index 93ad5731a8..e63d49b73d 100644 --- a/frontend/src/assets.d.ts +++ b/frontend/src/assets.d.ts @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/BusyButton.test.tsx b/frontend/src/atoms/BusyButton.test.tsx index 35ef74f2c3..5bc6b048e2 100644 --- a/frontend/src/atoms/BusyButton.test.tsx +++ b/frontend/src/atoms/BusyButton.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/BusyButton.tsx b/frontend/src/atoms/BusyButton.tsx index 4b39a9e4d0..61419dc986 100644 --- a/frontend/src/atoms/BusyButton.tsx +++ b/frontend/src/atoms/BusyButton.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/ErrorBoundary.tsx b/frontend/src/atoms/ErrorBoundary.tsx new file mode 100644 index 0000000000..c108ae60aa --- /dev/null +++ b/frontend/src/atoms/ErrorBoundary.tsx @@ -0,0 +1,54 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; + +interface ErrorBoundaryState { + error: any; + errorInfo: any; +} + +export class ErrorBoundary extends React.Component<Readonly<{}>, ErrorBoundaryState> { + constructor(props: Readonly<Readonly<{}>>) { + super(props); + this.state = { error: null, errorInfo: null }; + } + + componentDidCatch(error: any, errorInfo: any) { + this.setState({ + error: error, + errorInfo: errorInfo, + }); + } + + render() { + if (this.state.errorInfo) { + // Error path + return ( + <div> + <h2>Something went wrong.</h2> + <details style={{ whiteSpace: 'pre-wrap' }}> + {this.state.error && this.state.error.toString()} + <br /> + {this.state.errorInfo.componentStack} + </details> + </div> + ); + } + // Normally, just render children + return this.props.children; + } +} diff --git a/frontend/src/atoms/ExternalLink.tsx b/frontend/src/atoms/ExternalLink.tsx index 2bdd06b172..7dbff90454 100644 --- a/frontend/src/atoms/ExternalLink.tsx +++ b/frontend/src/atoms/ExternalLink.tsx @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/HelpButton.tsx b/frontend/src/atoms/HelpButton.tsx index f7243c71aa..ebdd8bccd7 100644 --- a/frontend/src/atoms/HelpButton.tsx +++ b/frontend/src/atoms/HelpButton.tsx @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/Hr.test.tsx b/frontend/src/atoms/Hr.test.tsx index 318be0025e..e88411802e 100644 --- a/frontend/src/atoms/Hr.test.tsx +++ b/frontend/src/atoms/Hr.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/Hr.tsx b/frontend/src/atoms/Hr.tsx index cc17508db7..f0d4ec9322 100644 --- a/frontend/src/atoms/Hr.tsx +++ b/frontend/src/atoms/Hr.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/IconWithTooltip.test.tsx b/frontend/src/atoms/IconWithTooltip.test.tsx index 6b440691dc..1833b5324f 100644 --- a/frontend/src/atoms/IconWithTooltip.test.tsx +++ b/frontend/src/atoms/IconWithTooltip.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/IconWithTooltip.tsx b/frontend/src/atoms/IconWithTooltip.tsx index 1ef11f0273..f71887ce0c 100644 --- a/frontend/src/atoms/IconWithTooltip.tsx +++ b/frontend/src/atoms/IconWithTooltip.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/Input.test.tsx b/frontend/src/atoms/Input.test.tsx index bc4b9018d1..a916039f9b 100644 --- a/frontend/src/atoms/Input.test.tsx +++ b/frontend/src/atoms/Input.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/Input.tsx b/frontend/src/atoms/Input.tsx index fd02f12320..152db56ed7 100644 --- a/frontend/src/atoms/Input.tsx +++ b/frontend/src/atoms/Input.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/MD2Tabs.test.tsx b/frontend/src/atoms/MD2Tabs.test.tsx index 0c371ebb23..c2632a2150 100644 --- a/frontend/src/atoms/MD2Tabs.test.tsx +++ b/frontend/src/atoms/MD2Tabs.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/MD2Tabs.tsx b/frontend/src/atoms/MD2Tabs.tsx index 8e461dd8c2..3f56c98397 100644 --- a/frontend/src/atoms/MD2Tabs.tsx +++ b/frontend/src/atoms/MD2Tabs.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/Separator.test.tsx b/frontend/src/atoms/Separator.test.tsx index d24a08e62a..881e249d6b 100644 --- a/frontend/src/atoms/Separator.test.tsx +++ b/frontend/src/atoms/Separator.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/atoms/Separator.tsx b/frontend/src/atoms/Separator.tsx index 94ca896664..d12aaf2edd 100644 --- a/frontend/src/atoms/Separator.tsx +++ b/frontend/src/atoms/Separator.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/ArtifactLink.tsx b/frontend/src/components/ArtifactLink.tsx index 3d04b2805b..5f25f33b63 100644 --- a/frontend/src/components/ArtifactLink.tsx +++ b/frontend/src/components/ArtifactLink.tsx @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/ArtifactPreview.test.tsx b/frontend/src/components/ArtifactPreview.test.tsx new file mode 100644 index 0000000000..633f93078f --- /dev/null +++ b/frontend/src/components/ArtifactPreview.test.tsx @@ -0,0 +1,123 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { render, screen, waitFor } from '@testing-library/react'; +import React from 'react'; +import { CommonTestWrapper } from 'src/TestWrapper'; +import { Apis } from '../lib/Apis'; +import { testBestPractices } from '../TestUtils'; +import ArtifactPreview from './ArtifactPreview'; + +testBestPractices(); +describe('ArtifactPreview', () => { + it('handles undefined artifact', () => { + render( + <CommonTestWrapper> + <ArtifactPreview value={undefined} /> + </CommonTestWrapper>, + ); + screen.getByText('Can not retrieve storage path from artifact uri: undefined'); + }); + + it('handles null artifact', () => { + render( + <CommonTestWrapper> + <ArtifactPreview value={null as any} /> + </CommonTestWrapper>, + ); + screen.getByText('Can not retrieve storage path from artifact uri: null'); + }); + + it('handles empty artifact', () => { + expect(() => { + render( + <CommonTestWrapper> + <ArtifactPreview value={'i am random path'} /> + </CommonTestWrapper>, + ); + }).toThrow(new Error('Unsupported storage path: i am random path')); + }); + + it('handles invalid artifact: no bucket', async () => { + jest.spyOn(Apis, 'readFile').mockRejectedValue(new Error('server error: no bucket')); + + render( + <CommonTestWrapper> + <ArtifactPreview value={'minio://'} namespace={'kubeflow'} /> + </CommonTestWrapper>, + ); + await waitFor(() => screen.getByText('Error in retrieving artifact preview.')); + }); + + it('handles gcs artifact', async () => { + jest.spyOn(Apis, 'readFile').mockResolvedValue('gcs preview'); + render( + <CommonTestWrapper> + <ArtifactPreview value={'gs://bucket/key'} /> + </CommonTestWrapper>, + ); + await waitFor(() => screen.getByText('gs://bucket/key')); + await waitFor(() => screen.getByText('gcs preview')); + }); + + it('handles minio artifact with namespace', async () => { + jest.spyOn(Apis, 'readFile').mockResolvedValueOnce('minio content'); + render( + <CommonTestWrapper> + <ArtifactPreview value={'minio://bucket/key'} namespace={'kubeflow'} /> + </CommonTestWrapper>, + ); + await waitFor(() => screen.getByText('minio://bucket/key')); + await waitFor(() => + expect(screen.getByText('View All').getAttribute('href')).toEqual( + 'artifacts/get?source=minio&namespace=kubeflow&bucket=bucket&key=key', + ), + ); + }); + + it('handles artifact that previews with maxlines', async () => { + const data = `012\n345\n678\n910`; + jest.spyOn(Apis, 'readFile').mockResolvedValueOnce(data); + render( + <CommonTestWrapper> + <ArtifactPreview + value={'minio://bucket/key'} + namespace={'kubeflow'} + maxbytes={data.length} + maxlines={2} + /> + </CommonTestWrapper>, + ); + await waitFor(() => screen.getByText('minio://bucket/key')); + await waitFor(() => screen.getByText(`012 345 ...`)); + }); + + it('handles artifact that previews with maxbytes', async () => { + const data = `012\n345\n678\n910`; + jest.spyOn(Apis, 'readFile').mockResolvedValueOnce(data); + render( + <CommonTestWrapper> + <ArtifactPreview + value={'minio://bucket/key'} + namespace={'kubeflow'} + maxbytes={data.length - 5} + /> + </CommonTestWrapper>, + ); + await waitFor(() => screen.getByText('minio://bucket/key')); + await waitFor(() => screen.getByText(`012 345 67 ...`)); + }); +}); diff --git a/frontend/src/components/ArtifactPreview.tsx b/frontend/src/components/ArtifactPreview.tsx new file mode 100644 index 0000000000..35f395fb20 --- /dev/null +++ b/frontend/src/components/ArtifactPreview.tsx @@ -0,0 +1,147 @@ +/** + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { useQuery } from 'react-query'; +import { ExternalLink } from 'src/atoms/ExternalLink'; +import { color } from 'src/Css'; +import { Apis } from 'src/lib/Apis'; +import WorkflowParser, { StoragePath } from 'src/lib/WorkflowParser'; +import { stylesheet } from 'typestyle'; +import Banner from './Banner'; +import { ValueComponentProps } from './DetailsTable'; + +const css = stylesheet({ + root: { + width: '100%', + }, + preview: { + maxHeight: 250, + overflowY: 'auto', + padding: 3, + backgroundColor: color.lightGrey, + }, + topDiv: { + display: 'flex', + justifyContent: 'space-between', + }, + separater: { + width: 20, // There's minimum 20px separation between URI and view button. + display: 'inline-block', + }, + viewLink: { + whiteSpace: 'nowrap', + }, +}); + +export interface ArtifactPreviewProps extends ValueComponentProps<string> { + namespace?: string; + maxbytes?: number; + maxlines?: number; +} + +/** + * A component that renders a preview to an artifact with a link to the full content. + */ +const ArtifactPreview: React.FC<ArtifactPreviewProps> = ({ + value, + namespace, + maxbytes = 255, + maxlines = 20, +}) => { + let storage: StoragePath | undefined; + if (value) { + storage = WorkflowParser.parseStoragePath(value); + } + + const { isSuccess, isError, data, error } = useQuery<string, Error>( + ['artifact_preview', { value, namespace, maxbytes, maxlines }], + () => getPreview(storage, namespace, maxbytes, maxlines), + { staleTime: Infinity }, + ); + + if (!storage) { + return ( + <Banner message={'Can not retrieve storage path from artifact uri: ' + value} mode='error' /> + ); + } + + const linkText = Apis.buildArtifactLinkText(storage); + const artifactDownloadUrl = Apis.buildReadFileUrl({ + path: storage, + namespace, + isDownload: true, + }); + const artifactViewUrl = Apis.buildReadFileUrl({ path: storage, namespace }); + + return ( + <div className={css.root}> + <div className={css.topDiv}> + <ExternalLink download href={artifactDownloadUrl} title={linkText}> + {linkText} + </ExternalLink> + <span className={css.separater} /> + <ExternalLink href={artifactViewUrl} className={css.viewLink}> + View All + </ExternalLink> + </div> + {isError && ( + <Banner + message='Error in retrieving artifact preview.' + mode='error' + additionalInfo={error ? error.message : 'No error message'} + /> + )} + {isSuccess && data && ( + <div className={css.preview}> + <small> + <pre>{data}</pre> + </small> + </div> + )} + </div> + ); +}; + +export default ArtifactPreview; + +async function getPreview( + storagePath: StoragePath | undefined, + namespace: string | undefined, + maxbytes: number, + maxlines?: number, +): Promise<string> { + if (!storagePath) { + return ``; + } + // TODO how to handle binary data (can probably use magic number to id common mime types) + let data = await Apis.readFile(storagePath, namespace, maxbytes + 1); + // is preview === data and no maxlines + if (data.length <= maxbytes && (!maxlines || data.split('\n').length < maxlines)) { + return data; + } + // remove extra byte at the end (we requested maxbytes +1) + data = data.slice(0, maxbytes); + // check num lines + if (maxlines) { + data = data + .split('\n') + .slice(0, maxlines) + .join('\n') + .trim(); + } + return `${data}\n...`; +} diff --git a/frontend/src/components/Banner.test.tsx b/frontend/src/components/Banner.test.tsx index 739ba62fc3..e0e7cedf0f 100644 --- a/frontend/src/components/Banner.test.tsx +++ b/frontend/src/components/Banner.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/Banner.tsx b/frontend/src/components/Banner.tsx index 7daf667c0e..fb3a542425 100644 --- a/frontend/src/components/Banner.tsx +++ b/frontend/src/components/Banner.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/CollapseButton.test.tsx b/frontend/src/components/CollapseButton.test.tsx index f0302fc3f8..52db7832ef 100644 --- a/frontend/src/components/CollapseButton.test.tsx +++ b/frontend/src/components/CollapseButton.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/CollapseButton.tsx b/frontend/src/components/CollapseButton.tsx index e0daede3fa..665557b44a 100644 --- a/frontend/src/components/CollapseButton.tsx +++ b/frontend/src/components/CollapseButton.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/CompareTable.test.tsx b/frontend/src/components/CompareTable.test.tsx index 28671b4082..38cc98ba70 100644 --- a/frontend/src/components/CompareTable.test.tsx +++ b/frontend/src/components/CompareTable.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/CompareTable.tsx b/frontend/src/components/CompareTable.tsx index fda6a2ee60..463dc0fcc1 100644 --- a/frontend/src/components/CompareTable.tsx +++ b/frontend/src/components/CompareTable.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/CustomTable.test.tsx b/frontend/src/components/CustomTable.test.tsx index 53f9f8a801..dbd1da53e2 100644 --- a/frontend/src/components/CustomTable.test.tsx +++ b/frontend/src/components/CustomTable.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/CustomTable.tsx b/frontend/src/components/CustomTable.tsx index 78e8f27f41..60246657dc 100644 --- a/frontend/src/components/CustomTable.tsx +++ b/frontend/src/components/CustomTable.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -151,6 +151,9 @@ export const css = stylesheet({ '&:hover': { backgroundColor: '#f3f3f3', }, + '&:hover a': { + color: color.linkLight, + }, }, borderBottom: '1px solid #ddd', display: 'flex', diff --git a/frontend/src/components/CustomTableNameColumn.tsx b/frontend/src/components/CustomTableNameColumn.tsx index 153845e98e..9f7c6c0231 100644 --- a/frontend/src/components/CustomTableNameColumn.tsx +++ b/frontend/src/components/CustomTableNameColumn.tsx @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/CustomTableRow.test.tsx b/frontend/src/components/CustomTableRow.test.tsx index 88cdf08b00..0e40d38845 100644 --- a/frontend/src/components/CustomTableRow.test.tsx +++ b/frontend/src/components/CustomTableRow.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/CustomTableRow.tsx b/frontend/src/components/CustomTableRow.tsx index 773ee03159..86f66e7be1 100644 --- a/frontend/src/components/CustomTableRow.tsx +++ b/frontend/src/components/CustomTableRow.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -51,6 +51,9 @@ export const css = stylesheet({ '&:hover': { backgroundColor: '#f3f3f3', }, + '&:hover a': { + color: color.linkLight, + }, }, borderBottom: '1px solid #ddd', display: 'flex', diff --git a/frontend/src/components/Description.test.tsx b/frontend/src/components/Description.test.tsx index a70239cf27..c3110103d8 100644 --- a/frontend/src/components/Description.test.tsx +++ b/frontend/src/components/Description.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/Description.tsx b/frontend/src/components/Description.tsx index d9abafc1b8..21f6a3b0cc 100644 --- a/frontend/src/components/Description.tsx +++ b/frontend/src/components/Description.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/DetailsTable.test.tsx b/frontend/src/components/DetailsTable.test.tsx index 8ec2bfcd2e..d01ce26e79 100644 --- a/frontend/src/components/DetailsTable.test.tsx +++ b/frontend/src/components/DetailsTable.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -62,7 +62,7 @@ describe('DetailsTable', () => { expect(container).toMatchInlineSnapshot(` <div> <div - class="header" + class="header2" > some title </div> diff --git a/frontend/src/components/DetailsTable.tsx b/frontend/src/components/DetailsTable.tsx index 5be8d69d2b..a337d31b26 100644 --- a/frontend/src/components/DetailsTable.tsx +++ b/frontend/src/components/DetailsTable.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,15 +14,15 @@ * limitations under the License. */ -import * as React from 'react'; -import { stylesheet } from 'typestyle'; -import { color, spacing, commonCss } from '../Css'; -import { KeyValue } from '../lib/StaticGraphParser'; -import Editor from './Editor'; import 'brace'; import 'brace/ext/language_tools'; import 'brace/mode/json'; import 'brace/theme/github'; +import * as React from 'react'; +import { stylesheet } from 'typestyle'; +import { color, commonCss, spacing } from '../Css'; +import { KeyValue } from '../lib/StaticGraphParser'; +import Editor from './Editor'; export const css = stylesheet({ key: { @@ -71,7 +71,7 @@ const DetailsTable = <T extends {}>(props: DetailsTableProps<T>) => { const { fields, title, valueComponent: ValueComponent, valueComponentProps } = props; return ( <React.Fragment> - {!!title && <div className={commonCss.header}>{title}</div>} + {!!title && <div className={commonCss.header2}>{title}</div>} <div> {fields.map((f, i) => { const [key, value] = f; diff --git a/frontend/src/components/Editor.test.tsx b/frontend/src/components/Editor.test.tsx index 30afeb2609..3f794f749c 100644 --- a/frontend/src/components/Editor.test.tsx +++ b/frontend/src/components/Editor.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/Editor.tsx b/frontend/src/components/Editor.tsx index ee73e46ac9..865bfee9ff 100644 --- a/frontend/src/components/Editor.tsx +++ b/frontend/src/components/Editor.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/ExperimentList.test.tsx b/frontend/src/components/ExperimentList.test.tsx index e03f6be3d3..5ad14eaed8 100644 --- a/frontend/src/components/ExperimentList.test.tsx +++ b/frontend/src/components/ExperimentList.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2020 Google LLC + * Copyright 2020 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,8 +19,8 @@ import * as Utils from '../lib/Utils'; import { ExperimentList, ExperimentListProps } from './ExperimentList'; import TestUtils from '../TestUtils'; import { ApiFilter, PredicateOp } from '../apis/filter'; -import { RunStorageState } from '../apis/run'; -import { ExperimentStorageState } from '../apis/experiment'; +import { ApiRunStorageState } from '../apis/run'; +import { ApiExperimentStorageState } from '../apis/experiment'; import { ExpandState } from './CustomTable'; import { Apis, ExperimentSortKeys, ListRequest } from '../lib/Apis'; @@ -96,14 +96,14 @@ describe('ExperimentList', () => { it('renders the empty experience in ARCHIVED state', () => { const props = generateProps(); - props.storageState = ExperimentStorageState.ARCHIVED; + props.storageState = ApiExperimentStorageState.ARCHIVED; expect(shallow(<ExperimentList {...props} />)).toMatchSnapshot(); }); it('loads experiments whose storage state is not ARCHIVED when storage state equals AVAILABLE', async () => { mockNExperiments(1); const props = generateProps(); - props.storageState = ExperimentStorageState.AVAILABLE; + props.storageState = ApiExperimentStorageState.AVAILABLE; tree = shallow(<ExperimentList {...props} />); await (tree.instance() as ExperimentListTest)._loadExperiments({}); expect(Apis.experimentServiceApi.listExperiment).toHaveBeenLastCalledWith( @@ -116,7 +116,7 @@ describe('ExperimentList', () => { { key: 'storage_state', op: PredicateOp.NOTEQUALS, - string_value: ExperimentStorageState.ARCHIVED.toString(), + string_value: ApiExperimentStorageState.ARCHIVED.toString(), }, ], } as ApiFilter), @@ -129,7 +129,7 @@ describe('ExperimentList', () => { it('loads experiments whose storage state is ARCHIVED when storage state equals ARCHIVED', async () => { mockNExperiments(1); const props = generateProps(); - props.storageState = ExperimentStorageState.ARCHIVED; + props.storageState = ApiExperimentStorageState.ARCHIVED; tree = shallow(<ExperimentList {...props} />); await (tree.instance() as ExperimentListTest)._loadExperiments({}); expect(Apis.experimentServiceApi.listExperiment).toHaveBeenLastCalledWith( @@ -142,7 +142,7 @@ describe('ExperimentList', () => { { key: 'storage_state', op: PredicateOp.EQUALS, - string_value: ExperimentStorageState.ARCHIVED.toString(), + string_value: ApiExperimentStorageState.ARCHIVED.toString(), }, ], } as ApiFilter), @@ -155,7 +155,7 @@ describe('ExperimentList', () => { it('augments request filter with storage state predicates', async () => { mockNExperiments(1); const props = generateProps(); - props.storageState = ExperimentStorageState.ARCHIVED; + props.storageState = ApiExperimentStorageState.ARCHIVED; tree = shallow(<ExperimentList {...props} />); await (tree.instance() as ExperimentListTest)._loadExperiments({ filter: encodeURIComponent( @@ -179,7 +179,7 @@ describe('ExperimentList', () => { { key: 'storage_state', op: PredicateOp.EQUALS, - string_value: ExperimentStorageState.ARCHIVED.toString(), + string_value: ApiExperimentStorageState.ARCHIVED.toString(), }, ], } as ApiFilter), @@ -290,7 +290,7 @@ describe('ExperimentList', () => { { key: 'storage_state', op: PredicateOp.NOTEQUALS, - string_value: RunStorageState.ARCHIVED.toString(), + string_value: ApiRunStorageState.ARCHIVED.toString(), }, ], } as ApiFilter), @@ -302,7 +302,7 @@ describe('ExperimentList', () => { listRunsSpy.mockImplementation(() => {}); mockNExperiments(1); const props = generateProps(); - props.storageState = ExperimentStorageState.ARCHIVED; + props.storageState = ApiExperimentStorageState.ARCHIVED; tree = TestUtils.mountWithRouter(<ExperimentList {...props} />); await (tree.instance() as ExperimentListTest)._loadExperiments({}); tree.update(); @@ -341,7 +341,7 @@ describe('ExperimentList', () => { { key: 'storage_state', op: PredicateOp.EQUALS, - string_value: RunStorageState.ARCHIVED.toString(), + string_value: ApiRunStorageState.ARCHIVED.toString(), }, ], } as ApiFilter), diff --git a/frontend/src/components/ExperimentList.tsx b/frontend/src/components/ExperimentList.tsx index d6107fa37b..630697c2fa 100644 --- a/frontend/src/components/ExperimentList.tsx +++ b/frontend/src/components/ExperimentList.tsx @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,13 +20,13 @@ import { Link, RouteComponentProps } from 'react-router-dom'; import { ApiListExperimentsResponse, ApiExperiment, - ExperimentStorageState, + ApiExperimentStorageState, } from '../apis/experiment'; import { errorToMessage } from '../lib/Utils'; import { RoutePage, RouteParams } from './Router'; import { commonCss } from '../Css'; import { Apis, ExperimentSortKeys, ListRequest } from '../lib/Apis'; -import { RunStorageState } from 'src/apis/run'; +import { ApiRunStorageState } from 'src/apis/run'; import RunList from '../pages/RunList'; import { PredicateOp, ApiFilter } from '../apis/filter'; import produce from 'immer'; @@ -34,7 +34,7 @@ import Tooltip from '@material-ui/core/Tooltip'; export interface ExperimentListProps extends RouteComponentProps { namespace?: string; - storageState?: ExperimentStorageState; + storageState?: ApiExperimentStorageState; onError: (message: string, error: Error) => void; } @@ -137,10 +137,10 @@ export class ExperimentList extends React.PureComponent<ExperimentListProps, Exp // Use EQUALS ARCHIVED or NOT EQUALS ARCHIVED to account for cases where the field // is missing, in which case it should be counted as available. op: - this.props.storageState === ExperimentStorageState.ARCHIVED + this.props.storageState === ApiExperimentStorageState.ARCHIVED ? PredicateOp.EQUALS : PredicateOp.NOTEQUALS, - string_value: ExperimentStorageState.ARCHIVED.toString(), + string_value: ApiExperimentStorageState.ARCHIVED.toString(), }, ]); request.filter = encodeURIComponent(JSON.stringify(filter)); @@ -187,18 +187,18 @@ export class ExperimentList extends React.PureComponent<ExperimentListProps, Exp private _getExpandedExperimentComponent(experimentIndex: number): JSX.Element { const experiment = this.state.displayExperiments[experimentIndex]; + const parentProps = { ...this.props, onError: () => null }; return ( <RunList hideExperimentColumn={true} experimentIdMask={experiment.id} - onError={() => null} - {...this.props} + {...parentProps} disablePaging={false} noFilterBox={true} storageState={ - this.props.storageState === ExperimentStorageState.ARCHIVED - ? RunStorageState.ARCHIVED - : RunStorageState.AVAILABLE + this.props.storageState === ApiExperimentStorageState.ARCHIVED + ? ApiRunStorageState.ARCHIVED + : ApiRunStorageState.AVAILABLE } disableSorting={true} disableSelection={true} diff --git a/frontend/src/components/Graph.test.tsx b/frontend/src/components/Graph.test.tsx index 680e426e88..22e43df271 100644 --- a/frontend/src/components/Graph.test.tsx +++ b/frontend/src/components/Graph.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/Graph.tsx b/frontend/src/components/Graph.tsx index 96da13aecf..c200f84c71 100644 --- a/frontend/src/components/Graph.tsx +++ b/frontend/src/components/Graph.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/LogViewer.test.tsx b/frontend/src/components/LogViewer.test.tsx index 262b54caed..0780da687a 100644 --- a/frontend/src/components/LogViewer.test.tsx +++ b/frontend/src/components/LogViewer.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/LogViewer.tsx b/frontend/src/components/LogViewer.tsx index 1b367dc488..79bb5a0f0e 100644 --- a/frontend/src/components/LogViewer.tsx +++ b/frontend/src/components/LogViewer.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/Metric.test.tsx b/frontend/src/components/Metric.test.tsx index 958bbeb7f5..ccaa235ae9 100644 --- a/frontend/src/components/Metric.test.tsx +++ b/frontend/src/components/Metric.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/Metric.tsx b/frontend/src/components/Metric.tsx index a64f5fe15a..ed2392a685 100644 --- a/frontend/src/components/Metric.tsx +++ b/frontend/src/components/Metric.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -91,7 +91,7 @@ class Metric extends React.PureComponent<MetricProps> { } return ( <div className={css.metricContainer}> - <div className={css.metricFill} style={{ width }}> + <div className={css.metricFill} style={{ width }} data-testid={'metric'}> {displayString} </div> </div> diff --git a/frontend/src/components/MinioArtifactPreview.test.tsx b/frontend/src/components/MinioArtifactPreview.test.tsx index 67da1d472b..d491e83648 100644 --- a/frontend/src/components/MinioArtifactPreview.test.tsx +++ b/frontend/src/components/MinioArtifactPreview.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019-2020 Google LLC + * Copyright 2019-2020 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. @@ -86,11 +86,13 @@ describe('MinioArtifactPreview', () => { it('handles s3 artifact', async () => { const s3Artifact = { - accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, - bucket: 'foo', - endpoint: 's3.amazonaws.com', key: 'bar', - secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + s3Bucket: { + accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, + bucket: 'foo', + endpoint: 's3.amazonaws.com', + secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + }, }; const { container } = render(<MinioArtifactPreview value={s3Artifact} />); @@ -140,11 +142,13 @@ describe('MinioArtifactPreview', () => { it('handles minio artifact', async () => { const minioArtifact = { - accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, - bucket: 'foo', - endpoint: 'minio.kubeflow', key: 'bar', - secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + s3Bucket: { + accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, + bucket: 'foo', + endpoint: 'minio.kubeflow', + secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + }, }; const container = document.body.appendChild(document.createElement('div')); await act(async () => { @@ -195,11 +199,13 @@ describe('MinioArtifactPreview', () => { it('handles artifact with namespace', async () => { const minioArtifact = { - accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, - bucket: 'foo', - endpoint: 'minio.kubeflow', key: 'bar', - secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + s3Bucket: { + accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, + bucket: 'foo', + endpoint: 'minio.kubeflow', + secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + }, }; const { container } = render( <MinioArtifactPreview value={minioArtifact} namespace='namespace' />, @@ -250,11 +256,13 @@ describe('MinioArtifactPreview', () => { it('handles artifact cleanly even when fetch fails', async () => { const minioArtifact = { - accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, - bucket: 'foo', - endpoint: 'minio.kubeflow', key: 'bar', - secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + s3Bucket: { + accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, + bucket: 'foo', + endpoint: 'minio.kubeflow', + secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + }, }; readFile.mockRejectedValue('unknown error'); const { container } = render(<MinioArtifactPreview value={minioArtifact} />); @@ -295,11 +303,13 @@ describe('MinioArtifactPreview', () => { it('handles artifact that previews fully', async () => { const minioArtifact = { - accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, - bucket: 'foo', - endpoint: 'minio.kubeflow', key: 'bar', - secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + s3Bucket: { + accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, + bucket: 'foo', + endpoint: 'minio.kubeflow', + secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + }, }; const data = `012\n345\n678\n910`; readFile.mockResolvedValue(data); @@ -355,11 +365,13 @@ describe('MinioArtifactPreview', () => { it('handles artifact that previews with maxlines', async () => { const minioArtifact = { - accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, - bucket: 'foo', - endpoint: 'minio.kubeflow', key: 'bar', - secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + s3Bucket: { + accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, + bucket: 'foo', + endpoint: 'minio.kubeflow', + secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + }, }; const data = `012\n345\n678\n910`; readFile.mockResolvedValue(data); @@ -415,11 +427,13 @@ describe('MinioArtifactPreview', () => { it('handles artifact that previews with maxbytes', async () => { const minioArtifact = { - accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, - bucket: 'foo', - endpoint: 'minio.kubeflow', key: 'bar', - secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + s3Bucket: { + accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, + bucket: 'foo', + endpoint: 'minio.kubeflow', + secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, + }, }; const data = `012\n345\n678\n910`; readFile.mockResolvedValue(data); diff --git a/frontend/src/components/MinioArtifactPreview.tsx b/frontend/src/components/MinioArtifactPreview.tsx index a1b2d0b35c..ae7208321f 100644 --- a/frontend/src/components/MinioArtifactPreview.tsx +++ b/frontend/src/components/MinioArtifactPreview.tsx @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -63,8 +63,10 @@ export interface MinioArtifactPreviewProps extends ValueComponentProps<Partial<S function getStoragePath(value?: string | Partial<S3Artifact>) { if (!value || typeof value === 'string') return; - const { key, bucket, endpoint } = value; - if (!bucket || !key) return; + const { key, s3Bucket } = value; + if (!s3Bucket || !key) return; + const { bucket, endpoint } = s3Bucket; + if (!bucket) return; const source = isS3Endpoint(endpoint) ? StorageService.S3 : StorageService.MINIO; return { source, bucket, key }; } @@ -133,7 +135,7 @@ const MinioArtifactPreview: React.FC<MinioArtifactPreviewProps> = ({ // TODO need to come to an agreement how to encode artifact info inside a url // namespace is currently not supported - const linkText = Apis.buildArtifactUrl(storagePath); + const linkText = Apis.buildArtifactLinkText(storagePath); const artifactDownloadUrl = Apis.buildReadFileUrl({ path: storagePath, namespace, diff --git a/frontend/src/components/NewRunParameters.test.tsx b/frontend/src/components/NewRunParameters.test.tsx index 0111bcdeae..4f1c6481c5 100644 --- a/frontend/src/components/NewRunParameters.test.tsx +++ b/frontend/src/components/NewRunParameters.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/NewRunParameters.tsx b/frontend/src/components/NewRunParameters.tsx index f25b2df546..c66eb4f823 100644 --- a/frontend/src/components/NewRunParameters.tsx +++ b/frontend/src/components/NewRunParameters.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/PlotCard.test.tsx b/frontend/src/components/PlotCard.test.tsx index 9ec5dbb687..527e654a0f 100644 --- a/frontend/src/components/PlotCard.test.tsx +++ b/frontend/src/components/PlotCard.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/PlotCard.tsx b/frontend/src/components/PlotCard.tsx index e1d53ca114..e9e1b09abb 100644 --- a/frontend/src/components/PlotCard.tsx +++ b/frontend/src/components/PlotCard.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -62,7 +62,7 @@ const css = stylesheet({ margin: 20, minWidth: 250, padding: 20, - width: 'min-content', + width: 'auto', }, plotHeader: { display: 'flex', @@ -83,7 +83,7 @@ const css = stylesheet({ export interface PlotCardProps { title: string; configs: ViewerConfig[]; - maxDimension: number; + maxDimension?: number; } interface PlotCardState { diff --git a/frontend/src/components/PodYaml.test.tsx b/frontend/src/components/PodYaml.test.tsx index 2c3b483207..fc209b8ba1 100644 --- a/frontend/src/components/PodYaml.test.tsx +++ b/frontend/src/components/PodYaml.test.tsx @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/PodYaml.tsx b/frontend/src/components/PodYaml.tsx index 400969f789..91845e9c1d 100644 --- a/frontend/src/components/PodYaml.tsx +++ b/frontend/src/components/PodYaml.tsx @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/ResourceInfo.test.tsx b/frontend/src/components/ResourceInfo.test.tsx new file mode 100644 index 0000000000..6ea3d1d3ff --- /dev/null +++ b/frontend/src/components/ResourceInfo.test.tsx @@ -0,0 +1,106 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as React from 'react'; +import { ResourceInfo, ResourceType } from './ResourceInfo'; +import { getByTestId, render, screen } from '@testing-library/react'; +import { Artifact, Value } from 'src/third_party/mlmd'; +import { Struct } from 'google-protobuf/google/protobuf/struct_pb'; + +describe('ResourceInfo', () => { + it('renders metrics artifact', async () => { + const metrics = new Artifact(); + metrics.setState(Artifact.State.LIVE); + metrics.getCustomPropertiesMap().set('name', new Value().setStringValue('metrics')); + metrics.getCustomPropertiesMap().set( + 'confidenceMetrics', + new Value().setStructValue( + Struct.fromJavaScript({ + list: [ + { + confidenceThreshold: 2, + falsePositiveRate: 0, + recall: 0, + }, + { + confidenceThreshold: 1, + falsePositiveRate: 0, + recall: 0.33962264150943394, + }, + { + confidenceThreshold: 0.9, + falsePositiveRate: 0, + recall: 0.6037735849056604, + }, + ], + }), + ), + ); + render( + <ResourceInfo + resourceType={ResourceType.ARTIFACT} + resource={metrics} + typeName='System.ClassificationMetrics' + />, + ); + expect(screen.getByRole('heading', { level: 1 }).textContent).toEqual( + 'System.ClassificationMetrics (Live)', + ); + expect(screen.getAllByRole('heading', { level: 2 }).map(h => h.textContent)) + .toMatchInlineSnapshot(` + Array [ + "Properties", + "Custom Properties", + ] + `); + const keyEquals = (key: string) => (property: HTMLElement) => { + return getByTestId(property, 'resource-info-property-key').textContent === key; + }; + function value(property: HTMLElement): HTMLElement { + return getByTestId(property, 'resource-info-property-value'); + } + const nameProperty = screen.getAllByTestId('resource-info-property').find(keyEquals('name')); + expect(nameProperty).toBeTruthy(); + expect(value(nameProperty!).textContent).toEqual('metrics'); + + const confidenceMetricsProperty = screen + .getAllByTestId('resource-info-property') + .find(keyEquals('confidenceMetrics')); + expect(value(confidenceMetricsProperty!).children).toMatchInlineSnapshot(` + HTMLCollection [ + <pre> + [ + { + "confidenceThreshold": 2, + "falsePositiveRate": 0, + "recall": 0 + }, + { + "confidenceThreshold": 1, + "falsePositiveRate": 0, + "recall": 0.33962264150943394 + }, + { + "confidenceThreshold": 0.9, + "falsePositiveRate": 0, + "recall": 0.6037735849056604 + } + ] + </pre>, + ] + `); + }); +}); diff --git a/frontend/src/components/ResourceInfo.tsx b/frontend/src/components/ResourceInfo.tsx index 6243747058..370a77289b 100644 --- a/frontend/src/components/ResourceInfo.tsx +++ b/frontend/src/components/ResourceInfo.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,8 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Artifact, Execution, getMetadataValue } from '@kubeflow/frontend'; +import { Struct } from 'google-protobuf/google/protobuf/struct_pb'; import * as React from 'react'; +import { getMetadataValue } from 'src/mlmd/library'; +import { Artifact, Execution } from 'src/third_party/mlmd'; import { stylesheet } from 'typestyle'; import { color, commonCss } from '../Css'; import { ArtifactLink } from './ArtifactLink'; @@ -23,6 +25,7 @@ export const css = stylesheet({ field: { flexBasis: '300px', marginBottom: '32px', + padding: '4px', }, resourceInfo: { display: 'flex', @@ -67,9 +70,15 @@ export class ResourceInfo extends React.Component<ResourceInfoProps, {}> { const { resource } = this.props; const propertyMap = resource.getPropertiesMap(); const customPropertyMap = resource.getCustomPropertiesMap(); + let resourceTitle = this.props.typeName; + const stateText = getResourceStateText(this.props); + if (stateText) { + resourceTitle = `${resourceTitle} (${stateText})`; + } + return ( <section> - <h1 className={commonCss.header}>Type: {this.props.typeName}</h1> + <h1 className={commonCss.header}>{resourceTitle}</h1> {(() => { if (this.props.resourceType === ResourceType.ARTIFACT) { return ( @@ -90,10 +99,12 @@ export class ResourceInfo extends React.Component<ResourceInfoProps, {}> { // TODO: __ALL_META__ is something of a hack, is redundant, and can be ignored .filter(k => k[0] !== '__ALL_META__') .map(k => ( - <div className={css.field} key={k[0]}> - <dt className={css.term}>{k[0]}</dt> - <dd className={css.value}> - {propertyMap && prettyPrintJsonValue(getMetadataValue(propertyMap.get(k[0])))} + <div className={css.field} key={k[0]} data-testid='resource-info-property'> + <dt className={css.term} data-testid='resource-info-property-key'> + {k[0]} + </dt> + <dd className={css.value} data-testid='resource-info-property-value'> + {propertyMap && prettyPrintValue(getMetadataValue(propertyMap.get(k[0])))} </dd> </div> ))} @@ -101,11 +112,13 @@ export class ResourceInfo extends React.Component<ResourceInfoProps, {}> { <h2 className={commonCss.header2}>Custom Properties</h2> <dl className={css.resourceInfo}> {customPropertyMap.getEntryList().map(k => ( - <div className={css.field} key={k[0]}> - <dt className={css.term}>{k[0]}</dt> - <dd className={css.value}> + <div className={css.field} key={k[0]} data-testid='resource-info-property'> + <dt className={css.term} data-testid='resource-info-property-key'> + {k[0]} + </dt> + <dd className={css.value} data-testid='resource-info-property-value'> {customPropertyMap && - prettyPrintJsonValue(getMetadataValue(customPropertyMap.get(k[0])))} + prettyPrintValue(getMetadataValue(customPropertyMap.get(k[0])))} </dd> </div> ))} @@ -115,11 +128,27 @@ export class ResourceInfo extends React.Component<ResourceInfoProps, {}> { } } -function prettyPrintJsonValue(value: string | number): JSX.Element | number | string { +function prettyPrintValue( + value: string | number | Struct | undefined, +): JSX.Element | number | string { + if (value == null) { + return ''; + } + if (typeof value === 'string') { + return prettyPrintJsonValue(value); + } if (typeof value === 'number') { return value; } + // value is Struct + const jsObject = value.toJavaScript(); + // When Struct is converted to js object, it may contain a top level "struct" + // or "list" key depending on its type, but the key is meaningless and we can + // omit it in visualization. + return <pre>{JSON.stringify(jsObject?.struct || jsObject?.list || jsObject, null, 2)}</pre>; +} +function prettyPrintJsonValue(value: string): JSX.Element | string { try { const jsonValue = JSON.parse(value); return <pre>{JSON.stringify(jsonValue, null, 2)}</pre>; @@ -128,3 +157,46 @@ function prettyPrintJsonValue(value: string | number): JSX.Element | number | st return value; } } + +// Get text representation of resource state. +// Works for both artifact and execution. +function getResourceStateText(props: ResourceInfoProps): string | undefined { + if (props.resourceType === ResourceType.ARTIFACT) { + const state = props.resource.getState(); + switch (state) { + case Artifact.State.UNKNOWN: + return undefined; // when state is not set, it defaults to UNKNOWN + case Artifact.State.PENDING: + return 'Pending'; + case Artifact.State.LIVE: + return 'Live'; + case Artifact.State.MARKED_FOR_DELETION: + return 'Marked for deletion'; + case Artifact.State.DELETED: + return 'Deleted'; + default: + throw new Error(`Impossible artifact state value: ${state}`); + } + } else { + // type == EXECUTION + const state = props.resource.getLastKnownState(); + switch (state) { + case Execution.State.UNKNOWN: + return undefined; + case Execution.State.NEW: + return 'New'; + case Execution.State.RUNNING: + return 'Running'; + case Execution.State.COMPLETE: + return 'Complete'; + case Execution.State.CANCELED: + return 'Canceled'; + case Execution.State.FAILED: + return 'Failed'; + case Execution.State.CACHED: + return 'Cached'; + default: + throw new Error(`Impossible execution state value: ${state}`); + } + } +} diff --git a/frontend/src/components/Router.test.tsx b/frontend/src/components/Router.test.tsx index 18b4c55202..ea1c5d3c40 100644 --- a/frontend/src/components/Router.test.tsx +++ b/frontend/src/components/Router.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/Router.tsx b/frontend/src/components/Router.tsx index 8319c12644..a65dde030f 100644 --- a/frontend/src/components/Router.tsx +++ b/frontend/src/components/Router.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -48,6 +48,7 @@ import { commonCss } from '../Css'; import NewPipelineVersion from '../pages/NewPipelineVersion'; import { GettingStarted } from '../pages/GettingStarted'; import { KFP_FLAGS, Deployments } from '../lib/Flags'; +import FrontendFeatures from 'src/pages/FrontendFeatures'; export type RouteConfig = { path: string; @@ -82,6 +83,7 @@ export enum RouteParams { runId = 'rid', // TODO: create one of these for artifact and execution? ID = 'id', + executionId = 'executionid', } // tslint:disable-next-line:variable-name @@ -110,9 +112,11 @@ export const RoutePage = { PIPELINE_DETAILS_NO_VERSION: `/pipelines/details/:${RouteParams.pipelineId}?`, // pipelineId is optional RUNS: '/runs', RUN_DETAILS: `/runs/details/:${RouteParams.runId}`, + RUN_DETAILS_WITH_EXECUTION: `/runs/details/:${RouteParams.runId}/execution/:${RouteParams.executionId}`, RECURRING_RUNS: '/recurringruns', RECURRING_RUN_DETAILS: `/recurringrun/details/:${RouteParams.runId}`, START: '/start', + FRONTEND_FEATURES: '/frontend_features', }; export const RoutePageFactory = { @@ -190,7 +194,9 @@ const Router: React.FC<RouterProps> = ({ configs }) => { { path: RoutePage.RECURRING_RUNS, Component: AllRecurringRunsList }, { path: RoutePage.RECURRING_RUN_DETAILS, Component: RecurringRunDetails }, { path: RoutePage.RUN_DETAILS, Component: RunDetails }, + { path: RoutePage.RUN_DETAILS_WITH_EXECUTION, Component: RunDetails }, { path: RoutePage.COMPARE, Component: Compare }, + { path: RoutePage.FRONTEND_FEATURES, Component: FrontendFeatures }, ]; return ( @@ -366,8 +372,8 @@ class RoutedPage extends React.Component<{ route?: RouteConfig }, RouteComponent export default Router; const SideNavLayout: React.FC<{}> = ({ children }) => ( - <div className={commonCss.page}> - <div className={commonCss.flexGrow}> + <div className={classes(commonCss.page)}> + <div className={classes(commonCss.flexGrow)}> <Route render={({ ...props }) => <SideNav page={props.location.pathname} {...props} />} /> {children} </div> diff --git a/frontend/src/components/SideNav.test.tsx b/frontend/src/components/SideNav.test.tsx index 57a5bf75a7..e8a600bb2a 100644 --- a/frontend/src/components/SideNav.test.tsx +++ b/frontend/src/components/SideNav.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -167,14 +167,18 @@ describe('SideNav', () => { <WithStyles(Button) className="button" > - <PipelinesIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#9aa0a6" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -198,14 +202,18 @@ describe('SideNav', () => { <WithStyles(Button) className="button" > - <ExperimentsIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#9aa0a6" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -229,12 +237,16 @@ describe('SideNav', () => { <WithStyles(Button) className="button" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -258,12 +270,16 @@ describe('SideNav', () => { <WithStyles(Button) className="button active" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -287,12 +303,16 @@ describe('SideNav', () => { <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -316,12 +336,16 @@ describe('SideNav', () => { <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -410,14 +434,18 @@ describe('SideNav', () => { <WithStyles(Button) className="button" > - <PipelinesIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#9aa0a6" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -441,14 +469,18 @@ describe('SideNav', () => { <WithStyles(Button) className="button" > - <ExperimentsIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#9aa0a6" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -472,12 +504,16 @@ describe('SideNav', () => { <WithStyles(Button) className="button" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -501,12 +537,16 @@ describe('SideNav', () => { <WithStyles(Button) className="button active" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -530,12 +570,16 @@ describe('SideNav', () => { <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -559,12 +603,16 @@ describe('SideNav', () => { <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> diff --git a/frontend/src/components/SideNav.tsx b/frontend/src/components/SideNav.tsx index 264fb205ed..70726e2e70 100644 --- a/frontend/src/components/SideNav.tsx +++ b/frontend/src/components/SideNav.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -40,6 +40,10 @@ import { logger } from '../lib/Utils'; import { GkeMetadataContext, GkeMetadata } from 'src/lib/GkeMetadata'; import { Alarm } from '@material-ui/icons'; +export const tailwindcss = { + sideNavItem: 'flex flex-row flex-shrink-0', +}; + export const sideNavColors = { bg: '#f8fafb', fgActive: '#0d6de7', @@ -296,10 +300,12 @@ export class SideNav extends React.Component<SideNavInternalProps, SideNavState> collapsed && css.collapsedButton, )} > - <DescriptionIcon style={{ width: 20, height: 20 }} /> - <span className={classes(collapsed && css.collapsedLabel, css.label)}> - Getting Started - </span> + <div className={tailwindcss.sideNavItem}> + <DescriptionIcon style={{ width: 20, height: 20 }} /> + <span className={classes(collapsed && css.collapsedLabel, css.label)}> + Getting Started + </span> + </div> </Button> </Link> </Tooltip> @@ -327,14 +333,16 @@ export class SideNav extends React.Component<SideNavInternalProps, SideNavState> collapsed && css.collapsedButton, )} > - <PipelinesIcon - color={ - page.startsWith(RoutePage.PIPELINES) ? iconColor.active : iconColor.inactive - } - /> - <span className={classes(collapsed && css.collapsedLabel, css.label)}> - Pipelines - </span> + <div className={tailwindcss.sideNavItem}> + <PipelinesIcon + color={ + page.startsWith(RoutePage.PIPELINES) ? iconColor.active : iconColor.inactive + } + /> + <span className={classes(collapsed && css.collapsedLabel, css.label)}> + Pipelines + </span> + </div> </Button> </Link> </Tooltip> @@ -360,14 +368,16 @@ export class SideNav extends React.Component<SideNavInternalProps, SideNavState> collapsed && css.collapsedButton, )} > - <ExperimentsIcon - color={ - this._highlightExperimentsButton(page) ? iconColor.active : iconColor.inactive - } - /> - <span className={classes(collapsed && css.collapsedLabel, css.label)}> - Experiments - </span> + <div className={tailwindcss.sideNavItem}> + <ExperimentsIcon + color={ + this._highlightExperimentsButton(page) ? iconColor.active : iconColor.inactive + } + /> + <span className={classes(collapsed && css.collapsedLabel, css.label)}> + Experiments + </span> + </div> </Button> </Link> </Tooltip> @@ -393,8 +403,10 @@ export class SideNav extends React.Component<SideNavInternalProps, SideNavState> collapsed && css.collapsedButton, )} > - <DirectionsRun /> - <span className={classes(collapsed && css.collapsedLabel, css.label)}>Runs</span> + <div className={tailwindcss.sideNavItem}> + <DirectionsRun /> + <span className={classes(collapsed && css.collapsedLabel, css.label)}>Runs</span> + </div> </Button> </Link> </Tooltip> @@ -424,10 +436,12 @@ export class SideNav extends React.Component<SideNavInternalProps, SideNavState> collapsed && css.collapsedButton, )} > - <Alarm /> - <span className={classes(collapsed && css.collapsedLabel, css.label)}> - Recurring Runs - </span> + <div className={tailwindcss.sideNavItem}> + <Alarm /> + <span className={classes(collapsed && css.collapsedLabel, css.label)}> + Recurring Runs + </span> + </div> </Button> </Link> </Tooltip> @@ -453,10 +467,12 @@ export class SideNav extends React.Component<SideNavInternalProps, SideNavState> collapsed && css.collapsedButton, )} > - <ArtifactsIcon /> - <span className={classes(collapsed && css.collapsedLabel, css.label)}> - Artifacts - </span> + <div className={tailwindcss.sideNavItem}> + <ArtifactsIcon /> + <span className={classes(collapsed && css.collapsedLabel, css.label)}> + Artifacts + </span> + </div> </Button> </Link> </Tooltip> @@ -482,10 +498,12 @@ export class SideNav extends React.Component<SideNavInternalProps, SideNavState> collapsed && css.collapsedButton, )} > - <ExecutionsIcon /> - <span className={classes(collapsed && css.collapsedLabel, css.label)}> - Executions - </span> + <div className={tailwindcss.sideNavItem}> + <ExecutionsIcon /> + <span className={classes(collapsed && css.collapsedLabel, css.label)}> + Executions + </span> + </div> </Button> </Link> </Tooltip> @@ -506,11 +524,13 @@ export class SideNav extends React.Component<SideNavInternalProps, SideNavState> rel='noopener' > <Button className={classes(css.button, collapsed && css.collapsedButton)}> - <JupyterhubIcon style={{ height: 20, width: 20 }} /> - <span className={classes(collapsed && css.collapsedLabel, css.label)}> - Notebooks - </span> - <OpenInNewIcon className={css.openInNewTabIcon} /> + <div className={tailwindcss.sideNavItem}> + <JupyterhubIcon style={{ height: 20, width: 20 }} /> + <span className={classes(collapsed && css.collapsedLabel, css.label)}> + Notebooks + </span> + <OpenInNewIcon className={css.openInNewTabIcon} /> + </div> </Button> </a> </Tooltip> @@ -667,9 +687,11 @@ const ExternalUri: React.FC<ExternalUriProps> = ({ title, to, collapsed, icon }) > <a href={to} className={commonCss.unstyled} target='_blank' rel='noopener noreferrer'> <Button className={classes(css.button, collapsed && css.collapsedButton)}> - {icon(css.icon)} - <span className={classes(collapsed && css.collapsedLabel, css.label)}>{title}</span> - <OpenInNewIcon className={css.openInNewTabIcon} /> + <div className={tailwindcss.sideNavItem}> + {icon(css.icon)} + <span className={classes(collapsed && css.collapsedLabel, css.label)}>{title}</span> + <OpenInNewIcon className={css.openInNewTabIcon} /> + </div> </Button> </a> </Tooltip> diff --git a/frontend/src/components/SidePanel.tsx b/frontend/src/components/SidePanel.tsx index a33be7dde5..8d308a7dd6 100644 --- a/frontend/src/components/SidePanel.tsx +++ b/frontend/src/components/SidePanel.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -79,7 +79,7 @@ class SidePanel extends React.Component<SidePanelProps> { {isOpen && ( <div className={commonCss.page}> <div className={commonCss.flex}> - <Button className={css.closeButton} onClick={onClose}> + <Button aria-label='close' className={css.closeButton} onClick={onClose}> <CloseIcon /> </Button> <div className={css.nodeName}>{title}</div> diff --git a/frontend/src/components/StaticNodeDetails.tsx b/frontend/src/components/StaticNodeDetails.tsx index 3b3bb81057..850e10f246 100644 --- a/frontend/src/components/StaticNodeDetails.tsx +++ b/frontend/src/components/StaticNodeDetails.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018-2019 Google LLC + * Copyright 2018-2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/Toolbar.test.tsx b/frontend/src/components/Toolbar.test.tsx index a032a28f10..6abc19e72f 100644 --- a/frontend/src/components/Toolbar.test.tsx +++ b/frontend/src/components/Toolbar.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/Toolbar.tsx b/frontend/src/components/Toolbar.tsx index ccfcdc16d1..e131ae3e0d 100644 --- a/frontend/src/components/Toolbar.tsx +++ b/frontend/src/components/Toolbar.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/Trigger.test.tsx b/frontend/src/components/Trigger.test.tsx index 4edeb91887..9a6c361d1c 100644 --- a/frontend/src/components/Trigger.test.tsx +++ b/frontend/src/components/Trigger.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,10 +25,10 @@ const PARAMS_DEFAULT = { }; const PERIODIC_DEFAULT = { end_time: undefined, - interval_second: '60', + interval_second: (60 * 60).toString(), start_time: undefined, }; -const CRON_DEFAULT = { cron: '0 * * * * ?', end_time: undefined, start_time: undefined }; +const CRON_DEFAULT = { cron: '0 0 * * * ?', end_time: undefined, start_time: undefined }; beforeAll(() => { process.env.TZ = 'UTC'; @@ -98,7 +98,7 @@ describe('Trigger', () => { }); describe('interval trigger', () => { - it('builds an every-minute trigger by default', () => { + it('builds an every-hour trigger by default', () => { const spy = jest.fn(); const tree = shallow(<Trigger onChange={spy} />); (tree.instance() as Trigger).handleChange('type')({ @@ -438,7 +438,7 @@ describe('Trigger', () => { }); describe('cron', () => { - it('builds a 1-minute cron trigger by default', () => { + it('builds a 1-hour cron trigger by default', () => { const spy = jest.fn(); const tree = shallow(<Trigger onChange={spy} />); (tree.instance() as Trigger).handleChange('type')({ target: { value: TriggerType.CRON } }); @@ -450,7 +450,7 @@ describe('Trigger', () => { }); }); - it('builds a 1-minute cron trigger with specified start date', () => { + it('builds a 1-hour cron trigger with specified start date', () => { const spy = jest.fn(); const tree = shallow(<Trigger onChange={spy} />); (tree.instance() as Trigger).handleChange('type')({ target: { value: TriggerType.CRON } }); @@ -461,7 +461,11 @@ describe('Trigger', () => { expect(spy).toHaveBeenLastCalledWith({ ...PARAMS_DEFAULT, trigger: { - cron_schedule: { ...CRON_DEFAULT, start_time: new Date('2018-03-23T07:53:00.000Z') }, + cron_schedule: { + ...CRON_DEFAULT, + start_time: new Date('2018-03-23T07:53:00.000Z'), + cron: '0 53 * * * ?', + }, }, }); }); diff --git a/frontend/src/components/Trigger.tsx b/frontend/src/components/Trigger.tsx index 1b2b33f951..c6ae2502d3 100644 --- a/frontend/src/components/Trigger.tsx +++ b/frontend/src/components/Trigger.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ import * as React from 'react'; import { stylesheet } from 'typestyle'; import { ApiTrigger } from '../apis/job'; import { HelpButton } from '../atoms/HelpButton'; +import { ExternalLink } from '../atoms/ExternalLink'; import Input from '../atoms/Input'; import Separator from '../atoms/Separator'; import { color, commonCss } from '../Css'; @@ -122,7 +123,7 @@ export default class Trigger extends React.Component<TriggerProps, TriggerState> editCron: parsedTrigger.type === TriggerType.CRON, cron: parsedTrigger.cron || '', // interval state - intervalCategory: parsedTrigger.intervalCategory ?? PeriodicInterval.MINUTE, + intervalCategory: parsedTrigger.intervalCategory ?? PeriodicInterval.HOUR, intervalValue: parsedTrigger.intervalValue ?? 1, startTimeMessage: '', endTimeMessage: '', @@ -372,10 +373,10 @@ export default class Trigger extends React.Component<TriggerProps, TriggerState> } label={ <span> - Allow editing cron expression. ( format is specified{' '} - <a href='https://pkg.go.dev/github.com/robfig/cron#hdr-CRON_Expression_Format'> + Allow editing cron expression. (format is specified{' '} + <ExternalLink href='https://pkg.go.dev/github.com/robfig/cron#hdr-CRON_Expression_Format'> here - </a> + </ExternalLink> ) </span> } diff --git a/frontend/src/components/UploadPipelineDialog.test.tsx b/frontend/src/components/UploadPipelineDialog.test.tsx index ea7a98077d..8e0ec79864 100644 --- a/frontend/src/components/UploadPipelineDialog.test.tsx +++ b/frontend/src/components/UploadPipelineDialog.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/UploadPipelineDialog.tsx b/frontend/src/components/UploadPipelineDialog.tsx index 9fc2068163..fbc3baf69c 100644 --- a/frontend/src/components/UploadPipelineDialog.tsx +++ b/frontend/src/components/UploadPipelineDialog.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -281,10 +281,10 @@ class UploadPipelineDialog extends React.Component< export default UploadPipelineDialog; -const DocumentationCompilePipeline: React.FC = () => ( +export const DocumentationCompilePipeline: React.FC = () => ( <div className={padding(10, 'b')}> For expected file format, refer to{' '} - <ExternalLink href='https://www.kubeflow.org/docs/pipelines/sdk/build-component/#compile-the-pipeline'> + <ExternalLink href='https://www.kubeflow.org/docs/components/pipelines/sdk/v2/build-pipeline/#compile-and-run-your-pipeline'> Compile Pipeline Documentation </ExternalLink> . diff --git a/frontend/src/components/__snapshots__/CustomTable.test.tsx.snap b/frontend/src/components/__snapshots__/CustomTable.test.tsx.snap index 06531f9385..ac101bc105 100644 --- a/frontend/src/components/__snapshots__/CustomTable.test.tsx.snap +++ b/frontend/src/components/__snapshots__/CustomTable.test.tsx.snap @@ -19,7 +19,7 @@ exports[`CustomTable renders a collapsed row 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -30,7 +30,7 @@ exports[`CustomTable renders a collapsed row 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -254,7 +254,7 @@ exports[`CustomTable renders a collapsed row when selection is disabled 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -265,7 +265,7 @@ exports[`CustomTable renders a collapsed row when selection is disabled 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -479,7 +479,7 @@ exports[`CustomTable renders a table with sorting disabled 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -490,7 +490,7 @@ exports[`CustomTable renders a table with sorting disabled 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -724,7 +724,7 @@ exports[`CustomTable renders an expanded row 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -735,7 +735,7 @@ exports[`CustomTable renders an expanded row 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -948,7 +948,7 @@ exports[`CustomTable renders an expanded row with expanded component below it 1` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -959,7 +959,7 @@ exports[`CustomTable renders an expanded row with expanded component below it 1` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -1188,7 +1188,7 @@ exports[`CustomTable renders columns with specified widths 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -1199,7 +1199,7 @@ exports[`CustomTable renders columns with specified widths 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -1366,7 +1366,7 @@ exports[`CustomTable renders empty message on no rows 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -1377,7 +1377,7 @@ exports[`CustomTable renders empty message on no rows 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -1504,7 +1504,7 @@ exports[`CustomTable renders new rows after clicking next page, and enables prev "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -1515,7 +1515,7 @@ exports[`CustomTable renders new rows after clicking next page, and enables prev } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -1727,7 +1727,7 @@ exports[`CustomTable renders new rows after clicking previous page, and enables "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -1738,7 +1738,7 @@ exports[`CustomTable renders new rows after clicking previous page, and enables } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -1994,7 +1994,7 @@ exports[`CustomTable renders some columns with descending sort order on first co "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -2005,7 +2005,7 @@ exports[`CustomTable renders some columns with descending sort order on first co } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -2173,7 +2173,7 @@ exports[`CustomTable renders some columns with equal widths without rows 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -2184,7 +2184,7 @@ exports[`CustomTable renders some columns with equal widths without rows 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -2351,7 +2351,7 @@ exports[`CustomTable renders some rows 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -2362,7 +2362,7 @@ exports[`CustomTable renders some rows 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -2618,7 +2618,7 @@ exports[`CustomTable renders with default filter label 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -2629,7 +2629,7 @@ exports[`CustomTable renders with default filter label 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -2750,7 +2750,7 @@ exports[`CustomTable renders with provided filter label 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -2761,7 +2761,7 @@ exports[`CustomTable renders with provided filter label 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -2975,7 +2975,7 @@ exports[`CustomTable renders without rows or columns 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -2986,7 +2986,7 @@ exports[`CustomTable renders without rows or columns 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -3107,7 +3107,7 @@ exports[`CustomTable renders without the checkboxes if disableSelection is true "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -3118,7 +3118,7 @@ exports[`CustomTable renders without the checkboxes if disableSelection is true } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -3348,7 +3348,7 @@ exports[`CustomTable updates the filter string in state when the filter box inpu "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -3359,7 +3359,7 @@ exports[`CustomTable updates the filter string in state when the filter box inpu } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" diff --git a/frontend/src/components/__snapshots__/ExperimentList.test.tsx.snap b/frontend/src/components/__snapshots__/ExperimentList.test.tsx.snap index 36096dff7b..a24a011817 100644 --- a/frontend/src/components/__snapshots__/ExperimentList.test.tsx.snap +++ b/frontend/src/components/__snapshots__/ExperimentList.test.tsx.snap @@ -172,7 +172,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -183,7 +183,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -209,7 +209,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -220,7 +220,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -437,7 +437,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` labelWidth={0} onChange={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -448,7 +448,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } value="" > @@ -474,7 +474,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` labelWidth={0} onChange={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -485,7 +485,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } value="" > @@ -514,7 +514,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` onChange={[Function]} renderPrefix={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -525,7 +525,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } type="text" value="" @@ -559,7 +559,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` onChange={[Function]} renderPrefix={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -570,7 +570,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } type="text" value="" @@ -620,7 +620,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` onChange={[Function]} renderPrefix={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -631,7 +631,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } type="text" value="" @@ -853,7 +853,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -1046,34 +1046,56 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` </fieldset> </NotchedOutline> </WithStyles(NotchedOutline)> - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > - <InputAdornment + <WithFormControlContext(InputAdornment) classes={ Object { + "disablePointerEvents": "MuiInputAdornment-disablePointerEvents-59", "filled": "MuiInputAdornment-filled-56", "positionEnd": "MuiInputAdornment-positionEnd-58", "positionStart": "MuiInputAdornment-positionStart-57", "root": "MuiInputAdornment-root-55", } } - component="div" - disableTypography={false} position="end" > - <div - className="MuiInputAdornment-root-55 MuiInputAdornment-positionEnd-58" - > - <pure(FilterListIcon) - style={ - Object { - "color": "#80868b", - "paddingRight": 16, - } + <InputAdornment + classes={ + Object { + "disablePointerEvents": "MuiInputAdornment-disablePointerEvents-59", + "filled": "MuiInputAdornment-filled-56", + "positionEnd": "MuiInputAdornment-positionEnd-58", + "positionStart": "MuiInputAdornment-positionStart-57", + "root": "MuiInputAdornment-root-55", + } + } + component="div" + disablePointerEvents={false} + disableTypography={false} + muiFormControl={ + Object { + "adornedStart": true, + "disabled": false, + "error": false, + "filled": false, + "focused": false, + "margin": "none", + "onBlur": [Function], + "onEmpty": [Function], + "onFilled": [Function], + "onFocus": [Function], + "required": false, + "variant": "outlined", } + } + position="end" + > + <div + className="MuiInputAdornment-root-55 MuiInputAdornment-positionEnd-58" > - <FilterListIcon + <pure(FilterListIcon) style={ Object { "color": "#80868b", @@ -1081,7 +1103,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` } } > - <WithStyles(SvgIcon) + <FilterListIcon style={ Object { "color": "#80868b", @@ -1089,36 +1111,31 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` } } > - <SvgIcon - classes={ - Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", - } - } - color="inherit" - component="svg" - fontSize="default" + <WithStyles(SvgIcon) style={ Object { "color": "#80868b", "paddingRight": 16, } } - viewBox="0 0 24 24" > - <svg - aria-hidden="true" - className="MuiSvgIcon-root-59" - focusable="false" - role="presentation" + <SvgIcon + classes={ + Object { + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", + } + } + color="inherit" + component="svg" + fontSize="default" style={ Object { "color": "#80868b", @@ -1127,21 +1144,35 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` } viewBox="0 0 24 24" > - <path - d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z" - /> - <path - d="M0 0h24v24H0z" - fill="none" - /> - </svg> - </SvgIcon> - </WithStyles(SvgIcon)> - </FilterListIcon> - </pure(FilterListIcon)> - </div> - </InputAdornment> - </WithStyles(InputAdornment)> + <svg + aria-hidden="true" + className="MuiSvgIcon-root-60" + focusable="false" + role="presentation" + style={ + Object { + "color": "#80868b", + "paddingRight": 16, + } + } + viewBox="0 0 24 24" + > + <path + d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z" + /> + <path + d="M0 0h24v24H0z" + fill="none" + /> + </svg> + </SvgIcon> + </WithStyles(SvgIcon)> + </FilterListIcon> + </pure(FilterListIcon)> + </div> + </InputAdornment> + </WithFormControlContext(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> <input aria-invalid={false} className="MuiInputBase-input-46 MuiOutlinedInput-input-31 MuiInputBase-inputAdornedStart-51 MuiOutlinedInput-inputAdornedStart-34" @@ -1205,14 +1236,14 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` TransitionComponent={[Function]} classes={ Object { - "popper": "MuiTooltip-popper-68", - "popperInteractive": "MuiTooltip-popperInteractive-69", - "tooltip": "MuiTooltip-tooltip-70", - "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-75", - "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-72", - "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-73", - "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-74", - "touch": "MuiTooltip-touch-71", + "popper": "MuiTooltip-popper-69", + "popperInteractive": "MuiTooltip-popperInteractive-70", + "tooltip": "MuiTooltip-tooltip-71", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-76", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-73", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-74", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-75", + "touch": "MuiTooltip-touch-72", } } disableFocusListener={false} @@ -1422,7 +1453,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -1612,11 +1643,11 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` className="ellipsis" classes={ Object { - "active": "MuiTableSortLabel-active-77", - "icon": "MuiTableSortLabel-icon-78", - "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-80", - "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-79", - "root": "MuiTableSortLabel-root-76", + "active": "MuiTableSortLabel-active-78", + "icon": "MuiTableSortLabel-icon-79", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-81", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-80", + "root": "MuiTableSortLabel-root-77", } } direction="desc" @@ -1632,7 +1663,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` > <WithStyles(ButtonBase) aria-describedby={null} - className="MuiTableSortLabel-root-76 ellipsis" + className="MuiTableSortLabel-root-77 ellipsis" component="span" disableRipple={true} onBlur={[Function]} @@ -1647,12 +1678,12 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <ButtonBase aria-describedby={null} centerRipple={false} - className="MuiTableSortLabel-root-76 ellipsis" + className="MuiTableSortLabel-root-77 ellipsis" classes={ Object { - "disabled": "MuiButtonBase-disabled-82", - "focusVisible": "MuiButtonBase-focusVisible-83", - "root": "MuiButtonBase-root-81", + "disabled": "MuiButtonBase-disabled-83", + "focusVisible": "MuiButtonBase-focusVisible-84", + "root": "MuiButtonBase-root-82", } } component="span" @@ -1672,7 +1703,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` > <span aria-describedby={null} - className="MuiButtonBase-root-81 MuiTableSortLabel-root-76 ellipsis" + className="MuiButtonBase-root-82 MuiTableSortLabel-root-77 ellipsis" onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} @@ -1692,27 +1723,27 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` > Experiment name <pure(ArrowDownward) - className="MuiTableSortLabel-icon-78 MuiTableSortLabel-iconDirectionDesc-79" + className="MuiTableSortLabel-icon-79 MuiTableSortLabel-iconDirectionDesc-80" > <ArrowDownward - className="MuiTableSortLabel-icon-78 MuiTableSortLabel-iconDirectionDesc-79" + className="MuiTableSortLabel-icon-79 MuiTableSortLabel-iconDirectionDesc-80" > <WithStyles(SvgIcon) - className="MuiTableSortLabel-icon-78 MuiTableSortLabel-iconDirectionDesc-79" + className="MuiTableSortLabel-icon-79 MuiTableSortLabel-iconDirectionDesc-80" > <SvgIcon - className="MuiTableSortLabel-icon-78 MuiTableSortLabel-iconDirectionDesc-79" + className="MuiTableSortLabel-icon-79 MuiTableSortLabel-iconDirectionDesc-80" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -1722,7 +1753,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiTableSortLabel-icon-78 MuiTableSortLabel-iconDirectionDesc-79" + className="MuiSvgIcon-root-60 MuiTableSortLabel-icon-79 MuiTableSortLabel-iconDirectionDesc-80" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -1744,7 +1775,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <Popper anchorEl={ <span - class="MuiButtonBase-root-81 MuiTableSortLabel-root-76 ellipsis" + class="MuiButtonBase-root-82 MuiTableSortLabel-root-77 ellipsis" role="button" tabindex="0" title="Sort" @@ -1752,7 +1783,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` Experiment name <svg aria-hidden="true" - class="MuiSvgIcon-root-59 MuiTableSortLabel-icon-78 MuiTableSortLabel-iconDirectionDesc-79" + class="MuiSvgIcon-root-60 MuiTableSortLabel-icon-79 MuiTableSortLabel-iconDirectionDesc-80" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -1763,7 +1794,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` </svg> </span> } - className="MuiTooltip-popper-68" + className="MuiTooltip-popper-69" disablePortal={false} id={null} open={false} @@ -1791,14 +1822,14 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` TransitionComponent={[Function]} classes={ Object { - "popper": "MuiTooltip-popper-68", - "popperInteractive": "MuiTooltip-popperInteractive-69", - "tooltip": "MuiTooltip-tooltip-70", - "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-75", - "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-72", - "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-73", - "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-74", - "touch": "MuiTooltip-touch-71", + "popper": "MuiTooltip-popper-69", + "popperInteractive": "MuiTooltip-popperInteractive-70", + "tooltip": "MuiTooltip-tooltip-71", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-76", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-73", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-74", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-75", + "touch": "MuiTooltip-touch-72", } } disableFocusListener={false} @@ -2008,7 +2039,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -2197,11 +2228,11 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` className="ellipsis" classes={ Object { - "active": "MuiTableSortLabel-active-77", - "icon": "MuiTableSortLabel-icon-78", - "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-80", - "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-79", - "root": "MuiTableSortLabel-root-76", + "active": "MuiTableSortLabel-active-78", + "icon": "MuiTableSortLabel-icon-79", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-81", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-80", + "root": "MuiTableSortLabel-root-77", } } direction="desc" @@ -2217,7 +2248,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` > <WithStyles(ButtonBase) aria-describedby={null} - className="MuiTableSortLabel-root-76 ellipsis" + className="MuiTableSortLabel-root-77 ellipsis" component="span" disableRipple={true} onBlur={[Function]} @@ -2232,12 +2263,12 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <ButtonBase aria-describedby={null} centerRipple={false} - className="MuiTableSortLabel-root-76 ellipsis" + className="MuiTableSortLabel-root-77 ellipsis" classes={ Object { - "disabled": "MuiButtonBase-disabled-82", - "focusVisible": "MuiButtonBase-focusVisible-83", - "root": "MuiButtonBase-root-81", + "disabled": "MuiButtonBase-disabled-83", + "focusVisible": "MuiButtonBase-focusVisible-84", + "root": "MuiButtonBase-root-82", } } component="span" @@ -2257,7 +2288,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` > <span aria-describedby={null} - className="MuiButtonBase-root-81 MuiTableSortLabel-root-76 ellipsis" + className="MuiButtonBase-root-82 MuiTableSortLabel-root-77 ellipsis" onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} @@ -2277,27 +2308,27 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` > Description <pure(ArrowDownward) - className="MuiTableSortLabel-icon-78 MuiTableSortLabel-iconDirectionDesc-79" + className="MuiTableSortLabel-icon-79 MuiTableSortLabel-iconDirectionDesc-80" > <ArrowDownward - className="MuiTableSortLabel-icon-78 MuiTableSortLabel-iconDirectionDesc-79" + className="MuiTableSortLabel-icon-79 MuiTableSortLabel-iconDirectionDesc-80" > <WithStyles(SvgIcon) - className="MuiTableSortLabel-icon-78 MuiTableSortLabel-iconDirectionDesc-79" + className="MuiTableSortLabel-icon-79 MuiTableSortLabel-iconDirectionDesc-80" > <SvgIcon - className="MuiTableSortLabel-icon-78 MuiTableSortLabel-iconDirectionDesc-79" + className="MuiTableSortLabel-icon-79 MuiTableSortLabel-iconDirectionDesc-80" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -2307,7 +2338,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiTableSortLabel-icon-78 MuiTableSortLabel-iconDirectionDesc-79" + className="MuiSvgIcon-root-60 MuiTableSortLabel-icon-79 MuiTableSortLabel-iconDirectionDesc-80" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -2329,7 +2360,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <Popper anchorEl={ <span - class="MuiButtonBase-root-81 MuiTableSortLabel-root-76 ellipsis" + class="MuiButtonBase-root-82 MuiTableSortLabel-root-77 ellipsis" role="button" tabindex="0" title="Cannot sort by this column" @@ -2337,7 +2368,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` Description <svg aria-hidden="true" - class="MuiSvgIcon-root-59 MuiTableSortLabel-icon-78 MuiTableSortLabel-iconDirectionDesc-79" + class="MuiSvgIcon-root-60 MuiTableSortLabel-icon-79 MuiTableSortLabel-iconDirectionDesc-80" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -2348,7 +2379,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` </svg> </span> } - className="MuiTooltip-popper-68" + className="MuiTooltip-popper-69" disablePortal={false} id={null} open={false} @@ -2443,13 +2474,13 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <WithFormControlContext(Select) classes={ Object { - "disabled": "MuiSelect-disabled-89", - "filled": "MuiSelect-filled-86", - "icon": "MuiSelect-icon-90", - "outlined": "MuiSelect-outlined-87", - "root": "MuiSelect-root-84", - "select": "MuiSelect-select-85", - "selectMenu": "MuiSelect-selectMenu-88", + "disabled": "MuiSelect-disabled-90", + "filled": "MuiSelect-filled-87", + "icon": "MuiSelect-icon-91", + "outlined": "MuiSelect-outlined-88", + "root": "MuiSelect-root-85", + "select": "MuiSelect-select-86", + "selectMenu": "MuiSelect-selectMenu-89", } } input={ @@ -2466,13 +2497,13 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` autoWidth={false} classes={ Object { - "disabled": "MuiSelect-disabled-89", - "filled": "MuiSelect-filled-86", - "icon": "MuiSelect-icon-90", - "outlined": "MuiSelect-outlined-87", - "root": "MuiSelect-root-84", - "select": "MuiSelect-select-85", - "selectMenu": "MuiSelect-selectMenu-88", + "disabled": "MuiSelect-disabled-90", + "filled": "MuiSelect-filled-87", + "icon": "MuiSelect-icon-91", + "outlined": "MuiSelect-outlined-88", + "root": "MuiSelect-root-85", + "select": "MuiSelect-select-86", + "selectMenu": "MuiSelect-selectMenu-89", } } displayEmpty={false} @@ -2535,13 +2566,13 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-89", - "filled": "MuiSelect-filled-86", - "icon": "MuiSelect-icon-90", - "outlined": "MuiSelect-outlined-87", - "root": "MuiSelect-root-84", - "select": "MuiSelect-select-85", - "selectMenu": "MuiSelect-selectMenu-88", + "disabled": "MuiSelect-disabled-90", + "filled": "MuiSelect-filled-87", + "icon": "MuiSelect-icon-91", + "outlined": "MuiSelect-outlined-88", + "root": "MuiSelect-root-85", + "select": "MuiSelect-select-86", + "selectMenu": "MuiSelect-selectMenu-89", }, "displayEmpty": false, "multiple": false, @@ -2559,19 +2590,19 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <Input classes={ Object { - "disabled": "MuiInput-disabled-94", - "error": "MuiInput-error-96", - "focused": "MuiInput-focused-93", - "formControl": "MuiInput-formControl-92", - "fullWidth": "MuiInput-fullWidth-98", - "input": "MuiInput-input-99", - "inputMarginDense": "MuiInput-inputMarginDense-100", - "inputMultiline": "MuiInput-inputMultiline-101", - "inputType": "MuiInput-inputType-102", - "inputTypeSearch": "MuiInput-inputTypeSearch-103", - "multiline": "MuiInput-multiline-97", - "root": "MuiInput-root-91", - "underline": "MuiInput-underline-95", + "disabled": "MuiInput-disabled-95", + "error": "MuiInput-error-97", + "focused": "MuiInput-focused-94", + "formControl": "MuiInput-formControl-93", + "fullWidth": "MuiInput-fullWidth-99", + "input": "MuiInput-input-100", + "inputMarginDense": "MuiInput-inputMarginDense-101", + "inputMultiline": "MuiInput-inputMultiline-102", + "inputType": "MuiInput-inputType-103", + "inputTypeSearch": "MuiInput-inputTypeSearch-104", + "multiline": "MuiInput-multiline-98", + "root": "MuiInput-root-92", + "underline": "MuiInput-underline-96", } } disableUnderline={true} @@ -2605,13 +2636,13 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-89", - "filled": "MuiSelect-filled-86", - "icon": "MuiSelect-icon-90", - "outlined": "MuiSelect-outlined-87", - "root": "MuiSelect-root-84", - "select": "MuiSelect-select-85", - "selectMenu": "MuiSelect-selectMenu-88", + "disabled": "MuiSelect-disabled-90", + "filled": "MuiSelect-filled-87", + "icon": "MuiSelect-icon-91", + "outlined": "MuiSelect-outlined-88", + "root": "MuiSelect-root-85", + "select": "MuiSelect-select-86", + "selectMenu": "MuiSelect-selectMenu-89", }, "displayEmpty": false, "multiple": false, @@ -2629,18 +2660,18 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <WithStyles(WithFormControlContext(InputBase)) classes={ Object { - "disabled": "MuiInput-disabled-94", - "error": "MuiInput-error-96", - "focused": "MuiInput-focused-93", - "formControl": "MuiInput-formControl-92", - "fullWidth": "MuiInput-fullWidth-98", - "input": "MuiInput-input-99", - "inputMarginDense": "MuiInput-inputMarginDense-100", - "inputMultiline": "MuiInput-inputMultiline-101", - "inputType": "MuiInput-inputType-102", - "inputTypeSearch": "MuiInput-inputTypeSearch-103", - "multiline": "MuiInput-multiline-97", - "root": "MuiInput-root-91", + "disabled": "MuiInput-disabled-95", + "error": "MuiInput-error-97", + "focused": "MuiInput-focused-94", + "formControl": "MuiInput-formControl-93", + "fullWidth": "MuiInput-fullWidth-99", + "input": "MuiInput-input-100", + "inputMarginDense": "MuiInput-inputMarginDense-101", + "inputMultiline": "MuiInput-inputMultiline-102", + "inputType": "MuiInput-inputType-103", + "inputTypeSearch": "MuiInput-inputTypeSearch-104", + "multiline": "MuiInput-multiline-98", + "root": "MuiInput-root-92", "underline": null, } } @@ -2675,13 +2706,13 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-89", - "filled": "MuiSelect-filled-86", - "icon": "MuiSelect-icon-90", - "outlined": "MuiSelect-outlined-87", - "root": "MuiSelect-root-84", - "select": "MuiSelect-select-85", - "selectMenu": "MuiSelect-selectMenu-88", + "disabled": "MuiSelect-disabled-90", + "filled": "MuiSelect-filled-87", + "icon": "MuiSelect-icon-91", + "outlined": "MuiSelect-outlined-88", + "root": "MuiSelect-root-85", + "select": "MuiSelect-select-86", + "selectMenu": "MuiSelect-selectMenu-89", }, "displayEmpty": false, "multiple": false, @@ -2703,21 +2734,21 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` Object { "adornedEnd": "MuiInputBase-adornedEnd-41", "adornedStart": "MuiInputBase-adornedStart-40", - "disabled": "MuiInputBase-disabled-39 MuiInput-disabled-94", - "error": "MuiInputBase-error-42 MuiInput-error-96", - "focused": "MuiInputBase-focused-38 MuiInput-focused-93", - "formControl": "MuiInputBase-formControl-37 MuiInput-formControl-92", - "fullWidth": "MuiInputBase-fullWidth-45 MuiInput-fullWidth-98", - "input": "MuiInputBase-input-46 MuiInput-input-99", + "disabled": "MuiInputBase-disabled-39 MuiInput-disabled-95", + "error": "MuiInputBase-error-42 MuiInput-error-97", + "focused": "MuiInputBase-focused-38 MuiInput-focused-94", + "formControl": "MuiInputBase-formControl-37 MuiInput-formControl-93", + "fullWidth": "MuiInputBase-fullWidth-45 MuiInput-fullWidth-99", + "input": "MuiInputBase-input-46 MuiInput-input-100", "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-52", "inputAdornedStart": "MuiInputBase-inputAdornedStart-51", - "inputMarginDense": "MuiInputBase-inputMarginDense-47 MuiInput-inputMarginDense-100", - "inputMultiline": "MuiInputBase-inputMultiline-48 MuiInput-inputMultiline-101", - "inputType": "MuiInputBase-inputType-49 MuiInput-inputType-102", - "inputTypeSearch": "MuiInputBase-inputTypeSearch-50 MuiInput-inputTypeSearch-103", + "inputMarginDense": "MuiInputBase-inputMarginDense-47 MuiInput-inputMarginDense-101", + "inputMultiline": "MuiInputBase-inputMultiline-48 MuiInput-inputMultiline-102", + "inputType": "MuiInputBase-inputType-49 MuiInput-inputType-103", + "inputTypeSearch": "MuiInputBase-inputTypeSearch-50 MuiInput-inputTypeSearch-104", "marginDense": "MuiInputBase-marginDense-43", - "multiline": "MuiInputBase-multiline-44 MuiInput-multiline-97", - "root": "MuiInputBase-root-36 MuiInput-root-91", + "multiline": "MuiInputBase-multiline-44 MuiInput-multiline-98", + "root": "MuiInputBase-root-36 MuiInput-root-92", } } fullWidth={false} @@ -2751,13 +2782,13 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-89", - "filled": "MuiSelect-filled-86", - "icon": "MuiSelect-icon-90", - "outlined": "MuiSelect-outlined-87", - "root": "MuiSelect-root-84", - "select": "MuiSelect-select-85", - "selectMenu": "MuiSelect-selectMenu-88", + "disabled": "MuiSelect-disabled-90", + "filled": "MuiSelect-filled-87", + "icon": "MuiSelect-icon-91", + "outlined": "MuiSelect-outlined-88", + "root": "MuiSelect-root-85", + "select": "MuiSelect-select-86", + "selectMenu": "MuiSelect-selectMenu-89", }, "displayEmpty": false, "multiple": false, @@ -2779,21 +2810,21 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` Object { "adornedEnd": "MuiInputBase-adornedEnd-41", "adornedStart": "MuiInputBase-adornedStart-40", - "disabled": "MuiInputBase-disabled-39 MuiInput-disabled-94", - "error": "MuiInputBase-error-42 MuiInput-error-96", - "focused": "MuiInputBase-focused-38 MuiInput-focused-93", - "formControl": "MuiInputBase-formControl-37 MuiInput-formControl-92", - "fullWidth": "MuiInputBase-fullWidth-45 MuiInput-fullWidth-98", - "input": "MuiInputBase-input-46 MuiInput-input-99", + "disabled": "MuiInputBase-disabled-39 MuiInput-disabled-95", + "error": "MuiInputBase-error-42 MuiInput-error-97", + "focused": "MuiInputBase-focused-38 MuiInput-focused-94", + "formControl": "MuiInputBase-formControl-37 MuiInput-formControl-93", + "fullWidth": "MuiInputBase-fullWidth-45 MuiInput-fullWidth-99", + "input": "MuiInputBase-input-46 MuiInput-input-100", "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-52", "inputAdornedStart": "MuiInputBase-inputAdornedStart-51", - "inputMarginDense": "MuiInputBase-inputMarginDense-47 MuiInput-inputMarginDense-100", - "inputMultiline": "MuiInputBase-inputMultiline-48 MuiInput-inputMultiline-101", - "inputType": "MuiInputBase-inputType-49 MuiInput-inputType-102", - "inputTypeSearch": "MuiInputBase-inputTypeSearch-50 MuiInput-inputTypeSearch-103", + "inputMarginDense": "MuiInputBase-inputMarginDense-47 MuiInput-inputMarginDense-101", + "inputMultiline": "MuiInputBase-inputMultiline-48 MuiInput-inputMultiline-102", + "inputType": "MuiInputBase-inputType-49 MuiInput-inputType-103", + "inputTypeSearch": "MuiInputBase-inputTypeSearch-50 MuiInput-inputTypeSearch-104", "marginDense": "MuiInputBase-marginDense-43", - "multiline": "MuiInputBase-multiline-44 MuiInput-multiline-97", - "root": "MuiInputBase-root-36 MuiInput-root-91", + "multiline": "MuiInputBase-multiline-44 MuiInput-multiline-98", + "root": "MuiInputBase-root-36 MuiInput-root-92", } } fullWidth={false} @@ -2827,13 +2858,13 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-89", - "filled": "MuiSelect-filled-86", - "icon": "MuiSelect-icon-90", - "outlined": "MuiSelect-outlined-87", - "root": "MuiSelect-root-84", - "select": "MuiSelect-select-85", - "selectMenu": "MuiSelect-selectMenu-88", + "disabled": "MuiSelect-disabled-90", + "filled": "MuiSelect-filled-87", + "icon": "MuiSelect-icon-91", + "outlined": "MuiSelect-outlined-88", + "root": "MuiSelect-root-85", + "select": "MuiSelect-select-86", + "selectMenu": "MuiSelect-selectMenu-89", }, "displayEmpty": false, "multiple": false, @@ -2867,23 +2898,23 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` value={10} > <div - className="MuiInputBase-root-36 MuiInput-root-91 MuiInputBase-formControl-37 MuiInput-formControl-92" + className="MuiInputBase-root-36 MuiInput-root-92 MuiInputBase-formControl-37 MuiInput-formControl-93" onClick={[Function]} > <SelectInput IconComponent={[Function]} aria-invalid={false} autoWidth={false} - className="MuiInputBase-input-46 MuiInput-input-99" + className="MuiInputBase-input-46 MuiInput-input-100" classes={ Object { - "disabled": "MuiSelect-disabled-89", - "filled": "MuiSelect-filled-86", - "icon": "MuiSelect-icon-90", - "outlined": "MuiSelect-outlined-87", - "root": "MuiSelect-root-84", - "select": "MuiSelect-select-85", - "selectMenu": "MuiSelect-selectMenu-88", + "disabled": "MuiSelect-disabled-90", + "filled": "MuiSelect-filled-87", + "icon": "MuiSelect-icon-91", + "outlined": "MuiSelect-outlined-88", + "root": "MuiSelect-root-85", + "select": "MuiSelect-select-86", + "selectMenu": "MuiSelect-selectMenu-89", } } disabled={false} @@ -2898,12 +2929,12 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` variant="standard" > <div - className="MuiSelect-root-84" + className="MuiSelect-root-85" > <div aria-haspopup="true" aria-pressed="false" - className="MuiSelect-select-85 MuiSelect-selectMenu-88 MuiInputBase-input-46 MuiInput-input-99" + className="MuiSelect-select-86 MuiSelect-selectMenu-89 MuiInputBase-input-46 MuiInput-input-100" onBlur={[Function]} onClick={[Function]} onFocus={[Function]} @@ -2918,27 +2949,27 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` value={10} /> <pure(ArrowDropDown) - className="MuiSelect-icon-90" + className="MuiSelect-icon-91" > <ArrowDropDown - className="MuiSelect-icon-90" + className="MuiSelect-icon-91" > <WithStyles(SvgIcon) - className="MuiSelect-icon-90" + className="MuiSelect-icon-91" > <SvgIcon - className="MuiSelect-icon-90" + className="MuiSelect-icon-91" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -2948,7 +2979,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiSelect-icon-90" + className="MuiSvgIcon-root-60 MuiSelect-icon-91" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -2964,6 +2995,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <WithStyles(Menu) MenuListProps={ Object { + "disableListWrap": true, "role": "listbox", } } @@ -2978,7 +3010,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-85 MuiSelect-selectMenu-88 MuiInputBase-input-46 MuiInput-input-99" + class="MuiSelect-select-86 MuiSelect-selectMenu-89 MuiInputBase-input-46 MuiInput-input-100" role="button" tabindex="0" > @@ -2992,6 +3024,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <Menu MenuListProps={ Object { + "disableListWrap": true, "role": "listbox", } } @@ -3006,7 +3039,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-85 MuiSelect-selectMenu-88 MuiInputBase-input-46 MuiInput-input-99" + class="MuiSelect-select-86 MuiSelect-selectMenu-89 MuiInputBase-input-46 MuiInput-input-100" role="button" tabindex="0" > @@ -3015,7 +3048,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` } classes={ Object { - "paper": "MuiMenu-paper-104", + "paper": "MuiMenu-paper-105", } } disableAutoFocusItem={false} @@ -3220,7 +3253,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -3390,7 +3423,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` PaperProps={ Object { "classes": Object { - "root": "MuiMenu-paper-104", + "root": "MuiMenu-paper-105", }, "style": Object { "minWidth": null, @@ -3401,7 +3434,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-85 MuiSelect-selectMenu-88 MuiInputBase-input-46 MuiInput-input-99" + class="MuiSelect-select-86 MuiSelect-selectMenu-89 MuiInputBase-input-46 MuiInput-input-100" role="button" tabindex="0" > @@ -3431,7 +3464,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` PaperProps={ Object { "classes": Object { - "root": "MuiMenu-paper-104", + "root": "MuiMenu-paper-105", }, "style": Object { "minWidth": null, @@ -3443,7 +3476,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-85 MuiSelect-selectMenu-88 MuiInputBase-input-46 MuiInput-input-99" + class="MuiSelect-select-86 MuiSelect-selectMenu-89 MuiInputBase-input-46 MuiInput-input-100" role="button" tabindex="0" > @@ -3459,7 +3492,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` anchorReference="anchorEl" classes={ Object { - "paper": "MuiPopover-paper-105", + "paper": "MuiPopover-paper-106", } } elevation={8} @@ -3497,10 +3530,11 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` } classes={ Object { - "hidden": "MuiModal-hidden-107", - "root": "MuiModal-root-106", + "hidden": "MuiModal-hidden-108", + "root": "MuiModal-root-107", } } + closeAfterTransition={false} container={<body />} disableAutoFocus={false} disableBackdropClick={false} @@ -3549,12 +3583,12 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <IconButton classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-109", - "colorPrimary": "MuiIconButton-colorPrimary-110", - "colorSecondary": "MuiIconButton-colorSecondary-111", - "disabled": "MuiIconButton-disabled-112", - "label": "MuiIconButton-label-113", - "root": "MuiIconButton-root-108", + "colorInherit": "MuiIconButton-colorInherit-110", + "colorPrimary": "MuiIconButton-colorPrimary-111", + "colorSecondary": "MuiIconButton-colorSecondary-112", + "disabled": "MuiIconButton-disabled-113", + "label": "MuiIconButton-label-114", + "root": "MuiIconButton-root-109", } } color="default" @@ -3563,19 +3597,19 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-108 MuiIconButton-disabled-112" + className="MuiIconButton-root-109 MuiIconButton-disabled-113" disabled={true} focusRipple={true} onClick={[Function]} > <ButtonBase centerRipple={true} - className="MuiIconButton-root-108 MuiIconButton-disabled-112" + className="MuiIconButton-root-109 MuiIconButton-disabled-113" classes={ Object { - "disabled": "MuiButtonBase-disabled-82", - "focusVisible": "MuiButtonBase-focusVisible-83", - "root": "MuiButtonBase-root-81", + "disabled": "MuiButtonBase-disabled-83", + "focusVisible": "MuiButtonBase-focusVisible-84", + "root": "MuiButtonBase-root-82", } } component="button" @@ -3588,7 +3622,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` type="button" > <button - className="MuiButtonBase-root-81 MuiButtonBase-disabled-82 MuiIconButton-root-108 MuiIconButton-disabled-112" + className="MuiButtonBase-root-82 MuiButtonBase-disabled-83 MuiIconButton-root-109 MuiIconButton-disabled-113" disabled={true} onBlur={[Function]} onClick={[Function]} @@ -3606,7 +3640,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` type="button" > <span - className="MuiIconButton-label-113" + className="MuiIconButton-label-114" > <pure(ChevronLeftIcon)> <ChevronLeftIcon> @@ -3614,15 +3648,15 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -3632,7 +3666,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59" + className="MuiSvgIcon-root-60" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -3662,12 +3696,12 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <IconButton classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-109", - "colorPrimary": "MuiIconButton-colorPrimary-110", - "colorSecondary": "MuiIconButton-colorSecondary-111", - "disabled": "MuiIconButton-disabled-112", - "label": "MuiIconButton-label-113", - "root": "MuiIconButton-root-108", + "colorInherit": "MuiIconButton-colorInherit-110", + "colorPrimary": "MuiIconButton-colorPrimary-111", + "colorSecondary": "MuiIconButton-colorSecondary-112", + "disabled": "MuiIconButton-disabled-113", + "label": "MuiIconButton-label-114", + "root": "MuiIconButton-root-109", } } color="default" @@ -3676,19 +3710,19 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-108 MuiIconButton-disabled-112" + className="MuiIconButton-root-109 MuiIconButton-disabled-113" disabled={true} focusRipple={true} onClick={[Function]} > <ButtonBase centerRipple={true} - className="MuiIconButton-root-108 MuiIconButton-disabled-112" + className="MuiIconButton-root-109 MuiIconButton-disabled-113" classes={ Object { - "disabled": "MuiButtonBase-disabled-82", - "focusVisible": "MuiButtonBase-focusVisible-83", - "root": "MuiButtonBase-root-81", + "disabled": "MuiButtonBase-disabled-83", + "focusVisible": "MuiButtonBase-focusVisible-84", + "root": "MuiButtonBase-root-82", } } component="button" @@ -3701,7 +3735,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` type="button" > <button - className="MuiButtonBase-root-81 MuiButtonBase-disabled-82 MuiIconButton-root-108 MuiIconButton-disabled-112" + className="MuiButtonBase-root-82 MuiButtonBase-disabled-83 MuiIconButton-root-109 MuiIconButton-disabled-113" disabled={true} onBlur={[Function]} onClick={[Function]} @@ -3719,7 +3753,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` type="button" > <span - className="MuiIconButton-label-113" + className="MuiIconButton-label-114" > <pure(ChevronRightIcon)> <ChevronRightIcon> @@ -3727,15 +3761,15 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -3745,7 +3779,7 @@ exports[`ExperimentList reloads the experiment when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59" + className="MuiSvgIcon-root-60" focusable="false" role="presentation" viewBox="0 0 24 24" diff --git a/frontend/src/components/__snapshots__/Metric.test.tsx.snap b/frontend/src/components/__snapshots__/Metric.test.tsx.snap index a65a1ae34c..3f94d8a513 100644 --- a/frontend/src/components/__snapshots__/Metric.test.tsx.snap +++ b/frontend/src/components/__snapshots__/Metric.test.tsx.snap @@ -6,6 +6,7 @@ exports[`Metric renders a metric and does not log an error when metric is betwee > <div className="metricFill" + data-testid="metric" style={ Object { "width": "calc(54%)", @@ -59,6 +60,7 @@ exports[`Metric renders a metric when metric has value and percentage format 1`] > <div className="metricFill" + data-testid="metric" style={ Object { "width": "calc(54.000%)", diff --git a/frontend/src/components/__snapshots__/Router.test.tsx.snap b/frontend/src/components/__snapshots__/Router.test.tsx.snap index e9091ff441..1e28a18a0b 100644 --- a/frontend/src/components/__snapshots__/Router.test.tsx.snap +++ b/frontend/src/components/__snapshots__/Router.test.tsx.snap @@ -125,9 +125,21 @@ exports[`Router initial render 1`] = ` <Route exact={true} key="19" + path="/runs/details/:rid/execution/:executionid" + render={[Function]} + /> + <Route + exact={true} + key="20" path="/compare" render={[Function]} /> + <Route + exact={true} + key="21" + path="/frontend_features" + render={[Function]} + /> <Route> <RoutedPage /> </Route> diff --git a/frontend/src/components/__snapshots__/SideNav.test.tsx.snap b/frontend/src/components/__snapshots__/SideNav.test.tsx.snap index 197256a653..bc555b454c 100644 --- a/frontend/src/components/__snapshots__/SideNav.test.tsx.snap +++ b/frontend/src/components/__snapshots__/SideNav.test.tsx.snap @@ -32,14 +32,18 @@ exports[`SideNav populates the display build information using the response from <WithStyles(Button) className="button active" > - <PipelinesIcon - color="#0d6de7" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#0d6de7" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -63,14 +67,18 @@ exports[`SideNav populates the display build information using the response from <WithStyles(Button) className="button" > - <ExperimentsIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#9aa0a6" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -94,12 +102,16 @@ exports[`SideNav populates the display build information using the response from <WithStyles(Button) className="button" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -123,12 +135,16 @@ exports[`SideNav populates the display build information using the response from <WithStyles(Button) className="button" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -152,12 +168,16 @@ exports[`SideNav populates the display build information using the response from <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -181,12 +201,16 @@ exports[`SideNav populates the display build information using the response from <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -293,14 +317,18 @@ exports[`SideNav renders Pipelines as active page 1`] = ` <WithStyles(Button) className="button active" > - <PipelinesIcon - color="#0d6de7" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#0d6de7" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -324,14 +352,18 @@ exports[`SideNav renders Pipelines as active page 1`] = ` <WithStyles(Button) className="button" > - <ExperimentsIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#9aa0a6" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -355,12 +387,16 @@ exports[`SideNav renders Pipelines as active page 1`] = ` <WithStyles(Button) className="button" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -384,12 +420,16 @@ exports[`SideNav renders Pipelines as active page 1`] = ` <WithStyles(Button) className="button" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -413,12 +453,16 @@ exports[`SideNav renders Pipelines as active page 1`] = ` <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -442,12 +486,16 @@ exports[`SideNav renders Pipelines as active page 1`] = ` <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -533,14 +581,18 @@ exports[`SideNav renders Pipelines as active when on PipelineDetails page 1`] = <WithStyles(Button) className="button active" > - <PipelinesIcon - color="#0d6de7" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#0d6de7" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -564,14 +616,18 @@ exports[`SideNav renders Pipelines as active when on PipelineDetails page 1`] = <WithStyles(Button) className="button" > - <ExperimentsIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#9aa0a6" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -595,12 +651,16 @@ exports[`SideNav renders Pipelines as active when on PipelineDetails page 1`] = <WithStyles(Button) className="button" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -624,12 +684,16 @@ exports[`SideNav renders Pipelines as active when on PipelineDetails page 1`] = <WithStyles(Button) className="button" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -653,12 +717,16 @@ exports[`SideNav renders Pipelines as active when on PipelineDetails page 1`] = <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -682,12 +750,16 @@ exports[`SideNav renders Pipelines as active when on PipelineDetails page 1`] = <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -773,14 +845,18 @@ exports[`SideNav renders collapsed state 1`] = ` <WithStyles(Button) className="button active collapsedButton" > - <PipelinesIcon - color="#0d6de7" - /> - <span - className="collapsedLabel label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#0d6de7" + /> + <span + className="collapsedLabel label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -804,14 +880,18 @@ exports[`SideNav renders collapsed state 1`] = ` <WithStyles(Button) className="button collapsedButton" > - <ExperimentsIcon - color="#9aa0a6" - /> - <span - className="collapsedLabel label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#9aa0a6" + /> + <span + className="collapsedLabel label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -835,12 +915,16 @@ exports[`SideNav renders collapsed state 1`] = ` <WithStyles(Button) className="button collapsedButton" > - <pure(DirectionsRunIcon) /> - <span - className="collapsedLabel label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="collapsedLabel label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -864,12 +948,16 @@ exports[`SideNav renders collapsed state 1`] = ` <WithStyles(Button) className="button collapsedButton" > - <pure(AlarmIcon) /> - <span - className="collapsedLabel label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="collapsedLabel label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -893,12 +981,16 @@ exports[`SideNav renders collapsed state 1`] = ` <WithStyles(Button) className="button collapsedButton" > - <pure(BubbleChartIcon) /> - <span - className="collapsedLabel label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="collapsedLabel label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -922,12 +1014,16 @@ exports[`SideNav renders collapsed state 1`] = ` <WithStyles(Button) className="button collapsedButton" > - <pure(PlayArrowIcon) /> - <span - className="collapsedLabel label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="collapsedLabel label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1013,14 +1109,18 @@ exports[`SideNav renders expanded state 1`] = ` <WithStyles(Button) className="button active" > - <PipelinesIcon - color="#0d6de7" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#0d6de7" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1044,14 +1144,18 @@ exports[`SideNav renders expanded state 1`] = ` <WithStyles(Button) className="button" > - <ExperimentsIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#9aa0a6" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1075,12 +1179,16 @@ exports[`SideNav renders expanded state 1`] = ` <WithStyles(Button) className="button" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1104,12 +1212,16 @@ exports[`SideNav renders expanded state 1`] = ` <WithStyles(Button) className="button" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1133,12 +1245,16 @@ exports[`SideNav renders expanded state 1`] = ` <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1162,12 +1278,16 @@ exports[`SideNav renders expanded state 1`] = ` <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1253,14 +1373,18 @@ exports[`SideNav renders experiments as active page 1`] = ` <WithStyles(Button) className="button" > - <PipelinesIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#9aa0a6" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1284,14 +1408,18 @@ exports[`SideNav renders experiments as active page 1`] = ` <WithStyles(Button) className="button active" > - <ExperimentsIcon - color="#0d6de7" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#0d6de7" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1315,12 +1443,16 @@ exports[`SideNav renders experiments as active page 1`] = ` <WithStyles(Button) className="button" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1344,12 +1476,16 @@ exports[`SideNav renders experiments as active page 1`] = ` <WithStyles(Button) className="button" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1373,12 +1509,16 @@ exports[`SideNav renders experiments as active page 1`] = ` <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1402,12 +1542,16 @@ exports[`SideNav renders experiments as active page 1`] = ` <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1493,14 +1637,18 @@ exports[`SideNav renders experiments as active page when on AllRuns page 1`] = ` <WithStyles(Button) className="button" > - <PipelinesIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#9aa0a6" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1524,14 +1672,18 @@ exports[`SideNav renders experiments as active page when on AllRuns page 1`] = ` <WithStyles(Button) className="button" > - <ExperimentsIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#9aa0a6" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1555,12 +1707,16 @@ exports[`SideNav renders experiments as active page when on AllRuns page 1`] = ` <WithStyles(Button) className="button active" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1584,12 +1740,16 @@ exports[`SideNav renders experiments as active page when on AllRuns page 1`] = ` <WithStyles(Button) className="button" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1613,12 +1773,16 @@ exports[`SideNav renders experiments as active page when on AllRuns page 1`] = ` <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1642,12 +1806,16 @@ exports[`SideNav renders experiments as active page when on AllRuns page 1`] = ` <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1733,14 +1901,18 @@ exports[`SideNav renders experiments as active page when on Compare page 1`] = ` <WithStyles(Button) className="button" > - <PipelinesIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#9aa0a6" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1764,14 +1936,18 @@ exports[`SideNav renders experiments as active page when on Compare page 1`] = ` <WithStyles(Button) className="button" > - <ExperimentsIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#9aa0a6" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1795,12 +1971,16 @@ exports[`SideNav renders experiments as active page when on Compare page 1`] = ` <WithStyles(Button) className="button active" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1824,12 +2004,16 @@ exports[`SideNav renders experiments as active page when on Compare page 1`] = ` <WithStyles(Button) className="button" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1853,12 +2037,16 @@ exports[`SideNav renders experiments as active page when on Compare page 1`] = ` <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1882,12 +2070,16 @@ exports[`SideNav renders experiments as active page when on Compare page 1`] = ` <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -1973,14 +2165,18 @@ exports[`SideNav renders experiments as active page when on NewExperiment page 1 <WithStyles(Button) className="button" > - <PipelinesIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#9aa0a6" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2004,14 +2200,18 @@ exports[`SideNav renders experiments as active page when on NewExperiment page 1 <WithStyles(Button) className="button active" > - <ExperimentsIcon - color="#0d6de7" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#0d6de7" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2035,12 +2235,16 @@ exports[`SideNav renders experiments as active page when on NewExperiment page 1 <WithStyles(Button) className="button" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2064,12 +2268,16 @@ exports[`SideNav renders experiments as active page when on NewExperiment page 1 <WithStyles(Button) className="button" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2093,12 +2301,16 @@ exports[`SideNav renders experiments as active page when on NewExperiment page 1 <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2122,12 +2334,16 @@ exports[`SideNav renders experiments as active page when on NewExperiment page 1 <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2213,14 +2429,18 @@ exports[`SideNav renders experiments as active page when on NewRun page 1`] = ` <WithStyles(Button) className="button" > - <PipelinesIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#9aa0a6" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2244,14 +2464,18 @@ exports[`SideNav renders experiments as active page when on NewRun page 1`] = ` <WithStyles(Button) className="button" > - <ExperimentsIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#9aa0a6" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2275,12 +2499,16 @@ exports[`SideNav renders experiments as active page when on NewRun page 1`] = ` <WithStyles(Button) className="button active" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2304,12 +2532,16 @@ exports[`SideNav renders experiments as active page when on NewRun page 1`] = ` <WithStyles(Button) className="button" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2333,12 +2565,16 @@ exports[`SideNav renders experiments as active page when on NewRun page 1`] = ` <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2362,12 +2598,16 @@ exports[`SideNav renders experiments as active page when on NewRun page 1`] = ` <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2453,14 +2693,18 @@ exports[`SideNav renders experiments as active page when on RecurringRunDetails <WithStyles(Button) className="button" > - <PipelinesIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#9aa0a6" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2484,14 +2728,18 @@ exports[`SideNav renders experiments as active page when on RecurringRunDetails <WithStyles(Button) className="button" > - <ExperimentsIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#9aa0a6" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2515,12 +2763,16 @@ exports[`SideNav renders experiments as active page when on RecurringRunDetails <WithStyles(Button) className="button" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2544,12 +2796,16 @@ exports[`SideNav renders experiments as active page when on RecurringRunDetails <WithStyles(Button) className="button active" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2573,12 +2829,16 @@ exports[`SideNav renders experiments as active page when on RecurringRunDetails <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2602,12 +2862,16 @@ exports[`SideNav renders experiments as active page when on RecurringRunDetails <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2693,14 +2957,18 @@ exports[`SideNav renders experiments as active page when on RunDetails page 1`] <WithStyles(Button) className="button" > - <PipelinesIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#9aa0a6" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2724,14 +2992,18 @@ exports[`SideNav renders experiments as active page when on RunDetails page 1`] <WithStyles(Button) className="button" > - <ExperimentsIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#9aa0a6" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2755,12 +3027,16 @@ exports[`SideNav renders experiments as active page when on RunDetails page 1`] <WithStyles(Button) className="button active" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2784,12 +3060,16 @@ exports[`SideNav renders experiments as active page when on RunDetails page 1`] <WithStyles(Button) className="button" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2813,12 +3093,16 @@ exports[`SideNav renders experiments as active page when on RunDetails page 1`] <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2842,12 +3126,16 @@ exports[`SideNav renders experiments as active page when on RunDetails page 1`] <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2933,14 +3221,18 @@ exports[`SideNav renders experiments as active when on ExperimentDetails page 1` <WithStyles(Button) className="button" > - <PipelinesIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#9aa0a6" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2964,14 +3256,18 @@ exports[`SideNav renders experiments as active when on ExperimentDetails page 1` <WithStyles(Button) className="button active" > - <ExperimentsIcon - color="#0d6de7" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#0d6de7" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -2995,12 +3291,16 @@ exports[`SideNav renders experiments as active when on ExperimentDetails page 1` <WithStyles(Button) className="button" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -3024,12 +3324,16 @@ exports[`SideNav renders experiments as active when on ExperimentDetails page 1` <WithStyles(Button) className="button" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -3053,12 +3357,16 @@ exports[`SideNav renders experiments as active when on ExperimentDetails page 1` <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -3082,12 +3390,16 @@ exports[`SideNav renders experiments as active when on ExperimentDetails page 1` <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -3173,14 +3485,18 @@ exports[`SideNav show jupyterhub link if accessible 1`] = ` <WithStyles(Button) className="button" > - <PipelinesIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Pipelines - </span> + <PipelinesIcon + color="#9aa0a6" + /> + <span + className="label" + > + Pipelines + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -3204,14 +3520,18 @@ exports[`SideNav show jupyterhub link if accessible 1`] = ` <WithStyles(Button) className="button" > - <ExperimentsIcon - color="#9aa0a6" - /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Experiments - </span> + <ExperimentsIcon + color="#9aa0a6" + /> + <span + className="label" + > + Experiments + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -3235,12 +3555,16 @@ exports[`SideNav show jupyterhub link if accessible 1`] = ` <WithStyles(Button) className="button active" > - <pure(DirectionsRunIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Runs - </span> + <pure(DirectionsRunIcon) /> + <span + className="label" + > + Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -3264,12 +3588,16 @@ exports[`SideNav show jupyterhub link if accessible 1`] = ` <WithStyles(Button) className="button" > - <pure(AlarmIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Recurring Runs - </span> + <pure(AlarmIcon) /> + <span + className="label" + > + Recurring Runs + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -3293,12 +3621,16 @@ exports[`SideNav show jupyterhub link if accessible 1`] = ` <WithStyles(Button) className="button" > - <pure(BubbleChartIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Artifacts - </span> + <pure(BubbleChartIcon) /> + <span + className="label" + > + Artifacts + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -3322,12 +3654,16 @@ exports[`SideNav show jupyterhub link if accessible 1`] = ` <WithStyles(Button) className="button" > - <pure(PlayArrowIcon) /> - <span - className="label" + <div + className="flex flex-row flex-shrink-0" > - Executions - </span> + <pure(PlayArrowIcon) /> + <span + className="label" + > + Executions + </span> + </div> </WithStyles(Button)> </Link> </WithStyles(Tooltip)> @@ -3349,22 +3685,26 @@ exports[`SideNav show jupyterhub link if accessible 1`] = ` <WithStyles(Button) className="button" > - <pure(CodeIcon) - style={ - Object { - "height": 20, - "width": 20, + <div + className="flex flex-row flex-shrink-0" + > + <pure(CodeIcon) + style={ + Object { + "height": 20, + "width": 20, + } } - } - /> - <span - className="label" - > - Notebooks - </span> - <pure(OpenInNewIcon) - className="openInNewTabIcon" - /> + /> + <span + className="label" + > + Notebooks + </span> + <pure(OpenInNewIcon) + className="openInNewTabIcon" + /> + </div> </WithStyles(Button)> </a> </WithStyles(Tooltip)> diff --git a/frontend/src/components/__snapshots__/Trigger.test.tsx.snap b/frontend/src/components/__snapshots__/Trigger.test.tsx.snap index bf4648f180..48a6f91eb8 100644 --- a/frontend/src/components/__snapshots__/Trigger.test.tsx.snap +++ b/frontend/src/components/__snapshots__/Trigger.test.tsx.snap @@ -332,13 +332,13 @@ exports[`Trigger enables a single day on click 1`] = ` } label={ <span> - Allow editing cron expression. ( format is specified + Allow editing cron expression. (format is specified - <a + <ExternalLink href="https://pkg.go.dev/github.com/robfig/cron#hdr-CRON_Expression_Format" > here - </a> + </ExternalLink> ) </span> } @@ -691,13 +691,13 @@ exports[`Trigger renders all week days enabled 1`] = ` } label={ <span> - Allow editing cron expression. ( format is specified + Allow editing cron expression. (format is specified - <a + <ExternalLink href="https://pkg.go.dev/github.com/robfig/cron#hdr-CRON_Expression_Format" > here - </a> + </ExternalLink> ) </span> } @@ -935,7 +935,7 @@ exports[`Trigger renders periodic schedule controls for initial render 1`] = ` onChange={[Function]} required={true} select={true} - value="Minute" + value="Hour" variant="outlined" width={95} > @@ -1177,7 +1177,7 @@ exports[`Trigger renders periodic schedule controls if the trigger type is CRON onChange={[Function]} required={true} select={true} - value="Minute" + value="Hour" variant="outlined" width={95} > @@ -1228,13 +1228,13 @@ exports[`Trigger renders periodic schedule controls if the trigger type is CRON } label={ <span> - Allow editing cron expression. ( format is specified + Allow editing cron expression. (format is specified - <a + <ExternalLink href="https://pkg.go.dev/github.com/robfig/cron#hdr-CRON_Expression_Format" > here - </a> + </ExternalLink> ) </span> } @@ -1244,7 +1244,7 @@ exports[`Trigger renders periodic schedule controls if the trigger type is CRON disabled={true} label="cron expression" onChange={[Function]} - value="0 * * * * ?" + value="0 0 * * * ?" variant="outlined" width={300} /> @@ -1587,13 +1587,13 @@ exports[`Trigger renders week days if the trigger type is CRON and interval is w } label={ <span> - Allow editing cron expression. ( format is specified + Allow editing cron expression. (format is specified - <a + <ExternalLink href="https://pkg.go.dev/github.com/robfig/cron#hdr-CRON_Expression_Format" > here - </a> + </ExternalLink> ) </span> } diff --git a/frontend/src/components/__snapshots__/UploadPipelineDialog.test.tsx.snap b/frontend/src/components/__snapshots__/UploadPipelineDialog.test.tsx.snap index b177b1ef6a..592908b8e8 100644 --- a/frontend/src/components/__snapshots__/UploadPipelineDialog.test.tsx.snap +++ b/frontend/src/components/__snapshots__/UploadPipelineDialog.test.tsx.snap @@ -166,7 +166,7 @@ exports[`UploadPipelineDialog renders an active dropzone 1`] = ` <Input InputProps={ Object { - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -182,7 +182,7 @@ exports[`UploadPipelineDialog renders an active dropzone 1`] = ` > Choose file </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -298,7 +298,7 @@ exports[`UploadPipelineDialog renders closed 1`] = ` <Input InputProps={ Object { - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -314,7 +314,7 @@ exports[`UploadPipelineDialog renders closed 1`] = ` > Choose file </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -430,7 +430,7 @@ exports[`UploadPipelineDialog renders open 1`] = ` <Input InputProps={ Object { - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -446,7 +446,7 @@ exports[`UploadPipelineDialog renders open 1`] = ` > Choose file </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -562,7 +562,7 @@ exports[`UploadPipelineDialog renders with a selected file to upload 1`] = ` <Input InputProps={ Object { - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -578,7 +578,7 @@ exports[`UploadPipelineDialog renders with a selected file to upload 1`] = ` > Choose file </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } diff --git a/frontend/src/components/graph/ExecutionNode.tsx b/frontend/src/components/graph/ExecutionNode.tsx new file mode 100644 index 0000000000..491a67c7b0 --- /dev/null +++ b/frontend/src/components/graph/ExecutionNode.tsx @@ -0,0 +1,77 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import CheckCircleIcon from '@material-ui/icons/CheckCircle'; +import React from 'react'; +import { Handle, Position } from 'react-flow-renderer'; + +// TODO(zijianjoy): Introduce execution node status separately. +// enum ExecutionNodeStatus { +// UNSPECIFIED = 'UNSPECIFIED', +// PENDING = 'PENDING', +// RUNNING = 'RUNNING', +// SUCCEEDED = 'SUCCEEDED', +// CANCELLING = 'CANCELLING', +// CANCELLED = 'CANCELLED', +// FAILED = 'FAILED', +// SKIPPED = 'SKIPPED', +// NOT_READY = 'NOT_READY', // TBD: Represent QUEUED, NOT_TRIGGERED and UNSCHEDULABLE +// } + +export interface ExecutionNodeData { + label: string; +} + +export interface ExecutionNodeProps { + id: string; + data: ExecutionNodeData; + // selected: boolean; + // status: ExecutionNodeStatus; +} + +function ExecutionNode({ id, data }: ExecutionNodeProps) { + return ( + <> + <div title={data.label} className='container w-60'> + <button className='focus:ring flex items-stretch border-0 transform h-12 hover:scale-105 transition relative overflow:hidden bg-white shadow-lg rounded-lg w-60'> + <div className='flex justify-between flex-row relative w-full h-full'> + <div className='sm:px-3 py-4 w-48 h-full flex justify-center items-center'> + <span className='w-full text-sm truncate ...' id={id}> + {data.label} + </span> + </div> + <div className=' sm:px-2 h-full flex flex-col justify-center rounded-r-lg bg-mui-green-200-light'> + <CheckCircleIcon className='text-mui-green-500-strong' /> + </div> + </div> + </button> + </div> + <Handle + type='target' + position={Position.Top} + isValidConnection={() => false} + style={{ background: '#000', width: '4px', height: '4px' }} + /> + <Handle + type='source' + position={Position.Bottom} + isValidConnection={() => false} + style={{ background: '#000', width: '4px', height: '4px' }} + /> + </> + ); +} +export default ExecutionNode; diff --git a/frontend/src/components/graph/ExecutionNodeFailed.tsx b/frontend/src/components/graph/ExecutionNodeFailed.tsx new file mode 100644 index 0000000000..3cda74ed52 --- /dev/null +++ b/frontend/src/components/graph/ExecutionNodeFailed.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import ClearIcon from '@material-ui/icons/Clear'; +interface ExecutionNodeFailedProps {} + +function ExecutionNodeFailed({}: ExecutionNodeFailedProps) { + return ( + <div className='container mx-auto'> + <div className='flex justify-between flex-row transform hover:scale-105 transition overflow:hidden relative mx-auto sm:mx-auto bg-white shadow-lg sm:rounded-xl sm:w-72'> + <div className='sm:px-6 sm:py-4 sm:pb-3 w-60'>Failed execution</div> + <div className='sm:px-4 sm:pt-4 sm:pb-3 sm:rounded-r-xl bg-red-200'> + <ClearIcon style={{ color: '#FF0000' }} /> + </div> + </div> + </div> + ); +} + +export default ExecutionNodeFailed; diff --git a/frontend/src/components/graph/ExecutionNodePending.tsx b/frontend/src/components/graph/ExecutionNodePending.tsx new file mode 100644 index 0000000000..d250932b75 --- /dev/null +++ b/frontend/src/components/graph/ExecutionNodePending.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import DragHandleIcon from '@material-ui/icons/DragHandle'; +interface ExecutionNodePendingProps {} + +function ExecutionNodePending({}: ExecutionNodePendingProps) { + return ( + <div className='container mx-auto'> + <div className='flex justify-between flex-row transform hover:scale-105 transition overflow:hidden relative mx-auto sm:mx-auto bg-white shadow-lg sm:rounded-xl sm:w-72'> + <div className='sm:px-6 sm:py-4 sm:pb-3 w-60'>Pending execution</div> + <div className='sm:px-4 sm:pt-4 sm:pb-3 sm:rounded-r-xl bg-gray-200'> + <DragHandleIcon style={{ color: '#4B5563' }} /> + </div> + </div> + </div> + ); +} + +export default ExecutionNodePending; diff --git a/frontend/src/components/tabs/ExecutionTitle.test.tsx b/frontend/src/components/tabs/ExecutionTitle.test.tsx new file mode 100644 index 0000000000..7a6b542e03 --- /dev/null +++ b/frontend/src/components/tabs/ExecutionTitle.test.tsx @@ -0,0 +1,51 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Execution, Value } from 'src/third_party/mlmd'; +import { render, screen } from '@testing-library/react'; +import React from 'react'; +import { testBestPractices } from 'src/TestUtils'; +import { CommonTestWrapper } from 'src/TestWrapper'; +import { ExecutionTitle } from './ExecutionTitle'; + +testBestPractices(); +describe('ExecutionTitle', () => { + const execution = new Execution(); + const executionName = 'fake-execution'; + const executionId = 123; + beforeEach(() => { + execution.setId(executionId); + execution.getCustomPropertiesMap().set('task_name', new Value().setStringValue(executionName)); + }); + + it('Shows execution name', () => { + render( + <CommonTestWrapper> + <ExecutionTitle execution={execution}></ExecutionTitle> + </CommonTestWrapper>, + ); + screen.getByText(executionName, { selector: 'a', exact: false }); + }); + + it('Shows execution description', () => { + render( + <CommonTestWrapper> + <ExecutionTitle execution={execution}></ExecutionTitle> + </CommonTestWrapper>, + ); + screen.getByText('This step corresponds to execution'); + }); +}); diff --git a/frontend/src/components/tabs/ExecutionTitle.tsx b/frontend/src/components/tabs/ExecutionTitle.tsx new file mode 100644 index 0000000000..a03fc4c54e --- /dev/null +++ b/frontend/src/components/tabs/ExecutionTitle.tsx @@ -0,0 +1,39 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Execution } from 'src/third_party/mlmd'; +import React from 'react'; +import { Link } from 'react-router-dom'; +import { commonCss } from 'src/Css'; +import { ExecutionHelpers } from 'src/mlmd/MlmdUtils'; +import { RoutePageFactory } from '../Router'; + +interface ExecutionTitleProps { + execution: Execution; +} + +export function ExecutionTitle({ execution }: ExecutionTitleProps) { + return ( + <> + <div> + This step corresponds to execution{' '} + <Link className={commonCss.link} to={RoutePageFactory.executionDetails(execution.getId())}> + "{ExecutionHelpers.getName(execution)}". + </Link> + </div> + </> + ); +} diff --git a/frontend/src/components/tabs/InputOutputTab.test.tsx b/frontend/src/components/tabs/InputOutputTab.test.tsx new file mode 100644 index 0000000000..2f6bf18ac0 --- /dev/null +++ b/frontend/src/components/tabs/InputOutputTab.test.tsx @@ -0,0 +1,257 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { render, screen, waitFor } from '@testing-library/react'; +import { Struct } from 'google-protobuf/google/protobuf/struct_pb'; +import React from 'react'; +import { Apis } from 'src/lib/Apis'; +import { Api } from 'src/mlmd/library'; +import { testBestPractices } from 'src/TestUtils'; +import { CommonTestWrapper } from 'src/TestWrapper'; +import { + Artifact, + Event, + Execution, + GetArtifactsByIDResponse, + GetEventsByExecutionIDsResponse, + Value, +} from 'src/third_party/mlmd'; +import InputOutputTab from './InputOutputTab'; + +const executionName = 'fake-execution'; +const artifactId = 100; +const artifactUri = 'gs://bucket/test'; +const artifactUriView = 'gs://bucket/test'; +const inputArtifactName = 'input_artifact'; +const outputArtifactName = 'output_artifact'; +const namespace = 'namespace'; + +testBestPractices(); +describe('InoutOutputTab', () => { + it('shows execution title', () => { + jest + .spyOn(Api.getInstance().metadataStoreService, 'getEventsByExecutionIDs') + .mockResolvedValue(new GetEventsByExecutionIDsResponse()); + jest + .spyOn(Api.getInstance().metadataStoreService, 'getArtifactsByID') + .mockReturnValue(new GetArtifactsByIDResponse()); + + render( + <CommonTestWrapper> + <InputOutputTab execution={buildBasicExecution()} namespace={namespace}></InputOutputTab> + </CommonTestWrapper>, + ); + screen.getByText(executionName, { selector: 'a', exact: false }); + }); + + it("doesn't show Input/Output artifacts and parameters if no exists", async () => { + jest + .spyOn(Api.getInstance().metadataStoreService, 'getEventsByExecutionIDs') + .mockResolvedValue(new GetEventsByExecutionIDsResponse()); + jest + .spyOn(Api.getInstance().metadataStoreService, 'getArtifactsByID') + .mockReturnValue(new GetArtifactsByIDResponse()); + + render( + <CommonTestWrapper> + <InputOutputTab execution={buildBasicExecution()} namespace={namespace}></InputOutputTab> + </CommonTestWrapper>, + ); + await waitFor(() => screen.queryAllByText('Input Parameters').length == 0); + await waitFor(() => screen.queryAllByText('Input Artifacts').length == 0); + await waitFor(() => screen.queryAllByText('Output Parameters').length == 0); + await waitFor(() => screen.queryAllByText('Output Artifacts').length == 0); + await waitFor(() => screen.getByText('There is no input/output parameter or artifact.')); + }); + + it('shows Input parameters with various types', async () => { + jest + .spyOn(Api.getInstance().metadataStoreService, 'getEventsByExecutionIDs') + .mockResolvedValue(new GetEventsByExecutionIDsResponse()); + jest + .spyOn(Api.getInstance().metadataStoreService, 'getArtifactsByID') + .mockReturnValue(new GetArtifactsByIDResponse()); + + const execution = buildBasicExecution(); + execution + .getCustomPropertiesMap() + .set('thisKeyIsNotInput', new Value().setStringValue("value shouldn't show")); + execution + .getCustomPropertiesMap() + .set('input:stringkey', new Value().setStringValue('string input')); + execution.getCustomPropertiesMap().set('input:intkey', new Value().setIntValue(42)); + execution.getCustomPropertiesMap().set('input:doublekey', new Value().setDoubleValue(1.99)); + execution + .getCustomPropertiesMap() + .set( + 'input:structkey', + new Value().setStructValue(Struct.fromJavaScript({ struct: { key: 'value', num: 42 } })), + ); + execution + .getCustomPropertiesMap() + .set( + 'input:arraykey', + new Value().setStructValue(Struct.fromJavaScript({ list: ['a', 'b', 'c'] })), + ); + render( + <CommonTestWrapper> + <InputOutputTab execution={execution} namespace={namespace}></InputOutputTab> + </CommonTestWrapper>, + ); + + screen.getByText('stringkey'); + screen.getByText('string input'); + screen.getByText('intkey'); + screen.getByText('42'); + screen.getByText('doublekey'); + screen.getByText('1.99'); + screen.getByText('structkey'); + screen.getByText('arraykey'); + expect(screen.queryByText('thisKeyIsNotInput')).toBeNull(); + }); + + it('shows Output parameters with various types', async () => { + jest + .spyOn(Api.getInstance().metadataStoreService, 'getEventsByExecutionIDs') + .mockResolvedValue(new GetEventsByExecutionIDsResponse()); + jest + .spyOn(Api.getInstance().metadataStoreService, 'getArtifactsByID') + .mockReturnValue(new GetArtifactsByIDResponse()); + + const execution = buildBasicExecution(); + execution + .getCustomPropertiesMap() + .set('thisKeyIsNotOutput', new Value().setStringValue("value shouldn't show")); + execution + .getCustomPropertiesMap() + .set('output:stringkey', new Value().setStringValue('string output')); + execution.getCustomPropertiesMap().set('output:intkey', new Value().setIntValue(42)); + execution.getCustomPropertiesMap().set('output:doublekey', new Value().setDoubleValue(1.99)); + execution + .getCustomPropertiesMap() + .set( + 'output:structkey', + new Value().setStructValue(Struct.fromJavaScript({ struct: { key: 'value', num: 42 } })), + ); + execution + .getCustomPropertiesMap() + .set( + 'output:arraykey', + new Value().setStructValue(Struct.fromJavaScript({ list: ['a', 'b', 'c'] })), + ); + render( + <CommonTestWrapper> + <InputOutputTab execution={execution} namespace={namespace}></InputOutputTab> + </CommonTestWrapper>, + ); + + screen.getByText('stringkey'); + screen.getByText('string output'); + screen.getByText('intkey'); + screen.getByText('42'); + screen.getByText('doublekey'); + screen.getByText('1.99'); + screen.getByText('structkey'); + screen.getByText('arraykey'); + expect(screen.queryByText('thisKeyIsNotOutput')).toBeNull(); + }); + + it('shows Input artifacts', async () => { + jest.spyOn(Apis, 'readFile').mockResolvedValue('artifact preview'); + const getEventResponse = new GetEventsByExecutionIDsResponse(); + getEventResponse.getEventsList().push(buildInputEvent()); + jest + .spyOn(Api.getInstance().metadataStoreService, 'getEventsByExecutionIDs') + .mockResolvedValueOnce(getEventResponse); + const getArtifactsResponse = new GetArtifactsByIDResponse(); + getArtifactsResponse.getArtifactsList().push(buildArtifact()); + jest + .spyOn(Api.getInstance().metadataStoreService, 'getArtifactsByID') + .mockReturnValueOnce(getArtifactsResponse); + + render( + <CommonTestWrapper> + <InputOutputTab execution={buildBasicExecution()} namespace={namespace}></InputOutputTab> + </CommonTestWrapper>, + ); + + await waitFor(() => screen.getByText(artifactUriView)); + await waitFor(() => screen.getByText(inputArtifactName)); + }); + + it('shows Output artifacts', async () => { + jest.spyOn(Apis, 'readFile').mockResolvedValue('artifact preview'); + const getEventResponse = new GetEventsByExecutionIDsResponse(); + getEventResponse.getEventsList().push(buildOutputEvent()); + jest + .spyOn(Api.getInstance().metadataStoreService, 'getEventsByExecutionIDs') + .mockResolvedValueOnce(getEventResponse); + const getArtifactsResponse = new GetArtifactsByIDResponse(); + getArtifactsResponse.getArtifactsList().push(buildArtifact()); + jest + .spyOn(Api.getInstance().metadataStoreService, 'getArtifactsByID') + .mockReturnValueOnce(getArtifactsResponse); + + render( + <CommonTestWrapper> + <InputOutputTab execution={buildBasicExecution()} namespace={namespace}></InputOutputTab> + </CommonTestWrapper>, + ); + + await waitFor(() => screen.getByText(artifactUriView)); + await waitFor(() => screen.getByText(outputArtifactName)); + }); +}); + +function buildBasicExecution() { + const execution = new Execution(); + const executionId = 123; + + execution.setId(executionId); + execution.getCustomPropertiesMap().set('task_name', new Value().setStringValue(executionName)); + + return execution; +} + +function buildArtifact() { + const artifact = new Artifact(); + artifact.getCustomPropertiesMap(); + artifact.setUri(artifactUri); + artifact.setId(artifactId); + return artifact; +} + +function buildInputEvent() { + const event = new Event(); + const path = new Event.Path(); + path.getStepsList().push(new Event.Path.Step().setKey(inputArtifactName)); + event + .setType(Event.Type.INPUT) + .setArtifactId(artifactId) + .setPath(path); + return event; +} + +function buildOutputEvent() { + const event = new Event(); + const path = new Event.Path(); + path.getStepsList().push(new Event.Path.Step().setKey(outputArtifactName)); + event + .setType(Event.Type.OUTPUT) + .setArtifactId(artifactId) + .setPath(path); + return event; +} diff --git a/frontend/src/components/tabs/InputOutputTab.tsx b/frontend/src/components/tabs/InputOutputTab.tsx new file mode 100644 index 0000000000..424f58a866 --- /dev/null +++ b/frontend/src/components/tabs/InputOutputTab.tsx @@ -0,0 +1,203 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Struct } from 'google-protobuf/google/protobuf/struct_pb'; +import React from 'react'; +import { useQuery } from 'react-query'; +import { Link } from 'react-router-dom'; +import { ErrorBoundary } from 'src/atoms/ErrorBoundary'; +import { commonCss, padding } from 'src/Css'; +import { + filterEventWithInputArtifact, + filterEventWithOutputArtifact, + getArtifactName, + getLinkedArtifactsByExecution, + LinkedArtifact, +} from 'src/mlmd/MlmdUtils'; +import { KeyValue } from 'src/lib/StaticGraphParser'; +import { getMetadataValue } from 'src/mlmd/library'; +import { Execution } from 'src/third_party/mlmd'; +import ArtifactPreview from '../ArtifactPreview'; +import Banner from '../Banner'; +import DetailsTable from '../DetailsTable'; +import { RoutePageFactory } from '../Router'; +import { ExecutionTitle } from './ExecutionTitle'; + +type ParamList = Array<KeyValue<string>>; + +export interface IOTabProps { + execution: Execution; + namespace: string | undefined; +} + +export function InputOutputTab({ execution, namespace }: IOTabProps) { + const executionId = execution.getId(); + + // Retrieves input and output artifacts from Metadata store. + const { isSuccess, error, data } = useQuery<LinkedArtifact[], Error>( + ['execution_artifact', { id: executionId, state: execution.getLastKnownState() }], + () => getLinkedArtifactsByExecution(execution), + { staleTime: Infinity }, + ); + + // Restructs artifacts and parameters for visualization. + const inputParams = extractInputFromExecution(execution); + const outputParams = extractOutputFromExecution(execution); + let inputArtifacts: ParamList = []; + let outputArtifacts: ParamList = []; + if (isSuccess && data) { + inputArtifacts = getArtifactParamList(filterEventWithInputArtifact(data)); + outputArtifacts = getArtifactParamList(filterEventWithOutputArtifact(data)); + } + + let isIoEmpty = false; + if ( + inputParams.length === 0 && + outputParams.length === 0 && + inputArtifacts.length === 0 && + outputArtifacts.length === 0 + ) { + isIoEmpty = true; + } + + return ( + <ErrorBoundary> + <div className={commonCss.page}> + <div className={padding(20)}> + <ExecutionTitle execution={execution} /> + + {error && ( + <Banner + message='Error in retrieving Artifacts.' + mode='error' + additionalInfo={error.message} + /> + )} + + {isSuccess && isIoEmpty && ( + <Banner message='There is no input/output parameter or artifact.' mode='info' /> + )} + + {inputParams.length > 0 && ( + <div> + <DetailsTable + key={`input-parameters-${executionId}`} + title='Input Parameters' + fields={inputParams} + /> + </div> + )} + + {inputArtifacts.length > 0 && ( + <div> + <DetailsTable<string> + key={`input-artifacts-${executionId}`} + title='Input Artifacts' + fields={inputArtifacts} + valueComponent={ArtifactPreview} + valueComponentProps={{ + namespace: namespace, + }} + /> + </div> + )} + + {outputParams.length > 0 && ( + <div> + <DetailsTable + key={`output-parameters-${executionId}`} + title='Output Parameters' + fields={outputParams} + /> + </div> + )} + + {outputArtifacts.length > 0 && ( + <div> + <DetailsTable<string> + key={`output-artifacts-${executionId}`} + title='Output Artifacts' + fields={outputArtifacts} + valueComponent={ArtifactPreview} + valueComponentProps={{ + namespace: namespace, + }} + /> + </div> + )} + </div> + </div> + </ErrorBoundary> + ); +} + +export default InputOutputTab; + +function extractInputFromExecution(execution: Execution): KeyValue<string>[] { + return extractParamFromExecution(execution, /input:(?<inputName>.+)/, 'inputName'); +} + +function extractOutputFromExecution(execution: Execution): KeyValue<string>[] { + return extractParamFromExecution(execution, /output:(?<outputName>.+)/, 'outputName'); +} + +function extractParamFromExecution( + execution: Execution, + pattern: RegExp, + groupName: string, +): KeyValue<string>[] { + const result: KeyValue<string>[] = []; + execution.getCustomPropertiesMap().forEach((value, key) => { + const found = key.match(pattern); + if (found?.groups?.[groupName]) { + result.push([found.groups[groupName], prettyPrintValue(getMetadataValue(value))]); + } + }); + return result; +} + +function prettyPrintValue(value: string | number | Struct | undefined): string { + if (value == null) { + return ''; + } + if (typeof value === 'string') { + return value; + } + if (typeof value === 'number') { + return JSON.stringify(value); + } + // value is Struct + const jsObject = value.toJavaScript(); + // When Struct is converted to js object, it may contain a top level "struct" + // or "list" key depending on its type, but the key is meaningless and we can + // omit it in visualization. + return JSON.stringify(jsObject?.struct || jsObject?.list || jsObject, null, 2); +} + +function getArtifactParamList(inputArtifacts: LinkedArtifact[]): ParamList { + return inputArtifacts.map(linkedArtifact => { + const key = getArtifactName(linkedArtifact); + const artifactId = linkedArtifact.artifact.getId(); + const artifactElement = RoutePageFactory.artifactDetails(artifactId) ? ( + <Link className={commonCss.link} to={RoutePageFactory.artifactDetails(artifactId)}> + {key} + </Link> + ) : ( + key + ); + return [artifactElement, linkedArtifact.artifact.getUri()]; + }); +} diff --git a/frontend/src/components/tabs/MetricsTab.test.tsx b/frontend/src/components/tabs/MetricsTab.test.tsx new file mode 100644 index 0000000000..ed54b981ff --- /dev/null +++ b/frontend/src/components/tabs/MetricsTab.test.tsx @@ -0,0 +1,571 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { render, waitFor } from '@testing-library/react'; +import { Struct } from 'google-protobuf/google/protobuf/struct_pb'; +import React from 'react'; +import { OutputArtifactLoader } from 'src/lib/OutputArtifactLoader'; +import * as mlmdUtils from 'src/mlmd/MlmdUtils'; +import { testBestPractices } from 'src/TestUtils'; +import { CommonTestWrapper } from 'src/TestWrapper'; +import { Artifact, ArtifactType, Event, Execution, Value } from 'src/third_party/mlmd'; +import { ConfusionMatrixConfig } from '../viewers/ConfusionMatrix'; +import { HTMLViewerConfig } from '../viewers/HTMLViewer'; +import { MarkdownViewerConfig } from '../viewers/MarkdownViewer'; +import { ROCCurveConfig } from '../viewers/ROCCurve'; +import { TensorboardViewerConfig } from '../viewers/Tensorboard'; +import { PlotType } from '../viewers/Viewer'; +import { MetricsTab } from './MetricsTab'; + +testBestPractices(); + +const namespace = 'kubeflow'; + +describe('MetricsTab common case', () => { + beforeEach(() => {}); + it('has no metrics', async () => { + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockReturnValue(Promise.resolve([])); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockReturnValue(Promise.resolve([])); + const execution = buildBasicExecution().setLastKnownState(Execution.State.COMPLETE); + + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + + await waitFor(() => getByText('There is no metrics artifact available in this step.')); + }); + it('shows info banner when execution is in UNKNOWN', async () => { + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockReturnValue(Promise.resolve([])); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockReturnValue(Promise.resolve([])); + + const execution = buildBasicExecution().setLastKnownState(Execution.State.UNKNOWN); + const { getByText, queryByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + await waitFor(() => getByText('Task is in unknown state.')); + await waitFor(() => queryByText('Task has not completed.') === null); + }); + + it('shows info banner when execution is in NEW', async () => { + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockReturnValue(Promise.resolve([])); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockReturnValue(Promise.resolve([])); + + const execution = buildBasicExecution().setLastKnownState(Execution.State.NEW); + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + await waitFor(() => getByText('Task has not completed.')); + }); + + it('shows info banner when execution is in RUNNING', async () => { + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockReturnValue(Promise.resolve([])); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockReturnValue(Promise.resolve([])); + + const execution = buildBasicExecution().setLastKnownState(Execution.State.RUNNING); + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + await waitFor(() => getByText('Task has not completed.')); + }); +}); + +describe('MetricsTab with confidenceMetrics', () => { + it('shows ROC curve', async () => { + const execution = buildBasicExecution().setLastKnownState(Execution.State.COMPLETE); + const artifactType = buildClassificationMetricsArtifactType(); + const artifact = buildClassificationMetricsArtifact(); + artifact.getCustomPropertiesMap().set('display_name', new Value().setStringValue('metrics')); + artifact.getCustomPropertiesMap().set( + 'confidenceMetrics', + new Value().setStructValue( + Struct.fromJavaScript({ + list: [ + { + confidenceThreshold: 2, + falsePositiveRate: 0, + recall: 0, + }, + { + confidenceThreshold: 1, + falsePositiveRate: 0, + recall: 0.33962264150943394, + }, + { + confidenceThreshold: 0.9, + falsePositiveRate: 0, + recall: 0.6037735849056604, + }, + ], + }), + ), + ); + const linkedArtifact = { event: new Event(), artifact: artifact }; + + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockResolvedValueOnce([linkedArtifact]); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockResolvedValueOnce([artifactType]); + + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + + getByText('Metrics is loading.'); + await waitFor(() => getByText('ROC Curve: metrics')); + }); + + it('shows error banner when confidenceMetric type is wrong', async () => { + const execution = buildBasicExecution().setLastKnownState(Execution.State.COMPLETE); + const artifactType = buildClassificationMetricsArtifactType(); + const artifact = buildClassificationMetricsArtifact(); + artifact.getCustomPropertiesMap().set('display_name', new Value().setStringValue('metrics')); + artifact.getCustomPropertiesMap().set( + 'confidenceMetrics', + new Value().setStructValue( + Struct.fromJavaScript({ + list: [ + { + invalidType: 2, + falsePositiveRate: 0, + recall: 0, + }, + { + confidenceThreshold: 1, + falsePositiveRate: 0, + recall: 0.33962264150943394, + }, + ], + }), + ), + ); + const linkedArtifact = { event: new Event(), artifact: artifact }; + + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockResolvedValue([linkedArtifact]); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockResolvedValue([artifactType]); + + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + + await waitFor(() => getByText("Error in metrics artifact's confidenceMetrics data format.")); + }); + + it('shows error banner when confidenceMetric is not array', async () => { + const execution = buildBasicExecution().setLastKnownState(Execution.State.COMPLETE); + const artifactType = buildClassificationMetricsArtifactType(); + const artifact = buildClassificationMetricsArtifact(); + artifact.getCustomPropertiesMap().set('display_name', new Value().setStringValue('metrics')); + artifact.getCustomPropertiesMap().set( + 'confidenceMetrics', + new Value().setStructValue( + Struct.fromJavaScript({ + variable: 'i am not a list', + }), + ), + ); + const linkedArtifact = { event: new Event(), artifact: artifact }; + + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockResolvedValue([linkedArtifact]); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockResolvedValue([artifactType]); + + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + + await waitFor(() => getByText("Error in metrics artifact's confidenceMetrics data format.")); + }); +}); + +describe('MetricsTab with confusionMatrix', () => { + it('shows confusion matrix', async () => { + const execution = buildBasicExecution().setLastKnownState(Execution.State.COMPLETE); + const artifactType = buildClassificationMetricsArtifactType(); + const artifact = buildClassificationMetricsArtifact(); + artifact.getCustomPropertiesMap().set('display_name', new Value().setStringValue('metrics')); + artifact.getCustomPropertiesMap().set( + 'confusionMatrix', + new Value().setStructValue( + Struct.fromJavaScript({ + struct: { + annotationSpecs: [ + { displayName: 'Setosa' }, + { displayName: 'Versicolour' }, + { displayName: 'Virginica' }, + ], + rows: [{ row: [31, 0, 0] }, { row: [1, 8, 12] }, { row: [0, 0, 23] }], + }, + }), + ), + ); + const linkedArtifact = { event: new Event(), artifact: artifact }; + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockResolvedValueOnce([linkedArtifact]); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockResolvedValueOnce([artifactType]); + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + getByText('Metrics is loading.'); + await waitFor(() => getByText('Confusion Matrix: metrics')); + }); + + it('shows error banner when confusionMatrix type is wrong', async () => { + const execution = buildBasicExecution().setLastKnownState(Execution.State.COMPLETE); + const artifactType = buildClassificationMetricsArtifactType(); + const artifact = buildClassificationMetricsArtifact(); + artifact.getCustomPropertiesMap().set('display_name', new Value().setStringValue('metrics')); + artifact.getCustomPropertiesMap().set( + 'confusionMatrix', + new Value().setStructValue( + Struct.fromJavaScript({ + struct: { + annotationSpecs: [ + { displayName: 'Setosa' }, + { displayName: 'Versicolour' }, + { displayName: 'Virginica' }, + ], + rows: [{ row: 'I am not an array' }, { row: [1, 8, 12] }, { row: [0, 0, 23] }], + }, + }), + ), + ); + const linkedArtifact = { event: new Event(), artifact: artifact }; + + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockResolvedValue([linkedArtifact]); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockResolvedValue([artifactType]); + + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + + await waitFor(() => getByText("Error in metrics artifact's confusionMatrix data format.")); + }); + + it("shows error banner when confusionMatrix annotationSpecs length doesn't match rows", async () => { + const execution = buildBasicExecution().setLastKnownState(Execution.State.COMPLETE); + const artifactType = buildClassificationMetricsArtifactType(); + const artifact = buildClassificationMetricsArtifact(); + artifact.getCustomPropertiesMap().set('display_name', new Value().setStringValue('metrics')); + artifact.getCustomPropertiesMap().set( + 'confusionMatrix', + new Value().setStructValue( + Struct.fromJavaScript({ + struct: { + annotationSpecs: [{ displayName: 'Setosa' }, { displayName: 'Versicolour' }], + rows: [{ row: [31, 0, 0] }, { row: [1, 8, 12] }, { row: [0, 0, 23] }], + }, + }), + ), + ); + const linkedArtifact = { event: new Event(), artifact: artifact }; + + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockResolvedValue([linkedArtifact]); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockResolvedValue([artifactType]); + + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + + await waitFor(() => getByText("Error in metrics artifact's confusionMatrix data format.")); + }); +}); + +describe('MetricsTab with Scalar Metrics', () => { + it('shows Scalar Metrics', async () => { + const execution = buildBasicExecution().setLastKnownState(Execution.State.COMPLETE); + const artifact = buildMetricsArtifact(); + artifact.getCustomPropertiesMap().set('display_name', new Value().setStringValue('metrics')); + artifact.getCustomPropertiesMap().set('double', new Value().setDoubleValue(123.456)); + artifact.getCustomPropertiesMap().set('int', new Value().setIntValue(123)); + artifact.getCustomPropertiesMap().set( + 'struct', + new Value().setStructValue( + Struct.fromJavaScript({ + struct: { + field: 'a string value', + }, + }), + ), + ); + const linkedArtifact = { event: new Event(), artifact: artifact }; + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockResolvedValueOnce([linkedArtifact]); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockResolvedValueOnce([buildMetricsArtifactType()]); + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + getByText('Metrics is loading.'); + await waitFor(() => getByText('Scalar Metrics: metrics')); + await waitFor(() => getByText('double')); + await waitFor(() => getByText('int')); + await waitFor(() => getByText('struct')); + }); +}); + +describe('MetricsTab with V1 metrics', () => { + it('shows Confusion Matrix', async () => { + const linkedArtifact = buildV1LinkedSytemArtifact(); + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockResolvedValue([linkedArtifact]); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockResolvedValue([buildSystemArtifactType()]); + const execution = buildBasicExecution().setLastKnownState(Execution.State.COMPLETE); + const confusionViewerConfigs: ConfusionMatrixConfig[] = [ + { + axes: ['target', 'predicted'], + data: [ + [100, 20, 5], + [40, 200, 33], + [0, 10, 200], + ], + labels: ['rose', 'lily', 'iris'], + type: PlotType.CONFUSION_MATRIX, + }, + ]; + jest + .spyOn(OutputArtifactLoader, 'load') + .mockReturnValue(Promise.resolve(confusionViewerConfigs)); + + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + getByText('Metrics is loading.'); + await waitFor(() => getByText('Confusion matrix')); + }); + + it('shows ROC Curve', async () => { + const linkedArtifact = buildV1LinkedSytemArtifact(); + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockResolvedValue([linkedArtifact]); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockResolvedValue([buildSystemArtifactType()]); + const execution = buildBasicExecution().setLastKnownState(Execution.State.COMPLETE); + const rocViewerConfig: ROCCurveConfig[] = [ + { + data: [ + { label: '0.999972701073', x: 0, y: 0.00265957446809 }, + { label: '0.996713876724', x: 0, y: 0.226063829787 }, + ], + type: PlotType.ROC, + }, + ]; + jest.spyOn(OutputArtifactLoader, 'load').mockReturnValue(Promise.resolve(rocViewerConfig)); + + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + getByText('Metrics is loading.'); + await waitFor(() => getByText('ROC Curve')); + }); + + it('shows HTML view', async () => { + const linkedArtifact = buildV1LinkedSytemArtifact(); + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockResolvedValue([linkedArtifact]); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockResolvedValue([buildSystemArtifactType()]); + const execution = buildBasicExecution().setLastKnownState(Execution.State.COMPLETE); + const htmlViewerConfig: HTMLViewerConfig[] = [ + { htmlContent: '<h1>Hello, World!</h1>', type: PlotType.WEB_APP }, + ]; + jest.spyOn(OutputArtifactLoader, 'load').mockResolvedValue(htmlViewerConfig); + + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + getByText('Metrics is loading.'); + await waitFor(() => getByText('Static HTML')); + }); + + it('shows Markdown view', async () => { + const linkedArtifact = buildV1LinkedSytemArtifact(); + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockResolvedValue([linkedArtifact]); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockResolvedValue([buildSystemArtifactType()]); + const execution = buildBasicExecution().setLastKnownState(Execution.State.COMPLETE); + const markdownViewerConfig: MarkdownViewerConfig[] = [ + { + markdownContent: + '# Inline Markdown\n\n* [Kubeflow official doc](https://www.kubeflow.org/).\n', + type: PlotType.MARKDOWN, + }, + ]; + jest.spyOn(OutputArtifactLoader, 'load').mockResolvedValue(markdownViewerConfig); + + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + getByText('Metrics is loading.'); + await waitFor(() => getByText('Markdown')); + await waitFor(() => getByText('Kubeflow official doc')); + }); + + it('shows Tensorboard view', async () => { + const linkedArtifact = buildV1LinkedSytemArtifact(); + jest + .spyOn(mlmdUtils, 'getOutputLinkedArtifactsInExecution') + .mockResolvedValue([linkedArtifact]); + jest.spyOn(mlmdUtils, 'getArtifactTypes').mockResolvedValue([buildSystemArtifactType()]); + const execution = buildBasicExecution().setLastKnownState(Execution.State.COMPLETE); + const tensorboardViewerConfig: TensorboardViewerConfig[] = [ + { + type: PlotType.TENSORBOARD, + url: 's3://mlpipeline/tensorboard/logs/8d0e4b0a-466a-4c56-8164-30ed20cbc4a0', + namespace: 'kubeflow', + image: 'gcr.io/deeplearning-platform-release/tf2-cpu.2-3:latest', + podTemplateSpec: { + spec: { + containers: [ + { + env: [ + { + name: 'AWS_ACCESS_KEY_ID', + valueFrom: { + secretKeyRef: { name: 'mlpipeline-minio-artifact', key: 'accesskey' }, + }, + }, + { + name: 'AWS_SECRET_ACCESS_KEY', + valueFrom: { + secretKeyRef: { + name: 'mlpipeline-minio-artifact', + key: 'secretkey', + }, + }, + }, + { name: 'AWS_REGION', value: 'minio' }, + { name: 'S3_ENDPOINT', value: 'minio-service:9000' }, + { name: 'S3_USE_HTTPS', value: '0' }, + { name: 'S3_VERIFY_SSL', value: '0' }, + ], + }, + ], + }, + }, + }, + ]; + jest.spyOn(OutputArtifactLoader, 'load').mockResolvedValue(tensorboardViewerConfig); + + const { getByText } = render( + <CommonTestWrapper> + <MetricsTab execution={execution} namespace={namespace}></MetricsTab> + </CommonTestWrapper>, + ); + getByText('Metrics is loading.'); + await waitFor(() => getByText('Start Tensorboard')); + }); +}); + +function buildBasicExecution() { + const execution = new Execution(); + execution.setId(123); + return execution; +} + +function buildClassificationMetricsArtifactType() { + const artifactType = new ArtifactType(); + artifactType.setName('system.ClassificationMetrics'); + artifactType.setId(1); + return artifactType; +} + +function buildClassificationMetricsArtifact() { + const artifact = new Artifact(); + artifact.setTypeId(1); + return artifact; +} + +function buildMetricsArtifactType() { + const artifactType = new ArtifactType(); + artifactType.setName('system.Metrics'); + artifactType.setId(2); + return artifactType; +} + +function buildMetricsArtifact() { + const artifact = new Artifact(); + artifact.setTypeId(2); + return artifact; +} + +function buildSystemArtifactType() { + const artifactType = new ArtifactType(); + artifactType.setName('system.Artifact'); + artifactType.setId(3); + return artifactType; +} + +function buildV1LinkedSytemArtifact() { + const artifact = new Artifact(); + artifact.setTypeId(3); + artifact.setUri('minio://mlpipeline/override/mlpipeline_ui_metadata'); + + const event = new Event(); + const path = new Event.Path(); + path.getStepsList().push(new Event.Path.Step().setKey('mlpipeline_ui_metadata')); + event.setPath(path); + + const linkedArtifact: mlmdUtils.LinkedArtifact = { artifact: artifact, event: event }; + return linkedArtifact; +} diff --git a/frontend/src/components/tabs/MetricsTab.tsx b/frontend/src/components/tabs/MetricsTab.tsx new file mode 100644 index 0000000000..e3f641af12 --- /dev/null +++ b/frontend/src/components/tabs/MetricsTab.tsx @@ -0,0 +1,126 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as React from 'react'; +import { useQuery } from 'react-query'; +import { ErrorBoundary } from 'src/atoms/ErrorBoundary'; +import { commonCss, padding } from 'src/Css'; +import { + getArtifactTypes, + getOutputLinkedArtifactsInExecution, + LinkedArtifact, +} from 'src/mlmd/MlmdUtils'; +import { ArtifactType, Execution } from 'src/third_party/mlmd'; +import Banner from '../Banner'; +import { MetricsVisualizations } from '../viewers/MetricsVisualizations'; +import { ExecutionTitle } from './ExecutionTitle'; + +type MetricsTabProps = { + execution: Execution; + namespace: string | undefined; +}; + +/** + * Metrics tab renders metrics for the artifact of given execution. + * Some system metrics are: Confusion Matrix, ROC Curve, Scalar, etc. + * Detail can be found in https://github.com/kubeflow/pipelines/blob/master/sdk/python/kfp/dsl/io_types.py + * Note that these metrics are only available on KFP v2 mode. + */ +export function MetricsTab({ execution, namespace }: MetricsTabProps) { + let executionCompleted = false; + const executionState = execution.getLastKnownState(); + if ( + !( + executionState === Execution.State.NEW || + executionState === Execution.State.UNKNOWN || + executionState === Execution.State.RUNNING + ) + ) { + executionCompleted = true; + } + + const executionId = execution.getId(); + // Retrieving a list of artifacts associated with this execution, + // so we can find the artifact for system metrics from there. + const { + isLoading: isLoadingArtifacts, + isSuccess: isSuccessArtifacts, + error: errorArtifacts, + data: artifacts, + } = useQuery<LinkedArtifact[], Error>( + ['execution_output_artifact', { id: executionId, state: executionState }], + () => getOutputLinkedArtifactsInExecution(execution), + { enabled: executionCompleted, staleTime: Infinity }, + ); + + // artifactTypes allows us to map from artifactIds to artifactTypeNames, + // so we can identify metrics artifact provided by system. + const { + isLoading: isLoadingArtifactTypes, + isSuccess: isSuccessArtifactTypes, + error: errorArtifactTypes, + data: artifactTypes, + } = useQuery<ArtifactType[], Error>( + ['artifact_types', { id: executionId, state: executionState }], + () => getArtifactTypes(), + { + enabled: executionCompleted, + staleTime: Infinity, + }, + ); + + let executionStateUnknown = executionState === Execution.State.UNKNOWN; + // This react element produces banner message if query to MLMD is pending or has error. + // Once query is completed, it shows actual content of metrics visualization in MetricsSwitcher. + return ( + <ErrorBoundary> + <div className={commonCss.page}> + <div className={padding(20)}> + <ExecutionTitle execution={execution} /> + {executionStateUnknown && <Banner message='Task is in unknown state.' mode='info' />} + {!executionStateUnknown && !executionCompleted && ( + <Banner message='Task has not completed.' mode='info' /> + )} + {(isLoadingArtifactTypes || isLoadingArtifacts) && ( + <Banner message='Metrics is loading.' mode='info' /> + )} + {errorArtifacts && ( + <Banner + message='Error in retrieving metrics information.' + mode='error' + additionalInfo={errorArtifacts.message} + /> + )} + {!errorArtifacts && errorArtifactTypes && ( + <Banner + message='Error in retrieving artifact types information.' + mode='error' + additionalInfo={errorArtifactTypes.message} + /> + )} + {isSuccessArtifacts && isSuccessArtifactTypes && artifacts && artifactTypes && ( + <MetricsVisualizations + linkedArtifacts={artifacts} + artifactTypes={artifactTypes} + execution={execution} + namespace={namespace} + ></MetricsVisualizations> + )} + </div> + </div> + </ErrorBoundary> + ); +} diff --git a/frontend/src/components/viewers/ConfusionMatrix.test.tsx b/frontend/src/components/viewers/ConfusionMatrix.test.tsx index 6aa3125405..a4b2a6c3ad 100644 --- a/frontend/src/components/viewers/ConfusionMatrix.test.tsx +++ b/frontend/src/components/viewers/ConfusionMatrix.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/viewers/ConfusionMatrix.tsx b/frontend/src/components/viewers/ConfusionMatrix.tsx index 2ef0642a7d..60be3c7461 100644 --- a/frontend/src/components/viewers/ConfusionMatrix.tsx +++ b/frontend/src/components/viewers/ConfusionMatrix.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -106,7 +106,6 @@ class ConfusionMatrix extends Viewer<ConfusionMatrixProps, ConfusionMatrixState> root: { flexGrow: 1, justifyContent: 'center', - margin: 'auto', pointerEvents: this._isSmall() ? 'none' : 'initial', // Disable interaction for snapshot view position: 'relative', width: 'fit-content', diff --git a/frontend/src/components/viewers/HTMLViewer.test.tsx b/frontend/src/components/viewers/HTMLViewer.test.tsx index 77adda0f29..99165c17ab 100644 --- a/frontend/src/components/viewers/HTMLViewer.test.tsx +++ b/frontend/src/components/viewers/HTMLViewer.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/viewers/HTMLViewer.tsx b/frontend/src/components/viewers/HTMLViewer.tsx index 7446f5bf34..de5b56fe7f 100644 --- a/frontend/src/components/viewers/HTMLViewer.tsx +++ b/frontend/src/components/viewers/HTMLViewer.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,7 +39,7 @@ class HTMLViewer extends Viewer<HTMLViewerProps, any> { flexGrow: 1, height: this.props.maxDimension ? this.props.maxDimension : 'initial', minHeight: this.props.maxDimension ? this.props.maxDimension : 600, - width: this.props.maxDimension ? this.props.maxDimension : '100%', + width: '100%', }, }); diff --git a/frontend/src/components/viewers/MarkdownViewer.test.tsx b/frontend/src/components/viewers/MarkdownViewer.test.tsx index 9d316d0500..134bc10adb 100644 --- a/frontend/src/components/viewers/MarkdownViewer.test.tsx +++ b/frontend/src/components/viewers/MarkdownViewer.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,8 +14,9 @@ * limitations under the License. */ -import * as React from 'react'; +import { render } from '@testing-library/react'; import { mount } from 'enzyme'; +import * as React from 'react'; import MarkdownViewer, { MarkdownViewerConfig } from './MarkdownViewer'; import { PlotType } from './Viewer'; @@ -53,4 +54,19 @@ describe('MarkdownViewer', () => { it('returns a user friendly display name', () => { expect(MarkdownViewer.prototype.getDisplayName()).toBe('Markdown'); }); + + it('capped at maximum markdown size', () => { + const config: MarkdownViewerConfig = { + markdownContent: 'X'.repeat(11), + type: PlotType.MARKDOWN, + }; + + const maximumMarkdownSize = 10; + const { getByText, queryByText } = render( + <MarkdownViewer configs={[config]} maxLength={maximumMarkdownSize} />, + ); + getByText('This markdown is too large to render completely.'); + getByText('X'.repeat(maximumMarkdownSize)); + expect(queryByText('X'.repeat(11))).toBeNull(); + }); }); diff --git a/frontend/src/components/viewers/MarkdownViewer.tsx b/frontend/src/components/viewers/MarkdownViewer.tsx index e281abacf6..63935cfedd 100644 --- a/frontend/src/components/viewers/MarkdownViewer.tsx +++ b/frontend/src/components/viewers/MarkdownViewer.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ import * as React from 'react'; import Viewer, { ViewerConfig } from './Viewer'; import { cssRaw } from 'typestyle'; import Markdown from 'markdown-to-jsx'; +import Banner from '../Banner'; cssRaw(` .markdown-viewer h1, @@ -53,13 +54,16 @@ position: relative; } `); +const MAX_MARKDOWN_STR_LENGTH = 50 * 1000 * 8; // 50KB + export interface MarkdownViewerConfig extends ViewerConfig { markdownContent: string; } -interface MarkdownViewerProps { +export interface MarkdownViewerProps { configs: MarkdownViewerConfig[]; maxDimension?: number; + maxLength?: number; } class MarkdownViewer extends Viewer<MarkdownViewerProps, any> { @@ -75,10 +79,39 @@ class MarkdownViewer extends Viewer<MarkdownViewerProps, any> { } return ( <div className='markdown-viewer'> - <Markdown>{this._config.markdownContent}</Markdown> + <MarkdownAdvanced + maxMarkdownStrLength={this.props.maxLength} + content={this._config.markdownContent} + /> </div> ); } } export default MarkdownViewer; + +interface MarkdownAdvancedProps { + maxMarkdownStrLength?: number; + content: string; +} + +const MarkdownAdvanced = ({ + maxMarkdownStrLength = MAX_MARKDOWN_STR_LENGTH, + content, +}: MarkdownAdvancedProps) => { + // truncatedContent will be memoized, each call with the same content + maxMarkdownStrLength arguments will return the same truncatedContent without calculation. + // Reference: https://reactjs.org/docs/hooks-reference.html#usememo + const truncatedContent = React.useMemo(() => content.substr(0, maxMarkdownStrLength), [ + maxMarkdownStrLength, + content, + ]); + + return ( + <> + {content.length > maxMarkdownStrLength && ( + <Banner message='This markdown is too large to render completely.' mode={'warning'} /> + )} + <Markdown>{truncatedContent}</Markdown> + </> + ); +}; diff --git a/frontend/src/components/viewers/MetricsVisualizations.tsx b/frontend/src/components/viewers/MetricsVisualizations.tsx new file mode 100644 index 0000000000..d7e245bc2b --- /dev/null +++ b/frontend/src/components/viewers/MetricsVisualizations.tsx @@ -0,0 +1,618 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import HelpIcon from '@material-ui/icons/Help'; +import React from 'react'; +import { useQuery } from 'react-query'; +import { Array as ArrayRunType, Failure, Number, Record, String, ValidationError } from 'runtypes'; +import IconWithTooltip from 'src/atoms/IconWithTooltip'; +import { color, padding } from 'src/Css'; +import { Apis } from 'src/lib/Apis'; +import { OutputArtifactLoader } from 'src/lib/OutputArtifactLoader'; +import WorkflowParser, { StoragePath } from 'src/lib/WorkflowParser'; +import { getMetadataValue } from 'src/mlmd/library'; +import { + filterArtifactsByType, + filterLinkedArtifactsByType, + getArtifactName, + LinkedArtifact, +} from 'src/mlmd/MlmdUtils'; +import { Artifact, ArtifactType, Execution } from 'src/third_party/mlmd'; +import Banner from '../Banner'; +import PlotCard from '../PlotCard'; +import ConfusionMatrix, { ConfusionMatrixConfig } from './ConfusionMatrix'; +import { HTMLViewerConfig } from './HTMLViewer'; +import { MarkdownViewerConfig } from './MarkdownViewer'; +import PagedTable from './PagedTable'; +import ROCCurve, { ROCCurveConfig } from './ROCCurve'; +import { PlotType, ViewerConfig } from './Viewer'; +import { componentMap } from './ViewerContainer'; + +interface MetricsVisualizationsProps { + linkedArtifacts: LinkedArtifact[]; + artifactTypes: ArtifactType[]; + execution: Execution; + namespace: string | undefined; +} + +/** + * Visualize system metrics based on artifact input. There can be multiple artifacts + * and multiple visualizations associated with one artifact. + */ +export function MetricsVisualizations({ + linkedArtifacts, + artifactTypes, + execution, + namespace, +}: MetricsVisualizationsProps) { + // There can be multiple system.ClassificationMetrics or system.Metrics artifacts per execution. + // Get scalar metrics, confidenceMetrics and confusionMatrix from artifact. + // If there is no available metrics, show banner to notify users. + // Otherwise, Visualize all available metrics per artifact. + const artifacts = linkedArtifacts.map(x => x.artifact); + const classificationMetricsArtifacts = getVerifiedClassificationMetricsArtifacts( + artifacts, + artifactTypes, + ); + const metricsArtifacts = getVerifiedMetricsArtifacts(artifacts, artifactTypes); + const htmlArtifacts = getVertifiedHtmlArtifacts(linkedArtifacts, artifactTypes); + const mdArtifacts = getVertifiedMarkdownArtifacts(linkedArtifacts, artifactTypes); + const v1VisualizationArtifact = getV1VisualizationArtifacts(linkedArtifacts, artifactTypes); + + const { + isSuccess: isV1ViewerConfigsSuccess, + error: v1ViewerConfigError, + data: v1ViewerConfigs, + } = useQuery<ViewerConfig[], Error>( + [ + 'viewconfig', + { + artifact: v1VisualizationArtifact?.artifact.getId(), + state: execution.getLastKnownState(), + namespace: namespace, + }, + ], + () => getViewConfig(v1VisualizationArtifact, namespace), + { staleTime: Infinity }, + ); + + const { isSuccess: isHtmlDownloaded, error: htmlError, data: htmlViewerConfigs } = useQuery< + HTMLViewerConfig[], + Error + >( + [ + 'htmlViewerConfig', + { + artifacts: htmlArtifacts.map(linkedArtifact => { + return linkedArtifact.artifact.getId(); + }), + state: execution.getLastKnownState(), + namespace: namespace, + }, + ], + () => getHtmlViewerConfig(htmlArtifacts, namespace), + { staleTime: Infinity }, + ); + + const { + isSuccess: isMarkdownDownloaded, + error: markdownError, + data: markdownViewerConfigs, + } = useQuery<MarkdownViewerConfig[], Error>( + [ + 'markdownViewerConfig', + { + artifacts: mdArtifacts.map(linkedArtifact => { + return linkedArtifact.artifact.getId(); + }), + state: execution.getLastKnownState(), + namespace: namespace, + }, + ], + () => getMarkdownViewerConfig(mdArtifacts, namespace), + { staleTime: Infinity }, + ); + + if ( + classificationMetricsArtifacts.length === 0 && + metricsArtifacts.length === 0 && + htmlArtifacts.length === 0 && + mdArtifacts.length === 0 && + !v1VisualizationArtifact + ) { + return <Banner message='There is no metrics artifact available in this step.' mode='info' />; + } + + return ( + <> + {/* Shows first encountered issue on Banner */} + + {(() => { + if (v1ViewerConfigError) { + return ( + <Banner + message='Error in retrieving v1 metrics information.' + mode='error' + additionalInfo={v1ViewerConfigError.message} + /> + ); + } + if (htmlError) { + return ( + <Banner + message='Error in retrieving HTML visualization information.' + mode='error' + additionalInfo={htmlError.message} + /> + ); + } + if (markdownError) { + return ( + <Banner + message='Error in retrieving Markdown visualization information.' + mode='error' + additionalInfo={markdownError.message} + /> + ); + } + return null; + })()} + + {/* Shows visualizations of all kinds */} + {classificationMetricsArtifacts.map(artifact => { + return ( + <React.Fragment key={artifact.getId()}> + <ConfidenceMetricsSection artifact={artifact} /> + <ConfusionMatrixSection artifact={artifact} /> + </React.Fragment> + ); + })} + {metricsArtifacts.map(artifact => ( + <ScalarMetricsSection artifact={artifact} key={artifact.getId()} /> + ))} + {isHtmlDownloaded && htmlViewerConfigs && ( + <div key={'html'} className={padding(20, 'lrt')}> + <PlotCard configs={htmlViewerConfigs} title={'Static HTML'} /> + </div> + )} + {isMarkdownDownloaded && markdownViewerConfigs && ( + <div key={'markdown'} className={padding(20, 'lrt')}> + <PlotCard configs={markdownViewerConfigs} title={'Static Markdown'} /> + </div> + )} + {isV1ViewerConfigsSuccess && + v1ViewerConfigs && + v1ViewerConfigs.map((config, i) => { + const title = componentMap[config.type].prototype.getDisplayName(); + return ( + <div key={i} className={padding(20, 'lrt')}> + <PlotCard configs={[config]} title={title} /> + </div> + ); + })} + </> + ); +} + +function getVerifiedClassificationMetricsArtifacts( + artifacts: Artifact[], + artifactTypes: ArtifactType[], +): Artifact[] { + if (!artifacts || !artifactTypes) { + return []; + } + // Reference: https://github.com/kubeflow/pipelines/blob/master/sdk/python/kfp/dsl/io_types.py#L124 + // system.ClassificationMetrics contains confusionMatrix or confidenceMetrics. + const classificationMetricsArtifacts = filterArtifactsByType( + 'system.ClassificationMetrics', + artifactTypes, + artifacts, + ); + + return classificationMetricsArtifacts + .map(artifact => ({ + name: artifact + .getCustomPropertiesMap() + .get('display_name') + ?.getStringValue(), + customProperties: artifact.getCustomPropertiesMap(), + artifact: artifact, + })) + .filter(x => !!x.name) + .filter(x => { + const confidenceMetrics = x.customProperties + .get('confidenceMetrics') + ?.getStructValue() + ?.toJavaScript(); + + const confusionMatrix = x.customProperties + .get('confusionMatrix') + ?.getStructValue() + ?.toJavaScript(); + return !!confidenceMetrics || !!confusionMatrix; + }) + .map(x => x.artifact); +} + +function getVerifiedMetricsArtifacts( + artifacts: Artifact[], + artifactTypes: ArtifactType[], +): Artifact[] { + if (!artifacts || !artifactTypes) { + return []; + } + // Reference: https://github.com/kubeflow/pipelines/blob/master/sdk/python/kfp/dsl/io_types.py#L104 + // system.Metrics contains scalar metrics. + const metricsArtifacts = filterArtifactsByType('system.Metrics', artifactTypes, artifacts); + + return metricsArtifacts.filter(x => + x + .getCustomPropertiesMap() + .get('display_name') + ?.getStringValue(), + ); +} + +function getVertifiedHtmlArtifacts( + linkedArtifacts: LinkedArtifact[], + artifactTypes: ArtifactType[], +): LinkedArtifact[] { + if (!linkedArtifacts || !artifactTypes) { + return []; + } + const htmlArtifacts = filterLinkedArtifactsByType('system.HTML', artifactTypes, linkedArtifacts); + + return htmlArtifacts.filter(x => + x.artifact + .getCustomPropertiesMap() + .get('display_name') + ?.getStringValue(), + ); +} + +function getVertifiedMarkdownArtifacts( + linkedArtifacts: LinkedArtifact[], + artifactTypes: ArtifactType[], +): LinkedArtifact[] { + if (!linkedArtifacts || !artifactTypes) { + return []; + } + const htmlArtifacts = filterLinkedArtifactsByType( + 'system.Markdown', + artifactTypes, + linkedArtifacts, + ); + + return htmlArtifacts.filter(x => + x.artifact + .getCustomPropertiesMap() + .get('display_name') + ?.getStringValue(), + ); +} + +function getV1VisualizationArtifacts( + linkedArtifacts: LinkedArtifact[], + artifactTypes: ArtifactType[], +): LinkedArtifact | undefined { + const systemArtifacts = filterLinkedArtifactsByType( + 'system.Artifact', + artifactTypes, + linkedArtifacts, + ); + + const v1VisualizationArtifacts = systemArtifacts.filter(x => { + if (!x) { + return false; + } + const artifactName = getArtifactName(x); + // This is a hack to find mlpipeline-ui-metadata artifact for visualization. + const updatedName = artifactName?.replace(/[\W_]/g, '-').toLowerCase(); + return updatedName === 'mlpipeline-ui-metadata'; + }); + + if (v1VisualizationArtifacts.length > 1) { + throw new Error( + 'There are more than 1 mlpipeline-ui-metadata artifact: ' + + JSON.stringify(v1VisualizationArtifacts), + ); + } + return v1VisualizationArtifacts.length === 0 ? undefined : v1VisualizationArtifacts[0]; +} + +const ROC_CURVE_DEFINITION = + 'The receiver operating characteristic (ROC) curve shows the trade-off between true positive rate and false positive rate. ' + + 'A lower threshold results in a higher true positive rate (and a higher false positive rate), ' + + 'while a higher threshold results in a lower true positive rate (and a lower false positive rate)'; + +type ConfidenceMetric = { + confidenceThreshold: string; + falsePositiveRate: number; + recall: number; +}; + +interface ConfidenceMetricsSectionProps { + artifact: Artifact; +} + +function ConfidenceMetricsSection({ artifact }: ConfidenceMetricsSectionProps) { + const customProperties = artifact.getCustomPropertiesMap(); + const name = customProperties.get('display_name')?.getStringValue(); + + const confidenceMetrics = customProperties + .get('confidenceMetrics') + ?.getStructValue() + ?.toJavaScript(); + if (confidenceMetrics === undefined) { + return null; + } + + const { error } = validateConfidenceMetrics((confidenceMetrics as any).list); + + if (error) { + const errorMsg = 'Error in ' + name + " artifact's confidenceMetrics data format."; + return <Banner message={errorMsg} mode='error' additionalInfo={error} />; + } + return ( + <div className={padding(40, 'lrt')}> + <div className={padding(40, 'b')}> + <h3> + {'ROC Curve: ' + name}{' '} + <IconWithTooltip + Icon={HelpIcon} + iconColor={color.weak} + tooltip={ROC_CURVE_DEFINITION} + ></IconWithTooltip> + </h3> + </div> + <ROCCurve configs={buildRocCurveConfig((confidenceMetrics as any).list)} /> + </div> + ); +} + +const ConfidenceMetricRunType = Record({ + confidenceThreshold: Number, + falsePositiveRate: Number, + recall: Number, +}); +const ConfidenceMetricArrayRunType = ArrayRunType(ConfidenceMetricRunType); +function validateConfidenceMetrics(inputs: any): { error?: string } { + try { + ConfidenceMetricArrayRunType.check(inputs); + } catch (e) { + if (e instanceof ValidationError) { + return { error: e.message + '. Data: ' + JSON.stringify(inputs) }; + } + } + return {}; +} + +function buildRocCurveConfig(confidenceMetricsArray: ConfidenceMetric[]): ROCCurveConfig[] { + const arraytypesCheck = ConfidenceMetricArrayRunType.check(confidenceMetricsArray); + return [ + { + type: PlotType.ROC, + data: arraytypesCheck.map(metric => ({ + label: (metric.confidenceThreshold as unknown) as string, + x: metric.falsePositiveRate, + y: metric.recall, + })), + }, + ]; +} + +type AnnotationSpec = { + displayName: string; +}; +type Row = { + row: number[]; +}; +type ConfusionMatrixInput = { + annotationSpecs: AnnotationSpec[]; + rows: Row[]; +}; + +interface ConfusionMatrixProps { + artifact: Artifact; +} + +const CONFUSION_MATRIX_DEFINITION = + 'The number of correct and incorrect predictions are ' + + 'summarized with count values and broken down by each class. ' + + 'The higher value on cell where Predicted label matches True label, ' + + 'the better prediction performance of this model is.'; + +function ConfusionMatrixSection({ artifact }: ConfusionMatrixProps) { + const customProperties = artifact.getCustomPropertiesMap(); + const name = customProperties.get('display_name')?.getStringValue(); + + const confusionMatrix = customProperties + .get('confusionMatrix') + ?.getStructValue() + ?.toJavaScript(); + if (confusionMatrix === undefined) { + return null; + } + + const { error } = validateConfusionMatrix(confusionMatrix.struct as any); + + if (error) { + const errorMsg = 'Error in ' + name + " artifact's confusionMatrix data format."; + return <Banner message={errorMsg} mode='error' additionalInfo={error} />; + } + return ( + <div className={padding(40)}> + <div className={padding(40, 'b')}> + <h3> + {'Confusion Matrix: ' + name}{' '} + <IconWithTooltip + Icon={HelpIcon} + iconColor={color.weak} + tooltip={CONFUSION_MATRIX_DEFINITION} + ></IconWithTooltip> + </h3> + </div> + <ConfusionMatrix configs={buildConfusionMatrixConfig(confusionMatrix.struct as any)} /> + </div> + ); +} + +const ConfusionMatrixInputRunType = Record({ + annotationSpecs: ArrayRunType( + Record({ + displayName: String, + }), + ), + rows: ArrayRunType(Record({ row: ArrayRunType(Number) })), +}); +function validateConfusionMatrix(input: any): { error?: string } { + if (!input) return { error: 'confusionMatrix does not exist.' }; + try { + const matrix = ConfusionMatrixInputRunType.check(input); + const height = matrix.rows.length; + const annotationLen = matrix.annotationSpecs.length; + if (annotationLen !== height) { + throw new ValidationError({ + message: + 'annotationSpecs has different length ' + annotationLen + ' than rows length ' + height, + } as Failure); + } + for (let x of matrix.rows) { + if (x.row.length !== height) + throw new ValidationError({ + message: 'row: ' + JSON.stringify(x) + ' has different length of columns from rows.', + } as Failure); + } + } catch (e) { + if (e instanceof ValidationError) { + return { error: e.message + '. Data: ' + JSON.stringify(input) }; + } + } + return {}; +} + +function buildConfusionMatrixConfig( + confusionMatrix: ConfusionMatrixInput, +): ConfusionMatrixConfig[] { + return [ + { + type: PlotType.CONFUSION_MATRIX, + axes: ['True label', 'Predicted label'], + labels: confusionMatrix.annotationSpecs.map(annotation => annotation.displayName), + data: confusionMatrix.rows.map(x => x.row), + }, + ]; +} + +interface ScalarMetricsSectionProps { + artifact: Artifact; +} +function ScalarMetricsSection({ artifact }: ScalarMetricsSectionProps) { + const customProperties = artifact.getCustomPropertiesMap(); + const name = customProperties.get('display_name')?.getStringValue(); + const data = customProperties + .getEntryList() + .map(([key]) => ({ + key, + value: JSON.stringify(getMetadataValue(customProperties.get(key))), + })) + .filter(metric => metric.key !== 'display_name'); + + if (data.length === 0) { + return null; + } + return ( + <div className={padding(40, 'lrt')}> + <div className={padding(40, 'b')}> + <h3>{'Scalar Metrics: ' + name}</h3> + </div> + <PagedTable + configs={[ + { + data: data.map(d => [d.key, d.value]), + labels: ['name', 'value'], + type: PlotType.TABLE, + }, + ]} + /> + </div> + ); +} + +async function getViewConfig( + v1VisualizationArtifact: LinkedArtifact | undefined, + namespace: string | undefined, +): Promise<ViewerConfig[]> { + if (v1VisualizationArtifact) { + return OutputArtifactLoader.load( + WorkflowParser.parseStoragePath(v1VisualizationArtifact.artifact.getUri()), + namespace, + ); + } + return []; +} + +async function getHtmlViewerConfig( + htmlArtifacts: LinkedArtifact[] | undefined, + namespace: string | undefined, +): Promise<HTMLViewerConfig[]> { + if (!htmlArtifacts) { + return []; + } + const htmlViewerConfigs = htmlArtifacts.map(async linkedArtifact => { + const uri = linkedArtifact.artifact.getUri(); + let storagePath: StoragePath | undefined; + if (!uri) { + throw new Error('HTML Artifact URI unknown'); + } + + storagePath = WorkflowParser.parseStoragePath(uri); + if (!storagePath) { + throw new Error('HTML Artifact storagePath unknown'); + } + + // TODO(zijianjoy): Limit the size of HTML file fetching to prevent UI frozen. + let data = await Apis.readFile(storagePath, namespace); + return { htmlContent: data, type: PlotType.WEB_APP } as HTMLViewerConfig; + }); + return Promise.all(htmlViewerConfigs); +} + +async function getMarkdownViewerConfig( + markdownArtifacts: LinkedArtifact[] | undefined, + namespace: string | undefined, +): Promise<MarkdownViewerConfig[]> { + if (!markdownArtifacts) { + return []; + } + const markdownViewerConfigs = markdownArtifacts.map(async linkedArtifact => { + const uri = linkedArtifact.artifact.getUri(); + let storagePath: StoragePath | undefined; + if (!uri) { + throw new Error('Markdown Artifact URI unknown'); + } + + storagePath = WorkflowParser.parseStoragePath(uri); + if (!storagePath) { + throw new Error('Markdown Artifact storagePath unknown'); + } + + // TODO(zijianjoy): Limit the size of Markdown file fetching to prevent UI frozen. + let data = await Apis.readFile(storagePath, namespace); + return { markdownContent: data, type: PlotType.MARKDOWN } as MarkdownViewerConfig; + }); + return Promise.all(markdownViewerConfigs); +} diff --git a/frontend/src/components/viewers/PagedTable.test.tsx b/frontend/src/components/viewers/PagedTable.test.tsx index 9543c88fa6..ed5d03248e 100644 --- a/frontend/src/components/viewers/PagedTable.test.tsx +++ b/frontend/src/components/viewers/PagedTable.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/viewers/PagedTable.tsx b/frontend/src/components/viewers/PagedTable.tsx index 651e5ecd50..bb30b0e7ad 100644 --- a/frontend/src/components/viewers/PagedTable.tsx +++ b/frontend/src/components/viewers/PagedTable.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -126,12 +126,11 @@ class PagedTable extends Viewer<PagedTableProps, PagedTableState> { </TableHead> <TableBody> - {/* TODO: bug: sorting keeps appending items */} {this._stableSort(data) .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) - .map(row => { + .map((row, index) => { return ( - <TableRow hover={true} tabIndex={-1} key={row[0]} className={this._css.row}> + <TableRow hover={true} tabIndex={-1} key={index} className={this._css.row}> {row.map((cell, i) => ( <TableCell key={i} className={this._css.cell}> {cell} diff --git a/frontend/src/components/viewers/ROCCurve.test.tsx b/frontend/src/components/viewers/ROCCurve.test.tsx index d15486d573..3b01903b59 100644 --- a/frontend/src/components/viewers/ROCCurve.test.tsx +++ b/frontend/src/components/viewers/ROCCurve.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/viewers/ROCCurve.tsx b/frontend/src/components/viewers/ROCCurve.tsx index 85f3e911a2..4eba22eae5 100644 --- a/frontend/src/components/viewers/ROCCurve.tsx +++ b/frontend/src/components/viewers/ROCCurve.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -66,7 +66,7 @@ const lineColors = [ '#5ec4ec', ]; -interface DisplayPoint { +export interface DisplayPoint { label: string; x: number; y: number; diff --git a/frontend/src/components/viewers/Tensorboard.test.tsx b/frontend/src/components/viewers/Tensorboard.test.tsx index 89e1e8378b..23929c9630 100644 --- a/frontend/src/components/viewers/Tensorboard.test.tsx +++ b/frontend/src/components/viewers/Tensorboard.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,7 +27,14 @@ const DEFAULT_CONFIG: TensorboardViewerConfig = { namespace: 'test-ns', }; -describe('Tensorboard', () => { +const GET_APP_NOT_FOUND = { podAddress: '', tfVersion: '', image: '' }; +const GET_APP_FOUND = { + podAddress: 'podaddress', + tfVersion: '1.14.0', + image: 'tensorflow/tensorflow:1.14.0', +}; + +describe.only('Tensorboard', () => { let tree: ReactWrapper | ShallowWrapper; const flushPromisesAndTimers = async () => { jest.runOnlyPendingTimers(); @@ -50,15 +57,119 @@ describe('Tensorboard', () => { }); it('base component snapshot', async () => { - const getAppMock = () => Promise.resolve({ podAddress: '', tfVersion: '' }); + const getAppMock = () => Promise.resolve(GET_APP_NOT_FOUND); jest.spyOn(Apis, 'getTensorboardApp').mockImplementation(getAppMock); tree = shallow(<TensorboardViewer configs={[]} />); await TestUtils.flushPromises(); - expect(tree).toMatchSnapshot(); + expect(tree).toMatchInlineSnapshot(` + <div> + <div> + <div + className="" + > + <WithStyles(FormControl) + className="formControl" + > + <WithStyles(WithFormControlContext(InputLabel)) + htmlFor="viewer-tb-image-select" + > + TF Image + </WithStyles(WithFormControlContext(InputLabel))> + <WithStyles(WithFormControlContext(Select)) + className="select" + input={ + <WithStyles(Input) + id="viewer-tb-image-select" + /> + } + onChange={[Function]} + value="tensorflow/tensorflow:2.2.2" + > + <WithStyles(ListSubheader)> + Tensoflow 1.x + </WithStyles(ListSubheader)> + <WithStyles(MenuItem) + value="tensorflow/tensorflow:1.7.1" + > + TensorFlow 1.7.1 + </WithStyles(MenuItem)> + <WithStyles(MenuItem) + value="tensorflow/tensorflow:1.8.0" + > + TensorFlow 1.8.0 + </WithStyles(MenuItem)> + <WithStyles(MenuItem) + value="tensorflow/tensorflow:1.9.0" + > + TensorFlow 1.9.0 + </WithStyles(MenuItem)> + <WithStyles(MenuItem) + value="tensorflow/tensorflow:1.10.1" + > + TensorFlow 1.10.1 + </WithStyles(MenuItem)> + <WithStyles(MenuItem) + value="tensorflow/tensorflow:1.11.0" + > + TensorFlow 1.11.0 + </WithStyles(MenuItem)> + <WithStyles(MenuItem) + value="tensorflow/tensorflow:1.12.3" + > + TensorFlow 1.12.3 + </WithStyles(MenuItem)> + <WithStyles(MenuItem) + value="tensorflow/tensorflow:1.13.2" + > + TensorFlow 1.13.2 + </WithStyles(MenuItem)> + <WithStyles(MenuItem) + value="tensorflow/tensorflow:1.14.0" + > + TensorFlow 1.14.0 + </WithStyles(MenuItem)> + <WithStyles(MenuItem) + value="tensorflow/tensorflow:1.15.5" + > + TensorFlow 1.15.5 + </WithStyles(MenuItem)> + <WithStyles(ListSubheader)> + TensorFlow 2.x + </WithStyles(ListSubheader)> + <WithStyles(MenuItem) + value="tensorflow/tensorflow:2.0.4" + > + TensorFlow 2.0.4 + </WithStyles(MenuItem)> + <WithStyles(MenuItem) + value="tensorflow/tensorflow:2.1.2" + > + TensorFlow 2.1.2 + </WithStyles(MenuItem)> + <WithStyles(MenuItem) + value="tensorflow/tensorflow:2.2.2" + > + TensorFlow 2.2.2 + </WithStyles(MenuItem)> + </WithStyles(WithFormControlContext(Select))> + </WithStyles(FormControl)> + </div> + <div> + <BusyButton + busy={false} + className="buttonAction" + disabled={false} + onClick={[Function]} + title="Start Tensorboard" + /> + </div> + </div> + </div> + `); }); it('does not break on no config', async () => { - const getAppMock = () => Promise.resolve({ podAddress: '', tfVersion: '' }); + const getAppMock = () => Promise.resolve(GET_APP_NOT_FOUND); jest.spyOn(Apis, 'getTensorboardApp').mockImplementation(getAppMock); tree = shallow(<TensorboardViewer configs={[]} />); const base = tree.debug(); @@ -84,7 +195,7 @@ describe('Tensorboard', () => { }); it('does not break on empty data', async () => { - const getAppMock = () => Promise.resolve({ podAddress: '', tfVersion: '' }); + const getAppMock = () => Promise.resolve(GET_APP_NOT_FOUND); jest.spyOn(Apis, 'getTensorboardApp').mockImplementation(getAppMock); const config = { ...DEFAULT_CONFIG, url: '' }; tree = shallow(<TensorboardViewer configs={[config]} />); @@ -112,7 +223,11 @@ describe('Tensorboard', () => { it('shows a link to the tensorboard instance if exists', async () => { const config = { ...DEFAULT_CONFIG, url: 'http://test/url' }; - const getAppMock = () => Promise.resolve({ podAddress: 'test/address', tfVersion: '1.14.0' }); + const getAppMock = () => + Promise.resolve({ + ...GET_APP_FOUND, + podAddress: 'test/address', + }); jest.spyOn(Apis, 'getTensorboardApp').mockImplementation(getAppMock); jest.spyOn(Apis, 'isTensorboardPodReady').mockImplementation(() => Promise.resolve(true)); tree = shallow(<TensorboardViewer configs={[config]} />); @@ -121,12 +236,46 @@ describe('Tensorboard', () => { await flushPromisesAndTimers(); expect(Apis.isTensorboardPodReady).toHaveBeenCalledTimes(1); expect(Apis.isTensorboardPodReady).toHaveBeenCalledWith('apis/v1beta1/_proxy/test/address'); - expect(tree).toMatchSnapshot(); + expect(tree.debug()).toMatchInlineSnapshot(` + "<div> + <div> + <div className=\\"\\"> + Tensorboard tensorflow/tensorflow:1.14.0 is running for this output. + </div> + <a href=\\"apis/v1beta1/_proxy/test/address\\" target=\\"_blank\\" rel=\\"noopener noreferrer\\" className=\\"unstyled\\"> + <WithStyles(Button) className=\\"buttonAction button\\" disabled={false} color=\\"primary\\"> + Open Tensorboard + </WithStyles(Button)> + </a> + <div> + <WithStyles(Button) className=\\"button\\" disabled={false} id=\\"delete\\" title=\\"stop tensorboard and delete its instance\\" onClick={[Function]} color=\\"default\\"> + Stop Tensorboard + </WithStyles(Button)> + <WithStyles(Dialog) open={false} onClose={[Function]} aria-labelledby=\\"dialog-title\\"> + <WithStyles(DialogTitle) id=\\"dialog-title\\"> + Stop Tensorboard? + </WithStyles(DialogTitle)> + <WithStyles(DialogContent)> + <WithStyles(DialogContentText)> + You can stop the current running tensorboard. The tensorboard viewer will also be deleted from your workloads. + </WithStyles(DialogContentText)> + </WithStyles(DialogContent)> + <WithStyles(DialogActions)> + <WithStyles(Button) className=\\"shortButton\\" id=\\"cancel\\" autoFocus={true} onClick={[Function]} color=\\"primary\\"> + Cancel + </WithStyles(Button)> + <BusyButton className=\\"buttonAction shortButton\\" onClick={[Function]} busy={false} color=\\"primary\\" title=\\"Stop\\" /> + </WithStyles(DialogActions)> + </WithStyles(Dialog)> + </div> + </div> + </div>" + `); }); it('shows start button if no instance exists', async () => { const config = DEFAULT_CONFIG; - const getAppMock = () => Promise.resolve({ podAddress: '', tfVersion: '' }); + const getAppMock = () => Promise.resolve(GET_APP_NOT_FOUND); const getTensorboardSpy = jest.spyOn(Apis, 'getTensorboardApp').mockImplementation(getAppMock); tree = shallow(<TensorboardViewer configs={[DEFAULT_CONFIG]} />); const base = tree.debug(); @@ -161,20 +310,24 @@ describe('Tensorboard', () => { it('starts tensorboard instance when button is clicked', async () => { const config = { ...DEFAULT_CONFIG }; - const getAppMock = () => Promise.resolve({ podAddress: '', tfVersion: '' }); + const getAppMock = () => Promise.resolve(GET_APP_NOT_FOUND); const startAppMock = jest.fn(() => Promise.resolve('')); jest.spyOn(Apis, 'getTensorboardApp').mockImplementation(getAppMock); jest.spyOn(Apis, 'startTensorboardApp').mockImplementationOnce(startAppMock); tree = shallow(<TensorboardViewer configs={[config]} />); await TestUtils.flushPromises(); tree.find('BusyButton').simulate('click'); - expect(startAppMock).toHaveBeenCalledWith(config.url, '2.0.0', config.namespace); + expect(startAppMock).toHaveBeenCalledWith({ + logdir: config.url, + namespace: config.namespace, + image: expect.stringContaining('tensorflow/tensorflow:'), // default image + }); }); it('starts tensorboard instance for two configs', async () => { const config = { ...DEFAULT_CONFIG, url: 'http://test/url' }; const config2 = { ...DEFAULT_CONFIG, url: 'http://test/url2' }; - const getAppMock = jest.fn(() => Promise.resolve({ podAddress: '', tfVersion: '' })); + const getAppMock = jest.fn(() => Promise.resolve(GET_APP_NOT_FOUND)); const startAppMock = jest.fn(() => Promise.resolve('')); jest.spyOn(Apis, 'getTensorboardApp').mockImplementation(getAppMock); jest.spyOn(Apis, 'startTensorboardApp').mockImplementationOnce(startAppMock); @@ -186,7 +339,11 @@ describe('Tensorboard', () => { ); tree.find('BusyButton').simulate('click'); const expectedUrl = `Series1:${config.url},Series2:${config2.url}`; - expect(startAppMock).toHaveBeenCalledWith(expectedUrl, '2.0.0', config.namespace); + expect(startAppMock).toHaveBeenCalledWith({ + logdir: expectedUrl, + image: expect.stringContaining('tensorflow/tensorflow:'), // default image + namespace: config.namespace, + }); }); it('returns friendly display name', () => { @@ -200,7 +357,7 @@ describe('Tensorboard', () => { it('select a version, then start a tensorboard of the corresponding version', async () => { const config = { ...DEFAULT_CONFIG }; - const getAppMock = jest.fn(() => Promise.resolve({ podAddress: '', tfVersion: '' })); + const getAppMock = jest.fn(() => Promise.resolve(GET_APP_NOT_FOUND)); const startAppMock = jest.fn(() => Promise.resolve('')); jest.spyOn(Apis, 'getTensorboardApp').mockImplementation(getAppMock); const startAppSpy = jest @@ -215,18 +372,20 @@ describe('Tensorboard', () => { .find('[role="button"]') .simulate('click'); tree - .findWhere(el => el.text() === 'TensorFlow 1.15.0') + .findWhere(el => el.text().startsWith('TensorFlow 1.15')) .hostNodes() .simulate('click'); tree.find('BusyButton').simulate('click'); - expect(startAppSpy).toHaveBeenCalledWith(config.url, '1.15.0', config.namespace); + expect(startAppSpy).toHaveBeenCalledWith({ + logdir: config.url, + image: 'tensorflow/tensorflow:1.15.5', + namespace: config.namespace, + }); }); it('delete the tensorboard instance, confirm in the dialog,\ then return back to previous page', async () => { - const getAppMock = jest.fn(() => - Promise.resolve({ podAddress: 'podaddress', tfVersion: '1.14.0' }), - ); + const getAppMock = jest.fn(() => Promise.resolve(GET_APP_FOUND)); jest.spyOn(Apis, 'getTensorboardApp').mockImplementation(getAppMock); const deleteAppMock = jest.fn(() => Promise.resolve('')); const deleteAppSpy = jest.spyOn(Apis, 'deleteTensorboardApp').mockImplementation(deleteAppMock); @@ -252,9 +411,7 @@ describe('Tensorboard', () => { it('show version info in delete confirming dialog, \ if a tensorboard instance already exists', async () => { - const getAppMock = jest.fn(() => - Promise.resolve({ podAddress: 'podaddress', tfVersion: '1.14.0' }), - ); + const getAppMock = jest.fn(() => Promise.resolve(GET_APP_FOUND)); jest.spyOn(Apis, 'getTensorboardApp').mockImplementation(getAppMock); const config = DEFAULT_CONFIG; tree = mount(<TensorboardViewer configs={[config]} />); @@ -264,13 +421,11 @@ describe('Tensorboard', () => { .find('#delete') .find('Button') .simulate('click'); - expect(tree.findWhere(el => el.text() === 'Stop Tensorboard 1.14.0?').exists()).toBeTruthy(); + expect(tree.findWhere(el => el.text() === 'Stop Tensorboard?').exists()).toBeTruthy(); }); it('click on cancel on delete tensorboard dialog, then return back to previous page', async () => { - const getAppMock = jest.fn(() => - Promise.resolve({ podAddress: 'podaddress', tfVersion: '1.14.0' }), - ); + const getAppMock = jest.fn(() => Promise.resolve(GET_APP_FOUND)); jest.spyOn(Apis, 'getTensorboardApp').mockImplementation(getAppMock); const config = DEFAULT_CONFIG; tree = mount(<TensorboardViewer configs={[config]} />); @@ -287,13 +442,11 @@ describe('Tensorboard', () => { .simulate('click'); expect(tree.findWhere(el => el.text() === 'Open Tensorboard').exists()).toBeTruthy(); - expect(tree.findWhere(el => el.text() === 'Delete Tensorboard').exists()).toBeTruthy(); + expect(tree.findWhere(el => el.text() === 'Stop Tensorboard').exists()).toBeTruthy(); }); it('asks user to wait when Tensorboard status is not ready', async () => { - const getAppMock = jest.fn(() => - Promise.resolve({ podAddress: 'podaddress', tfVersion: '1.14.0' }), - ); + const getAppMock = jest.fn(() => Promise.resolve(GET_APP_FOUND)); jest.spyOn(Apis, 'getTensorboardApp').mockImplementation(getAppMock); jest.spyOn(Apis, 'isTensorboardPodReady').mockImplementation(() => Promise.resolve(false)); jest.spyOn(Apis, 'deleteTensorboardApp').mockImplementation(jest.fn(() => Promise.resolve(''))); @@ -314,7 +467,7 @@ describe('Tensorboard', () => { ) .exists(), ).toBeTruthy(); - expect(tree.findWhere(el => el.text() === 'Delete Tensorboard').exists()).toBeTruthy(); + expect(tree.findWhere(el => el.text() === 'Stop Tensorboard').exists()).toBeTruthy(); // After a while, it is ready and wait message is not shwon any more jest.spyOn(Apis, 'isTensorboardPodReady').mockImplementation(() => Promise.resolve(true)); diff --git a/frontend/src/components/viewers/Tensorboard.tsx b/frontend/src/components/viewers/Tensorboard.tsx index c5774aae4f..81ffd4aefb 100644 --- a/frontend/src/components/viewers/Tensorboard.tsx +++ b/frontend/src/components/viewers/Tensorboard.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -58,6 +58,8 @@ export const css = stylesheet({ export interface TensorboardViewerConfig extends ViewerConfig { url: string; namespace: string; + podTemplateSpec?: any; // JSON object of pod template spec + image?: string; } interface TensorboardViewerProps { @@ -70,14 +72,15 @@ interface TensorboardViewerState { busy: boolean; deleteDialogOpen: boolean; podAddress: string; - tensorflowVersion: string; + tfImage: string; // When podAddress is not null, we need to further tell whether the TensorBoard pod is accessible or not tensorboardReady: boolean; errorMessage?: string; } -// TODO(jingzhang36): we'll later parse Tensorboard version from mlpipeline-ui-metadata.json file. -const DEFAULT_TENSORBOARD_VERSION = '2.0.0'; +// TODO: bump default version when https://github.com/kubeflow/pipelines/issues/5521 +// is resolved. +const DEFAULT_TF_IMAGE = 'tensorflow/tensorflow:2.2.2'; class TensorboardViewer extends Viewer<TensorboardViewerProps, TensorboardViewerState> { timerID: NodeJS.Timeout; @@ -89,7 +92,7 @@ class TensorboardViewer extends Viewer<TensorboardViewerProps, TensorboardViewer busy: false, deleteDialogOpen: false, podAddress: '', - tensorflowVersion: DEFAULT_TENSORBOARD_VERSION, + tfImage: this._image() || DEFAULT_TF_IMAGE, tensorboardReady: false, errorMessage: undefined, }; @@ -115,11 +118,11 @@ class TensorboardViewer extends Viewer<TensorboardViewerProps, TensorboardViewer clearInterval(this.timerID); } - public handleVersionSelect = (e: React.ChangeEvent<{ name?: string; value: unknown }>): void => { + public handleImageSelect = (e: React.ChangeEvent<{ name?: string; value: unknown }>): void => { if (typeof e.target.value !== 'string') { throw new Error('Invalid event value type, expected string'); } - this.setState({ tensorflowVersion: e.target.value }); + this.setState({ tfImage: e.target.value }); }; public render(): JSX.Element { @@ -130,7 +133,7 @@ class TensorboardViewer extends Viewer<TensorboardViewerProps, TensorboardViewer <div> <div className={padding(20, 'b')} - >{`Tensorboard ${this.state.tensorflowVersion} is running for this output.`}</div> + >{`Tensorboard ${this.state.tfImage} is running for this output.`}</div> <a href={makeProxyUrl(this.state.podAddress)} target='_blank' @@ -162,16 +165,14 @@ class TensorboardViewer extends Viewer<TensorboardViewerProps, TensorboardViewer onClick={this._handleDeleteOpen} color={'default'} > - Delete Tensorboard + Stop Tensorboard </Button> <Dialog open={this.state.deleteDialogOpen} onClose={this._handleDeleteClose} aria-labelledby='dialog-title' > - <DialogTitle id='dialog-title'> - {`Stop Tensorboard ${this.state.tensorflowVersion}?`} - </DialogTitle> + <DialogTitle id='dialog-title'>{`Stop Tensorboard?`}</DialogTitle> <DialogContent> <DialogContentText> You can stop the current running tensorboard. The tensorboard viewer will also @@ -205,35 +206,35 @@ class TensorboardViewer extends Viewer<TensorboardViewerProps, TensorboardViewer <div> <div className={padding(30, 'b')}> <FormControl className={css.formControl}> - <InputLabel htmlFor='grouped-select'>TF Version</InputLabel> + <InputLabel htmlFor='viewer-tb-image-select'>TF Image</InputLabel> <Select className={css.select} - value={this.state.tensorflowVersion} - input={<Input id='grouped-select' />} - onChange={this.handleVersionSelect} + value={this.state.tfImage} + input={<Input id='viewer-tb-image-select' />} + onChange={this.handleImageSelect} > + {this._image() && <MenuItem value={this._image()}>{this._image()}</MenuItem>} <ListSubheader>Tensoflow 1.x</ListSubheader> - <MenuItem value={'1.4.0'}>TensorFlow 1.4.0</MenuItem> - <MenuItem value={'1.5.0'}>TensorFlow 1.5.0</MenuItem> - <MenuItem value={'1.6.0'}>TensorFlow 1.6.0</MenuItem> - <MenuItem value={'1.7.0'}>TensorFlow 1.7.0</MenuItem> - <MenuItem value={'1.8.0'}>TensorFlow 1.8.0</MenuItem> - <MenuItem value={'1.9.0'}>TensorFlow 1.9.0</MenuItem> - <MenuItem value={'1.10.0'}>TensorFlow 1.10.0</MenuItem> - <MenuItem value={'1.11.0'}>TensorFlow 1.11.0</MenuItem> - <MenuItem value={'1.12.0'}>TensorFlow 1.12.0</MenuItem> - <MenuItem value={'1.13.2'}>TensorFlow 1.13.2</MenuItem> - <MenuItem value={'1.14.0'}>TensorFlow 1.14.0</MenuItem> - <MenuItem value={'1.15.0'}>TensorFlow 1.15.0</MenuItem> + <MenuItem value={'tensorflow/tensorflow:1.7.1'}>TensorFlow 1.7.1</MenuItem> + <MenuItem value={'tensorflow/tensorflow:1.8.0'}>TensorFlow 1.8.0</MenuItem> + <MenuItem value={'tensorflow/tensorflow:1.9.0'}>TensorFlow 1.9.0</MenuItem> + <MenuItem value={'tensorflow/tensorflow:1.10.1'}>TensorFlow 1.10.1</MenuItem> + <MenuItem value={'tensorflow/tensorflow:1.11.0'}>TensorFlow 1.11.0</MenuItem> + <MenuItem value={'tensorflow/tensorflow:1.12.3'}>TensorFlow 1.12.3</MenuItem> + <MenuItem value={'tensorflow/tensorflow:1.13.2'}>TensorFlow 1.13.2</MenuItem> + <MenuItem value={'tensorflow/tensorflow:1.14.0'}>TensorFlow 1.14.0</MenuItem> + <MenuItem value={'tensorflow/tensorflow:1.15.5'}>TensorFlow 1.15.5</MenuItem> <ListSubheader>TensorFlow 2.x</ListSubheader> - <MenuItem value={'2.0.0'}>TensorFlow 2.0.0</MenuItem> + <MenuItem value={'tensorflow/tensorflow:2.0.4'}>TensorFlow 2.0.4</MenuItem> + <MenuItem value={'tensorflow/tensorflow:2.1.2'}>TensorFlow 2.1.2</MenuItem> + <MenuItem value={'tensorflow/tensorflow:2.2.2'}>TensorFlow 2.2.2</MenuItem> </Select> </FormControl> </div> <div> <BusyButton className={commonCss.buttonAction} - disabled={!this.state.tensorflowVersion} + disabled={!this.state.tfImage} onClick={this._startTensorboard} busy={this.state.busy} title={`Start ${this.props.configs.length > 1 ? 'Combined ' : ''}Tensorboard`} @@ -263,6 +264,16 @@ class TensorboardViewer extends Viewer<TensorboardViewerProps, TensorboardViewer return urls.length === 1 ? urls[0] : urls.map((c, i) => `Series${i + 1}:` + c).join(','); } + private _podTemplateSpec(): any | undefined { + const podTemplateSpec = this.props.configs[0]?.podTemplateSpec; + // TODO: how to handle multiple config with different pod template specs? + return podTemplateSpec || undefined; + } + + private _image(): string | undefined { + return this.props.configs[0]?.image || undefined; + } + private async _checkTensorboardPodStatus(): Promise<void> { // If pod address is not null and tensorboard pod doesn't seem to be read, pull status again if (this.state.podAddress && !this.state.tensorboardReady) { @@ -276,12 +287,13 @@ class TensorboardViewer extends Viewer<TensorboardViewerProps, TensorboardViewer private async _checkTensorboardApp(): Promise<void> { this.setState({ busy: true }, async () => { try { - const { podAddress, tfVersion } = await Apis.getTensorboardApp( + // TODO: parse tfImage here + const { podAddress, image } = await Apis.getTensorboardApp( this._buildUrl(), this._getNamespace(), ); if (podAddress) { - this.setState({ busy: false, podAddress, tensorflowVersion: tfVersion }); + this.setState({ busy: false, podAddress, tfImage: image }); } else { // No existing pod this.setState({ busy: false }); @@ -295,11 +307,12 @@ class TensorboardViewer extends Viewer<TensorboardViewerProps, TensorboardViewer private _startTensorboard = async () => { this.setState({ busy: true, errorMessage: undefined }, async () => { try { - await Apis.startTensorboardApp( - this._buildUrl(), - this.state.tensorflowVersion, - this._getNamespace(), - ); + await Apis.startTensorboardApp({ + logdir: this._buildUrl(), + namespace: this._getNamespace(), + image: this.state.tfImage, + podTemplateSpec: this._podTemplateSpec(), + }); this.setState({ busy: false, tensorboardReady: false }, () => { this._checkTensorboardApp(); }); @@ -319,7 +332,6 @@ class TensorboardViewer extends Viewer<TensorboardViewerProps, TensorboardViewer busy: false, deleteDialogOpen: false, podAddress: '', - tensorflowVersion: DEFAULT_TENSORBOARD_VERSION, tensorboardReady: false, }); } catch (err) { diff --git a/frontend/src/components/viewers/Viewer.ts b/frontend/src/components/viewers/Viewer.ts index 88beae2bfb..d630e7e93a 100644 --- a/frontend/src/components/viewers/Viewer.ts +++ b/frontend/src/components/viewers/Viewer.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/viewers/ViewerContainer.test.tsx b/frontend/src/components/viewers/ViewerContainer.test.tsx index 923d5c0729..c2d2302bc5 100644 --- a/frontend/src/components/viewers/ViewerContainer.test.tsx +++ b/frontend/src/components/viewers/ViewerContainer.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/viewers/ViewerContainer.tsx b/frontend/src/components/viewers/ViewerContainer.tsx index f9dca619a4..c6a2fd6970 100644 --- a/frontend/src/components/viewers/ViewerContainer.tsx +++ b/frontend/src/components/viewers/ViewerContainer.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/viewers/VisualizationCreator.test.tsx b/frontend/src/components/viewers/VisualizationCreator.test.tsx index 4233add258..84cbdd6d02 100644 --- a/frontend/src/components/viewers/VisualizationCreator.test.tsx +++ b/frontend/src/components/viewers/VisualizationCreator.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/viewers/VisualizationCreator.tsx b/frontend/src/components/viewers/VisualizationCreator.tsx index 00ff393c7b..2a1ce66854 100644 --- a/frontend/src/components/viewers/VisualizationCreator.tsx +++ b/frontend/src/components/viewers/VisualizationCreator.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/components/viewers/__snapshots__/PagedTable.test.tsx.snap b/frontend/src/components/viewers/__snapshots__/PagedTable.test.tsx.snap index 893d4f9a81..61c04efa5e 100644 --- a/frontend/src/components/viewers/__snapshots__/PagedTable.test.tsx.snap +++ b/frontend/src/components/viewers/__snapshots__/PagedTable.test.tsx.snap @@ -126,7 +126,7 @@ exports[`PagedTable renders simple data 1`] = ` <WithStyles(TableRow) className="row" hover={true} - key="col1" + key="0" tabIndex={-1} > <WithStyles(TableCell) @@ -151,7 +151,7 @@ exports[`PagedTable renders simple data 1`] = ` <WithStyles(TableRow) className="row" hover={true} - key="col4" + key="1" tabIndex={-1} > <WithStyles(TableCell) @@ -221,7 +221,7 @@ exports[`PagedTable renders simple data without labels 1`] = ` <WithStyles(TableRow) className="row" hover={true} - key="col1" + key="0" tabIndex={-1} > <WithStyles(TableCell) @@ -246,7 +246,7 @@ exports[`PagedTable renders simple data without labels 1`] = ` <WithStyles(TableRow) className="row" hover={true} - key="col4" + key="1" tabIndex={-1} > <WithStyles(TableCell) @@ -371,7 +371,7 @@ exports[`PagedTable sorts on first column ascending 1`] = ` <WithStyles(TableRow) className="row" hover={true} - key="col1" + key="0" tabIndex={-1} > <WithStyles(TableCell) @@ -396,7 +396,7 @@ exports[`PagedTable sorts on first column ascending 1`] = ` <WithStyles(TableRow) className="row" hover={true} - key="col4" + key="1" tabIndex={-1} > <WithStyles(TableCell) @@ -521,7 +521,7 @@ exports[`PagedTable sorts on first column descending 1`] = ` <WithStyles(TableRow) className="row" hover={true} - key="col4" + key="0" tabIndex={-1} > <WithStyles(TableCell) @@ -546,7 +546,7 @@ exports[`PagedTable sorts on first column descending 1`] = ` <WithStyles(TableRow) className="row" hover={true} - key="col1" + key="1" tabIndex={-1} > <WithStyles(TableCell) diff --git a/frontend/src/components/viewers/__snapshots__/Tensorboard.test.tsx.snap b/frontend/src/components/viewers/__snapshots__/Tensorboard.test.tsx.snap deleted file mode 100644 index ff0e334cc1..0000000000 --- a/frontend/src/components/viewers/__snapshots__/Tensorboard.test.tsx.snap +++ /dev/null @@ -1,184 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Tensorboard base component snapshot 1`] = ` -<div> - <div> - <div - className="" - > - <WithStyles(FormControl) - className="formControl" - > - <WithStyles(WithFormControlContext(InputLabel)) - htmlFor="grouped-select" - > - TF Version - </WithStyles(WithFormControlContext(InputLabel))> - <WithStyles(WithFormControlContext(Select)) - className="select" - input={ - <WithStyles(Input) - id="grouped-select" - /> - } - onChange={[Function]} - value="2.0.0" - > - <WithStyles(ListSubheader)> - Tensoflow 1.x - </WithStyles(ListSubheader)> - <WithStyles(MenuItem) - value="1.4.0" - > - TensorFlow 1.4.0 - </WithStyles(MenuItem)> - <WithStyles(MenuItem) - value="1.5.0" - > - TensorFlow 1.5.0 - </WithStyles(MenuItem)> - <WithStyles(MenuItem) - value="1.6.0" - > - TensorFlow 1.6.0 - </WithStyles(MenuItem)> - <WithStyles(MenuItem) - value="1.7.0" - > - TensorFlow 1.7.0 - </WithStyles(MenuItem)> - <WithStyles(MenuItem) - value="1.8.0" - > - TensorFlow 1.8.0 - </WithStyles(MenuItem)> - <WithStyles(MenuItem) - value="1.9.0" - > - TensorFlow 1.9.0 - </WithStyles(MenuItem)> - <WithStyles(MenuItem) - value="1.10.0" - > - TensorFlow 1.10.0 - </WithStyles(MenuItem)> - <WithStyles(MenuItem) - value="1.11.0" - > - TensorFlow 1.11.0 - </WithStyles(MenuItem)> - <WithStyles(MenuItem) - value="1.12.0" - > - TensorFlow 1.12.0 - </WithStyles(MenuItem)> - <WithStyles(MenuItem) - value="1.13.2" - > - TensorFlow 1.13.2 - </WithStyles(MenuItem)> - <WithStyles(MenuItem) - value="1.14.0" - > - TensorFlow 1.14.0 - </WithStyles(MenuItem)> - <WithStyles(MenuItem) - value="1.15.0" - > - TensorFlow 1.15.0 - </WithStyles(MenuItem)> - <WithStyles(ListSubheader)> - TensorFlow 2.x - </WithStyles(ListSubheader)> - <WithStyles(MenuItem) - value="2.0.0" - > - TensorFlow 2.0.0 - </WithStyles(MenuItem)> - </WithStyles(WithFormControlContext(Select))> - </WithStyles(FormControl)> - </div> - <div> - <BusyButton - busy={false} - className="buttonAction" - disabled={false} - onClick={[Function]} - title="Start Tensorboard" - /> - </div> - </div> -</div> -`; - -exports[`Tensorboard shows a link to the tensorboard instance if exists 1`] = ` -<div> - <div> - <div - className="" - > - Tensorboard 1.14.0 is running for this output. - </div> - <a - className="unstyled" - href="apis/v1beta1/_proxy/test/address" - rel="noopener noreferrer" - target="_blank" - > - <WithStyles(Button) - className="buttonAction button" - color="primary" - disabled={false} - > - Open Tensorboard - </WithStyles(Button)> - </a> - <div> - <WithStyles(Button) - className="button" - color="default" - disabled={false} - id="delete" - onClick={[Function]} - title="stop tensorboard and delete its instance" - > - Delete Tensorboard - </WithStyles(Button)> - <WithStyles(Dialog) - aria-labelledby="dialog-title" - onClose={[Function]} - open={false} - > - <WithStyles(DialogTitle) - id="dialog-title" - > - Stop Tensorboard 1.14.0? - </WithStyles(DialogTitle)> - <WithStyles(DialogContent)> - <WithStyles(DialogContentText)> - You can stop the current running tensorboard. The tensorboard viewer will also be deleted from your workloads. - </WithStyles(DialogContentText)> - </WithStyles(DialogContent)> - <WithStyles(DialogActions)> - <WithStyles(Button) - autoFocus={true} - className="shortButton" - color="primary" - id="cancel" - onClick={[Function]} - > - Cancel - </WithStyles(Button)> - <BusyButton - busy={false} - className="buttonAction shortButton" - color="primary" - onClick={[Function]} - title="Stop" - /> - </WithStyles(DialogActions)> - </WithStyles(Dialog)> - </div> - </div> -</div> -`; diff --git a/frontend/src/config/sample_config_from_backend.json b/frontend/src/config/sample_config_from_backend.json index ebaeb1c38f..e035926e7b 100644 --- a/frontend/src/config/sample_config_from_backend.json +++ b/frontend/src/config/sample_config_from_backend.json @@ -2,5 +2,6 @@ "[Demo] XGBoost - Iterative model training", "[Demo] TFX - Taxi tip prediction model trainer", "[Tutorial] Data passing in python components", - "[Tutorial] DSL - Control structures" + "[Tutorial] DSL - Control structures", + "[Tutorial] V2 lightweight Python components" ] diff --git a/frontend/src/data/test/mock_lightweight_python_functions_v2_pipeline.json b/frontend/src/data/test/mock_lightweight_python_functions_v2_pipeline.json new file mode 100644 index 0000000000..560bec366c --- /dev/null +++ b/frontend/src/data/test/mock_lightweight_python_functions_v2_pipeline.json @@ -0,0 +1,233 @@ +{ + "pipelineSpec": { + "components": { + "comp-preprocess": { + "executorLabel": "exec-preprocess", + "inputDefinitions": { + "parameters": { + "message": { + "type": "STRING" + } + } + }, + "outputDefinitions": { + "artifacts": { + "output_dataset_one": { + "artifactType": { + "schemaTitle": "system.Dataset" + } + }, + "output_dataset_two": { + "artifactType": { + "schemaTitle": "system.Dataset" + } + } + }, + "parameters": { + "output_bool_parameter": { + "type": "STRING" + }, + "output_dict_parameter": { + "type": "STRING" + }, + "output_list_parameter": { + "type": "STRING" + }, + "output_parameter": { + "type": "STRING" + } + } + } + }, + "comp-train": { + "executorLabel": "exec-train", + "inputDefinitions": { + "artifacts": { + "dataset_one": { + "artifactType": { + "schemaTitle": "system.Dataset" + } + }, + "dataset_two": { + "artifactType": { + "schemaTitle": "system.Dataset" + } + } + }, + "parameters": { + "input_bool": { + "type": "STRING" + }, + "input_dict": { + "type": "STRING" + }, + "input_list": { + "type": "STRING" + }, + "message": { + "type": "STRING" + }, + "num_steps": { + "type": "INT" + } + } + }, + "outputDefinitions": { + "artifacts": { + "model": { + "artifactType": { + "schemaTitle": "system.Model" + } + } + } + } + } + }, + "deploymentSpec": { + "executors": { + "exec-preprocess": { + "container": { + "args": [ + "--executor_input", + "{{$}}", + "--function_to_execute", + "preprocess" + ], + "command": [ + "sh", + "-c", + "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location 'kfp==1.7.0' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location 'kfp==1.7.0' --user) && \"$0\" \"$@\"", + "sh", + "-ec", + "program_path=$(mktemp -d)\nprintf \"%s\" \"$0\" > \"$program_path/ephemeral_component.py\"\npython3 -m kfp.components.executor_main --component_module_path \"$program_path/ephemeral_component.py\" \"$@\"\n", + "\nfrom kfp.v2.dsl import *\nfrom typing import *\n\ndef preprocess(\n # An input parameter of type string.\n message: str,\n # Use Output[T] to get a metadata-rich handle to the output artifact\n # of type `Dataset`.\n output_dataset_one: Output[Dataset],\n # A locally accessible filepath for another output artifact of type\n # `Dataset`.\n output_dataset_two_path: OutputPath('Dataset'),\n # A locally accessible filepath for an output parameter of type string.\n output_parameter_path: OutputPath(str),\n # A locally accessible filepath for an output parameter of type bool.\n output_bool_parameter_path: OutputPath(bool),\n # A locally accessible filepath for an output parameter of type dict.\n output_dict_parameter_path: OutputPath(Dict[str, int]),\n # A locally accessible filepath for an output parameter of type list.\n output_list_parameter_path: OutputPath(List[str]),\n):\n \"\"\"Dummy preprocessing step\"\"\"\n\n # Use Dataset.path to access a local file path for writing.\n # One can also use Dataset.uri to access the actual URI file path.\n with open(output_dataset_one.path, 'w') as f:\n f.write(message)\n\n # OutputPath is used to just pass the local file path of the output artifact\n # to the function.\n with open(output_dataset_two_path, 'w') as f:\n f.write(message)\n\n with open(output_parameter_path, 'w') as f:\n f.write(message)\n\n with open(output_bool_parameter_path, 'w') as f:\n f.write(str(True)) # use either `str()` or `json.dumps()` for bool values.\n\n import json\n with open(output_dict_parameter_path, 'w') as f:\n f.write(json.dumps({'A': 1, 'B': 2}))\n\n with open(output_list_parameter_path, 'w') as f:\n f.write(json.dumps(['a', 'b', 'c']))\n\n" + ], + "image": "python:3.7" + } + }, + "exec-train": { + "container": { + "args": [ + "--executor_input", + "{{$}}", + "--function_to_execute", + "train" + ], + "command": [ + "sh", + "-c", + "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location 'kfp==1.7.0' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location 'kfp==1.7.0' --user) && \"$0\" \"$@\"", + "sh", + "-ec", + "program_path=$(mktemp -d)\nprintf \"%s\" \"$0\" > \"$program_path/ephemeral_component.py\"\npython3 -m kfp.components.executor_main --component_module_path \"$program_path/ephemeral_component.py\" \"$@\"\n", + "\nfrom kfp.v2.dsl import *\nfrom typing import *\n\ndef train(\n # Use InputPath to get a locally accessible path for the input artifact\n # of type `Dataset`.\n dataset_one_path: InputPath('Dataset'),\n # Use Input[T] to get a metadata-rich handle to the input artifact\n # of type `Dataset`.\n dataset_two: Input[Dataset],\n # An input parameter of type string.\n message: str,\n # Use Output[T] to get a metadata-rich handle to the output artifact\n # of type `Dataset`.\n model: Output[Model],\n # An input parameter of type bool.\n input_bool: bool,\n # An input parameter of type dict.\n input_dict: Dict[str, int],\n # An input parameter of type List[str].\n input_list: List[str],\n # An input parameter of type int with a default value.\n num_steps: int = 100,\n):\n \"\"\"Dummy Training step\"\"\"\n with open(dataset_one_path, 'r') as input_file:\n dataset_one_contents = input_file.read()\n\n with open(dataset_two.path, 'r') as input_file:\n dataset_two_contents = input_file.read()\n\n line = (f'dataset_one_contents: {dataset_one_contents} || '\n f'dataset_two_contents: {dataset_two_contents} || '\n f'message: {message} || '\n f'input_bool: {input_bool}, type {type(input_bool)} || '\n f'input_dict: {input_dict}, type {type(input_dict)} || '\n f'input_list: {input_list}, type {type(input_list)} \\n')\n\n with open(model.path, 'w') as output_file:\n for i in range(num_steps):\n output_file.write('Step {}\\n{}\\n=====\\n'.format(i, line))\n\n # Use model.get() to get a Model artifact, which has a .metadata dictionary\n # to store arbitrary metadata for the output artifact.\n model.metadata['accuracy'] = 0.9\n\n" + ], + "image": "python:3.7" + } + } + } + }, + "pipelineInfo": { + "name": "my-test-pipeline-beta" + }, + "root": { + "dag": { + "tasks": { + "preprocess": { + "cachingOptions": { + "enableCache": true + }, + "componentRef": { + "name": "comp-preprocess" + }, + "inputs": { + "parameters": { + "message": { + "componentInputParameter": "message" + } + } + }, + "taskInfo": { + "name": "preprocess" + } + }, + "train": { + "cachingOptions": { + "enableCache": true + }, + "componentRef": { + "name": "comp-train" + }, + "dependentTasks": [ + "preprocess" + ], + "inputs": { + "artifacts": { + "dataset_one": { + "taskOutputArtifact": { + "outputArtifactKey": "output_dataset_one", + "producerTask": "preprocess" + } + }, + "dataset_two": { + "taskOutputArtifact": { + "outputArtifactKey": "output_dataset_two", + "producerTask": "preprocess" + } + } + }, + "parameters": { + "input_bool": { + "taskOutputParameter": { + "outputParameterKey": "output_bool_parameter", + "producerTask": "preprocess" + } + }, + "input_dict": { + "taskOutputParameter": { + "outputParameterKey": "output_dict_parameter", + "producerTask": "preprocess" + } + }, + "input_list": { + "taskOutputParameter": { + "outputParameterKey": "output_list_parameter", + "producerTask": "preprocess" + } + }, + "message": { + "taskOutputParameter": { + "outputParameterKey": "output_parameter", + "producerTask": "preprocess" + } + }, + "num_steps": { + "runtimeValue": { + "constantValue": { + "intValue": "100" + } + } + } + } + }, + "taskInfo": { + "name": "train" + } + } + } + }, + "inputDefinitions": { + "parameters": { + "message": { + "type": "STRING" + } + } + } + }, + "schemaVersion": "2.0.0", + "sdkVersion": "kfp-1.7.0" + }, + "runtimeConfig": { + "gcsOutputDirectory": "dummy_root" + } +} diff --git a/frontend/src/features.ts b/frontend/src/features.ts new file mode 100644 index 0000000000..d5639d9206 --- /dev/null +++ b/frontend/src/features.ts @@ -0,0 +1,104 @@ +export interface Feature { + name: FeatureKey; + description: string; + active: boolean; +} + +export enum FeatureKey { + V2 = 'v2', +} + +const FEATURE_V2 = { + name: FeatureKey.V2, + description: 'Show v2 features', + active: false, +}; + +const features: Feature[] = [FEATURE_V2]; + +declare global { + var __FEATURE_FLAGS__: string; +} + +export function initFeatures() { + if (!storageAvailable('localStorage')) { + window.__FEATURE_FLAGS__ = JSON.stringify(features); + return; + } + if (!localStorage.getItem('flags')) { + localStorage.setItem('flags', JSON.stringify(features)); + } + const flags = localStorage.getItem('flags'); + if (flags) { + window.__FEATURE_FLAGS__ = flags; + } +} + +export function saveFeatures(f: Feature[]) { + if (!storageAvailable('localStorage')) { + window.__FEATURE_FLAGS__ = JSON.stringify(f); + return; + } + localStorage.setItem('flags', JSON.stringify(f)); + const flags = localStorage.getItem('flags'); + if (flags) { + window.__FEATURE_FLAGS__ = flags; + } +} + +function storageAvailable(type: string) { + var storage; + try { + storage = window[type]; + var x = '__storage_test__'; + storage.setItem(x, x); + storage.removeItem(x); + return true; + } catch (e) { + return ( + e instanceof DOMException && + // everything except Firefox + (e.code === 22 || + // Firefox + e.code === 1014 || + // test name field too, because code might not be present + // everything except Firefox + e.name === 'QuotaExceededError' || + // Firefox + e.name === 'NS_ERROR_DOM_QUOTA_REACHED') && + // acknowledge QuotaExceededError only if there's something already stored + storage && + storage.length !== 0 + ); + } +} + +export function isFeatureEnabled(key: FeatureKey): boolean { + const stringifyFlags = (window as any).__FEATURE_FLAGS__ as string; + if (!stringifyFlags) { + return false; + } + try { + const parsedFlags: Feature[] = JSON.parse(stringifyFlags); + const feature = parsedFlags.find(feature => feature.name === key); + return feature ? feature.active : false; + } catch (e) { + console.log('cannot read feature flags: ' + e); + } + return false; +} + +export function getFeatureList(): Feature[] { + const stringifyFlags = (window as any).__FEATURE_FLAGS__ as string; + if (!stringifyFlags) { + return []; + } + + try { + const parsedFlags: Feature[] = JSON.parse(stringifyFlags); + return parsedFlags; + } catch (e) { + console.log('cannot read feature flags: ' + e); + } + return []; +} diff --git a/frontend/src/generated/pipeline_spec/google/rpc/status_pb.d.ts b/frontend/src/generated/pipeline_spec/google/rpc/status_pb.d.ts new file mode 100644 index 0000000000..61059ce1d3 --- /dev/null +++ b/frontend/src/generated/pipeline_spec/google/rpc/status_pb.d.ts @@ -0,0 +1,32 @@ +import * as jspb from 'google-protobuf' + +import * as google_protobuf_any_pb from 'google-protobuf/google/protobuf/any_pb'; + + +export class Status extends jspb.Message { + getCode(): number; + setCode(value: number): Status; + + getMessage(): string; + setMessage(value: string): Status; + + getDetailsList(): Array<google_protobuf_any_pb.Any>; + setDetailsList(value: Array<google_protobuf_any_pb.Any>): Status; + clearDetailsList(): Status; + addDetails(value?: google_protobuf_any_pb.Any, index?: number): google_protobuf_any_pb.Any; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Status.AsObject; + static toObject(includeInstance: boolean, msg: Status): Status.AsObject; + static serializeBinaryToWriter(message: Status, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Status; + static deserializeBinaryFromReader(message: Status, reader: jspb.BinaryReader): Status; +} + +export namespace Status { + export type AsObject = { + code: number, + message: string, + detailsList: Array<google_protobuf_any_pb.Any.AsObject>, + } +} diff --git a/frontend/src/generated/pipeline_spec/google/rpc/status_pb.js b/frontend/src/generated/pipeline_spec/google/rpc/status_pb.js new file mode 100644 index 0000000000..d967667560 --- /dev/null +++ b/frontend/src/generated/pipeline_spec/google/rpc/status_pb.js @@ -0,0 +1,262 @@ +// source: google/rpc/status.proto +/** + * @fileoverview + * @enhanceable + * @suppress {missingRequire} reports error on implicit type usages. + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +var google_protobuf_any_pb = require('google-protobuf/google/protobuf/any_pb.js'); +goog.object.extend(proto, google_protobuf_any_pb); +goog.exportSymbol('proto.google.rpc.Status', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.google.rpc.Status = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.google.rpc.Status.repeatedFields_, null); +}; +goog.inherits(proto.google.rpc.Status, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.google.rpc.Status.displayName = 'proto.google.rpc.Status'; +} + +/** + * List of repeated fields within this message type. + * @private {!Array<number>} + * @const + */ +proto.google.rpc.Status.repeatedFields_ = [3]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.google.rpc.Status.prototype.toObject = function(opt_includeInstance) { + return proto.google.rpc.Status.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.google.rpc.Status} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.rpc.Status.toObject = function(includeInstance, msg) { + var f, obj = { + code: jspb.Message.getFieldWithDefault(msg, 1, 0), + message: jspb.Message.getFieldWithDefault(msg, 2, ""), + detailsList: jspb.Message.toObjectList(msg.getDetailsList(), + google_protobuf_any_pb.Any.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.google.rpc.Status} + */ +proto.google.rpc.Status.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.google.rpc.Status; + return proto.google.rpc.Status.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.google.rpc.Status} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.google.rpc.Status} + */ +proto.google.rpc.Status.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt32()); + msg.setCode(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setMessage(value); + break; + case 3: + var value = new google_protobuf_any_pb.Any; + reader.readMessage(value,google_protobuf_any_pb.Any.deserializeBinaryFromReader); + msg.addDetails(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.google.rpc.Status.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.google.rpc.Status.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.google.rpc.Status} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.rpc.Status.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getCode(); + if (f !== 0) { + writer.writeInt32( + 1, + f + ); + } + f = message.getMessage(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getDetailsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 3, + f, + google_protobuf_any_pb.Any.serializeBinaryToWriter + ); + } +}; + + +/** + * optional int32 code = 1; + * @return {number} + */ +proto.google.rpc.Status.prototype.getCode = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.google.rpc.Status} returns this + */ +proto.google.rpc.Status.prototype.setCode = function(value) { + return jspb.Message.setProto3IntField(this, 1, value); +}; + + +/** + * optional string message = 2; + * @return {string} + */ +proto.google.rpc.Status.prototype.getMessage = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.google.rpc.Status} returns this + */ +proto.google.rpc.Status.prototype.setMessage = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * repeated google.protobuf.Any details = 3; + * @return {!Array<!proto.google.protobuf.Any>} + */ +proto.google.rpc.Status.prototype.getDetailsList = function() { + return /** @type{!Array<!proto.google.protobuf.Any>} */ ( + jspb.Message.getRepeatedWrapperField(this, google_protobuf_any_pb.Any, 3)); +}; + + +/** + * @param {!Array<!proto.google.protobuf.Any>} value + * @return {!proto.google.rpc.Status} returns this +*/ +proto.google.rpc.Status.prototype.setDetailsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 3, value); +}; + + +/** + * @param {!proto.google.protobuf.Any=} opt_value + * @param {number=} opt_index + * @return {!proto.google.protobuf.Any} + */ +proto.google.rpc.Status.prototype.addDetails = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.google.protobuf.Any, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.google.rpc.Status} returns this + */ +proto.google.rpc.Status.prototype.clearDetailsList = function() { + return this.setDetailsList([]); +}; + + +goog.object.extend(exports, proto.google.rpc); diff --git a/backend/src/v2/publisher/main.go b/frontend/src/generated/pipeline_spec/index.ts similarity index 66% rename from backend/src/v2/publisher/main.go rename to frontend/src/generated/pipeline_spec/index.ts index 910ca3756a..afd3c58d98 100644 --- a/backend/src/v2/publisher/main.go +++ b/frontend/src/generated/pipeline_spec/index.ts @@ -1,4 +1,4 @@ -// Copyright 2021 Google LLC +// Copyright 2021 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,19 +12,4 @@ // See the License for the specific language governing permissions and // limitations under the License. -package main - -import ( - "github.com/golang/glog" - "github.com/kubeflow/pipelines/backend/src/v2/publisher/cmd" -) - -func main() { - cmd.InitFlags() - cmd.ValidateFlagsOrFatal() - err := cmd.Publish() - if err != nil { - glog.Fatal(err) - } - glog.Flush() -} +export { PipelineJob, PipelineSpec, ComponentSpec } from './pipeline_spec_pb'; diff --git a/frontend/src/generated/pipeline_spec/pbjs_ml_pipelines.d.ts b/frontend/src/generated/pipeline_spec/pbjs_ml_pipelines.d.ts new file mode 100644 index 0000000000..426674b93f --- /dev/null +++ b/frontend/src/generated/pipeline_spec/pbjs_ml_pipelines.d.ts @@ -0,0 +1,6696 @@ +import * as $protobuf from "protobufjs"; +/** Namespace ml_pipelines. */ +export namespace ml_pipelines { + + /** Properties of a PipelineJob. */ + interface IPipelineJob { + + /** PipelineJob name */ + name?: (string|null); + + /** PipelineJob displayName */ + displayName?: (string|null); + + /** PipelineJob pipelineSpec */ + pipelineSpec?: (google.protobuf.IStruct|null); + + /** PipelineJob labels */ + labels?: ({ [k: string]: string }|null); + + /** PipelineJob runtimeConfig */ + runtimeConfig?: (ml_pipelines.PipelineJob.IRuntimeConfig|null); + } + + /** Represents a PipelineJob. */ + class PipelineJob implements IPipelineJob { + + /** + * Constructs a new PipelineJob. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IPipelineJob); + + /** PipelineJob name. */ + public name: string; + + /** PipelineJob displayName. */ + public displayName: string; + + /** PipelineJob pipelineSpec. */ + public pipelineSpec?: (google.protobuf.IStruct|null); + + /** PipelineJob labels. */ + public labels: { [k: string]: string }; + + /** PipelineJob runtimeConfig. */ + public runtimeConfig?: (ml_pipelines.PipelineJob.IRuntimeConfig|null); + + /** + * Creates a new PipelineJob instance using the specified properties. + * @param [properties] Properties to set + * @returns PipelineJob instance + */ + public static create(properties?: ml_pipelines.IPipelineJob): ml_pipelines.PipelineJob; + + /** + * Encodes the specified PipelineJob message. Does not implicitly {@link ml_pipelines.PipelineJob.verify|verify} messages. + * @param message PipelineJob message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IPipelineJob, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified PipelineJob message, length delimited. Does not implicitly {@link ml_pipelines.PipelineJob.verify|verify} messages. + * @param message PipelineJob message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IPipelineJob, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a PipelineJob message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns PipelineJob + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineJob; + + /** + * Decodes a PipelineJob message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns PipelineJob + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineJob; + + /** + * Verifies a PipelineJob message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a PipelineJob message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns PipelineJob + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineJob; + + /** + * Creates a plain object from a PipelineJob message. Also converts values to other types if specified. + * @param message PipelineJob + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineJob, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this PipelineJob to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace PipelineJob { + + /** Properties of a RuntimeConfig. */ + interface IRuntimeConfig { + + /** RuntimeConfig parameters */ + parameters?: ({ [k: string]: ml_pipelines.IValue }|null); + + /** RuntimeConfig gcsOutputDirectory */ + gcsOutputDirectory?: (string|null); + } + + /** Represents a RuntimeConfig. */ + class RuntimeConfig implements IRuntimeConfig { + + /** + * Constructs a new RuntimeConfig. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineJob.IRuntimeConfig); + + /** RuntimeConfig parameters. */ + public parameters: { [k: string]: ml_pipelines.IValue }; + + /** RuntimeConfig gcsOutputDirectory. */ + public gcsOutputDirectory: string; + + /** + * Creates a new RuntimeConfig instance using the specified properties. + * @param [properties] Properties to set + * @returns RuntimeConfig instance + */ + public static create(properties?: ml_pipelines.PipelineJob.IRuntimeConfig): ml_pipelines.PipelineJob.RuntimeConfig; + + /** + * Encodes the specified RuntimeConfig message. Does not implicitly {@link ml_pipelines.PipelineJob.RuntimeConfig.verify|verify} messages. + * @param message RuntimeConfig message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineJob.IRuntimeConfig, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified RuntimeConfig message, length delimited. Does not implicitly {@link ml_pipelines.PipelineJob.RuntimeConfig.verify|verify} messages. + * @param message RuntimeConfig message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineJob.IRuntimeConfig, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a RuntimeConfig message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns RuntimeConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineJob.RuntimeConfig; + + /** + * Decodes a RuntimeConfig message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns RuntimeConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineJob.RuntimeConfig; + + /** + * Verifies a RuntimeConfig message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a RuntimeConfig message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns RuntimeConfig + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineJob.RuntimeConfig; + + /** + * Creates a plain object from a RuntimeConfig message. Also converts values to other types if specified. + * @param message RuntimeConfig + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineJob.RuntimeConfig, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this RuntimeConfig to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a PipelineSpec. */ + interface IPipelineSpec { + + /** PipelineSpec pipelineInfo */ + pipelineInfo?: (ml_pipelines.IPipelineInfo|null); + + /** PipelineSpec deploymentSpec */ + deploymentSpec?: (google.protobuf.IStruct|null); + + /** PipelineSpec sdkVersion */ + sdkVersion?: (string|null); + + /** PipelineSpec schemaVersion */ + schemaVersion?: (string|null); + + /** PipelineSpec components */ + components?: ({ [k: string]: ml_pipelines.IComponentSpec }|null); + + /** PipelineSpec root */ + root?: (ml_pipelines.IComponentSpec|null); + } + + /** Represents a PipelineSpec. */ + class PipelineSpec implements IPipelineSpec { + + /** + * Constructs a new PipelineSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IPipelineSpec); + + /** PipelineSpec pipelineInfo. */ + public pipelineInfo?: (ml_pipelines.IPipelineInfo|null); + + /** PipelineSpec deploymentSpec. */ + public deploymentSpec?: (google.protobuf.IStruct|null); + + /** PipelineSpec sdkVersion. */ + public sdkVersion: string; + + /** PipelineSpec schemaVersion. */ + public schemaVersion: string; + + /** PipelineSpec components. */ + public components: { [k: string]: ml_pipelines.IComponentSpec }; + + /** PipelineSpec root. */ + public root?: (ml_pipelines.IComponentSpec|null); + + /** + * Creates a new PipelineSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns PipelineSpec instance + */ + public static create(properties?: ml_pipelines.IPipelineSpec): ml_pipelines.PipelineSpec; + + /** + * Encodes the specified PipelineSpec message. Does not implicitly {@link ml_pipelines.PipelineSpec.verify|verify} messages. + * @param message PipelineSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IPipelineSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified PipelineSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineSpec.verify|verify} messages. + * @param message PipelineSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IPipelineSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a PipelineSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns PipelineSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineSpec; + + /** + * Decodes a PipelineSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns PipelineSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineSpec; + + /** + * Verifies a PipelineSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a PipelineSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns PipelineSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineSpec; + + /** + * Creates a plain object from a PipelineSpec message. Also converts values to other types if specified. + * @param message PipelineSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this PipelineSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace PipelineSpec { + + /** Properties of a RuntimeParameter. */ + interface IRuntimeParameter { + + /** RuntimeParameter type */ + type?: (ml_pipelines.PrimitiveType.PrimitiveTypeEnum|null); + + /** RuntimeParameter defaultValue */ + defaultValue?: (ml_pipelines.IValue|null); + } + + /** Represents a RuntimeParameter. */ + class RuntimeParameter implements IRuntimeParameter { + + /** + * Constructs a new RuntimeParameter. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineSpec.IRuntimeParameter); + + /** RuntimeParameter type. */ + public type: ml_pipelines.PrimitiveType.PrimitiveTypeEnum; + + /** RuntimeParameter defaultValue. */ + public defaultValue?: (ml_pipelines.IValue|null); + + /** + * Creates a new RuntimeParameter instance using the specified properties. + * @param [properties] Properties to set + * @returns RuntimeParameter instance + */ + public static create(properties?: ml_pipelines.PipelineSpec.IRuntimeParameter): ml_pipelines.PipelineSpec.RuntimeParameter; + + /** + * Encodes the specified RuntimeParameter message. Does not implicitly {@link ml_pipelines.PipelineSpec.RuntimeParameter.verify|verify} messages. + * @param message RuntimeParameter message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineSpec.IRuntimeParameter, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified RuntimeParameter message, length delimited. Does not implicitly {@link ml_pipelines.PipelineSpec.RuntimeParameter.verify|verify} messages. + * @param message RuntimeParameter message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineSpec.IRuntimeParameter, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a RuntimeParameter message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns RuntimeParameter + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineSpec.RuntimeParameter; + + /** + * Decodes a RuntimeParameter message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns RuntimeParameter + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineSpec.RuntimeParameter; + + /** + * Verifies a RuntimeParameter message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a RuntimeParameter message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns RuntimeParameter + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineSpec.RuntimeParameter; + + /** + * Creates a plain object from a RuntimeParameter message. Also converts values to other types if specified. + * @param message RuntimeParameter + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineSpec.RuntimeParameter, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this RuntimeParameter to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a ComponentSpec. */ + interface IComponentSpec { + + /** ComponentSpec inputDefinitions */ + inputDefinitions?: (ml_pipelines.IComponentInputsSpec|null); + + /** ComponentSpec outputDefinitions */ + outputDefinitions?: (ml_pipelines.IComponentOutputsSpec|null); + + /** ComponentSpec dag */ + dag?: (ml_pipelines.IDagSpec|null); + + /** ComponentSpec executorLabel */ + executorLabel?: (string|null); + } + + /** Represents a ComponentSpec. */ + class ComponentSpec implements IComponentSpec { + + /** + * Constructs a new ComponentSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IComponentSpec); + + /** ComponentSpec inputDefinitions. */ + public inputDefinitions?: (ml_pipelines.IComponentInputsSpec|null); + + /** ComponentSpec outputDefinitions. */ + public outputDefinitions?: (ml_pipelines.IComponentOutputsSpec|null); + + /** ComponentSpec dag. */ + public dag?: (ml_pipelines.IDagSpec|null); + + /** ComponentSpec executorLabel. */ + public executorLabel?: (string|null); + + /** ComponentSpec implementation. */ + public implementation?: ("dag"|"executorLabel"); + + /** + * Creates a new ComponentSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ComponentSpec instance + */ + public static create(properties?: ml_pipelines.IComponentSpec): ml_pipelines.ComponentSpec; + + /** + * Encodes the specified ComponentSpec message. Does not implicitly {@link ml_pipelines.ComponentSpec.verify|verify} messages. + * @param message ComponentSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IComponentSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ComponentSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentSpec.verify|verify} messages. + * @param message ComponentSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IComponentSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ComponentSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ComponentSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ComponentSpec; + + /** + * Decodes a ComponentSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ComponentSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ComponentSpec; + + /** + * Verifies a ComponentSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ComponentSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ComponentSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ComponentSpec; + + /** + * Creates a plain object from a ComponentSpec message. Also converts values to other types if specified. + * @param message ComponentSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ComponentSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ComponentSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a DagSpec. */ + interface IDagSpec { + + /** DagSpec tasks */ + tasks?: ({ [k: string]: ml_pipelines.IPipelineTaskSpec }|null); + + /** DagSpec outputs */ + outputs?: (ml_pipelines.IDagOutputsSpec|null); + } + + /** Represents a DagSpec. */ + class DagSpec implements IDagSpec { + + /** + * Constructs a new DagSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IDagSpec); + + /** DagSpec tasks. */ + public tasks: { [k: string]: ml_pipelines.IPipelineTaskSpec }; + + /** DagSpec outputs. */ + public outputs?: (ml_pipelines.IDagOutputsSpec|null); + + /** + * Creates a new DagSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns DagSpec instance + */ + public static create(properties?: ml_pipelines.IDagSpec): ml_pipelines.DagSpec; + + /** + * Encodes the specified DagSpec message. Does not implicitly {@link ml_pipelines.DagSpec.verify|verify} messages. + * @param message DagSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IDagSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified DagSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagSpec.verify|verify} messages. + * @param message DagSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IDagSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a DagSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns DagSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.DagSpec; + + /** + * Decodes a DagSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns DagSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.DagSpec; + + /** + * Verifies a DagSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a DagSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns DagSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.DagSpec; + + /** + * Creates a plain object from a DagSpec message. Also converts values to other types if specified. + * @param message DagSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.DagSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this DagSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a DagOutputsSpec. */ + interface IDagOutputsSpec { + + /** DagOutputsSpec artifacts */ + artifacts?: ({ [k: string]: ml_pipelines.DagOutputsSpec.IDagOutputArtifactSpec }|null); + + /** DagOutputsSpec parameters */ + parameters?: ({ [k: string]: ml_pipelines.DagOutputsSpec.IDagOutputParameterSpec }|null); + } + + /** Represents a DagOutputsSpec. */ + class DagOutputsSpec implements IDagOutputsSpec { + + /** + * Constructs a new DagOutputsSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IDagOutputsSpec); + + /** DagOutputsSpec artifacts. */ + public artifacts: { [k: string]: ml_pipelines.DagOutputsSpec.IDagOutputArtifactSpec }; + + /** DagOutputsSpec parameters. */ + public parameters: { [k: string]: ml_pipelines.DagOutputsSpec.IDagOutputParameterSpec }; + + /** + * Creates a new DagOutputsSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns DagOutputsSpec instance + */ + public static create(properties?: ml_pipelines.IDagOutputsSpec): ml_pipelines.DagOutputsSpec; + + /** + * Encodes the specified DagOutputsSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.verify|verify} messages. + * @param message DagOutputsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IDagOutputsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified DagOutputsSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.verify|verify} messages. + * @param message DagOutputsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IDagOutputsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a DagOutputsSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns DagOutputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.DagOutputsSpec; + + /** + * Decodes a DagOutputsSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns DagOutputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.DagOutputsSpec; + + /** + * Verifies a DagOutputsSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a DagOutputsSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns DagOutputsSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.DagOutputsSpec; + + /** + * Creates a plain object from a DagOutputsSpec message. Also converts values to other types if specified. + * @param message DagOutputsSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.DagOutputsSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this DagOutputsSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace DagOutputsSpec { + + /** Properties of an ArtifactSelectorSpec. */ + interface IArtifactSelectorSpec { + + /** ArtifactSelectorSpec producerSubtask */ + producerSubtask?: (string|null); + + /** ArtifactSelectorSpec outputArtifactKey */ + outputArtifactKey?: (string|null); + } + + /** Represents an ArtifactSelectorSpec. */ + class ArtifactSelectorSpec implements IArtifactSelectorSpec { + + /** + * Constructs a new ArtifactSelectorSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.DagOutputsSpec.IArtifactSelectorSpec); + + /** ArtifactSelectorSpec producerSubtask. */ + public producerSubtask: string; + + /** ArtifactSelectorSpec outputArtifactKey. */ + public outputArtifactKey: string; + + /** + * Creates a new ArtifactSelectorSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ArtifactSelectorSpec instance + */ + public static create(properties?: ml_pipelines.DagOutputsSpec.IArtifactSelectorSpec): ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec; + + /** + * Encodes the specified ArtifactSelectorSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.verify|verify} messages. + * @param message ArtifactSelectorSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.DagOutputsSpec.IArtifactSelectorSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ArtifactSelectorSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.verify|verify} messages. + * @param message ArtifactSelectorSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.DagOutputsSpec.IArtifactSelectorSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ArtifactSelectorSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ArtifactSelectorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec; + + /** + * Decodes an ArtifactSelectorSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ArtifactSelectorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec; + + /** + * Verifies an ArtifactSelectorSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ArtifactSelectorSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ArtifactSelectorSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec; + + /** + * Creates a plain object from an ArtifactSelectorSpec message. Also converts values to other types if specified. + * @param message ArtifactSelectorSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ArtifactSelectorSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a DagOutputArtifactSpec. */ + interface IDagOutputArtifactSpec { + + /** DagOutputArtifactSpec artifactSelectors */ + artifactSelectors?: (ml_pipelines.DagOutputsSpec.IArtifactSelectorSpec[]|null); + } + + /** Represents a DagOutputArtifactSpec. */ + class DagOutputArtifactSpec implements IDagOutputArtifactSpec { + + /** + * Constructs a new DagOutputArtifactSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.DagOutputsSpec.IDagOutputArtifactSpec); + + /** DagOutputArtifactSpec artifactSelectors. */ + public artifactSelectors: ml_pipelines.DagOutputsSpec.IArtifactSelectorSpec[]; + + /** + * Creates a new DagOutputArtifactSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns DagOutputArtifactSpec instance + */ + public static create(properties?: ml_pipelines.DagOutputsSpec.IDagOutputArtifactSpec): ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec; + + /** + * Encodes the specified DagOutputArtifactSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.verify|verify} messages. + * @param message DagOutputArtifactSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.DagOutputsSpec.IDagOutputArtifactSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified DagOutputArtifactSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.verify|verify} messages. + * @param message DagOutputArtifactSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.DagOutputsSpec.IDagOutputArtifactSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a DagOutputArtifactSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns DagOutputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec; + + /** + * Decodes a DagOutputArtifactSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns DagOutputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec; + + /** + * Verifies a DagOutputArtifactSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a DagOutputArtifactSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns DagOutputArtifactSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec; + + /** + * Creates a plain object from a DagOutputArtifactSpec message. Also converts values to other types if specified. + * @param message DagOutputArtifactSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this DagOutputArtifactSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a ParameterSelectorSpec. */ + interface IParameterSelectorSpec { + + /** ParameterSelectorSpec producerSubtask */ + producerSubtask?: (string|null); + + /** ParameterSelectorSpec outputParameterKey */ + outputParameterKey?: (string|null); + } + + /** Represents a ParameterSelectorSpec. */ + class ParameterSelectorSpec implements IParameterSelectorSpec { + + /** + * Constructs a new ParameterSelectorSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.DagOutputsSpec.IParameterSelectorSpec); + + /** ParameterSelectorSpec producerSubtask. */ + public producerSubtask: string; + + /** ParameterSelectorSpec outputParameterKey. */ + public outputParameterKey: string; + + /** + * Creates a new ParameterSelectorSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ParameterSelectorSpec instance + */ + public static create(properties?: ml_pipelines.DagOutputsSpec.IParameterSelectorSpec): ml_pipelines.DagOutputsSpec.ParameterSelectorSpec; + + /** + * Encodes the specified ParameterSelectorSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.verify|verify} messages. + * @param message ParameterSelectorSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.DagOutputsSpec.IParameterSelectorSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ParameterSelectorSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.verify|verify} messages. + * @param message ParameterSelectorSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.DagOutputsSpec.IParameterSelectorSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ParameterSelectorSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ParameterSelectorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.DagOutputsSpec.ParameterSelectorSpec; + + /** + * Decodes a ParameterSelectorSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ParameterSelectorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.DagOutputsSpec.ParameterSelectorSpec; + + /** + * Verifies a ParameterSelectorSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ParameterSelectorSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ParameterSelectorSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.DagOutputsSpec.ParameterSelectorSpec; + + /** + * Creates a plain object from a ParameterSelectorSpec message. Also converts values to other types if specified. + * @param message ParameterSelectorSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.DagOutputsSpec.ParameterSelectorSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ParameterSelectorSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a ParameterSelectorsSpec. */ + interface IParameterSelectorsSpec { + + /** ParameterSelectorsSpec parameterSelectors */ + parameterSelectors?: (ml_pipelines.DagOutputsSpec.IParameterSelectorSpec[]|null); + } + + /** Represents a ParameterSelectorsSpec. */ + class ParameterSelectorsSpec implements IParameterSelectorsSpec { + + /** + * Constructs a new ParameterSelectorsSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.DagOutputsSpec.IParameterSelectorsSpec); + + /** ParameterSelectorsSpec parameterSelectors. */ + public parameterSelectors: ml_pipelines.DagOutputsSpec.IParameterSelectorSpec[]; + + /** + * Creates a new ParameterSelectorsSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ParameterSelectorsSpec instance + */ + public static create(properties?: ml_pipelines.DagOutputsSpec.IParameterSelectorsSpec): ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec; + + /** + * Encodes the specified ParameterSelectorsSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.verify|verify} messages. + * @param message ParameterSelectorsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.DagOutputsSpec.IParameterSelectorsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ParameterSelectorsSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.verify|verify} messages. + * @param message ParameterSelectorsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.DagOutputsSpec.IParameterSelectorsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ParameterSelectorsSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ParameterSelectorsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec; + + /** + * Decodes a ParameterSelectorsSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ParameterSelectorsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec; + + /** + * Verifies a ParameterSelectorsSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ParameterSelectorsSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ParameterSelectorsSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec; + + /** + * Creates a plain object from a ParameterSelectorsSpec message. Also converts values to other types if specified. + * @param message ParameterSelectorsSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ParameterSelectorsSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a MapParameterSelectorsSpec. */ + interface IMapParameterSelectorsSpec { + + /** MapParameterSelectorsSpec mappedParameters */ + mappedParameters?: ({ [k: string]: ml_pipelines.DagOutputsSpec.IParameterSelectorSpec }|null); + } + + /** Represents a MapParameterSelectorsSpec. */ + class MapParameterSelectorsSpec implements IMapParameterSelectorsSpec { + + /** + * Constructs a new MapParameterSelectorsSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.DagOutputsSpec.IMapParameterSelectorsSpec); + + /** MapParameterSelectorsSpec mappedParameters. */ + public mappedParameters: { [k: string]: ml_pipelines.DagOutputsSpec.IParameterSelectorSpec }; + + /** + * Creates a new MapParameterSelectorsSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns MapParameterSelectorsSpec instance + */ + public static create(properties?: ml_pipelines.DagOutputsSpec.IMapParameterSelectorsSpec): ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec; + + /** + * Encodes the specified MapParameterSelectorsSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.verify|verify} messages. + * @param message MapParameterSelectorsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.DagOutputsSpec.IMapParameterSelectorsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified MapParameterSelectorsSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.verify|verify} messages. + * @param message MapParameterSelectorsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.DagOutputsSpec.IMapParameterSelectorsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a MapParameterSelectorsSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns MapParameterSelectorsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec; + + /** + * Decodes a MapParameterSelectorsSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns MapParameterSelectorsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec; + + /** + * Verifies a MapParameterSelectorsSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a MapParameterSelectorsSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns MapParameterSelectorsSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec; + + /** + * Creates a plain object from a MapParameterSelectorsSpec message. Also converts values to other types if specified. + * @param message MapParameterSelectorsSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this MapParameterSelectorsSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a DagOutputParameterSpec. */ + interface IDagOutputParameterSpec { + + /** DagOutputParameterSpec valueFromParameter */ + valueFromParameter?: (ml_pipelines.DagOutputsSpec.IParameterSelectorSpec|null); + + /** DagOutputParameterSpec valueFromOneof */ + valueFromOneof?: (ml_pipelines.DagOutputsSpec.IParameterSelectorsSpec|null); + } + + /** Represents a DagOutputParameterSpec. */ + class DagOutputParameterSpec implements IDagOutputParameterSpec { + + /** + * Constructs a new DagOutputParameterSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.DagOutputsSpec.IDagOutputParameterSpec); + + /** DagOutputParameterSpec valueFromParameter. */ + public valueFromParameter?: (ml_pipelines.DagOutputsSpec.IParameterSelectorSpec|null); + + /** DagOutputParameterSpec valueFromOneof. */ + public valueFromOneof?: (ml_pipelines.DagOutputsSpec.IParameterSelectorsSpec|null); + + /** DagOutputParameterSpec kind. */ + public kind?: ("valueFromParameter"|"valueFromOneof"); + + /** + * Creates a new DagOutputParameterSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns DagOutputParameterSpec instance + */ + public static create(properties?: ml_pipelines.DagOutputsSpec.IDagOutputParameterSpec): ml_pipelines.DagOutputsSpec.DagOutputParameterSpec; + + /** + * Encodes the specified DagOutputParameterSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.verify|verify} messages. + * @param message DagOutputParameterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.DagOutputsSpec.IDagOutputParameterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified DagOutputParameterSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.verify|verify} messages. + * @param message DagOutputParameterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.DagOutputsSpec.IDagOutputParameterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a DagOutputParameterSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns DagOutputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.DagOutputsSpec.DagOutputParameterSpec; + + /** + * Decodes a DagOutputParameterSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns DagOutputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.DagOutputsSpec.DagOutputParameterSpec; + + /** + * Verifies a DagOutputParameterSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a DagOutputParameterSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns DagOutputParameterSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.DagOutputsSpec.DagOutputParameterSpec; + + /** + * Creates a plain object from a DagOutputParameterSpec message. Also converts values to other types if specified. + * @param message DagOutputParameterSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.DagOutputsSpec.DagOutputParameterSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this DagOutputParameterSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a ComponentInputsSpec. */ + interface IComponentInputsSpec { + + /** ComponentInputsSpec artifacts */ + artifacts?: ({ [k: string]: ml_pipelines.ComponentInputsSpec.IArtifactSpec }|null); + + /** ComponentInputsSpec parameters */ + parameters?: ({ [k: string]: ml_pipelines.ComponentInputsSpec.IParameterSpec }|null); + } + + /** Represents a ComponentInputsSpec. */ + class ComponentInputsSpec implements IComponentInputsSpec { + + /** + * Constructs a new ComponentInputsSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IComponentInputsSpec); + + /** ComponentInputsSpec artifacts. */ + public artifacts: { [k: string]: ml_pipelines.ComponentInputsSpec.IArtifactSpec }; + + /** ComponentInputsSpec parameters. */ + public parameters: { [k: string]: ml_pipelines.ComponentInputsSpec.IParameterSpec }; + + /** + * Creates a new ComponentInputsSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ComponentInputsSpec instance + */ + public static create(properties?: ml_pipelines.IComponentInputsSpec): ml_pipelines.ComponentInputsSpec; + + /** + * Encodes the specified ComponentInputsSpec message. Does not implicitly {@link ml_pipelines.ComponentInputsSpec.verify|verify} messages. + * @param message ComponentInputsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IComponentInputsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ComponentInputsSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentInputsSpec.verify|verify} messages. + * @param message ComponentInputsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IComponentInputsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ComponentInputsSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ComponentInputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ComponentInputsSpec; + + /** + * Decodes a ComponentInputsSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ComponentInputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ComponentInputsSpec; + + /** + * Verifies a ComponentInputsSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ComponentInputsSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ComponentInputsSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ComponentInputsSpec; + + /** + * Creates a plain object from a ComponentInputsSpec message. Also converts values to other types if specified. + * @param message ComponentInputsSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ComponentInputsSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ComponentInputsSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace ComponentInputsSpec { + + /** Properties of an ArtifactSpec. */ + interface IArtifactSpec { + + /** ArtifactSpec artifactType */ + artifactType?: (ml_pipelines.IArtifactTypeSchema|null); + } + + /** Represents an ArtifactSpec. */ + class ArtifactSpec implements IArtifactSpec { + + /** + * Constructs a new ArtifactSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.ComponentInputsSpec.IArtifactSpec); + + /** ArtifactSpec artifactType. */ + public artifactType?: (ml_pipelines.IArtifactTypeSchema|null); + + /** + * Creates a new ArtifactSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ArtifactSpec instance + */ + public static create(properties?: ml_pipelines.ComponentInputsSpec.IArtifactSpec): ml_pipelines.ComponentInputsSpec.ArtifactSpec; + + /** + * Encodes the specified ArtifactSpec message. Does not implicitly {@link ml_pipelines.ComponentInputsSpec.ArtifactSpec.verify|verify} messages. + * @param message ArtifactSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.ComponentInputsSpec.IArtifactSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ArtifactSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentInputsSpec.ArtifactSpec.verify|verify} messages. + * @param message ArtifactSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.ComponentInputsSpec.IArtifactSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ArtifactSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ComponentInputsSpec.ArtifactSpec; + + /** + * Decodes an ArtifactSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ComponentInputsSpec.ArtifactSpec; + + /** + * Verifies an ArtifactSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ArtifactSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ArtifactSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ComponentInputsSpec.ArtifactSpec; + + /** + * Creates a plain object from an ArtifactSpec message. Also converts values to other types if specified. + * @param message ArtifactSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ComponentInputsSpec.ArtifactSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ArtifactSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a ParameterSpec. */ + interface IParameterSpec { + + /** ParameterSpec type */ + type?: (ml_pipelines.PrimitiveType.PrimitiveTypeEnum|null); + } + + /** Represents a ParameterSpec. */ + class ParameterSpec implements IParameterSpec { + + /** + * Constructs a new ParameterSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.ComponentInputsSpec.IParameterSpec); + + /** ParameterSpec type. */ + public type: ml_pipelines.PrimitiveType.PrimitiveTypeEnum; + + /** + * Creates a new ParameterSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ParameterSpec instance + */ + public static create(properties?: ml_pipelines.ComponentInputsSpec.IParameterSpec): ml_pipelines.ComponentInputsSpec.ParameterSpec; + + /** + * Encodes the specified ParameterSpec message. Does not implicitly {@link ml_pipelines.ComponentInputsSpec.ParameterSpec.verify|verify} messages. + * @param message ParameterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.ComponentInputsSpec.IParameterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ParameterSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentInputsSpec.ParameterSpec.verify|verify} messages. + * @param message ParameterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.ComponentInputsSpec.IParameterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ParameterSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ComponentInputsSpec.ParameterSpec; + + /** + * Decodes a ParameterSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ComponentInputsSpec.ParameterSpec; + + /** + * Verifies a ParameterSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ParameterSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ParameterSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ComponentInputsSpec.ParameterSpec; + + /** + * Creates a plain object from a ParameterSpec message. Also converts values to other types if specified. + * @param message ParameterSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ComponentInputsSpec.ParameterSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ParameterSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a ComponentOutputsSpec. */ + interface IComponentOutputsSpec { + + /** ComponentOutputsSpec artifacts */ + artifacts?: ({ [k: string]: ml_pipelines.ComponentOutputsSpec.IArtifactSpec }|null); + + /** ComponentOutputsSpec parameters */ + parameters?: ({ [k: string]: ml_pipelines.ComponentOutputsSpec.IParameterSpec }|null); + } + + /** Represents a ComponentOutputsSpec. */ + class ComponentOutputsSpec implements IComponentOutputsSpec { + + /** + * Constructs a new ComponentOutputsSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IComponentOutputsSpec); + + /** ComponentOutputsSpec artifacts. */ + public artifacts: { [k: string]: ml_pipelines.ComponentOutputsSpec.IArtifactSpec }; + + /** ComponentOutputsSpec parameters. */ + public parameters: { [k: string]: ml_pipelines.ComponentOutputsSpec.IParameterSpec }; + + /** + * Creates a new ComponentOutputsSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ComponentOutputsSpec instance + */ + public static create(properties?: ml_pipelines.IComponentOutputsSpec): ml_pipelines.ComponentOutputsSpec; + + /** + * Encodes the specified ComponentOutputsSpec message. Does not implicitly {@link ml_pipelines.ComponentOutputsSpec.verify|verify} messages. + * @param message ComponentOutputsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IComponentOutputsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ComponentOutputsSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentOutputsSpec.verify|verify} messages. + * @param message ComponentOutputsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IComponentOutputsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ComponentOutputsSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ComponentOutputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ComponentOutputsSpec; + + /** + * Decodes a ComponentOutputsSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ComponentOutputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ComponentOutputsSpec; + + /** + * Verifies a ComponentOutputsSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ComponentOutputsSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ComponentOutputsSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ComponentOutputsSpec; + + /** + * Creates a plain object from a ComponentOutputsSpec message. Also converts values to other types if specified. + * @param message ComponentOutputsSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ComponentOutputsSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ComponentOutputsSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace ComponentOutputsSpec { + + /** Properties of an ArtifactSpec. */ + interface IArtifactSpec { + + /** ArtifactSpec artifactType */ + artifactType?: (ml_pipelines.IArtifactTypeSchema|null); + + /** ArtifactSpec properties */ + properties?: ({ [k: string]: ml_pipelines.IValueOrRuntimeParameter }|null); + + /** ArtifactSpec customProperties */ + customProperties?: ({ [k: string]: ml_pipelines.IValueOrRuntimeParameter }|null); + + /** ArtifactSpec metadata */ + metadata?: (google.protobuf.IStruct|null); + } + + /** Represents an ArtifactSpec. */ + class ArtifactSpec implements IArtifactSpec { + + /** + * Constructs a new ArtifactSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.ComponentOutputsSpec.IArtifactSpec); + + /** ArtifactSpec artifactType. */ + public artifactType?: (ml_pipelines.IArtifactTypeSchema|null); + + /** ArtifactSpec properties. */ + public properties: { [k: string]: ml_pipelines.IValueOrRuntimeParameter }; + + /** ArtifactSpec customProperties. */ + public customProperties: { [k: string]: ml_pipelines.IValueOrRuntimeParameter }; + + /** ArtifactSpec metadata. */ + public metadata?: (google.protobuf.IStruct|null); + + /** + * Creates a new ArtifactSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ArtifactSpec instance + */ + public static create(properties?: ml_pipelines.ComponentOutputsSpec.IArtifactSpec): ml_pipelines.ComponentOutputsSpec.ArtifactSpec; + + /** + * Encodes the specified ArtifactSpec message. Does not implicitly {@link ml_pipelines.ComponentOutputsSpec.ArtifactSpec.verify|verify} messages. + * @param message ArtifactSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.ComponentOutputsSpec.IArtifactSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ArtifactSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentOutputsSpec.ArtifactSpec.verify|verify} messages. + * @param message ArtifactSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.ComponentOutputsSpec.IArtifactSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ArtifactSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ComponentOutputsSpec.ArtifactSpec; + + /** + * Decodes an ArtifactSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ComponentOutputsSpec.ArtifactSpec; + + /** + * Verifies an ArtifactSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ArtifactSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ArtifactSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ComponentOutputsSpec.ArtifactSpec; + + /** + * Creates a plain object from an ArtifactSpec message. Also converts values to other types if specified. + * @param message ArtifactSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ComponentOutputsSpec.ArtifactSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ArtifactSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a ParameterSpec. */ + interface IParameterSpec { + + /** ParameterSpec type */ + type?: (ml_pipelines.PrimitiveType.PrimitiveTypeEnum|null); + } + + /** Represents a ParameterSpec. */ + class ParameterSpec implements IParameterSpec { + + /** + * Constructs a new ParameterSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.ComponentOutputsSpec.IParameterSpec); + + /** ParameterSpec type. */ + public type: ml_pipelines.PrimitiveType.PrimitiveTypeEnum; + + /** + * Creates a new ParameterSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ParameterSpec instance + */ + public static create(properties?: ml_pipelines.ComponentOutputsSpec.IParameterSpec): ml_pipelines.ComponentOutputsSpec.ParameterSpec; + + /** + * Encodes the specified ParameterSpec message. Does not implicitly {@link ml_pipelines.ComponentOutputsSpec.ParameterSpec.verify|verify} messages. + * @param message ParameterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.ComponentOutputsSpec.IParameterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ParameterSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentOutputsSpec.ParameterSpec.verify|verify} messages. + * @param message ParameterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.ComponentOutputsSpec.IParameterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ParameterSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ComponentOutputsSpec.ParameterSpec; + + /** + * Decodes a ParameterSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ComponentOutputsSpec.ParameterSpec; + + /** + * Verifies a ParameterSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ParameterSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ParameterSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ComponentOutputsSpec.ParameterSpec; + + /** + * Creates a plain object from a ParameterSpec message. Also converts values to other types if specified. + * @param message ParameterSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ComponentOutputsSpec.ParameterSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ParameterSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a TaskInputsSpec. */ + interface ITaskInputsSpec { + + /** TaskInputsSpec parameters */ + parameters?: ({ [k: string]: ml_pipelines.TaskInputsSpec.IInputParameterSpec }|null); + + /** TaskInputsSpec artifacts */ + artifacts?: ({ [k: string]: ml_pipelines.TaskInputsSpec.IInputArtifactSpec }|null); + } + + /** Represents a TaskInputsSpec. */ + class TaskInputsSpec implements ITaskInputsSpec { + + /** + * Constructs a new TaskInputsSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.ITaskInputsSpec); + + /** TaskInputsSpec parameters. */ + public parameters: { [k: string]: ml_pipelines.TaskInputsSpec.IInputParameterSpec }; + + /** TaskInputsSpec artifacts. */ + public artifacts: { [k: string]: ml_pipelines.TaskInputsSpec.IInputArtifactSpec }; + + /** + * Creates a new TaskInputsSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns TaskInputsSpec instance + */ + public static create(properties?: ml_pipelines.ITaskInputsSpec): ml_pipelines.TaskInputsSpec; + + /** + * Encodes the specified TaskInputsSpec message. Does not implicitly {@link ml_pipelines.TaskInputsSpec.verify|verify} messages. + * @param message TaskInputsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.ITaskInputsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TaskInputsSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskInputsSpec.verify|verify} messages. + * @param message TaskInputsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.ITaskInputsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TaskInputsSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TaskInputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.TaskInputsSpec; + + /** + * Decodes a TaskInputsSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TaskInputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.TaskInputsSpec; + + /** + * Verifies a TaskInputsSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TaskInputsSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TaskInputsSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.TaskInputsSpec; + + /** + * Creates a plain object from a TaskInputsSpec message. Also converts values to other types if specified. + * @param message TaskInputsSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.TaskInputsSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TaskInputsSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace TaskInputsSpec { + + /** Properties of an InputArtifactSpec. */ + interface IInputArtifactSpec { + + /** InputArtifactSpec taskOutputArtifact */ + taskOutputArtifact?: (ml_pipelines.TaskInputsSpec.InputArtifactSpec.ITaskOutputArtifactSpec|null); + + /** InputArtifactSpec componentInputArtifact */ + componentInputArtifact?: (string|null); + } + + /** Represents an InputArtifactSpec. */ + class InputArtifactSpec implements IInputArtifactSpec { + + /** + * Constructs a new InputArtifactSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.TaskInputsSpec.IInputArtifactSpec); + + /** InputArtifactSpec taskOutputArtifact. */ + public taskOutputArtifact?: (ml_pipelines.TaskInputsSpec.InputArtifactSpec.ITaskOutputArtifactSpec|null); + + /** InputArtifactSpec componentInputArtifact. */ + public componentInputArtifact?: (string|null); + + /** InputArtifactSpec kind. */ + public kind?: ("taskOutputArtifact"|"componentInputArtifact"); + + /** + * Creates a new InputArtifactSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns InputArtifactSpec instance + */ + public static create(properties?: ml_pipelines.TaskInputsSpec.IInputArtifactSpec): ml_pipelines.TaskInputsSpec.InputArtifactSpec; + + /** + * Encodes the specified InputArtifactSpec message. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputArtifactSpec.verify|verify} messages. + * @param message InputArtifactSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.TaskInputsSpec.IInputArtifactSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified InputArtifactSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputArtifactSpec.verify|verify} messages. + * @param message InputArtifactSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.TaskInputsSpec.IInputArtifactSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an InputArtifactSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns InputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.TaskInputsSpec.InputArtifactSpec; + + /** + * Decodes an InputArtifactSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns InputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.TaskInputsSpec.InputArtifactSpec; + + /** + * Verifies an InputArtifactSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an InputArtifactSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns InputArtifactSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.TaskInputsSpec.InputArtifactSpec; + + /** + * Creates a plain object from an InputArtifactSpec message. Also converts values to other types if specified. + * @param message InputArtifactSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.TaskInputsSpec.InputArtifactSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this InputArtifactSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace InputArtifactSpec { + + /** Properties of a TaskOutputArtifactSpec. */ + interface ITaskOutputArtifactSpec { + + /** TaskOutputArtifactSpec producerTask */ + producerTask?: (string|null); + + /** TaskOutputArtifactSpec outputArtifactKey */ + outputArtifactKey?: (string|null); + } + + /** Represents a TaskOutputArtifactSpec. */ + class TaskOutputArtifactSpec implements ITaskOutputArtifactSpec { + + /** + * Constructs a new TaskOutputArtifactSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.TaskInputsSpec.InputArtifactSpec.ITaskOutputArtifactSpec); + + /** TaskOutputArtifactSpec producerTask. */ + public producerTask: string; + + /** TaskOutputArtifactSpec outputArtifactKey. */ + public outputArtifactKey: string; + + /** + * Creates a new TaskOutputArtifactSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns TaskOutputArtifactSpec instance + */ + public static create(properties?: ml_pipelines.TaskInputsSpec.InputArtifactSpec.ITaskOutputArtifactSpec): ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec; + + /** + * Encodes the specified TaskOutputArtifactSpec message. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.verify|verify} messages. + * @param message TaskOutputArtifactSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.TaskInputsSpec.InputArtifactSpec.ITaskOutputArtifactSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TaskOutputArtifactSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.verify|verify} messages. + * @param message TaskOutputArtifactSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.TaskInputsSpec.InputArtifactSpec.ITaskOutputArtifactSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TaskOutputArtifactSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TaskOutputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec; + + /** + * Decodes a TaskOutputArtifactSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TaskOutputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec; + + /** + * Verifies a TaskOutputArtifactSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TaskOutputArtifactSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TaskOutputArtifactSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec; + + /** + * Creates a plain object from a TaskOutputArtifactSpec message. Also converts values to other types if specified. + * @param message TaskOutputArtifactSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TaskOutputArtifactSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of an InputParameterSpec. */ + interface IInputParameterSpec { + + /** InputParameterSpec taskOutputParameter */ + taskOutputParameter?: (ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskOutputParameterSpec|null); + + /** InputParameterSpec runtimeValue */ + runtimeValue?: (ml_pipelines.IValueOrRuntimeParameter|null); + + /** InputParameterSpec componentInputParameter */ + componentInputParameter?: (string|null); + + /** InputParameterSpec taskFinalStatus */ + taskFinalStatus?: (ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskFinalStatus|null); + + /** InputParameterSpec parameterExpressionSelector */ + parameterExpressionSelector?: (string|null); + } + + /** Represents an InputParameterSpec. */ + class InputParameterSpec implements IInputParameterSpec { + + /** + * Constructs a new InputParameterSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.TaskInputsSpec.IInputParameterSpec); + + /** InputParameterSpec taskOutputParameter. */ + public taskOutputParameter?: (ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskOutputParameterSpec|null); + + /** InputParameterSpec runtimeValue. */ + public runtimeValue?: (ml_pipelines.IValueOrRuntimeParameter|null); + + /** InputParameterSpec componentInputParameter. */ + public componentInputParameter?: (string|null); + + /** InputParameterSpec taskFinalStatus. */ + public taskFinalStatus?: (ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskFinalStatus|null); + + /** InputParameterSpec parameterExpressionSelector. */ + public parameterExpressionSelector: string; + + /** InputParameterSpec kind. */ + public kind?: ("taskOutputParameter"|"runtimeValue"|"componentInputParameter"|"taskFinalStatus"); + + /** + * Creates a new InputParameterSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns InputParameterSpec instance + */ + public static create(properties?: ml_pipelines.TaskInputsSpec.IInputParameterSpec): ml_pipelines.TaskInputsSpec.InputParameterSpec; + + /** + * Encodes the specified InputParameterSpec message. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputParameterSpec.verify|verify} messages. + * @param message InputParameterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.TaskInputsSpec.IInputParameterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified InputParameterSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputParameterSpec.verify|verify} messages. + * @param message InputParameterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.TaskInputsSpec.IInputParameterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an InputParameterSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns InputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.TaskInputsSpec.InputParameterSpec; + + /** + * Decodes an InputParameterSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns InputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.TaskInputsSpec.InputParameterSpec; + + /** + * Verifies an InputParameterSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an InputParameterSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns InputParameterSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.TaskInputsSpec.InputParameterSpec; + + /** + * Creates a plain object from an InputParameterSpec message. Also converts values to other types if specified. + * @param message InputParameterSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.TaskInputsSpec.InputParameterSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this InputParameterSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace InputParameterSpec { + + /** Properties of a TaskOutputParameterSpec. */ + interface ITaskOutputParameterSpec { + + /** TaskOutputParameterSpec producerTask */ + producerTask?: (string|null); + + /** TaskOutputParameterSpec outputParameterKey */ + outputParameterKey?: (string|null); + } + + /** Represents a TaskOutputParameterSpec. */ + class TaskOutputParameterSpec implements ITaskOutputParameterSpec { + + /** + * Constructs a new TaskOutputParameterSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskOutputParameterSpec); + + /** TaskOutputParameterSpec producerTask. */ + public producerTask: string; + + /** TaskOutputParameterSpec outputParameterKey. */ + public outputParameterKey: string; + + /** + * Creates a new TaskOutputParameterSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns TaskOutputParameterSpec instance + */ + public static create(properties?: ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskOutputParameterSpec): ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec; + + /** + * Encodes the specified TaskOutputParameterSpec message. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.verify|verify} messages. + * @param message TaskOutputParameterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskOutputParameterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TaskOutputParameterSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.verify|verify} messages. + * @param message TaskOutputParameterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskOutputParameterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TaskOutputParameterSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TaskOutputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec; + + /** + * Decodes a TaskOutputParameterSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TaskOutputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec; + + /** + * Verifies a TaskOutputParameterSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TaskOutputParameterSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TaskOutputParameterSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec; + + /** + * Creates a plain object from a TaskOutputParameterSpec message. Also converts values to other types if specified. + * @param message TaskOutputParameterSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TaskOutputParameterSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TaskFinalStatus. */ + interface ITaskFinalStatus { + + /** TaskFinalStatus producerTask */ + producerTask?: (string|null); + } + + /** Represents a TaskFinalStatus. */ + class TaskFinalStatus implements ITaskFinalStatus { + + /** + * Constructs a new TaskFinalStatus. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskFinalStatus); + + /** TaskFinalStatus producerTask. */ + public producerTask: string; + + /** + * Creates a new TaskFinalStatus instance using the specified properties. + * @param [properties] Properties to set + * @returns TaskFinalStatus instance + */ + public static create(properties?: ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskFinalStatus): ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus; + + /** + * Encodes the specified TaskFinalStatus message. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.verify|verify} messages. + * @param message TaskFinalStatus message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskFinalStatus, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TaskFinalStatus message, length delimited. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.verify|verify} messages. + * @param message TaskFinalStatus message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskFinalStatus, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TaskFinalStatus message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TaskFinalStatus + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus; + + /** + * Decodes a TaskFinalStatus message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TaskFinalStatus + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus; + + /** + * Verifies a TaskFinalStatus message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TaskFinalStatus message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TaskFinalStatus + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus; + + /** + * Creates a plain object from a TaskFinalStatus message. Also converts values to other types if specified. + * @param message TaskFinalStatus + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TaskFinalStatus to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + } + + /** Properties of a TaskOutputsSpec. */ + interface ITaskOutputsSpec { + + /** TaskOutputsSpec parameters */ + parameters?: ({ [k: string]: ml_pipelines.TaskOutputsSpec.IOutputParameterSpec }|null); + + /** TaskOutputsSpec artifacts */ + artifacts?: ({ [k: string]: ml_pipelines.TaskOutputsSpec.IOutputArtifactSpec }|null); + } + + /** Represents a TaskOutputsSpec. */ + class TaskOutputsSpec implements ITaskOutputsSpec { + + /** + * Constructs a new TaskOutputsSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.ITaskOutputsSpec); + + /** TaskOutputsSpec parameters. */ + public parameters: { [k: string]: ml_pipelines.TaskOutputsSpec.IOutputParameterSpec }; + + /** TaskOutputsSpec artifacts. */ + public artifacts: { [k: string]: ml_pipelines.TaskOutputsSpec.IOutputArtifactSpec }; + + /** + * Creates a new TaskOutputsSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns TaskOutputsSpec instance + */ + public static create(properties?: ml_pipelines.ITaskOutputsSpec): ml_pipelines.TaskOutputsSpec; + + /** + * Encodes the specified TaskOutputsSpec message. Does not implicitly {@link ml_pipelines.TaskOutputsSpec.verify|verify} messages. + * @param message TaskOutputsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.ITaskOutputsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TaskOutputsSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskOutputsSpec.verify|verify} messages. + * @param message TaskOutputsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.ITaskOutputsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TaskOutputsSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TaskOutputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.TaskOutputsSpec; + + /** + * Decodes a TaskOutputsSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TaskOutputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.TaskOutputsSpec; + + /** + * Verifies a TaskOutputsSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TaskOutputsSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TaskOutputsSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.TaskOutputsSpec; + + /** + * Creates a plain object from a TaskOutputsSpec message. Also converts values to other types if specified. + * @param message TaskOutputsSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.TaskOutputsSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TaskOutputsSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace TaskOutputsSpec { + + /** Properties of an OutputArtifactSpec. */ + interface IOutputArtifactSpec { + + /** OutputArtifactSpec artifactType */ + artifactType?: (ml_pipelines.IArtifactTypeSchema|null); + + /** OutputArtifactSpec properties */ + properties?: ({ [k: string]: ml_pipelines.IValueOrRuntimeParameter }|null); + + /** OutputArtifactSpec customProperties */ + customProperties?: ({ [k: string]: ml_pipelines.IValueOrRuntimeParameter }|null); + } + + /** Represents an OutputArtifactSpec. */ + class OutputArtifactSpec implements IOutputArtifactSpec { + + /** + * Constructs a new OutputArtifactSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.TaskOutputsSpec.IOutputArtifactSpec); + + /** OutputArtifactSpec artifactType. */ + public artifactType?: (ml_pipelines.IArtifactTypeSchema|null); + + /** OutputArtifactSpec properties. */ + public properties: { [k: string]: ml_pipelines.IValueOrRuntimeParameter }; + + /** OutputArtifactSpec customProperties. */ + public customProperties: { [k: string]: ml_pipelines.IValueOrRuntimeParameter }; + + /** + * Creates a new OutputArtifactSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns OutputArtifactSpec instance + */ + public static create(properties?: ml_pipelines.TaskOutputsSpec.IOutputArtifactSpec): ml_pipelines.TaskOutputsSpec.OutputArtifactSpec; + + /** + * Encodes the specified OutputArtifactSpec message. Does not implicitly {@link ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.verify|verify} messages. + * @param message OutputArtifactSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.TaskOutputsSpec.IOutputArtifactSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified OutputArtifactSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.verify|verify} messages. + * @param message OutputArtifactSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.TaskOutputsSpec.IOutputArtifactSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an OutputArtifactSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns OutputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.TaskOutputsSpec.OutputArtifactSpec; + + /** + * Decodes an OutputArtifactSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns OutputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.TaskOutputsSpec.OutputArtifactSpec; + + /** + * Verifies an OutputArtifactSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an OutputArtifactSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns OutputArtifactSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.TaskOutputsSpec.OutputArtifactSpec; + + /** + * Creates a plain object from an OutputArtifactSpec message. Also converts values to other types if specified. + * @param message OutputArtifactSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.TaskOutputsSpec.OutputArtifactSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this OutputArtifactSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an OutputParameterSpec. */ + interface IOutputParameterSpec { + + /** OutputParameterSpec type */ + type?: (ml_pipelines.PrimitiveType.PrimitiveTypeEnum|null); + } + + /** Represents an OutputParameterSpec. */ + class OutputParameterSpec implements IOutputParameterSpec { + + /** + * Constructs a new OutputParameterSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.TaskOutputsSpec.IOutputParameterSpec); + + /** OutputParameterSpec type. */ + public type: ml_pipelines.PrimitiveType.PrimitiveTypeEnum; + + /** + * Creates a new OutputParameterSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns OutputParameterSpec instance + */ + public static create(properties?: ml_pipelines.TaskOutputsSpec.IOutputParameterSpec): ml_pipelines.TaskOutputsSpec.OutputParameterSpec; + + /** + * Encodes the specified OutputParameterSpec message. Does not implicitly {@link ml_pipelines.TaskOutputsSpec.OutputParameterSpec.verify|verify} messages. + * @param message OutputParameterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.TaskOutputsSpec.IOutputParameterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified OutputParameterSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskOutputsSpec.OutputParameterSpec.verify|verify} messages. + * @param message OutputParameterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.TaskOutputsSpec.IOutputParameterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an OutputParameterSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns OutputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.TaskOutputsSpec.OutputParameterSpec; + + /** + * Decodes an OutputParameterSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns OutputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.TaskOutputsSpec.OutputParameterSpec; + + /** + * Verifies an OutputParameterSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an OutputParameterSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns OutputParameterSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.TaskOutputsSpec.OutputParameterSpec; + + /** + * Creates a plain object from an OutputParameterSpec message. Also converts values to other types if specified. + * @param message OutputParameterSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.TaskOutputsSpec.OutputParameterSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this OutputParameterSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a PrimitiveType. */ + interface IPrimitiveType { + } + + /** Represents a PrimitiveType. */ + class PrimitiveType implements IPrimitiveType { + + /** + * Constructs a new PrimitiveType. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IPrimitiveType); + + /** + * Creates a new PrimitiveType instance using the specified properties. + * @param [properties] Properties to set + * @returns PrimitiveType instance + */ + public static create(properties?: ml_pipelines.IPrimitiveType): ml_pipelines.PrimitiveType; + + /** + * Encodes the specified PrimitiveType message. Does not implicitly {@link ml_pipelines.PrimitiveType.verify|verify} messages. + * @param message PrimitiveType message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IPrimitiveType, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified PrimitiveType message, length delimited. Does not implicitly {@link ml_pipelines.PrimitiveType.verify|verify} messages. + * @param message PrimitiveType message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IPrimitiveType, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a PrimitiveType message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns PrimitiveType + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PrimitiveType; + + /** + * Decodes a PrimitiveType message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns PrimitiveType + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PrimitiveType; + + /** + * Verifies a PrimitiveType message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a PrimitiveType message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns PrimitiveType + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PrimitiveType; + + /** + * Creates a plain object from a PrimitiveType message. Also converts values to other types if specified. + * @param message PrimitiveType + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PrimitiveType, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this PrimitiveType to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace PrimitiveType { + + /** PrimitiveTypeEnum enum. */ + enum PrimitiveTypeEnum { + PRIMITIVE_TYPE_UNSPECIFIED = 0, + INT = 1, + DOUBLE = 2, + STRING = 3 + } + } + + /** Properties of a PipelineTaskSpec. */ + interface IPipelineTaskSpec { + + /** PipelineTaskSpec taskInfo */ + taskInfo?: (ml_pipelines.IPipelineTaskInfo|null); + + /** PipelineTaskSpec inputs */ + inputs?: (ml_pipelines.ITaskInputsSpec|null); + + /** PipelineTaskSpec dependentTasks */ + dependentTasks?: (string[]|null); + + /** PipelineTaskSpec cachingOptions */ + cachingOptions?: (ml_pipelines.PipelineTaskSpec.ICachingOptions|null); + + /** PipelineTaskSpec componentRef */ + componentRef?: (ml_pipelines.IComponentRef|null); + + /** PipelineTaskSpec triggerPolicy */ + triggerPolicy?: (ml_pipelines.PipelineTaskSpec.ITriggerPolicy|null); + + /** PipelineTaskSpec artifactIterator */ + artifactIterator?: (ml_pipelines.IArtifactIteratorSpec|null); + + /** PipelineTaskSpec parameterIterator */ + parameterIterator?: (ml_pipelines.IParameterIteratorSpec|null); + } + + /** Represents a PipelineTaskSpec. */ + class PipelineTaskSpec implements IPipelineTaskSpec { + + /** + * Constructs a new PipelineTaskSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IPipelineTaskSpec); + + /** PipelineTaskSpec taskInfo. */ + public taskInfo?: (ml_pipelines.IPipelineTaskInfo|null); + + /** PipelineTaskSpec inputs. */ + public inputs?: (ml_pipelines.ITaskInputsSpec|null); + + /** PipelineTaskSpec dependentTasks. */ + public dependentTasks: string[]; + + /** PipelineTaskSpec cachingOptions. */ + public cachingOptions?: (ml_pipelines.PipelineTaskSpec.ICachingOptions|null); + + /** PipelineTaskSpec componentRef. */ + public componentRef?: (ml_pipelines.IComponentRef|null); + + /** PipelineTaskSpec triggerPolicy. */ + public triggerPolicy?: (ml_pipelines.PipelineTaskSpec.ITriggerPolicy|null); + + /** PipelineTaskSpec artifactIterator. */ + public artifactIterator?: (ml_pipelines.IArtifactIteratorSpec|null); + + /** PipelineTaskSpec parameterIterator. */ + public parameterIterator?: (ml_pipelines.IParameterIteratorSpec|null); + + /** PipelineTaskSpec iterator. */ + public iterator?: ("artifactIterator"|"parameterIterator"); + + /** + * Creates a new PipelineTaskSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns PipelineTaskSpec instance + */ + public static create(properties?: ml_pipelines.IPipelineTaskSpec): ml_pipelines.PipelineTaskSpec; + + /** + * Encodes the specified PipelineTaskSpec message. Does not implicitly {@link ml_pipelines.PipelineTaskSpec.verify|verify} messages. + * @param message PipelineTaskSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IPipelineTaskSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified PipelineTaskSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineTaskSpec.verify|verify} messages. + * @param message PipelineTaskSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IPipelineTaskSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a PipelineTaskSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns PipelineTaskSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineTaskSpec; + + /** + * Decodes a PipelineTaskSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns PipelineTaskSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineTaskSpec; + + /** + * Verifies a PipelineTaskSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a PipelineTaskSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns PipelineTaskSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineTaskSpec; + + /** + * Creates a plain object from a PipelineTaskSpec message. Also converts values to other types if specified. + * @param message PipelineTaskSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineTaskSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this PipelineTaskSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace PipelineTaskSpec { + + /** Properties of a CachingOptions. */ + interface ICachingOptions { + + /** CachingOptions enableCache */ + enableCache?: (boolean|null); + } + + /** Represents a CachingOptions. */ + class CachingOptions implements ICachingOptions { + + /** + * Constructs a new CachingOptions. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineTaskSpec.ICachingOptions); + + /** CachingOptions enableCache. */ + public enableCache: boolean; + + /** + * Creates a new CachingOptions instance using the specified properties. + * @param [properties] Properties to set + * @returns CachingOptions instance + */ + public static create(properties?: ml_pipelines.PipelineTaskSpec.ICachingOptions): ml_pipelines.PipelineTaskSpec.CachingOptions; + + /** + * Encodes the specified CachingOptions message. Does not implicitly {@link ml_pipelines.PipelineTaskSpec.CachingOptions.verify|verify} messages. + * @param message CachingOptions message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineTaskSpec.ICachingOptions, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified CachingOptions message, length delimited. Does not implicitly {@link ml_pipelines.PipelineTaskSpec.CachingOptions.verify|verify} messages. + * @param message CachingOptions message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineTaskSpec.ICachingOptions, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a CachingOptions message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns CachingOptions + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineTaskSpec.CachingOptions; + + /** + * Decodes a CachingOptions message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns CachingOptions + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineTaskSpec.CachingOptions; + + /** + * Verifies a CachingOptions message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a CachingOptions message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns CachingOptions + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineTaskSpec.CachingOptions; + + /** + * Creates a plain object from a CachingOptions message. Also converts values to other types if specified. + * @param message CachingOptions + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineTaskSpec.CachingOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this CachingOptions to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TriggerPolicy. */ + interface ITriggerPolicy { + + /** TriggerPolicy condition */ + condition?: (string|null); + + /** TriggerPolicy strategy */ + strategy?: (ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy|null); + } + + /** Represents a TriggerPolicy. */ + class TriggerPolicy implements ITriggerPolicy { + + /** + * Constructs a new TriggerPolicy. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineTaskSpec.ITriggerPolicy); + + /** TriggerPolicy condition. */ + public condition: string; + + /** TriggerPolicy strategy. */ + public strategy: ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy; + + /** + * Creates a new TriggerPolicy instance using the specified properties. + * @param [properties] Properties to set + * @returns TriggerPolicy instance + */ + public static create(properties?: ml_pipelines.PipelineTaskSpec.ITriggerPolicy): ml_pipelines.PipelineTaskSpec.TriggerPolicy; + + /** + * Encodes the specified TriggerPolicy message. Does not implicitly {@link ml_pipelines.PipelineTaskSpec.TriggerPolicy.verify|verify} messages. + * @param message TriggerPolicy message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineTaskSpec.ITriggerPolicy, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TriggerPolicy message, length delimited. Does not implicitly {@link ml_pipelines.PipelineTaskSpec.TriggerPolicy.verify|verify} messages. + * @param message TriggerPolicy message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineTaskSpec.ITriggerPolicy, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TriggerPolicy message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TriggerPolicy + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineTaskSpec.TriggerPolicy; + + /** + * Decodes a TriggerPolicy message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TriggerPolicy + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineTaskSpec.TriggerPolicy; + + /** + * Verifies a TriggerPolicy message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TriggerPolicy message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TriggerPolicy + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineTaskSpec.TriggerPolicy; + + /** + * Creates a plain object from a TriggerPolicy message. Also converts values to other types if specified. + * @param message TriggerPolicy + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineTaskSpec.TriggerPolicy, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TriggerPolicy to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace TriggerPolicy { + + /** TriggerStrategy enum. */ + enum TriggerStrategy { + TRIGGER_STRATEGY_UNSPECIFIED = 0, + ALL_UPSTREAM_TASKS_SUCCEEDED = 1, + ALL_UPSTREAM_TASKS_COMPLETED = 2 + } + } + } + + /** Properties of an ArtifactIteratorSpec. */ + interface IArtifactIteratorSpec { + + /** ArtifactIteratorSpec items */ + items?: (ml_pipelines.ArtifactIteratorSpec.IItemsSpec|null); + + /** ArtifactIteratorSpec itemInput */ + itemInput?: (string|null); + } + + /** Represents an ArtifactIteratorSpec. */ + class ArtifactIteratorSpec implements IArtifactIteratorSpec { + + /** + * Constructs a new ArtifactIteratorSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IArtifactIteratorSpec); + + /** ArtifactIteratorSpec items. */ + public items?: (ml_pipelines.ArtifactIteratorSpec.IItemsSpec|null); + + /** ArtifactIteratorSpec itemInput. */ + public itemInput: string; + + /** + * Creates a new ArtifactIteratorSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ArtifactIteratorSpec instance + */ + public static create(properties?: ml_pipelines.IArtifactIteratorSpec): ml_pipelines.ArtifactIteratorSpec; + + /** + * Encodes the specified ArtifactIteratorSpec message. Does not implicitly {@link ml_pipelines.ArtifactIteratorSpec.verify|verify} messages. + * @param message ArtifactIteratorSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IArtifactIteratorSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ArtifactIteratorSpec message, length delimited. Does not implicitly {@link ml_pipelines.ArtifactIteratorSpec.verify|verify} messages. + * @param message ArtifactIteratorSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IArtifactIteratorSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ArtifactIteratorSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ArtifactIteratorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ArtifactIteratorSpec; + + /** + * Decodes an ArtifactIteratorSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ArtifactIteratorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ArtifactIteratorSpec; + + /** + * Verifies an ArtifactIteratorSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ArtifactIteratorSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ArtifactIteratorSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ArtifactIteratorSpec; + + /** + * Creates a plain object from an ArtifactIteratorSpec message. Also converts values to other types if specified. + * @param message ArtifactIteratorSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ArtifactIteratorSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ArtifactIteratorSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace ArtifactIteratorSpec { + + /** Properties of an ItemsSpec. */ + interface IItemsSpec { + + /** ItemsSpec inputArtifact */ + inputArtifact?: (string|null); + } + + /** Represents an ItemsSpec. */ + class ItemsSpec implements IItemsSpec { + + /** + * Constructs a new ItemsSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.ArtifactIteratorSpec.IItemsSpec); + + /** ItemsSpec inputArtifact. */ + public inputArtifact: string; + + /** + * Creates a new ItemsSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ItemsSpec instance + */ + public static create(properties?: ml_pipelines.ArtifactIteratorSpec.IItemsSpec): ml_pipelines.ArtifactIteratorSpec.ItemsSpec; + + /** + * Encodes the specified ItemsSpec message. Does not implicitly {@link ml_pipelines.ArtifactIteratorSpec.ItemsSpec.verify|verify} messages. + * @param message ItemsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.ArtifactIteratorSpec.IItemsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ItemsSpec message, length delimited. Does not implicitly {@link ml_pipelines.ArtifactIteratorSpec.ItemsSpec.verify|verify} messages. + * @param message ItemsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.ArtifactIteratorSpec.IItemsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ItemsSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ItemsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ArtifactIteratorSpec.ItemsSpec; + + /** + * Decodes an ItemsSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ItemsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ArtifactIteratorSpec.ItemsSpec; + + /** + * Verifies an ItemsSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ItemsSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ItemsSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ArtifactIteratorSpec.ItemsSpec; + + /** + * Creates a plain object from an ItemsSpec message. Also converts values to other types if specified. + * @param message ItemsSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ArtifactIteratorSpec.ItemsSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ItemsSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a ParameterIteratorSpec. */ + interface IParameterIteratorSpec { + + /** ParameterIteratorSpec items */ + items?: (ml_pipelines.ParameterIteratorSpec.IItemsSpec|null); + + /** ParameterIteratorSpec itemInput */ + itemInput?: (string|null); + } + + /** Represents a ParameterIteratorSpec. */ + class ParameterIteratorSpec implements IParameterIteratorSpec { + + /** + * Constructs a new ParameterIteratorSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IParameterIteratorSpec); + + /** ParameterIteratorSpec items. */ + public items?: (ml_pipelines.ParameterIteratorSpec.IItemsSpec|null); + + /** ParameterIteratorSpec itemInput. */ + public itemInput: string; + + /** + * Creates a new ParameterIteratorSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ParameterIteratorSpec instance + */ + public static create(properties?: ml_pipelines.IParameterIteratorSpec): ml_pipelines.ParameterIteratorSpec; + + /** + * Encodes the specified ParameterIteratorSpec message. Does not implicitly {@link ml_pipelines.ParameterIteratorSpec.verify|verify} messages. + * @param message ParameterIteratorSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IParameterIteratorSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ParameterIteratorSpec message, length delimited. Does not implicitly {@link ml_pipelines.ParameterIteratorSpec.verify|verify} messages. + * @param message ParameterIteratorSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IParameterIteratorSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ParameterIteratorSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ParameterIteratorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ParameterIteratorSpec; + + /** + * Decodes a ParameterIteratorSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ParameterIteratorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ParameterIteratorSpec; + + /** + * Verifies a ParameterIteratorSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ParameterIteratorSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ParameterIteratorSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ParameterIteratorSpec; + + /** + * Creates a plain object from a ParameterIteratorSpec message. Also converts values to other types if specified. + * @param message ParameterIteratorSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ParameterIteratorSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ParameterIteratorSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace ParameterIteratorSpec { + + /** Properties of an ItemsSpec. */ + interface IItemsSpec { + + /** ItemsSpec raw */ + raw?: (string|null); + + /** ItemsSpec inputParameter */ + inputParameter?: (string|null); + } + + /** Represents an ItemsSpec. */ + class ItemsSpec implements IItemsSpec { + + /** + * Constructs a new ItemsSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.ParameterIteratorSpec.IItemsSpec); + + /** ItemsSpec raw. */ + public raw?: (string|null); + + /** ItemsSpec inputParameter. */ + public inputParameter?: (string|null); + + /** ItemsSpec kind. */ + public kind?: ("raw"|"inputParameter"); + + /** + * Creates a new ItemsSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ItemsSpec instance + */ + public static create(properties?: ml_pipelines.ParameterIteratorSpec.IItemsSpec): ml_pipelines.ParameterIteratorSpec.ItemsSpec; + + /** + * Encodes the specified ItemsSpec message. Does not implicitly {@link ml_pipelines.ParameterIteratorSpec.ItemsSpec.verify|verify} messages. + * @param message ItemsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.ParameterIteratorSpec.IItemsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ItemsSpec message, length delimited. Does not implicitly {@link ml_pipelines.ParameterIteratorSpec.ItemsSpec.verify|verify} messages. + * @param message ItemsSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.ParameterIteratorSpec.IItemsSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ItemsSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ItemsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ParameterIteratorSpec.ItemsSpec; + + /** + * Decodes an ItemsSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ItemsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ParameterIteratorSpec.ItemsSpec; + + /** + * Verifies an ItemsSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ItemsSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ItemsSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ParameterIteratorSpec.ItemsSpec; + + /** + * Creates a plain object from an ItemsSpec message. Also converts values to other types if specified. + * @param message ItemsSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ParameterIteratorSpec.ItemsSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ItemsSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a ComponentRef. */ + interface IComponentRef { + + /** ComponentRef name */ + name?: (string|null); + } + + /** Represents a ComponentRef. */ + class ComponentRef implements IComponentRef { + + /** + * Constructs a new ComponentRef. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IComponentRef); + + /** ComponentRef name. */ + public name: string; + + /** + * Creates a new ComponentRef instance using the specified properties. + * @param [properties] Properties to set + * @returns ComponentRef instance + */ + public static create(properties?: ml_pipelines.IComponentRef): ml_pipelines.ComponentRef; + + /** + * Encodes the specified ComponentRef message. Does not implicitly {@link ml_pipelines.ComponentRef.verify|verify} messages. + * @param message ComponentRef message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IComponentRef, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ComponentRef message, length delimited. Does not implicitly {@link ml_pipelines.ComponentRef.verify|verify} messages. + * @param message ComponentRef message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IComponentRef, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ComponentRef message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ComponentRef + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ComponentRef; + + /** + * Decodes a ComponentRef message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ComponentRef + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ComponentRef; + + /** + * Verifies a ComponentRef message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ComponentRef message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ComponentRef + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ComponentRef; + + /** + * Creates a plain object from a ComponentRef message. Also converts values to other types if specified. + * @param message ComponentRef + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ComponentRef, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ComponentRef to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a PipelineInfo. */ + interface IPipelineInfo { + + /** PipelineInfo name */ + name?: (string|null); + } + + /** Represents a PipelineInfo. */ + class PipelineInfo implements IPipelineInfo { + + /** + * Constructs a new PipelineInfo. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IPipelineInfo); + + /** PipelineInfo name. */ + public name: string; + + /** + * Creates a new PipelineInfo instance using the specified properties. + * @param [properties] Properties to set + * @returns PipelineInfo instance + */ + public static create(properties?: ml_pipelines.IPipelineInfo): ml_pipelines.PipelineInfo; + + /** + * Encodes the specified PipelineInfo message. Does not implicitly {@link ml_pipelines.PipelineInfo.verify|verify} messages. + * @param message PipelineInfo message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IPipelineInfo, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified PipelineInfo message, length delimited. Does not implicitly {@link ml_pipelines.PipelineInfo.verify|verify} messages. + * @param message PipelineInfo message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IPipelineInfo, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a PipelineInfo message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns PipelineInfo + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineInfo; + + /** + * Decodes a PipelineInfo message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns PipelineInfo + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineInfo; + + /** + * Verifies a PipelineInfo message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a PipelineInfo message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns PipelineInfo + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineInfo; + + /** + * Creates a plain object from a PipelineInfo message. Also converts values to other types if specified. + * @param message PipelineInfo + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineInfo, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this PipelineInfo to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ArtifactTypeSchema. */ + interface IArtifactTypeSchema { + + /** ArtifactTypeSchema schemaTitle */ + schemaTitle?: (string|null); + + /** ArtifactTypeSchema schemaUri */ + schemaUri?: (string|null); + + /** ArtifactTypeSchema instanceSchema */ + instanceSchema?: (string|null); + + /** ArtifactTypeSchema schemaVersion */ + schemaVersion?: (string|null); + } + + /** Represents an ArtifactTypeSchema. */ + class ArtifactTypeSchema implements IArtifactTypeSchema { + + /** + * Constructs a new ArtifactTypeSchema. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IArtifactTypeSchema); + + /** ArtifactTypeSchema schemaTitle. */ + public schemaTitle?: (string|null); + + /** ArtifactTypeSchema schemaUri. */ + public schemaUri?: (string|null); + + /** ArtifactTypeSchema instanceSchema. */ + public instanceSchema?: (string|null); + + /** ArtifactTypeSchema schemaVersion. */ + public schemaVersion: string; + + /** ArtifactTypeSchema kind. */ + public kind?: ("schemaTitle"|"schemaUri"|"instanceSchema"); + + /** + * Creates a new ArtifactTypeSchema instance using the specified properties. + * @param [properties] Properties to set + * @returns ArtifactTypeSchema instance + */ + public static create(properties?: ml_pipelines.IArtifactTypeSchema): ml_pipelines.ArtifactTypeSchema; + + /** + * Encodes the specified ArtifactTypeSchema message. Does not implicitly {@link ml_pipelines.ArtifactTypeSchema.verify|verify} messages. + * @param message ArtifactTypeSchema message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IArtifactTypeSchema, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ArtifactTypeSchema message, length delimited. Does not implicitly {@link ml_pipelines.ArtifactTypeSchema.verify|verify} messages. + * @param message ArtifactTypeSchema message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IArtifactTypeSchema, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ArtifactTypeSchema message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ArtifactTypeSchema + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ArtifactTypeSchema; + + /** + * Decodes an ArtifactTypeSchema message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ArtifactTypeSchema + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ArtifactTypeSchema; + + /** + * Verifies an ArtifactTypeSchema message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ArtifactTypeSchema message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ArtifactTypeSchema + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ArtifactTypeSchema; + + /** + * Creates a plain object from an ArtifactTypeSchema message. Also converts values to other types if specified. + * @param message ArtifactTypeSchema + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ArtifactTypeSchema, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ArtifactTypeSchema to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a PipelineTaskInfo. */ + interface IPipelineTaskInfo { + + /** PipelineTaskInfo name */ + name?: (string|null); + } + + /** Represents a PipelineTaskInfo. */ + class PipelineTaskInfo implements IPipelineTaskInfo { + + /** + * Constructs a new PipelineTaskInfo. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IPipelineTaskInfo); + + /** PipelineTaskInfo name. */ + public name: string; + + /** + * Creates a new PipelineTaskInfo instance using the specified properties. + * @param [properties] Properties to set + * @returns PipelineTaskInfo instance + */ + public static create(properties?: ml_pipelines.IPipelineTaskInfo): ml_pipelines.PipelineTaskInfo; + + /** + * Encodes the specified PipelineTaskInfo message. Does not implicitly {@link ml_pipelines.PipelineTaskInfo.verify|verify} messages. + * @param message PipelineTaskInfo message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IPipelineTaskInfo, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified PipelineTaskInfo message, length delimited. Does not implicitly {@link ml_pipelines.PipelineTaskInfo.verify|verify} messages. + * @param message PipelineTaskInfo message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IPipelineTaskInfo, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a PipelineTaskInfo message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns PipelineTaskInfo + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineTaskInfo; + + /** + * Decodes a PipelineTaskInfo message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns PipelineTaskInfo + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineTaskInfo; + + /** + * Verifies a PipelineTaskInfo message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a PipelineTaskInfo message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns PipelineTaskInfo + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineTaskInfo; + + /** + * Creates a plain object from a PipelineTaskInfo message. Also converts values to other types if specified. + * @param message PipelineTaskInfo + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineTaskInfo, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this PipelineTaskInfo to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a ValueOrRuntimeParameter. */ + interface IValueOrRuntimeParameter { + + /** ValueOrRuntimeParameter constantValue */ + constantValue?: (ml_pipelines.IValue|null); + + /** ValueOrRuntimeParameter runtimeParameter */ + runtimeParameter?: (string|null); + } + + /** Represents a ValueOrRuntimeParameter. */ + class ValueOrRuntimeParameter implements IValueOrRuntimeParameter { + + /** + * Constructs a new ValueOrRuntimeParameter. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IValueOrRuntimeParameter); + + /** ValueOrRuntimeParameter constantValue. */ + public constantValue?: (ml_pipelines.IValue|null); + + /** ValueOrRuntimeParameter runtimeParameter. */ + public runtimeParameter?: (string|null); + + /** ValueOrRuntimeParameter value. */ + public value?: ("constantValue"|"runtimeParameter"); + + /** + * Creates a new ValueOrRuntimeParameter instance using the specified properties. + * @param [properties] Properties to set + * @returns ValueOrRuntimeParameter instance + */ + public static create(properties?: ml_pipelines.IValueOrRuntimeParameter): ml_pipelines.ValueOrRuntimeParameter; + + /** + * Encodes the specified ValueOrRuntimeParameter message. Does not implicitly {@link ml_pipelines.ValueOrRuntimeParameter.verify|verify} messages. + * @param message ValueOrRuntimeParameter message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IValueOrRuntimeParameter, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ValueOrRuntimeParameter message, length delimited. Does not implicitly {@link ml_pipelines.ValueOrRuntimeParameter.verify|verify} messages. + * @param message ValueOrRuntimeParameter message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IValueOrRuntimeParameter, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ValueOrRuntimeParameter message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ValueOrRuntimeParameter + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ValueOrRuntimeParameter; + + /** + * Decodes a ValueOrRuntimeParameter message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ValueOrRuntimeParameter + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ValueOrRuntimeParameter; + + /** + * Verifies a ValueOrRuntimeParameter message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ValueOrRuntimeParameter message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ValueOrRuntimeParameter + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ValueOrRuntimeParameter; + + /** + * Creates a plain object from a ValueOrRuntimeParameter message. Also converts values to other types if specified. + * @param message ValueOrRuntimeParameter + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ValueOrRuntimeParameter, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ValueOrRuntimeParameter to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a PipelineDeploymentConfig. */ + interface IPipelineDeploymentConfig { + + /** PipelineDeploymentConfig executors */ + executors?: ({ [k: string]: ml_pipelines.PipelineDeploymentConfig.IExecutorSpec }|null); + } + + /** Represents a PipelineDeploymentConfig. */ + class PipelineDeploymentConfig implements IPipelineDeploymentConfig { + + /** + * Constructs a new PipelineDeploymentConfig. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IPipelineDeploymentConfig); + + /** PipelineDeploymentConfig executors. */ + public executors: { [k: string]: ml_pipelines.PipelineDeploymentConfig.IExecutorSpec }; + + /** + * Creates a new PipelineDeploymentConfig instance using the specified properties. + * @param [properties] Properties to set + * @returns PipelineDeploymentConfig instance + */ + public static create(properties?: ml_pipelines.IPipelineDeploymentConfig): ml_pipelines.PipelineDeploymentConfig; + + /** + * Encodes the specified PipelineDeploymentConfig message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.verify|verify} messages. + * @param message PipelineDeploymentConfig message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IPipelineDeploymentConfig, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified PipelineDeploymentConfig message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.verify|verify} messages. + * @param message PipelineDeploymentConfig message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IPipelineDeploymentConfig, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a PipelineDeploymentConfig message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns PipelineDeploymentConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineDeploymentConfig; + + /** + * Decodes a PipelineDeploymentConfig message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns PipelineDeploymentConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineDeploymentConfig; + + /** + * Verifies a PipelineDeploymentConfig message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a PipelineDeploymentConfig message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns PipelineDeploymentConfig + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineDeploymentConfig; + + /** + * Creates a plain object from a PipelineDeploymentConfig message. Also converts values to other types if specified. + * @param message PipelineDeploymentConfig + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineDeploymentConfig, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this PipelineDeploymentConfig to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace PipelineDeploymentConfig { + + /** Properties of a PipelineContainerSpec. */ + interface IPipelineContainerSpec { + + /** PipelineContainerSpec image */ + image?: (string|null); + + /** PipelineContainerSpec command */ + command?: (string[]|null); + + /** PipelineContainerSpec args */ + args?: (string[]|null); + + /** PipelineContainerSpec lifecycle */ + lifecycle?: (ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ILifecycle|null); + + /** PipelineContainerSpec resources */ + resources?: (ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.IResourceSpec|null); + } + + /** Represents a PipelineContainerSpec. */ + class PipelineContainerSpec implements IPipelineContainerSpec { + + /** + * Constructs a new PipelineContainerSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineDeploymentConfig.IPipelineContainerSpec); + + /** PipelineContainerSpec image. */ + public image: string; + + /** PipelineContainerSpec command. */ + public command: string[]; + + /** PipelineContainerSpec args. */ + public args: string[]; + + /** PipelineContainerSpec lifecycle. */ + public lifecycle?: (ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ILifecycle|null); + + /** PipelineContainerSpec resources. */ + public resources?: (ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.IResourceSpec|null); + + /** + * Creates a new PipelineContainerSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns PipelineContainerSpec instance + */ + public static create(properties?: ml_pipelines.PipelineDeploymentConfig.IPipelineContainerSpec): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec; + + /** + * Encodes the specified PipelineContainerSpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.verify|verify} messages. + * @param message PipelineContainerSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineDeploymentConfig.IPipelineContainerSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified PipelineContainerSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.verify|verify} messages. + * @param message PipelineContainerSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineDeploymentConfig.IPipelineContainerSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a PipelineContainerSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns PipelineContainerSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec; + + /** + * Decodes a PipelineContainerSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns PipelineContainerSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec; + + /** + * Verifies a PipelineContainerSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a PipelineContainerSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns PipelineContainerSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec; + + /** + * Creates a plain object from a PipelineContainerSpec message. Also converts values to other types if specified. + * @param message PipelineContainerSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this PipelineContainerSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace PipelineContainerSpec { + + /** Properties of a Lifecycle. */ + interface ILifecycle { + + /** Lifecycle preCacheCheck */ + preCacheCheck?: (ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.IExec|null); + } + + /** Represents a Lifecycle. */ + class Lifecycle implements ILifecycle { + + /** + * Constructs a new Lifecycle. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ILifecycle); + + /** Lifecycle preCacheCheck. */ + public preCacheCheck?: (ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.IExec|null); + + /** + * Creates a new Lifecycle instance using the specified properties. + * @param [properties] Properties to set + * @returns Lifecycle instance + */ + public static create(properties?: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ILifecycle): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle; + + /** + * Encodes the specified Lifecycle message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.verify|verify} messages. + * @param message Lifecycle message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ILifecycle, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Lifecycle message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.verify|verify} messages. + * @param message Lifecycle message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ILifecycle, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Lifecycle message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Lifecycle + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle; + + /** + * Decodes a Lifecycle message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Lifecycle + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle; + + /** + * Verifies a Lifecycle message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Lifecycle message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Lifecycle + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle; + + /** + * Creates a plain object from a Lifecycle message. Also converts values to other types if specified. + * @param message Lifecycle + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Lifecycle to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace Lifecycle { + + /** Properties of an Exec. */ + interface IExec { + + /** Exec command */ + command?: (string[]|null); + + /** Exec args */ + args?: (string[]|null); + } + + /** Represents an Exec. */ + class Exec implements IExec { + + /** + * Constructs a new Exec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.IExec); + + /** Exec command. */ + public command: string[]; + + /** Exec args. */ + public args: string[]; + + /** + * Creates a new Exec instance using the specified properties. + * @param [properties] Properties to set + * @returns Exec instance + */ + public static create(properties?: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.IExec): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec; + + /** + * Encodes the specified Exec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.verify|verify} messages. + * @param message Exec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.IExec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Exec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.verify|verify} messages. + * @param message Exec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.IExec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an Exec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Exec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec; + + /** + * Decodes an Exec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Exec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec; + + /** + * Verifies an Exec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an Exec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Exec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec; + + /** + * Creates a plain object from an Exec message. Also converts values to other types if specified. + * @param message Exec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Exec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a ResourceSpec. */ + interface IResourceSpec { + + /** ResourceSpec cpuLimit */ + cpuLimit?: (number|null); + + /** ResourceSpec memoryLimit */ + memoryLimit?: (number|null); + + /** ResourceSpec accelerator */ + accelerator?: (ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.IAcceleratorConfig|null); + } + + /** Represents a ResourceSpec. */ + class ResourceSpec implements IResourceSpec { + + /** + * Constructs a new ResourceSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.IResourceSpec); + + /** ResourceSpec cpuLimit. */ + public cpuLimit: number; + + /** ResourceSpec memoryLimit. */ + public memoryLimit: number; + + /** ResourceSpec accelerator. */ + public accelerator?: (ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.IAcceleratorConfig|null); + + /** + * Creates a new ResourceSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ResourceSpec instance + */ + public static create(properties?: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.IResourceSpec): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec; + + /** + * Encodes the specified ResourceSpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.verify|verify} messages. + * @param message ResourceSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.IResourceSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ResourceSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.verify|verify} messages. + * @param message ResourceSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.IResourceSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ResourceSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ResourceSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec; + + /** + * Decodes a ResourceSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ResourceSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec; + + /** + * Verifies a ResourceSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ResourceSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ResourceSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec; + + /** + * Creates a plain object from a ResourceSpec message. Also converts values to other types if specified. + * @param message ResourceSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ResourceSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace ResourceSpec { + + /** Properties of an AcceleratorConfig. */ + interface IAcceleratorConfig { + + /** AcceleratorConfig type */ + type?: (string|null); + + /** AcceleratorConfig count */ + count?: (number|Long|null); + } + + /** Represents an AcceleratorConfig. */ + class AcceleratorConfig implements IAcceleratorConfig { + + /** + * Constructs a new AcceleratorConfig. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.IAcceleratorConfig); + + /** AcceleratorConfig type. */ + public type: string; + + /** AcceleratorConfig count. */ + public count: (number|Long); + + /** + * Creates a new AcceleratorConfig instance using the specified properties. + * @param [properties] Properties to set + * @returns AcceleratorConfig instance + */ + public static create(properties?: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.IAcceleratorConfig): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig; + + /** + * Encodes the specified AcceleratorConfig message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.verify|verify} messages. + * @param message AcceleratorConfig message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.IAcceleratorConfig, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AcceleratorConfig message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.verify|verify} messages. + * @param message AcceleratorConfig message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.IAcceleratorConfig, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AcceleratorConfig message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AcceleratorConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig; + + /** + * Decodes an AcceleratorConfig message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AcceleratorConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig; + + /** + * Verifies an AcceleratorConfig message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AcceleratorConfig message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AcceleratorConfig + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig; + + /** + * Creates a plain object from an AcceleratorConfig message. Also converts values to other types if specified. + * @param message AcceleratorConfig + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AcceleratorConfig to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + } + + /** Properties of an ImporterSpec. */ + interface IImporterSpec { + + /** ImporterSpec artifactUri */ + artifactUri?: (ml_pipelines.IValueOrRuntimeParameter|null); + + /** ImporterSpec typeSchema */ + typeSchema?: (ml_pipelines.IArtifactTypeSchema|null); + + /** ImporterSpec properties */ + properties?: ({ [k: string]: ml_pipelines.IValueOrRuntimeParameter }|null); + + /** ImporterSpec customProperties */ + customProperties?: ({ [k: string]: ml_pipelines.IValueOrRuntimeParameter }|null); + + /** ImporterSpec metadata */ + metadata?: (google.protobuf.IStruct|null); + + /** ImporterSpec reimport */ + reimport?: (boolean|null); + } + + /** Represents an ImporterSpec. */ + class ImporterSpec implements IImporterSpec { + + /** + * Constructs a new ImporterSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineDeploymentConfig.IImporterSpec); + + /** ImporterSpec artifactUri. */ + public artifactUri?: (ml_pipelines.IValueOrRuntimeParameter|null); + + /** ImporterSpec typeSchema. */ + public typeSchema?: (ml_pipelines.IArtifactTypeSchema|null); + + /** ImporterSpec properties. */ + public properties: { [k: string]: ml_pipelines.IValueOrRuntimeParameter }; + + /** ImporterSpec customProperties. */ + public customProperties: { [k: string]: ml_pipelines.IValueOrRuntimeParameter }; + + /** ImporterSpec metadata. */ + public metadata?: (google.protobuf.IStruct|null); + + /** ImporterSpec reimport. */ + public reimport: boolean; + + /** + * Creates a new ImporterSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ImporterSpec instance + */ + public static create(properties?: ml_pipelines.PipelineDeploymentConfig.IImporterSpec): ml_pipelines.PipelineDeploymentConfig.ImporterSpec; + + /** + * Encodes the specified ImporterSpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ImporterSpec.verify|verify} messages. + * @param message ImporterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineDeploymentConfig.IImporterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImporterSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ImporterSpec.verify|verify} messages. + * @param message ImporterSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineDeploymentConfig.IImporterSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImporterSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImporterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineDeploymentConfig.ImporterSpec; + + /** + * Decodes an ImporterSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImporterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineDeploymentConfig.ImporterSpec; + + /** + * Verifies an ImporterSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImporterSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImporterSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineDeploymentConfig.ImporterSpec; + + /** + * Creates a plain object from an ImporterSpec message. Also converts values to other types if specified. + * @param message ImporterSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineDeploymentConfig.ImporterSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImporterSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a ResolverSpec. */ + interface IResolverSpec { + + /** ResolverSpec outputArtifactQueries */ + outputArtifactQueries?: ({ [k: string]: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.IArtifactQuerySpec }|null); + } + + /** Represents a ResolverSpec. */ + class ResolverSpec implements IResolverSpec { + + /** + * Constructs a new ResolverSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineDeploymentConfig.IResolverSpec); + + /** ResolverSpec outputArtifactQueries. */ + public outputArtifactQueries: { [k: string]: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.IArtifactQuerySpec }; + + /** + * Creates a new ResolverSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ResolverSpec instance + */ + public static create(properties?: ml_pipelines.PipelineDeploymentConfig.IResolverSpec): ml_pipelines.PipelineDeploymentConfig.ResolverSpec; + + /** + * Encodes the specified ResolverSpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ResolverSpec.verify|verify} messages. + * @param message ResolverSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineDeploymentConfig.IResolverSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ResolverSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ResolverSpec.verify|verify} messages. + * @param message ResolverSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineDeploymentConfig.IResolverSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ResolverSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ResolverSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineDeploymentConfig.ResolverSpec; + + /** + * Decodes a ResolverSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ResolverSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineDeploymentConfig.ResolverSpec; + + /** + * Verifies a ResolverSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ResolverSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ResolverSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineDeploymentConfig.ResolverSpec; + + /** + * Creates a plain object from a ResolverSpec message. Also converts values to other types if specified. + * @param message ResolverSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineDeploymentConfig.ResolverSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ResolverSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace ResolverSpec { + + /** Properties of an ArtifactQuerySpec. */ + interface IArtifactQuerySpec { + + /** ArtifactQuerySpec filter */ + filter?: (string|null); + + /** ArtifactQuerySpec limit */ + limit?: (number|null); + } + + /** Represents an ArtifactQuerySpec. */ + class ArtifactQuerySpec implements IArtifactQuerySpec { + + /** + * Constructs a new ArtifactQuerySpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.IArtifactQuerySpec); + + /** ArtifactQuerySpec filter. */ + public filter: string; + + /** ArtifactQuerySpec limit. */ + public limit: number; + + /** + * Creates a new ArtifactQuerySpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ArtifactQuerySpec instance + */ + public static create(properties?: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.IArtifactQuerySpec): ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec; + + /** + * Encodes the specified ArtifactQuerySpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.verify|verify} messages. + * @param message ArtifactQuerySpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.IArtifactQuerySpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ArtifactQuerySpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.verify|verify} messages. + * @param message ArtifactQuerySpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.IArtifactQuerySpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ArtifactQuerySpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ArtifactQuerySpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec; + + /** + * Decodes an ArtifactQuerySpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ArtifactQuerySpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec; + + /** + * Verifies an ArtifactQuerySpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ArtifactQuerySpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ArtifactQuerySpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec; + + /** + * Creates a plain object from an ArtifactQuerySpec message. Also converts values to other types if specified. + * @param message ArtifactQuerySpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ArtifactQuerySpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a AIPlatformCustomJobSpec. */ + interface IAIPlatformCustomJobSpec { + + /** AIPlatformCustomJobSpec customJob */ + customJob?: (google.protobuf.IStruct|null); + } + + /** Represents a AIPlatformCustomJobSpec. */ + class AIPlatformCustomJobSpec implements IAIPlatformCustomJobSpec { + + /** + * Constructs a new AIPlatformCustomJobSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineDeploymentConfig.IAIPlatformCustomJobSpec); + + /** AIPlatformCustomJobSpec customJob. */ + public customJob?: (google.protobuf.IStruct|null); + + /** + * Creates a new AIPlatformCustomJobSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns AIPlatformCustomJobSpec instance + */ + public static create(properties?: ml_pipelines.PipelineDeploymentConfig.IAIPlatformCustomJobSpec): ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec; + + /** + * Encodes the specified AIPlatformCustomJobSpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.verify|verify} messages. + * @param message AIPlatformCustomJobSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineDeploymentConfig.IAIPlatformCustomJobSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AIPlatformCustomJobSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.verify|verify} messages. + * @param message AIPlatformCustomJobSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineDeploymentConfig.IAIPlatformCustomJobSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a AIPlatformCustomJobSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AIPlatformCustomJobSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec; + + /** + * Decodes a AIPlatformCustomJobSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AIPlatformCustomJobSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec; + + /** + * Verifies a AIPlatformCustomJobSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a AIPlatformCustomJobSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AIPlatformCustomJobSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec; + + /** + * Creates a plain object from a AIPlatformCustomJobSpec message. Also converts values to other types if specified. + * @param message AIPlatformCustomJobSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AIPlatformCustomJobSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ExecutorSpec. */ + interface IExecutorSpec { + + /** ExecutorSpec container */ + container?: (ml_pipelines.PipelineDeploymentConfig.IPipelineContainerSpec|null); + + /** ExecutorSpec importer */ + importer?: (ml_pipelines.PipelineDeploymentConfig.IImporterSpec|null); + + /** ExecutorSpec resolver */ + resolver?: (ml_pipelines.PipelineDeploymentConfig.IResolverSpec|null); + + /** ExecutorSpec customJob */ + customJob?: (ml_pipelines.PipelineDeploymentConfig.IAIPlatformCustomJobSpec|null); + } + + /** Represents an ExecutorSpec. */ + class ExecutorSpec implements IExecutorSpec { + + /** + * Constructs a new ExecutorSpec. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.PipelineDeploymentConfig.IExecutorSpec); + + /** ExecutorSpec container. */ + public container?: (ml_pipelines.PipelineDeploymentConfig.IPipelineContainerSpec|null); + + /** ExecutorSpec importer. */ + public importer?: (ml_pipelines.PipelineDeploymentConfig.IImporterSpec|null); + + /** ExecutorSpec resolver. */ + public resolver?: (ml_pipelines.PipelineDeploymentConfig.IResolverSpec|null); + + /** ExecutorSpec customJob. */ + public customJob?: (ml_pipelines.PipelineDeploymentConfig.IAIPlatformCustomJobSpec|null); + + /** ExecutorSpec spec. */ + public spec?: ("container"|"importer"|"resolver"|"customJob"); + + /** + * Creates a new ExecutorSpec instance using the specified properties. + * @param [properties] Properties to set + * @returns ExecutorSpec instance + */ + public static create(properties?: ml_pipelines.PipelineDeploymentConfig.IExecutorSpec): ml_pipelines.PipelineDeploymentConfig.ExecutorSpec; + + /** + * Encodes the specified ExecutorSpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.verify|verify} messages. + * @param message ExecutorSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.PipelineDeploymentConfig.IExecutorSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ExecutorSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.verify|verify} messages. + * @param message ExecutorSpec message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.PipelineDeploymentConfig.IExecutorSpec, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ExecutorSpec message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ExecutorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineDeploymentConfig.ExecutorSpec; + + /** + * Decodes an ExecutorSpec message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ExecutorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineDeploymentConfig.ExecutorSpec; + + /** + * Verifies an ExecutorSpec message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ExecutorSpec message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ExecutorSpec + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineDeploymentConfig.ExecutorSpec; + + /** + * Creates a plain object from an ExecutorSpec message. Also converts values to other types if specified. + * @param message ExecutorSpec + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineDeploymentConfig.ExecutorSpec, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ExecutorSpec to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a Value. */ + interface IValue { + + /** Value intValue */ + intValue?: (number|Long|null); + + /** Value doubleValue */ + doubleValue?: (number|null); + + /** Value stringValue */ + stringValue?: (string|null); + } + + /** Represents a Value. */ + class Value implements IValue { + + /** + * Constructs a new Value. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IValue); + + /** Value intValue. */ + public intValue?: (number|Long|null); + + /** Value doubleValue. */ + public doubleValue?: (number|null); + + /** Value stringValue. */ + public stringValue?: (string|null); + + /** Value value. */ + public value?: ("intValue"|"doubleValue"|"stringValue"); + + /** + * Creates a new Value instance using the specified properties. + * @param [properties] Properties to set + * @returns Value instance + */ + public static create(properties?: ml_pipelines.IValue): ml_pipelines.Value; + + /** + * Encodes the specified Value message. Does not implicitly {@link ml_pipelines.Value.verify|verify} messages. + * @param message Value message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IValue, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Value message, length delimited. Does not implicitly {@link ml_pipelines.Value.verify|verify} messages. + * @param message Value message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IValue, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Value message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Value + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.Value; + + /** + * Decodes a Value message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Value + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.Value; + + /** + * Verifies a Value message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Value message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Value + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.Value; + + /** + * Creates a plain object from a Value message. Also converts values to other types if specified. + * @param message Value + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.Value, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Value to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a RuntimeArtifact. */ + interface IRuntimeArtifact { + + /** RuntimeArtifact name */ + name?: (string|null); + + /** RuntimeArtifact type */ + type?: (ml_pipelines.IArtifactTypeSchema|null); + + /** RuntimeArtifact uri */ + uri?: (string|null); + + /** RuntimeArtifact properties */ + properties?: ({ [k: string]: ml_pipelines.IValue }|null); + + /** RuntimeArtifact customProperties */ + customProperties?: ({ [k: string]: ml_pipelines.IValue }|null); + + /** RuntimeArtifact metadata */ + metadata?: (google.protobuf.IStruct|null); + } + + /** Represents a RuntimeArtifact. */ + class RuntimeArtifact implements IRuntimeArtifact { + + /** + * Constructs a new RuntimeArtifact. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IRuntimeArtifact); + + /** RuntimeArtifact name. */ + public name: string; + + /** RuntimeArtifact type. */ + public type?: (ml_pipelines.IArtifactTypeSchema|null); + + /** RuntimeArtifact uri. */ + public uri: string; + + /** RuntimeArtifact properties. */ + public properties: { [k: string]: ml_pipelines.IValue }; + + /** RuntimeArtifact customProperties. */ + public customProperties: { [k: string]: ml_pipelines.IValue }; + + /** RuntimeArtifact metadata. */ + public metadata?: (google.protobuf.IStruct|null); + + /** + * Creates a new RuntimeArtifact instance using the specified properties. + * @param [properties] Properties to set + * @returns RuntimeArtifact instance + */ + public static create(properties?: ml_pipelines.IRuntimeArtifact): ml_pipelines.RuntimeArtifact; + + /** + * Encodes the specified RuntimeArtifact message. Does not implicitly {@link ml_pipelines.RuntimeArtifact.verify|verify} messages. + * @param message RuntimeArtifact message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IRuntimeArtifact, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified RuntimeArtifact message, length delimited. Does not implicitly {@link ml_pipelines.RuntimeArtifact.verify|verify} messages. + * @param message RuntimeArtifact message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IRuntimeArtifact, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a RuntimeArtifact message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns RuntimeArtifact + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.RuntimeArtifact; + + /** + * Decodes a RuntimeArtifact message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns RuntimeArtifact + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.RuntimeArtifact; + + /** + * Verifies a RuntimeArtifact message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a RuntimeArtifact message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns RuntimeArtifact + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.RuntimeArtifact; + + /** + * Creates a plain object from a RuntimeArtifact message. Also converts values to other types if specified. + * @param message RuntimeArtifact + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.RuntimeArtifact, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this RuntimeArtifact to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ArtifactList. */ + interface IArtifactList { + + /** ArtifactList artifacts */ + artifacts?: (ml_pipelines.IRuntimeArtifact[]|null); + } + + /** Represents an ArtifactList. */ + class ArtifactList implements IArtifactList { + + /** + * Constructs a new ArtifactList. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IArtifactList); + + /** ArtifactList artifacts. */ + public artifacts: ml_pipelines.IRuntimeArtifact[]; + + /** + * Creates a new ArtifactList instance using the specified properties. + * @param [properties] Properties to set + * @returns ArtifactList instance + */ + public static create(properties?: ml_pipelines.IArtifactList): ml_pipelines.ArtifactList; + + /** + * Encodes the specified ArtifactList message. Does not implicitly {@link ml_pipelines.ArtifactList.verify|verify} messages. + * @param message ArtifactList message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IArtifactList, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ArtifactList message, length delimited. Does not implicitly {@link ml_pipelines.ArtifactList.verify|verify} messages. + * @param message ArtifactList message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IArtifactList, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ArtifactList message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ArtifactList + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ArtifactList; + + /** + * Decodes an ArtifactList message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ArtifactList + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ArtifactList; + + /** + * Verifies an ArtifactList message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ArtifactList message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ArtifactList + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ArtifactList; + + /** + * Creates a plain object from an ArtifactList message. Also converts values to other types if specified. + * @param message ArtifactList + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ArtifactList, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ArtifactList to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ExecutorInput. */ + interface IExecutorInput { + + /** ExecutorInput inputs */ + inputs?: (ml_pipelines.ExecutorInput.IInputs|null); + + /** ExecutorInput outputs */ + outputs?: (ml_pipelines.ExecutorInput.IOutputs|null); + } + + /** Represents an ExecutorInput. */ + class ExecutorInput implements IExecutorInput { + + /** + * Constructs a new ExecutorInput. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IExecutorInput); + + /** ExecutorInput inputs. */ + public inputs?: (ml_pipelines.ExecutorInput.IInputs|null); + + /** ExecutorInput outputs. */ + public outputs?: (ml_pipelines.ExecutorInput.IOutputs|null); + + /** + * Creates a new ExecutorInput instance using the specified properties. + * @param [properties] Properties to set + * @returns ExecutorInput instance + */ + public static create(properties?: ml_pipelines.IExecutorInput): ml_pipelines.ExecutorInput; + + /** + * Encodes the specified ExecutorInput message. Does not implicitly {@link ml_pipelines.ExecutorInput.verify|verify} messages. + * @param message ExecutorInput message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IExecutorInput, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ExecutorInput message, length delimited. Does not implicitly {@link ml_pipelines.ExecutorInput.verify|verify} messages. + * @param message ExecutorInput message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IExecutorInput, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ExecutorInput message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ExecutorInput + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ExecutorInput; + + /** + * Decodes an ExecutorInput message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ExecutorInput + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ExecutorInput; + + /** + * Verifies an ExecutorInput message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ExecutorInput message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ExecutorInput + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ExecutorInput; + + /** + * Creates a plain object from an ExecutorInput message. Also converts values to other types if specified. + * @param message ExecutorInput + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ExecutorInput, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ExecutorInput to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace ExecutorInput { + + /** Properties of an Inputs. */ + interface IInputs { + + /** Inputs parameters */ + parameters?: ({ [k: string]: ml_pipelines.IValue }|null); + + /** Inputs artifacts */ + artifacts?: ({ [k: string]: ml_pipelines.IArtifactList }|null); + } + + /** Represents an Inputs. */ + class Inputs implements IInputs { + + /** + * Constructs a new Inputs. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.ExecutorInput.IInputs); + + /** Inputs parameters. */ + public parameters: { [k: string]: ml_pipelines.IValue }; + + /** Inputs artifacts. */ + public artifacts: { [k: string]: ml_pipelines.IArtifactList }; + + /** + * Creates a new Inputs instance using the specified properties. + * @param [properties] Properties to set + * @returns Inputs instance + */ + public static create(properties?: ml_pipelines.ExecutorInput.IInputs): ml_pipelines.ExecutorInput.Inputs; + + /** + * Encodes the specified Inputs message. Does not implicitly {@link ml_pipelines.ExecutorInput.Inputs.verify|verify} messages. + * @param message Inputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.ExecutorInput.IInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Inputs message, length delimited. Does not implicitly {@link ml_pipelines.ExecutorInput.Inputs.verify|verify} messages. + * @param message Inputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.ExecutorInput.IInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an Inputs message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Inputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ExecutorInput.Inputs; + + /** + * Decodes an Inputs message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Inputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ExecutorInput.Inputs; + + /** + * Verifies an Inputs message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an Inputs message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Inputs + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ExecutorInput.Inputs; + + /** + * Creates a plain object from an Inputs message. Also converts values to other types if specified. + * @param message Inputs + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ExecutorInput.Inputs, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Inputs to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an OutputParameter. */ + interface IOutputParameter { + + /** OutputParameter outputFile */ + outputFile?: (string|null); + } + + /** Represents an OutputParameter. */ + class OutputParameter implements IOutputParameter { + + /** + * Constructs a new OutputParameter. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.ExecutorInput.IOutputParameter); + + /** OutputParameter outputFile. */ + public outputFile: string; + + /** + * Creates a new OutputParameter instance using the specified properties. + * @param [properties] Properties to set + * @returns OutputParameter instance + */ + public static create(properties?: ml_pipelines.ExecutorInput.IOutputParameter): ml_pipelines.ExecutorInput.OutputParameter; + + /** + * Encodes the specified OutputParameter message. Does not implicitly {@link ml_pipelines.ExecutorInput.OutputParameter.verify|verify} messages. + * @param message OutputParameter message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.ExecutorInput.IOutputParameter, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified OutputParameter message, length delimited. Does not implicitly {@link ml_pipelines.ExecutorInput.OutputParameter.verify|verify} messages. + * @param message OutputParameter message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.ExecutorInput.IOutputParameter, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an OutputParameter message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns OutputParameter + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ExecutorInput.OutputParameter; + + /** + * Decodes an OutputParameter message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns OutputParameter + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ExecutorInput.OutputParameter; + + /** + * Verifies an OutputParameter message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an OutputParameter message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns OutputParameter + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ExecutorInput.OutputParameter; + + /** + * Creates a plain object from an OutputParameter message. Also converts values to other types if specified. + * @param message OutputParameter + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ExecutorInput.OutputParameter, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this OutputParameter to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an Outputs. */ + interface IOutputs { + + /** Outputs parameters */ + parameters?: ({ [k: string]: ml_pipelines.ExecutorInput.IOutputParameter }|null); + + /** Outputs artifacts */ + artifacts?: ({ [k: string]: ml_pipelines.IArtifactList }|null); + + /** Outputs outputFile */ + outputFile?: (string|null); + } + + /** Represents an Outputs. */ + class Outputs implements IOutputs { + + /** + * Constructs a new Outputs. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.ExecutorInput.IOutputs); + + /** Outputs parameters. */ + public parameters: { [k: string]: ml_pipelines.ExecutorInput.IOutputParameter }; + + /** Outputs artifacts. */ + public artifacts: { [k: string]: ml_pipelines.IArtifactList }; + + /** Outputs outputFile. */ + public outputFile: string; + + /** + * Creates a new Outputs instance using the specified properties. + * @param [properties] Properties to set + * @returns Outputs instance + */ + public static create(properties?: ml_pipelines.ExecutorInput.IOutputs): ml_pipelines.ExecutorInput.Outputs; + + /** + * Encodes the specified Outputs message. Does not implicitly {@link ml_pipelines.ExecutorInput.Outputs.verify|verify} messages. + * @param message Outputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.ExecutorInput.IOutputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Outputs message, length delimited. Does not implicitly {@link ml_pipelines.ExecutorInput.Outputs.verify|verify} messages. + * @param message Outputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.ExecutorInput.IOutputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an Outputs message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Outputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ExecutorInput.Outputs; + + /** + * Decodes an Outputs message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Outputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ExecutorInput.Outputs; + + /** + * Verifies an Outputs message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an Outputs message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Outputs + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ExecutorInput.Outputs; + + /** + * Creates a plain object from an Outputs message. Also converts values to other types if specified. + * @param message Outputs + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ExecutorInput.Outputs, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Outputs to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of an ExecutorOutput. */ + interface IExecutorOutput { + + /** ExecutorOutput parameters */ + parameters?: ({ [k: string]: ml_pipelines.IValue }|null); + + /** ExecutorOutput artifacts */ + artifacts?: ({ [k: string]: ml_pipelines.IArtifactList }|null); + } + + /** Represents an ExecutorOutput. */ + class ExecutorOutput implements IExecutorOutput { + + /** + * Constructs a new ExecutorOutput. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IExecutorOutput); + + /** ExecutorOutput parameters. */ + public parameters: { [k: string]: ml_pipelines.IValue }; + + /** ExecutorOutput artifacts. */ + public artifacts: { [k: string]: ml_pipelines.IArtifactList }; + + /** + * Creates a new ExecutorOutput instance using the specified properties. + * @param [properties] Properties to set + * @returns ExecutorOutput instance + */ + public static create(properties?: ml_pipelines.IExecutorOutput): ml_pipelines.ExecutorOutput; + + /** + * Encodes the specified ExecutorOutput message. Does not implicitly {@link ml_pipelines.ExecutorOutput.verify|verify} messages. + * @param message ExecutorOutput message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IExecutorOutput, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ExecutorOutput message, length delimited. Does not implicitly {@link ml_pipelines.ExecutorOutput.verify|verify} messages. + * @param message ExecutorOutput message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IExecutorOutput, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ExecutorOutput message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ExecutorOutput + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.ExecutorOutput; + + /** + * Decodes an ExecutorOutput message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ExecutorOutput + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.ExecutorOutput; + + /** + * Verifies an ExecutorOutput message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ExecutorOutput message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ExecutorOutput + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.ExecutorOutput; + + /** + * Creates a plain object from an ExecutorOutput message. Also converts values to other types if specified. + * @param message ExecutorOutput + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.ExecutorOutput, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ExecutorOutput to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a PipelineTaskFinalStatus. */ + interface IPipelineTaskFinalStatus { + + /** PipelineTaskFinalStatus state */ + state?: (string|null); + + /** PipelineTaskFinalStatus error */ + error?: (google.rpc.IStatus|null); + } + + /** Represents a PipelineTaskFinalStatus. */ + class PipelineTaskFinalStatus implements IPipelineTaskFinalStatus { + + /** + * Constructs a new PipelineTaskFinalStatus. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IPipelineTaskFinalStatus); + + /** PipelineTaskFinalStatus state. */ + public state: string; + + /** PipelineTaskFinalStatus error. */ + public error?: (google.rpc.IStatus|null); + + /** + * Creates a new PipelineTaskFinalStatus instance using the specified properties. + * @param [properties] Properties to set + * @returns PipelineTaskFinalStatus instance + */ + public static create(properties?: ml_pipelines.IPipelineTaskFinalStatus): ml_pipelines.PipelineTaskFinalStatus; + + /** + * Encodes the specified PipelineTaskFinalStatus message. Does not implicitly {@link ml_pipelines.PipelineTaskFinalStatus.verify|verify} messages. + * @param message PipelineTaskFinalStatus message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IPipelineTaskFinalStatus, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified PipelineTaskFinalStatus message, length delimited. Does not implicitly {@link ml_pipelines.PipelineTaskFinalStatus.verify|verify} messages. + * @param message PipelineTaskFinalStatus message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IPipelineTaskFinalStatus, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a PipelineTaskFinalStatus message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns PipelineTaskFinalStatus + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineTaskFinalStatus; + + /** + * Decodes a PipelineTaskFinalStatus message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns PipelineTaskFinalStatus + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineTaskFinalStatus; + + /** + * Verifies a PipelineTaskFinalStatus message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a PipelineTaskFinalStatus message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns PipelineTaskFinalStatus + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineTaskFinalStatus; + + /** + * Creates a plain object from a PipelineTaskFinalStatus message. Also converts values to other types if specified. + * @param message PipelineTaskFinalStatus + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineTaskFinalStatus, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this PipelineTaskFinalStatus to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a PipelineStateEnum. */ + interface IPipelineStateEnum { + } + + /** Represents a PipelineStateEnum. */ + class PipelineStateEnum implements IPipelineStateEnum { + + /** + * Constructs a new PipelineStateEnum. + * @param [properties] Properties to set + */ + constructor(properties?: ml_pipelines.IPipelineStateEnum); + + /** + * Creates a new PipelineStateEnum instance using the specified properties. + * @param [properties] Properties to set + * @returns PipelineStateEnum instance + */ + public static create(properties?: ml_pipelines.IPipelineStateEnum): ml_pipelines.PipelineStateEnum; + + /** + * Encodes the specified PipelineStateEnum message. Does not implicitly {@link ml_pipelines.PipelineStateEnum.verify|verify} messages. + * @param message PipelineStateEnum message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: ml_pipelines.IPipelineStateEnum, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified PipelineStateEnum message, length delimited. Does not implicitly {@link ml_pipelines.PipelineStateEnum.verify|verify} messages. + * @param message PipelineStateEnum message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: ml_pipelines.IPipelineStateEnum, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a PipelineStateEnum message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns PipelineStateEnum + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ml_pipelines.PipelineStateEnum; + + /** + * Decodes a PipelineStateEnum message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns PipelineStateEnum + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ml_pipelines.PipelineStateEnum; + + /** + * Verifies a PipelineStateEnum message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a PipelineStateEnum message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns PipelineStateEnum + */ + public static fromObject(object: { [k: string]: any }): ml_pipelines.PipelineStateEnum; + + /** + * Creates a plain object from a PipelineStateEnum message. Also converts values to other types if specified. + * @param message PipelineStateEnum + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: ml_pipelines.PipelineStateEnum, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this PipelineStateEnum to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace PipelineStateEnum { + + /** PipelineTaskState enum. */ + enum PipelineTaskState { + TASK_STATE_UNSPECIFIED = 0, + PENDING = 1, + RUNNING_DRIVER = 2, + DRIVER_SUCCEEDED = 3, + RUNNING_EXECUTOR = 4, + SUCCEEDED = 5, + CANCEL_PENDING = 6, + CANCELLING = 7, + CANCELLED = 8, + FAILED = 9, + SKIPPED = 10, + QUEUED = 11, + NOT_TRIGGERED = 12, + UNSCHEDULABLE = 13 + } + } +} + +/** Namespace google. */ +export namespace google { + + /** Namespace protobuf. */ + namespace protobuf { + + /** Properties of an Any. */ + interface IAny { + + /** Any type_url */ + type_url?: (string|null); + + /** Any value */ + value?: (Uint8Array|null); + } + + /** Represents an Any. */ + class Any implements IAny { + + /** + * Constructs a new Any. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.IAny); + + /** Any type_url. */ + public type_url: string; + + /** Any value. */ + public value: Uint8Array; + + /** + * Creates a new Any instance using the specified properties. + * @param [properties] Properties to set + * @returns Any instance + */ + public static create(properties?: google.protobuf.IAny): google.protobuf.Any; + + /** + * Encodes the specified Any message. Does not implicitly {@link google.protobuf.Any.verify|verify} messages. + * @param message Any message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.IAny, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Any message, length delimited. Does not implicitly {@link google.protobuf.Any.verify|verify} messages. + * @param message Any message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.IAny, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an Any message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Any + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Any; + + /** + * Decodes an Any message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Any + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Any; + + /** + * Verifies an Any message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an Any message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Any + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.Any; + + /** + * Creates a plain object from an Any message. Also converts values to other types if specified. + * @param message Any + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.Any, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Any to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a Struct. */ + interface IStruct { + + /** Struct fields */ + fields?: ({ [k: string]: google.protobuf.IValue }|null); + } + + /** Represents a Struct. */ + class Struct implements IStruct { + + /** + * Constructs a new Struct. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.IStruct); + + /** Struct fields. */ + public fields: { [k: string]: google.protobuf.IValue }; + + /** + * Creates a new Struct instance using the specified properties. + * @param [properties] Properties to set + * @returns Struct instance + */ + public static create(properties?: google.protobuf.IStruct): google.protobuf.Struct; + + /** + * Encodes the specified Struct message. Does not implicitly {@link google.protobuf.Struct.verify|verify} messages. + * @param message Struct message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.IStruct, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Struct message, length delimited. Does not implicitly {@link google.protobuf.Struct.verify|verify} messages. + * @param message Struct message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.IStruct, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Struct message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Struct + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Struct; + + /** + * Decodes a Struct message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Struct + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Struct; + + /** + * Verifies a Struct message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Struct message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Struct + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.Struct; + + /** + * Creates a plain object from a Struct message. Also converts values to other types if specified. + * @param message Struct + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.Struct, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Struct to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a Value. */ + interface IValue { + + /** Value nullValue */ + nullValue?: (google.protobuf.NullValue|null); + + /** Value numberValue */ + numberValue?: (number|null); + + /** Value stringValue */ + stringValue?: (string|null); + + /** Value boolValue */ + boolValue?: (boolean|null); + + /** Value structValue */ + structValue?: (google.protobuf.IStruct|null); + + /** Value listValue */ + listValue?: (google.protobuf.IListValue|null); + } + + /** Represents a Value. */ + class Value implements IValue { + + /** + * Constructs a new Value. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.IValue); + + /** Value nullValue. */ + public nullValue?: (google.protobuf.NullValue|null); + + /** Value numberValue. */ + public numberValue?: (number|null); + + /** Value stringValue. */ + public stringValue?: (string|null); + + /** Value boolValue. */ + public boolValue?: (boolean|null); + + /** Value structValue. */ + public structValue?: (google.protobuf.IStruct|null); + + /** Value listValue. */ + public listValue?: (google.protobuf.IListValue|null); + + /** Value kind. */ + public kind?: ("nullValue"|"numberValue"|"stringValue"|"boolValue"|"structValue"|"listValue"); + + /** + * Creates a new Value instance using the specified properties. + * @param [properties] Properties to set + * @returns Value instance + */ + public static create(properties?: google.protobuf.IValue): google.protobuf.Value; + + /** + * Encodes the specified Value message. Does not implicitly {@link google.protobuf.Value.verify|verify} messages. + * @param message Value message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.IValue, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Value message, length delimited. Does not implicitly {@link google.protobuf.Value.verify|verify} messages. + * @param message Value message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.IValue, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Value message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Value + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Value; + + /** + * Decodes a Value message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Value + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Value; + + /** + * Verifies a Value message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Value message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Value + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.Value; + + /** + * Creates a plain object from a Value message. Also converts values to other types if specified. + * @param message Value + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.Value, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Value to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** NullValue enum. */ + enum NullValue { + NULL_VALUE = 0 + } + + /** Properties of a ListValue. */ + interface IListValue { + + /** ListValue values */ + values?: (google.protobuf.IValue[]|null); + } + + /** Represents a ListValue. */ + class ListValue implements IListValue { + + /** + * Constructs a new ListValue. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.IListValue); + + /** ListValue values. */ + public values: google.protobuf.IValue[]; + + /** + * Creates a new ListValue instance using the specified properties. + * @param [properties] Properties to set + * @returns ListValue instance + */ + public static create(properties?: google.protobuf.IListValue): google.protobuf.ListValue; + + /** + * Encodes the specified ListValue message. Does not implicitly {@link google.protobuf.ListValue.verify|verify} messages. + * @param message ListValue message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.IListValue, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ListValue message, length delimited. Does not implicitly {@link google.protobuf.ListValue.verify|verify} messages. + * @param message ListValue message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.IListValue, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ListValue message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ListValue + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ListValue; + + /** + * Decodes a ListValue message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ListValue + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ListValue; + + /** + * Verifies a ListValue message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ListValue message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ListValue + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.ListValue; + + /** + * Creates a plain object from a ListValue message. Also converts values to other types if specified. + * @param message ListValue + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.ListValue, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ListValue to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Namespace rpc. */ + namespace rpc { + + /** Properties of a Status. */ + interface IStatus { + + /** Status code */ + code?: (number|null); + + /** Status message */ + message?: (string|null); + + /** Status details */ + details?: (google.protobuf.IAny[]|null); + } + + /** Represents a Status. */ + class Status implements IStatus { + + /** + * Constructs a new Status. + * @param [properties] Properties to set + */ + constructor(properties?: google.rpc.IStatus); + + /** Status code. */ + public code: number; + + /** Status message. */ + public message: string; + + /** Status details. */ + public details: google.protobuf.IAny[]; + + /** + * Creates a new Status instance using the specified properties. + * @param [properties] Properties to set + * @returns Status instance + */ + public static create(properties?: google.rpc.IStatus): google.rpc.Status; + + /** + * Encodes the specified Status message. Does not implicitly {@link google.rpc.Status.verify|verify} messages. + * @param message Status message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.rpc.IStatus, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Status message, length delimited. Does not implicitly {@link google.rpc.Status.verify|verify} messages. + * @param message Status message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.rpc.IStatus, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Status message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Status + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.rpc.Status; + + /** + * Decodes a Status message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Status + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.rpc.Status; + + /** + * Verifies a Status message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Status message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Status + */ + public static fromObject(object: { [k: string]: any }): google.rpc.Status; + + /** + * Creates a plain object from a Status message. Also converts values to other types if specified. + * @param message Status + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.rpc.Status, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Status to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } +} diff --git a/frontend/src/generated/pipeline_spec/pbjs_ml_pipelines.js b/frontend/src/generated/pipeline_spec/pbjs_ml_pipelines.js new file mode 100644 index 0000000000..62ad4ce320 --- /dev/null +++ b/frontend/src/generated/pipeline_spec/pbjs_ml_pipelines.js @@ -0,0 +1,16854 @@ +/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/ +"use strict"; + +var $protobuf = require("protobufjs/minimal"); + +// Common aliases +var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util; + +// Exported root namespace +var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {}); + +$root.ml_pipelines = (function() { + + /** + * Namespace ml_pipelines. + * @exports ml_pipelines + * @namespace + */ + var ml_pipelines = {}; + + ml_pipelines.PipelineJob = (function() { + + /** + * Properties of a PipelineJob. + * @memberof ml_pipelines + * @interface IPipelineJob + * @property {string|null} [name] PipelineJob name + * @property {string|null} [displayName] PipelineJob displayName + * @property {google.protobuf.IStruct|null} [pipelineSpec] PipelineJob pipelineSpec + * @property {Object.<string,string>|null} [labels] PipelineJob labels + * @property {ml_pipelines.PipelineJob.IRuntimeConfig|null} [runtimeConfig] PipelineJob runtimeConfig + */ + + /** + * Constructs a new PipelineJob. + * @memberof ml_pipelines + * @classdesc Represents a PipelineJob. + * @implements IPipelineJob + * @constructor + * @param {ml_pipelines.IPipelineJob=} [properties] Properties to set + */ + function PipelineJob(properties) { + this.labels = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * PipelineJob name. + * @member {string} name + * @memberof ml_pipelines.PipelineJob + * @instance + */ + PipelineJob.prototype.name = ""; + + /** + * PipelineJob displayName. + * @member {string} displayName + * @memberof ml_pipelines.PipelineJob + * @instance + */ + PipelineJob.prototype.displayName = ""; + + /** + * PipelineJob pipelineSpec. + * @member {google.protobuf.IStruct|null|undefined} pipelineSpec + * @memberof ml_pipelines.PipelineJob + * @instance + */ + PipelineJob.prototype.pipelineSpec = null; + + /** + * PipelineJob labels. + * @member {Object.<string,string>} labels + * @memberof ml_pipelines.PipelineJob + * @instance + */ + PipelineJob.prototype.labels = $util.emptyObject; + + /** + * PipelineJob runtimeConfig. + * @member {ml_pipelines.PipelineJob.IRuntimeConfig|null|undefined} runtimeConfig + * @memberof ml_pipelines.PipelineJob + * @instance + */ + PipelineJob.prototype.runtimeConfig = null; + + /** + * Creates a new PipelineJob instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineJob + * @static + * @param {ml_pipelines.IPipelineJob=} [properties] Properties to set + * @returns {ml_pipelines.PipelineJob} PipelineJob instance + */ + PipelineJob.create = function create(properties) { + return new PipelineJob(properties); + }; + + /** + * Encodes the specified PipelineJob message. Does not implicitly {@link ml_pipelines.PipelineJob.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineJob + * @static + * @param {ml_pipelines.IPipelineJob} message PipelineJob message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineJob.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayName); + if (message.pipelineSpec != null && Object.hasOwnProperty.call(message, "pipelineSpec")) + $root.google.protobuf.Struct.encode(message.pipelineSpec, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); + if (message.labels != null && Object.hasOwnProperty.call(message, "labels")) + for (var keys = Object.keys(message.labels), i = 0; i < keys.length; ++i) + writer.uint32(/* id 11, wireType 2 =*/90).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.labels[keys[i]]).ldelim(); + if (message.runtimeConfig != null && Object.hasOwnProperty.call(message, "runtimeConfig")) + $root.ml_pipelines.PipelineJob.RuntimeConfig.encode(message.runtimeConfig, writer.uint32(/* id 12, wireType 2 =*/98).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified PipelineJob message, length delimited. Does not implicitly {@link ml_pipelines.PipelineJob.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineJob + * @static + * @param {ml_pipelines.IPipelineJob} message PipelineJob message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineJob.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a PipelineJob message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineJob + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineJob} PipelineJob + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineJob.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineJob(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + case 2: + message.displayName = reader.string(); + break; + case 7: + message.pipelineSpec = $root.google.protobuf.Struct.decode(reader, reader.uint32()); + break; + case 11: + if (message.labels === $util.emptyObject) + message.labels = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = ""; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = reader.string(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.labels[key] = value; + break; + case 12: + message.runtimeConfig = $root.ml_pipelines.PipelineJob.RuntimeConfig.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a PipelineJob message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineJob + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineJob} PipelineJob + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineJob.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a PipelineJob message. + * @function verify + * @memberof ml_pipelines.PipelineJob + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PipelineJob.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + if (message.pipelineSpec != null && message.hasOwnProperty("pipelineSpec")) { + var error = $root.google.protobuf.Struct.verify(message.pipelineSpec); + if (error) + return "pipelineSpec." + error; + } + if (message.labels != null && message.hasOwnProperty("labels")) { + if (!$util.isObject(message.labels)) + return "labels: object expected"; + var key = Object.keys(message.labels); + for (var i = 0; i < key.length; ++i) + if (!$util.isString(message.labels[key[i]])) + return "labels: string{k:string} expected"; + } + if (message.runtimeConfig != null && message.hasOwnProperty("runtimeConfig")) { + var error = $root.ml_pipelines.PipelineJob.RuntimeConfig.verify(message.runtimeConfig); + if (error) + return "runtimeConfig." + error; + } + return null; + }; + + /** + * Creates a PipelineJob message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineJob + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineJob} PipelineJob + */ + PipelineJob.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineJob) + return object; + var message = new $root.ml_pipelines.PipelineJob(); + if (object.name != null) + message.name = String(object.name); + if (object.displayName != null) + message.displayName = String(object.displayName); + if (object.pipelineSpec != null) { + if (typeof object.pipelineSpec !== "object") + throw TypeError(".ml_pipelines.PipelineJob.pipelineSpec: object expected"); + message.pipelineSpec = $root.google.protobuf.Struct.fromObject(object.pipelineSpec); + } + if (object.labels) { + if (typeof object.labels !== "object") + throw TypeError(".ml_pipelines.PipelineJob.labels: object expected"); + message.labels = {}; + for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) + message.labels[keys[i]] = String(object.labels[keys[i]]); + } + if (object.runtimeConfig != null) { + if (typeof object.runtimeConfig !== "object") + throw TypeError(".ml_pipelines.PipelineJob.runtimeConfig: object expected"); + message.runtimeConfig = $root.ml_pipelines.PipelineJob.RuntimeConfig.fromObject(object.runtimeConfig); + } + return message; + }; + + /** + * Creates a plain object from a PipelineJob message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineJob + * @static + * @param {ml_pipelines.PipelineJob} message PipelineJob + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + PipelineJob.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) + object.labels = {}; + if (options.defaults) { + object.name = ""; + object.displayName = ""; + object.pipelineSpec = null; + object.runtimeConfig = null; + } + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + if (message.pipelineSpec != null && message.hasOwnProperty("pipelineSpec")) + object.pipelineSpec = $root.google.protobuf.Struct.toObject(message.pipelineSpec, options); + var keys2; + if (message.labels && (keys2 = Object.keys(message.labels)).length) { + object.labels = {}; + for (var j = 0; j < keys2.length; ++j) + object.labels[keys2[j]] = message.labels[keys2[j]]; + } + if (message.runtimeConfig != null && message.hasOwnProperty("runtimeConfig")) + object.runtimeConfig = $root.ml_pipelines.PipelineJob.RuntimeConfig.toObject(message.runtimeConfig, options); + return object; + }; + + /** + * Converts this PipelineJob to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineJob + * @instance + * @returns {Object.<string,*>} JSON object + */ + PipelineJob.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PipelineJob.RuntimeConfig = (function() { + + /** + * Properties of a RuntimeConfig. + * @memberof ml_pipelines.PipelineJob + * @interface IRuntimeConfig + * @property {Object.<string,ml_pipelines.IValue>|null} [parameters] RuntimeConfig parameters + * @property {string|null} [gcsOutputDirectory] RuntimeConfig gcsOutputDirectory + */ + + /** + * Constructs a new RuntimeConfig. + * @memberof ml_pipelines.PipelineJob + * @classdesc Represents a RuntimeConfig. + * @implements IRuntimeConfig + * @constructor + * @param {ml_pipelines.PipelineJob.IRuntimeConfig=} [properties] Properties to set + */ + function RuntimeConfig(properties) { + this.parameters = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * RuntimeConfig parameters. + * @member {Object.<string,ml_pipelines.IValue>} parameters + * @memberof ml_pipelines.PipelineJob.RuntimeConfig + * @instance + */ + RuntimeConfig.prototype.parameters = $util.emptyObject; + + /** + * RuntimeConfig gcsOutputDirectory. + * @member {string} gcsOutputDirectory + * @memberof ml_pipelines.PipelineJob.RuntimeConfig + * @instance + */ + RuntimeConfig.prototype.gcsOutputDirectory = ""; + + /** + * Creates a new RuntimeConfig instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineJob.RuntimeConfig + * @static + * @param {ml_pipelines.PipelineJob.IRuntimeConfig=} [properties] Properties to set + * @returns {ml_pipelines.PipelineJob.RuntimeConfig} RuntimeConfig instance + */ + RuntimeConfig.create = function create(properties) { + return new RuntimeConfig(properties); + }; + + /** + * Encodes the specified RuntimeConfig message. Does not implicitly {@link ml_pipelines.PipelineJob.RuntimeConfig.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineJob.RuntimeConfig + * @static + * @param {ml_pipelines.PipelineJob.IRuntimeConfig} message RuntimeConfig message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + RuntimeConfig.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.parameters != null && Object.hasOwnProperty.call(message, "parameters")) + for (var keys = Object.keys(message.parameters), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.Value.encode(message.parameters[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.gcsOutputDirectory != null && Object.hasOwnProperty.call(message, "gcsOutputDirectory")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.gcsOutputDirectory); + return writer; + }; + + /** + * Encodes the specified RuntimeConfig message, length delimited. Does not implicitly {@link ml_pipelines.PipelineJob.RuntimeConfig.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineJob.RuntimeConfig + * @static + * @param {ml_pipelines.PipelineJob.IRuntimeConfig} message RuntimeConfig message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + RuntimeConfig.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a RuntimeConfig message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineJob.RuntimeConfig + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineJob.RuntimeConfig} RuntimeConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + RuntimeConfig.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineJob.RuntimeConfig(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (message.parameters === $util.emptyObject) + message.parameters = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.Value.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.parameters[key] = value; + break; + case 2: + message.gcsOutputDirectory = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a RuntimeConfig message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineJob.RuntimeConfig + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineJob.RuntimeConfig} RuntimeConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + RuntimeConfig.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a RuntimeConfig message. + * @function verify + * @memberof ml_pipelines.PipelineJob.RuntimeConfig + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + RuntimeConfig.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.parameters != null && message.hasOwnProperty("parameters")) { + if (!$util.isObject(message.parameters)) + return "parameters: object expected"; + var key = Object.keys(message.parameters); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.Value.verify(message.parameters[key[i]]); + if (error) + return "parameters." + error; + } + } + if (message.gcsOutputDirectory != null && message.hasOwnProperty("gcsOutputDirectory")) + if (!$util.isString(message.gcsOutputDirectory)) + return "gcsOutputDirectory: string expected"; + return null; + }; + + /** + * Creates a RuntimeConfig message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineJob.RuntimeConfig + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineJob.RuntimeConfig} RuntimeConfig + */ + RuntimeConfig.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineJob.RuntimeConfig) + return object; + var message = new $root.ml_pipelines.PipelineJob.RuntimeConfig(); + if (object.parameters) { + if (typeof object.parameters !== "object") + throw TypeError(".ml_pipelines.PipelineJob.RuntimeConfig.parameters: object expected"); + message.parameters = {}; + for (var keys = Object.keys(object.parameters), i = 0; i < keys.length; ++i) { + if (typeof object.parameters[keys[i]] !== "object") + throw TypeError(".ml_pipelines.PipelineJob.RuntimeConfig.parameters: object expected"); + message.parameters[keys[i]] = $root.ml_pipelines.Value.fromObject(object.parameters[keys[i]]); + } + } + if (object.gcsOutputDirectory != null) + message.gcsOutputDirectory = String(object.gcsOutputDirectory); + return message; + }; + + /** + * Creates a plain object from a RuntimeConfig message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineJob.RuntimeConfig + * @static + * @param {ml_pipelines.PipelineJob.RuntimeConfig} message RuntimeConfig + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + RuntimeConfig.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) + object.parameters = {}; + if (options.defaults) + object.gcsOutputDirectory = ""; + var keys2; + if (message.parameters && (keys2 = Object.keys(message.parameters)).length) { + object.parameters = {}; + for (var j = 0; j < keys2.length; ++j) + object.parameters[keys2[j]] = $root.ml_pipelines.Value.toObject(message.parameters[keys2[j]], options); + } + if (message.gcsOutputDirectory != null && message.hasOwnProperty("gcsOutputDirectory")) + object.gcsOutputDirectory = message.gcsOutputDirectory; + return object; + }; + + /** + * Converts this RuntimeConfig to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineJob.RuntimeConfig + * @instance + * @returns {Object.<string,*>} JSON object + */ + RuntimeConfig.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return RuntimeConfig; + })(); + + return PipelineJob; + })(); + + ml_pipelines.PipelineSpec = (function() { + + /** + * Properties of a PipelineSpec. + * @memberof ml_pipelines + * @interface IPipelineSpec + * @property {ml_pipelines.IPipelineInfo|null} [pipelineInfo] PipelineSpec pipelineInfo + * @property {google.protobuf.IStruct|null} [deploymentSpec] PipelineSpec deploymentSpec + * @property {string|null} [sdkVersion] PipelineSpec sdkVersion + * @property {string|null} [schemaVersion] PipelineSpec schemaVersion + * @property {Object.<string,ml_pipelines.IComponentSpec>|null} [components] PipelineSpec components + * @property {ml_pipelines.IComponentSpec|null} [root] PipelineSpec root + */ + + /** + * Constructs a new PipelineSpec. + * @memberof ml_pipelines + * @classdesc Represents a PipelineSpec. + * @implements IPipelineSpec + * @constructor + * @param {ml_pipelines.IPipelineSpec=} [properties] Properties to set + */ + function PipelineSpec(properties) { + this.components = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * PipelineSpec pipelineInfo. + * @member {ml_pipelines.IPipelineInfo|null|undefined} pipelineInfo + * @memberof ml_pipelines.PipelineSpec + * @instance + */ + PipelineSpec.prototype.pipelineInfo = null; + + /** + * PipelineSpec deploymentSpec. + * @member {google.protobuf.IStruct|null|undefined} deploymentSpec + * @memberof ml_pipelines.PipelineSpec + * @instance + */ + PipelineSpec.prototype.deploymentSpec = null; + + /** + * PipelineSpec sdkVersion. + * @member {string} sdkVersion + * @memberof ml_pipelines.PipelineSpec + * @instance + */ + PipelineSpec.prototype.sdkVersion = ""; + + /** + * PipelineSpec schemaVersion. + * @member {string} schemaVersion + * @memberof ml_pipelines.PipelineSpec + * @instance + */ + PipelineSpec.prototype.schemaVersion = ""; + + /** + * PipelineSpec components. + * @member {Object.<string,ml_pipelines.IComponentSpec>} components + * @memberof ml_pipelines.PipelineSpec + * @instance + */ + PipelineSpec.prototype.components = $util.emptyObject; + + /** + * PipelineSpec root. + * @member {ml_pipelines.IComponentSpec|null|undefined} root + * @memberof ml_pipelines.PipelineSpec + * @instance + */ + PipelineSpec.prototype.root = null; + + /** + * Creates a new PipelineSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineSpec + * @static + * @param {ml_pipelines.IPipelineSpec=} [properties] Properties to set + * @returns {ml_pipelines.PipelineSpec} PipelineSpec instance + */ + PipelineSpec.create = function create(properties) { + return new PipelineSpec(properties); + }; + + /** + * Encodes the specified PipelineSpec message. Does not implicitly {@link ml_pipelines.PipelineSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineSpec + * @static + * @param {ml_pipelines.IPipelineSpec} message PipelineSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.pipelineInfo != null && Object.hasOwnProperty.call(message, "pipelineInfo")) + $root.ml_pipelines.PipelineInfo.encode(message.pipelineInfo, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.sdkVersion != null && Object.hasOwnProperty.call(message, "sdkVersion")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.sdkVersion); + if (message.schemaVersion != null && Object.hasOwnProperty.call(message, "schemaVersion")) + writer.uint32(/* id 5, wireType 2 =*/42).string(message.schemaVersion); + if (message.deploymentSpec != null && Object.hasOwnProperty.call(message, "deploymentSpec")) + $root.google.protobuf.Struct.encode(message.deploymentSpec, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); + if (message.components != null && Object.hasOwnProperty.call(message, "components")) + for (var keys = Object.keys(message.components), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 8, wireType 2 =*/66).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ComponentSpec.encode(message.components[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.root != null && Object.hasOwnProperty.call(message, "root")) + $root.ml_pipelines.ComponentSpec.encode(message.root, writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified PipelineSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineSpec + * @static + * @param {ml_pipelines.IPipelineSpec} message PipelineSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a PipelineSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineSpec} PipelineSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineSpec(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.pipelineInfo = $root.ml_pipelines.PipelineInfo.decode(reader, reader.uint32()); + break; + case 7: + message.deploymentSpec = $root.google.protobuf.Struct.decode(reader, reader.uint32()); + break; + case 4: + message.sdkVersion = reader.string(); + break; + case 5: + message.schemaVersion = reader.string(); + break; + case 8: + if (message.components === $util.emptyObject) + message.components = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ComponentSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.components[key] = value; + break; + case 9: + message.root = $root.ml_pipelines.ComponentSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a PipelineSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineSpec} PipelineSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a PipelineSpec message. + * @function verify + * @memberof ml_pipelines.PipelineSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PipelineSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.pipelineInfo != null && message.hasOwnProperty("pipelineInfo")) { + var error = $root.ml_pipelines.PipelineInfo.verify(message.pipelineInfo); + if (error) + return "pipelineInfo." + error; + } + if (message.deploymentSpec != null && message.hasOwnProperty("deploymentSpec")) { + var error = $root.google.protobuf.Struct.verify(message.deploymentSpec); + if (error) + return "deploymentSpec." + error; + } + if (message.sdkVersion != null && message.hasOwnProperty("sdkVersion")) + if (!$util.isString(message.sdkVersion)) + return "sdkVersion: string expected"; + if (message.schemaVersion != null && message.hasOwnProperty("schemaVersion")) + if (!$util.isString(message.schemaVersion)) + return "schemaVersion: string expected"; + if (message.components != null && message.hasOwnProperty("components")) { + if (!$util.isObject(message.components)) + return "components: object expected"; + var key = Object.keys(message.components); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ComponentSpec.verify(message.components[key[i]]); + if (error) + return "components." + error; + } + } + if (message.root != null && message.hasOwnProperty("root")) { + var error = $root.ml_pipelines.ComponentSpec.verify(message.root); + if (error) + return "root." + error; + } + return null; + }; + + /** + * Creates a PipelineSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineSpec} PipelineSpec + */ + PipelineSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineSpec) + return object; + var message = new $root.ml_pipelines.PipelineSpec(); + if (object.pipelineInfo != null) { + if (typeof object.pipelineInfo !== "object") + throw TypeError(".ml_pipelines.PipelineSpec.pipelineInfo: object expected"); + message.pipelineInfo = $root.ml_pipelines.PipelineInfo.fromObject(object.pipelineInfo); + } + if (object.deploymentSpec != null) { + if (typeof object.deploymentSpec !== "object") + throw TypeError(".ml_pipelines.PipelineSpec.deploymentSpec: object expected"); + message.deploymentSpec = $root.google.protobuf.Struct.fromObject(object.deploymentSpec); + } + if (object.sdkVersion != null) + message.sdkVersion = String(object.sdkVersion); + if (object.schemaVersion != null) + message.schemaVersion = String(object.schemaVersion); + if (object.components) { + if (typeof object.components !== "object") + throw TypeError(".ml_pipelines.PipelineSpec.components: object expected"); + message.components = {}; + for (var keys = Object.keys(object.components), i = 0; i < keys.length; ++i) { + if (typeof object.components[keys[i]] !== "object") + throw TypeError(".ml_pipelines.PipelineSpec.components: object expected"); + message.components[keys[i]] = $root.ml_pipelines.ComponentSpec.fromObject(object.components[keys[i]]); + } + } + if (object.root != null) { + if (typeof object.root !== "object") + throw TypeError(".ml_pipelines.PipelineSpec.root: object expected"); + message.root = $root.ml_pipelines.ComponentSpec.fromObject(object.root); + } + return message; + }; + + /** + * Creates a plain object from a PipelineSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineSpec + * @static + * @param {ml_pipelines.PipelineSpec} message PipelineSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + PipelineSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) + object.components = {}; + if (options.defaults) { + object.pipelineInfo = null; + object.sdkVersion = ""; + object.schemaVersion = ""; + object.deploymentSpec = null; + object.root = null; + } + if (message.pipelineInfo != null && message.hasOwnProperty("pipelineInfo")) + object.pipelineInfo = $root.ml_pipelines.PipelineInfo.toObject(message.pipelineInfo, options); + if (message.sdkVersion != null && message.hasOwnProperty("sdkVersion")) + object.sdkVersion = message.sdkVersion; + if (message.schemaVersion != null && message.hasOwnProperty("schemaVersion")) + object.schemaVersion = message.schemaVersion; + if (message.deploymentSpec != null && message.hasOwnProperty("deploymentSpec")) + object.deploymentSpec = $root.google.protobuf.Struct.toObject(message.deploymentSpec, options); + var keys2; + if (message.components && (keys2 = Object.keys(message.components)).length) { + object.components = {}; + for (var j = 0; j < keys2.length; ++j) + object.components[keys2[j]] = $root.ml_pipelines.ComponentSpec.toObject(message.components[keys2[j]], options); + } + if (message.root != null && message.hasOwnProperty("root")) + object.root = $root.ml_pipelines.ComponentSpec.toObject(message.root, options); + return object; + }; + + /** + * Converts this PipelineSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + PipelineSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PipelineSpec.RuntimeParameter = (function() { + + /** + * Properties of a RuntimeParameter. + * @memberof ml_pipelines.PipelineSpec + * @interface IRuntimeParameter + * @property {ml_pipelines.PrimitiveType.PrimitiveTypeEnum|null} [type] RuntimeParameter type + * @property {ml_pipelines.IValue|null} [defaultValue] RuntimeParameter defaultValue + */ + + /** + * Constructs a new RuntimeParameter. + * @memberof ml_pipelines.PipelineSpec + * @classdesc Represents a RuntimeParameter. + * @implements IRuntimeParameter + * @constructor + * @param {ml_pipelines.PipelineSpec.IRuntimeParameter=} [properties] Properties to set + */ + function RuntimeParameter(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * RuntimeParameter type. + * @member {ml_pipelines.PrimitiveType.PrimitiveTypeEnum} type + * @memberof ml_pipelines.PipelineSpec.RuntimeParameter + * @instance + */ + RuntimeParameter.prototype.type = 0; + + /** + * RuntimeParameter defaultValue. + * @member {ml_pipelines.IValue|null|undefined} defaultValue + * @memberof ml_pipelines.PipelineSpec.RuntimeParameter + * @instance + */ + RuntimeParameter.prototype.defaultValue = null; + + /** + * Creates a new RuntimeParameter instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineSpec.RuntimeParameter + * @static + * @param {ml_pipelines.PipelineSpec.IRuntimeParameter=} [properties] Properties to set + * @returns {ml_pipelines.PipelineSpec.RuntimeParameter} RuntimeParameter instance + */ + RuntimeParameter.create = function create(properties) { + return new RuntimeParameter(properties); + }; + + /** + * Encodes the specified RuntimeParameter message. Does not implicitly {@link ml_pipelines.PipelineSpec.RuntimeParameter.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineSpec.RuntimeParameter + * @static + * @param {ml_pipelines.PipelineSpec.IRuntimeParameter} message RuntimeParameter message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + RuntimeParameter.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.type != null && Object.hasOwnProperty.call(message, "type")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type); + if (message.defaultValue != null && Object.hasOwnProperty.call(message, "defaultValue")) + $root.ml_pipelines.Value.encode(message.defaultValue, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified RuntimeParameter message, length delimited. Does not implicitly {@link ml_pipelines.PipelineSpec.RuntimeParameter.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineSpec.RuntimeParameter + * @static + * @param {ml_pipelines.PipelineSpec.IRuntimeParameter} message RuntimeParameter message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + RuntimeParameter.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a RuntimeParameter message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineSpec.RuntimeParameter + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineSpec.RuntimeParameter} RuntimeParameter + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + RuntimeParameter.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineSpec.RuntimeParameter(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.type = reader.int32(); + break; + case 2: + message.defaultValue = $root.ml_pipelines.Value.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a RuntimeParameter message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineSpec.RuntimeParameter + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineSpec.RuntimeParameter} RuntimeParameter + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + RuntimeParameter.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a RuntimeParameter message. + * @function verify + * @memberof ml_pipelines.PipelineSpec.RuntimeParameter + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + RuntimeParameter.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.type != null && message.hasOwnProperty("type")) + switch (message.type) { + default: + return "type: enum value expected"; + case 0: + case 1: + case 2: + case 3: + break; + } + if (message.defaultValue != null && message.hasOwnProperty("defaultValue")) { + var error = $root.ml_pipelines.Value.verify(message.defaultValue); + if (error) + return "defaultValue." + error; + } + return null; + }; + + /** + * Creates a RuntimeParameter message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineSpec.RuntimeParameter + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineSpec.RuntimeParameter} RuntimeParameter + */ + RuntimeParameter.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineSpec.RuntimeParameter) + return object; + var message = new $root.ml_pipelines.PipelineSpec.RuntimeParameter(); + switch (object.type) { + case "PRIMITIVE_TYPE_UNSPECIFIED": + case 0: + message.type = 0; + break; + case "INT": + case 1: + message.type = 1; + break; + case "DOUBLE": + case 2: + message.type = 2; + break; + case "STRING": + case 3: + message.type = 3; + break; + } + if (object.defaultValue != null) { + if (typeof object.defaultValue !== "object") + throw TypeError(".ml_pipelines.PipelineSpec.RuntimeParameter.defaultValue: object expected"); + message.defaultValue = $root.ml_pipelines.Value.fromObject(object.defaultValue); + } + return message; + }; + + /** + * Creates a plain object from a RuntimeParameter message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineSpec.RuntimeParameter + * @static + * @param {ml_pipelines.PipelineSpec.RuntimeParameter} message RuntimeParameter + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + RuntimeParameter.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.type = options.enums === String ? "PRIMITIVE_TYPE_UNSPECIFIED" : 0; + object.defaultValue = null; + } + if (message.type != null && message.hasOwnProperty("type")) + object.type = options.enums === String ? $root.ml_pipelines.PrimitiveType.PrimitiveTypeEnum[message.type] : message.type; + if (message.defaultValue != null && message.hasOwnProperty("defaultValue")) + object.defaultValue = $root.ml_pipelines.Value.toObject(message.defaultValue, options); + return object; + }; + + /** + * Converts this RuntimeParameter to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineSpec.RuntimeParameter + * @instance + * @returns {Object.<string,*>} JSON object + */ + RuntimeParameter.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return RuntimeParameter; + })(); + + return PipelineSpec; + })(); + + ml_pipelines.ComponentSpec = (function() { + + /** + * Properties of a ComponentSpec. + * @memberof ml_pipelines + * @interface IComponentSpec + * @property {ml_pipelines.IComponentInputsSpec|null} [inputDefinitions] ComponentSpec inputDefinitions + * @property {ml_pipelines.IComponentOutputsSpec|null} [outputDefinitions] ComponentSpec outputDefinitions + * @property {ml_pipelines.IDagSpec|null} [dag] ComponentSpec dag + * @property {string|null} [executorLabel] ComponentSpec executorLabel + */ + + /** + * Constructs a new ComponentSpec. + * @memberof ml_pipelines + * @classdesc Represents a ComponentSpec. + * @implements IComponentSpec + * @constructor + * @param {ml_pipelines.IComponentSpec=} [properties] Properties to set + */ + function ComponentSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ComponentSpec inputDefinitions. + * @member {ml_pipelines.IComponentInputsSpec|null|undefined} inputDefinitions + * @memberof ml_pipelines.ComponentSpec + * @instance + */ + ComponentSpec.prototype.inputDefinitions = null; + + /** + * ComponentSpec outputDefinitions. + * @member {ml_pipelines.IComponentOutputsSpec|null|undefined} outputDefinitions + * @memberof ml_pipelines.ComponentSpec + * @instance + */ + ComponentSpec.prototype.outputDefinitions = null; + + /** + * ComponentSpec dag. + * @member {ml_pipelines.IDagSpec|null|undefined} dag + * @memberof ml_pipelines.ComponentSpec + * @instance + */ + ComponentSpec.prototype.dag = null; + + /** + * ComponentSpec executorLabel. + * @member {string|null|undefined} executorLabel + * @memberof ml_pipelines.ComponentSpec + * @instance + */ + ComponentSpec.prototype.executorLabel = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * ComponentSpec implementation. + * @member {"dag"|"executorLabel"|undefined} implementation + * @memberof ml_pipelines.ComponentSpec + * @instance + */ + Object.defineProperty(ComponentSpec.prototype, "implementation", { + get: $util.oneOfGetter($oneOfFields = ["dag", "executorLabel"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new ComponentSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.ComponentSpec + * @static + * @param {ml_pipelines.IComponentSpec=} [properties] Properties to set + * @returns {ml_pipelines.ComponentSpec} ComponentSpec instance + */ + ComponentSpec.create = function create(properties) { + return new ComponentSpec(properties); + }; + + /** + * Encodes the specified ComponentSpec message. Does not implicitly {@link ml_pipelines.ComponentSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ComponentSpec + * @static + * @param {ml_pipelines.IComponentSpec} message ComponentSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ComponentSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputDefinitions != null && Object.hasOwnProperty.call(message, "inputDefinitions")) + $root.ml_pipelines.ComponentInputsSpec.encode(message.inputDefinitions, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.outputDefinitions != null && Object.hasOwnProperty.call(message, "outputDefinitions")) + $root.ml_pipelines.ComponentOutputsSpec.encode(message.outputDefinitions, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.dag != null && Object.hasOwnProperty.call(message, "dag")) + $root.ml_pipelines.DagSpec.encode(message.dag, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.executorLabel != null && Object.hasOwnProperty.call(message, "executorLabel")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.executorLabel); + return writer; + }; + + /** + * Encodes the specified ComponentSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ComponentSpec + * @static + * @param {ml_pipelines.IComponentSpec} message ComponentSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ComponentSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ComponentSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ComponentSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ComponentSpec} ComponentSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ComponentSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ComponentSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputDefinitions = $root.ml_pipelines.ComponentInputsSpec.decode(reader, reader.uint32()); + break; + case 2: + message.outputDefinitions = $root.ml_pipelines.ComponentOutputsSpec.decode(reader, reader.uint32()); + break; + case 3: + message.dag = $root.ml_pipelines.DagSpec.decode(reader, reader.uint32()); + break; + case 4: + message.executorLabel = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ComponentSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ComponentSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ComponentSpec} ComponentSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ComponentSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ComponentSpec message. + * @function verify + * @memberof ml_pipelines.ComponentSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ComponentSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.inputDefinitions != null && message.hasOwnProperty("inputDefinitions")) { + var error = $root.ml_pipelines.ComponentInputsSpec.verify(message.inputDefinitions); + if (error) + return "inputDefinitions." + error; + } + if (message.outputDefinitions != null && message.hasOwnProperty("outputDefinitions")) { + var error = $root.ml_pipelines.ComponentOutputsSpec.verify(message.outputDefinitions); + if (error) + return "outputDefinitions." + error; + } + if (message.dag != null && message.hasOwnProperty("dag")) { + properties.implementation = 1; + { + var error = $root.ml_pipelines.DagSpec.verify(message.dag); + if (error) + return "dag." + error; + } + } + if (message.executorLabel != null && message.hasOwnProperty("executorLabel")) { + if (properties.implementation === 1) + return "implementation: multiple values"; + properties.implementation = 1; + if (!$util.isString(message.executorLabel)) + return "executorLabel: string expected"; + } + return null; + }; + + /** + * Creates a ComponentSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ComponentSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ComponentSpec} ComponentSpec + */ + ComponentSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ComponentSpec) + return object; + var message = new $root.ml_pipelines.ComponentSpec(); + if (object.inputDefinitions != null) { + if (typeof object.inputDefinitions !== "object") + throw TypeError(".ml_pipelines.ComponentSpec.inputDefinitions: object expected"); + message.inputDefinitions = $root.ml_pipelines.ComponentInputsSpec.fromObject(object.inputDefinitions); + } + if (object.outputDefinitions != null) { + if (typeof object.outputDefinitions !== "object") + throw TypeError(".ml_pipelines.ComponentSpec.outputDefinitions: object expected"); + message.outputDefinitions = $root.ml_pipelines.ComponentOutputsSpec.fromObject(object.outputDefinitions); + } + if (object.dag != null) { + if (typeof object.dag !== "object") + throw TypeError(".ml_pipelines.ComponentSpec.dag: object expected"); + message.dag = $root.ml_pipelines.DagSpec.fromObject(object.dag); + } + if (object.executorLabel != null) + message.executorLabel = String(object.executorLabel); + return message; + }; + + /** + * Creates a plain object from a ComponentSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ComponentSpec + * @static + * @param {ml_pipelines.ComponentSpec} message ComponentSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ComponentSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.inputDefinitions = null; + object.outputDefinitions = null; + } + if (message.inputDefinitions != null && message.hasOwnProperty("inputDefinitions")) + object.inputDefinitions = $root.ml_pipelines.ComponentInputsSpec.toObject(message.inputDefinitions, options); + if (message.outputDefinitions != null && message.hasOwnProperty("outputDefinitions")) + object.outputDefinitions = $root.ml_pipelines.ComponentOutputsSpec.toObject(message.outputDefinitions, options); + if (message.dag != null && message.hasOwnProperty("dag")) { + object.dag = $root.ml_pipelines.DagSpec.toObject(message.dag, options); + if (options.oneofs) + object.implementation = "dag"; + } + if (message.executorLabel != null && message.hasOwnProperty("executorLabel")) { + object.executorLabel = message.executorLabel; + if (options.oneofs) + object.implementation = "executorLabel"; + } + return object; + }; + + /** + * Converts this ComponentSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.ComponentSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ComponentSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ComponentSpec; + })(); + + ml_pipelines.DagSpec = (function() { + + /** + * Properties of a DagSpec. + * @memberof ml_pipelines + * @interface IDagSpec + * @property {Object.<string,ml_pipelines.IPipelineTaskSpec>|null} [tasks] DagSpec tasks + * @property {ml_pipelines.IDagOutputsSpec|null} [outputs] DagSpec outputs + */ + + /** + * Constructs a new DagSpec. + * @memberof ml_pipelines + * @classdesc Represents a DagSpec. + * @implements IDagSpec + * @constructor + * @param {ml_pipelines.IDagSpec=} [properties] Properties to set + */ + function DagSpec(properties) { + this.tasks = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * DagSpec tasks. + * @member {Object.<string,ml_pipelines.IPipelineTaskSpec>} tasks + * @memberof ml_pipelines.DagSpec + * @instance + */ + DagSpec.prototype.tasks = $util.emptyObject; + + /** + * DagSpec outputs. + * @member {ml_pipelines.IDagOutputsSpec|null|undefined} outputs + * @memberof ml_pipelines.DagSpec + * @instance + */ + DagSpec.prototype.outputs = null; + + /** + * Creates a new DagSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.DagSpec + * @static + * @param {ml_pipelines.IDagSpec=} [properties] Properties to set + * @returns {ml_pipelines.DagSpec} DagSpec instance + */ + DagSpec.create = function create(properties) { + return new DagSpec(properties); + }; + + /** + * Encodes the specified DagSpec message. Does not implicitly {@link ml_pipelines.DagSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.DagSpec + * @static + * @param {ml_pipelines.IDagSpec} message DagSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + DagSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.tasks != null && Object.hasOwnProperty.call(message, "tasks")) + for (var keys = Object.keys(message.tasks), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.PipelineTaskSpec.encode(message.tasks[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.outputs != null && Object.hasOwnProperty.call(message, "outputs")) + $root.ml_pipelines.DagOutputsSpec.encode(message.outputs, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified DagSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.DagSpec + * @static + * @param {ml_pipelines.IDagSpec} message DagSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + DagSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a DagSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.DagSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.DagSpec} DagSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + DagSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.DagSpec(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (message.tasks === $util.emptyObject) + message.tasks = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.PipelineTaskSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.tasks[key] = value; + break; + case 2: + message.outputs = $root.ml_pipelines.DagOutputsSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a DagSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.DagSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.DagSpec} DagSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + DagSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a DagSpec message. + * @function verify + * @memberof ml_pipelines.DagSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + DagSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.tasks != null && message.hasOwnProperty("tasks")) { + if (!$util.isObject(message.tasks)) + return "tasks: object expected"; + var key = Object.keys(message.tasks); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.PipelineTaskSpec.verify(message.tasks[key[i]]); + if (error) + return "tasks." + error; + } + } + if (message.outputs != null && message.hasOwnProperty("outputs")) { + var error = $root.ml_pipelines.DagOutputsSpec.verify(message.outputs); + if (error) + return "outputs." + error; + } + return null; + }; + + /** + * Creates a DagSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.DagSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.DagSpec} DagSpec + */ + DagSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.DagSpec) + return object; + var message = new $root.ml_pipelines.DagSpec(); + if (object.tasks) { + if (typeof object.tasks !== "object") + throw TypeError(".ml_pipelines.DagSpec.tasks: object expected"); + message.tasks = {}; + for (var keys = Object.keys(object.tasks), i = 0; i < keys.length; ++i) { + if (typeof object.tasks[keys[i]] !== "object") + throw TypeError(".ml_pipelines.DagSpec.tasks: object expected"); + message.tasks[keys[i]] = $root.ml_pipelines.PipelineTaskSpec.fromObject(object.tasks[keys[i]]); + } + } + if (object.outputs != null) { + if (typeof object.outputs !== "object") + throw TypeError(".ml_pipelines.DagSpec.outputs: object expected"); + message.outputs = $root.ml_pipelines.DagOutputsSpec.fromObject(object.outputs); + } + return message; + }; + + /** + * Creates a plain object from a DagSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.DagSpec + * @static + * @param {ml_pipelines.DagSpec} message DagSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + DagSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) + object.tasks = {}; + if (options.defaults) + object.outputs = null; + var keys2; + if (message.tasks && (keys2 = Object.keys(message.tasks)).length) { + object.tasks = {}; + for (var j = 0; j < keys2.length; ++j) + object.tasks[keys2[j]] = $root.ml_pipelines.PipelineTaskSpec.toObject(message.tasks[keys2[j]], options); + } + if (message.outputs != null && message.hasOwnProperty("outputs")) + object.outputs = $root.ml_pipelines.DagOutputsSpec.toObject(message.outputs, options); + return object; + }; + + /** + * Converts this DagSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.DagSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + DagSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return DagSpec; + })(); + + ml_pipelines.DagOutputsSpec = (function() { + + /** + * Properties of a DagOutputsSpec. + * @memberof ml_pipelines + * @interface IDagOutputsSpec + * @property {Object.<string,ml_pipelines.DagOutputsSpec.IDagOutputArtifactSpec>|null} [artifacts] DagOutputsSpec artifacts + * @property {Object.<string,ml_pipelines.DagOutputsSpec.IDagOutputParameterSpec>|null} [parameters] DagOutputsSpec parameters + */ + + /** + * Constructs a new DagOutputsSpec. + * @memberof ml_pipelines + * @classdesc Represents a DagOutputsSpec. + * @implements IDagOutputsSpec + * @constructor + * @param {ml_pipelines.IDagOutputsSpec=} [properties] Properties to set + */ + function DagOutputsSpec(properties) { + this.artifacts = {}; + this.parameters = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * DagOutputsSpec artifacts. + * @member {Object.<string,ml_pipelines.DagOutputsSpec.IDagOutputArtifactSpec>} artifacts + * @memberof ml_pipelines.DagOutputsSpec + * @instance + */ + DagOutputsSpec.prototype.artifacts = $util.emptyObject; + + /** + * DagOutputsSpec parameters. + * @member {Object.<string,ml_pipelines.DagOutputsSpec.IDagOutputParameterSpec>} parameters + * @memberof ml_pipelines.DagOutputsSpec + * @instance + */ + DagOutputsSpec.prototype.parameters = $util.emptyObject; + + /** + * Creates a new DagOutputsSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.DagOutputsSpec + * @static + * @param {ml_pipelines.IDagOutputsSpec=} [properties] Properties to set + * @returns {ml_pipelines.DagOutputsSpec} DagOutputsSpec instance + */ + DagOutputsSpec.create = function create(properties) { + return new DagOutputsSpec(properties); + }; + + /** + * Encodes the specified DagOutputsSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.DagOutputsSpec + * @static + * @param {ml_pipelines.IDagOutputsSpec} message DagOutputsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + DagOutputsSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.artifacts != null && Object.hasOwnProperty.call(message, "artifacts")) + for (var keys = Object.keys(message.artifacts), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.encode(message.artifacts[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.parameters != null && Object.hasOwnProperty.call(message, "parameters")) + for (var keys = Object.keys(message.parameters), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.encode(message.parameters[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + return writer; + }; + + /** + * Encodes the specified DagOutputsSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.DagOutputsSpec + * @static + * @param {ml_pipelines.IDagOutputsSpec} message DagOutputsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + DagOutputsSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a DagOutputsSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.DagOutputsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.DagOutputsSpec} DagOutputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + DagOutputsSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.DagOutputsSpec(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (message.artifacts === $util.emptyObject) + message.artifacts = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.artifacts[key] = value; + break; + case 2: + if (message.parameters === $util.emptyObject) + message.parameters = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.parameters[key] = value; + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a DagOutputsSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.DagOutputsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.DagOutputsSpec} DagOutputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + DagOutputsSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a DagOutputsSpec message. + * @function verify + * @memberof ml_pipelines.DagOutputsSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + DagOutputsSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.artifacts != null && message.hasOwnProperty("artifacts")) { + if (!$util.isObject(message.artifacts)) + return "artifacts: object expected"; + var key = Object.keys(message.artifacts); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.verify(message.artifacts[key[i]]); + if (error) + return "artifacts." + error; + } + } + if (message.parameters != null && message.hasOwnProperty("parameters")) { + if (!$util.isObject(message.parameters)) + return "parameters: object expected"; + var key = Object.keys(message.parameters); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.verify(message.parameters[key[i]]); + if (error) + return "parameters." + error; + } + } + return null; + }; + + /** + * Creates a DagOutputsSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.DagOutputsSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.DagOutputsSpec} DagOutputsSpec + */ + DagOutputsSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.DagOutputsSpec) + return object; + var message = new $root.ml_pipelines.DagOutputsSpec(); + if (object.artifacts) { + if (typeof object.artifacts !== "object") + throw TypeError(".ml_pipelines.DagOutputsSpec.artifacts: object expected"); + message.artifacts = {}; + for (var keys = Object.keys(object.artifacts), i = 0; i < keys.length; ++i) { + if (typeof object.artifacts[keys[i]] !== "object") + throw TypeError(".ml_pipelines.DagOutputsSpec.artifacts: object expected"); + message.artifacts[keys[i]] = $root.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.fromObject(object.artifacts[keys[i]]); + } + } + if (object.parameters) { + if (typeof object.parameters !== "object") + throw TypeError(".ml_pipelines.DagOutputsSpec.parameters: object expected"); + message.parameters = {}; + for (var keys = Object.keys(object.parameters), i = 0; i < keys.length; ++i) { + if (typeof object.parameters[keys[i]] !== "object") + throw TypeError(".ml_pipelines.DagOutputsSpec.parameters: object expected"); + message.parameters[keys[i]] = $root.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.fromObject(object.parameters[keys[i]]); + } + } + return message; + }; + + /** + * Creates a plain object from a DagOutputsSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.DagOutputsSpec + * @static + * @param {ml_pipelines.DagOutputsSpec} message DagOutputsSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + DagOutputsSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) { + object.artifacts = {}; + object.parameters = {}; + } + var keys2; + if (message.artifacts && (keys2 = Object.keys(message.artifacts)).length) { + object.artifacts = {}; + for (var j = 0; j < keys2.length; ++j) + object.artifacts[keys2[j]] = $root.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.toObject(message.artifacts[keys2[j]], options); + } + if (message.parameters && (keys2 = Object.keys(message.parameters)).length) { + object.parameters = {}; + for (var j = 0; j < keys2.length; ++j) + object.parameters[keys2[j]] = $root.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.toObject(message.parameters[keys2[j]], options); + } + return object; + }; + + /** + * Converts this DagOutputsSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.DagOutputsSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + DagOutputsSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DagOutputsSpec.ArtifactSelectorSpec = (function() { + + /** + * Properties of an ArtifactSelectorSpec. + * @memberof ml_pipelines.DagOutputsSpec + * @interface IArtifactSelectorSpec + * @property {string|null} [producerSubtask] ArtifactSelectorSpec producerSubtask + * @property {string|null} [outputArtifactKey] ArtifactSelectorSpec outputArtifactKey + */ + + /** + * Constructs a new ArtifactSelectorSpec. + * @memberof ml_pipelines.DagOutputsSpec + * @classdesc Represents an ArtifactSelectorSpec. + * @implements IArtifactSelectorSpec + * @constructor + * @param {ml_pipelines.DagOutputsSpec.IArtifactSelectorSpec=} [properties] Properties to set + */ + function ArtifactSelectorSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ArtifactSelectorSpec producerSubtask. + * @member {string} producerSubtask + * @memberof ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec + * @instance + */ + ArtifactSelectorSpec.prototype.producerSubtask = ""; + + /** + * ArtifactSelectorSpec outputArtifactKey. + * @member {string} outputArtifactKey + * @memberof ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec + * @instance + */ + ArtifactSelectorSpec.prototype.outputArtifactKey = ""; + + /** + * Creates a new ArtifactSelectorSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IArtifactSelectorSpec=} [properties] Properties to set + * @returns {ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec} ArtifactSelectorSpec instance + */ + ArtifactSelectorSpec.create = function create(properties) { + return new ArtifactSelectorSpec(properties); + }; + + /** + * Encodes the specified ArtifactSelectorSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IArtifactSelectorSpec} message ArtifactSelectorSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactSelectorSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.producerSubtask != null && Object.hasOwnProperty.call(message, "producerSubtask")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.producerSubtask); + if (message.outputArtifactKey != null && Object.hasOwnProperty.call(message, "outputArtifactKey")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.outputArtifactKey); + return writer; + }; + + /** + * Encodes the specified ArtifactSelectorSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IArtifactSelectorSpec} message ArtifactSelectorSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactSelectorSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ArtifactSelectorSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec} ArtifactSelectorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactSelectorSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.producerSubtask = reader.string(); + break; + case 2: + message.outputArtifactKey = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ArtifactSelectorSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec} ArtifactSelectorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactSelectorSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ArtifactSelectorSpec message. + * @function verify + * @memberof ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ArtifactSelectorSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.producerSubtask != null && message.hasOwnProperty("producerSubtask")) + if (!$util.isString(message.producerSubtask)) + return "producerSubtask: string expected"; + if (message.outputArtifactKey != null && message.hasOwnProperty("outputArtifactKey")) + if (!$util.isString(message.outputArtifactKey)) + return "outputArtifactKey: string expected"; + return null; + }; + + /** + * Creates an ArtifactSelectorSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec} ArtifactSelectorSpec + */ + ArtifactSelectorSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec) + return object; + var message = new $root.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec(); + if (object.producerSubtask != null) + message.producerSubtask = String(object.producerSubtask); + if (object.outputArtifactKey != null) + message.outputArtifactKey = String(object.outputArtifactKey); + return message; + }; + + /** + * Creates a plain object from an ArtifactSelectorSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec} message ArtifactSelectorSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ArtifactSelectorSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.producerSubtask = ""; + object.outputArtifactKey = ""; + } + if (message.producerSubtask != null && message.hasOwnProperty("producerSubtask")) + object.producerSubtask = message.producerSubtask; + if (message.outputArtifactKey != null && message.hasOwnProperty("outputArtifactKey")) + object.outputArtifactKey = message.outputArtifactKey; + return object; + }; + + /** + * Converts this ArtifactSelectorSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ArtifactSelectorSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ArtifactSelectorSpec; + })(); + + DagOutputsSpec.DagOutputArtifactSpec = (function() { + + /** + * Properties of a DagOutputArtifactSpec. + * @memberof ml_pipelines.DagOutputsSpec + * @interface IDagOutputArtifactSpec + * @property {Array.<ml_pipelines.DagOutputsSpec.IArtifactSelectorSpec>|null} [artifactSelectors] DagOutputArtifactSpec artifactSelectors + */ + + /** + * Constructs a new DagOutputArtifactSpec. + * @memberof ml_pipelines.DagOutputsSpec + * @classdesc Represents a DagOutputArtifactSpec. + * @implements IDagOutputArtifactSpec + * @constructor + * @param {ml_pipelines.DagOutputsSpec.IDagOutputArtifactSpec=} [properties] Properties to set + */ + function DagOutputArtifactSpec(properties) { + this.artifactSelectors = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * DagOutputArtifactSpec artifactSelectors. + * @member {Array.<ml_pipelines.DagOutputsSpec.IArtifactSelectorSpec>} artifactSelectors + * @memberof ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec + * @instance + */ + DagOutputArtifactSpec.prototype.artifactSelectors = $util.emptyArray; + + /** + * Creates a new DagOutputArtifactSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IDagOutputArtifactSpec=} [properties] Properties to set + * @returns {ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec} DagOutputArtifactSpec instance + */ + DagOutputArtifactSpec.create = function create(properties) { + return new DagOutputArtifactSpec(properties); + }; + + /** + * Encodes the specified DagOutputArtifactSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IDagOutputArtifactSpec} message DagOutputArtifactSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + DagOutputArtifactSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.artifactSelectors != null && message.artifactSelectors.length) + for (var i = 0; i < message.artifactSelectors.length; ++i) + $root.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.encode(message.artifactSelectors[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified DagOutputArtifactSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IDagOutputArtifactSpec} message DagOutputArtifactSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + DagOutputArtifactSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a DagOutputArtifactSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec} DagOutputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + DagOutputArtifactSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.artifactSelectors && message.artifactSelectors.length)) + message.artifactSelectors = []; + message.artifactSelectors.push($root.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a DagOutputArtifactSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec} DagOutputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + DagOutputArtifactSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a DagOutputArtifactSpec message. + * @function verify + * @memberof ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + DagOutputArtifactSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.artifactSelectors != null && message.hasOwnProperty("artifactSelectors")) { + if (!Array.isArray(message.artifactSelectors)) + return "artifactSelectors: array expected"; + for (var i = 0; i < message.artifactSelectors.length; ++i) { + var error = $root.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.verify(message.artifactSelectors[i]); + if (error) + return "artifactSelectors." + error; + } + } + return null; + }; + + /** + * Creates a DagOutputArtifactSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec} DagOutputArtifactSpec + */ + DagOutputArtifactSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec) + return object; + var message = new $root.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec(); + if (object.artifactSelectors) { + if (!Array.isArray(object.artifactSelectors)) + throw TypeError(".ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.artifactSelectors: array expected"); + message.artifactSelectors = []; + for (var i = 0; i < object.artifactSelectors.length; ++i) { + if (typeof object.artifactSelectors[i] !== "object") + throw TypeError(".ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.artifactSelectors: object expected"); + message.artifactSelectors[i] = $root.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.fromObject(object.artifactSelectors[i]); + } + } + return message; + }; + + /** + * Creates a plain object from a DagOutputArtifactSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec} message DagOutputArtifactSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + DagOutputArtifactSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.artifactSelectors = []; + if (message.artifactSelectors && message.artifactSelectors.length) { + object.artifactSelectors = []; + for (var j = 0; j < message.artifactSelectors.length; ++j) + object.artifactSelectors[j] = $root.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.toObject(message.artifactSelectors[j], options); + } + return object; + }; + + /** + * Converts this DagOutputArtifactSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + DagOutputArtifactSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return DagOutputArtifactSpec; + })(); + + DagOutputsSpec.ParameterSelectorSpec = (function() { + + /** + * Properties of a ParameterSelectorSpec. + * @memberof ml_pipelines.DagOutputsSpec + * @interface IParameterSelectorSpec + * @property {string|null} [producerSubtask] ParameterSelectorSpec producerSubtask + * @property {string|null} [outputParameterKey] ParameterSelectorSpec outputParameterKey + */ + + /** + * Constructs a new ParameterSelectorSpec. + * @memberof ml_pipelines.DagOutputsSpec + * @classdesc Represents a ParameterSelectorSpec. + * @implements IParameterSelectorSpec + * @constructor + * @param {ml_pipelines.DagOutputsSpec.IParameterSelectorSpec=} [properties] Properties to set + */ + function ParameterSelectorSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ParameterSelectorSpec producerSubtask. + * @member {string} producerSubtask + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + * @instance + */ + ParameterSelectorSpec.prototype.producerSubtask = ""; + + /** + * ParameterSelectorSpec outputParameterKey. + * @member {string} outputParameterKey + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + * @instance + */ + ParameterSelectorSpec.prototype.outputParameterKey = ""; + + /** + * Creates a new ParameterSelectorSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IParameterSelectorSpec=} [properties] Properties to set + * @returns {ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} ParameterSelectorSpec instance + */ + ParameterSelectorSpec.create = function create(properties) { + return new ParameterSelectorSpec(properties); + }; + + /** + * Encodes the specified ParameterSelectorSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IParameterSelectorSpec} message ParameterSelectorSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ParameterSelectorSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.producerSubtask != null && Object.hasOwnProperty.call(message, "producerSubtask")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.producerSubtask); + if (message.outputParameterKey != null && Object.hasOwnProperty.call(message, "outputParameterKey")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.outputParameterKey); + return writer; + }; + + /** + * Encodes the specified ParameterSelectorSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IParameterSelectorSpec} message ParameterSelectorSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ParameterSelectorSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ParameterSelectorSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} ParameterSelectorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ParameterSelectorSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.producerSubtask = reader.string(); + break; + case 2: + message.outputParameterKey = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ParameterSelectorSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} ParameterSelectorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ParameterSelectorSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ParameterSelectorSpec message. + * @function verify + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ParameterSelectorSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.producerSubtask != null && message.hasOwnProperty("producerSubtask")) + if (!$util.isString(message.producerSubtask)) + return "producerSubtask: string expected"; + if (message.outputParameterKey != null && message.hasOwnProperty("outputParameterKey")) + if (!$util.isString(message.outputParameterKey)) + return "outputParameterKey: string expected"; + return null; + }; + + /** + * Creates a ParameterSelectorSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} ParameterSelectorSpec + */ + ParameterSelectorSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec) + return object; + var message = new $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec(); + if (object.producerSubtask != null) + message.producerSubtask = String(object.producerSubtask); + if (object.outputParameterKey != null) + message.outputParameterKey = String(object.outputParameterKey); + return message; + }; + + /** + * Creates a plain object from a ParameterSelectorSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} message ParameterSelectorSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ParameterSelectorSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.producerSubtask = ""; + object.outputParameterKey = ""; + } + if (message.producerSubtask != null && message.hasOwnProperty("producerSubtask")) + object.producerSubtask = message.producerSubtask; + if (message.outputParameterKey != null && message.hasOwnProperty("outputParameterKey")) + object.outputParameterKey = message.outputParameterKey; + return object; + }; + + /** + * Converts this ParameterSelectorSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ParameterSelectorSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ParameterSelectorSpec; + })(); + + DagOutputsSpec.ParameterSelectorsSpec = (function() { + + /** + * Properties of a ParameterSelectorsSpec. + * @memberof ml_pipelines.DagOutputsSpec + * @interface IParameterSelectorsSpec + * @property {Array.<ml_pipelines.DagOutputsSpec.IParameterSelectorSpec>|null} [parameterSelectors] ParameterSelectorsSpec parameterSelectors + */ + + /** + * Constructs a new ParameterSelectorsSpec. + * @memberof ml_pipelines.DagOutputsSpec + * @classdesc Represents a ParameterSelectorsSpec. + * @implements IParameterSelectorsSpec + * @constructor + * @param {ml_pipelines.DagOutputsSpec.IParameterSelectorsSpec=} [properties] Properties to set + */ + function ParameterSelectorsSpec(properties) { + this.parameterSelectors = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ParameterSelectorsSpec parameterSelectors. + * @member {Array.<ml_pipelines.DagOutputsSpec.IParameterSelectorSpec>} parameterSelectors + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec + * @instance + */ + ParameterSelectorsSpec.prototype.parameterSelectors = $util.emptyArray; + + /** + * Creates a new ParameterSelectorsSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IParameterSelectorsSpec=} [properties] Properties to set + * @returns {ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} ParameterSelectorsSpec instance + */ + ParameterSelectorsSpec.create = function create(properties) { + return new ParameterSelectorsSpec(properties); + }; + + /** + * Encodes the specified ParameterSelectorsSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IParameterSelectorsSpec} message ParameterSelectorsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ParameterSelectorsSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.parameterSelectors != null && message.parameterSelectors.length) + for (var i = 0; i < message.parameterSelectors.length; ++i) + $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.encode(message.parameterSelectors[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ParameterSelectorsSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IParameterSelectorsSpec} message ParameterSelectorsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ParameterSelectorsSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ParameterSelectorsSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} ParameterSelectorsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ParameterSelectorsSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.parameterSelectors && message.parameterSelectors.length)) + message.parameterSelectors = []; + message.parameterSelectors.push($root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ParameterSelectorsSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} ParameterSelectorsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ParameterSelectorsSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ParameterSelectorsSpec message. + * @function verify + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ParameterSelectorsSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.parameterSelectors != null && message.hasOwnProperty("parameterSelectors")) { + if (!Array.isArray(message.parameterSelectors)) + return "parameterSelectors: array expected"; + for (var i = 0; i < message.parameterSelectors.length; ++i) { + var error = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.verify(message.parameterSelectors[i]); + if (error) + return "parameterSelectors." + error; + } + } + return null; + }; + + /** + * Creates a ParameterSelectorsSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} ParameterSelectorsSpec + */ + ParameterSelectorsSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec) + return object; + var message = new $root.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec(); + if (object.parameterSelectors) { + if (!Array.isArray(object.parameterSelectors)) + throw TypeError(".ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.parameterSelectors: array expected"); + message.parameterSelectors = []; + for (var i = 0; i < object.parameterSelectors.length; ++i) { + if (typeof object.parameterSelectors[i] !== "object") + throw TypeError(".ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.parameterSelectors: object expected"); + message.parameterSelectors[i] = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.fromObject(object.parameterSelectors[i]); + } + } + return message; + }; + + /** + * Creates a plain object from a ParameterSelectorsSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} message ParameterSelectorsSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ParameterSelectorsSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.parameterSelectors = []; + if (message.parameterSelectors && message.parameterSelectors.length) { + object.parameterSelectors = []; + for (var j = 0; j < message.parameterSelectors.length; ++j) + object.parameterSelectors[j] = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.toObject(message.parameterSelectors[j], options); + } + return object; + }; + + /** + * Converts this ParameterSelectorsSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ParameterSelectorsSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ParameterSelectorsSpec; + })(); + + DagOutputsSpec.MapParameterSelectorsSpec = (function() { + + /** + * Properties of a MapParameterSelectorsSpec. + * @memberof ml_pipelines.DagOutputsSpec + * @interface IMapParameterSelectorsSpec + * @property {Object.<string,ml_pipelines.DagOutputsSpec.IParameterSelectorSpec>|null} [mappedParameters] MapParameterSelectorsSpec mappedParameters + */ + + /** + * Constructs a new MapParameterSelectorsSpec. + * @memberof ml_pipelines.DagOutputsSpec + * @classdesc Represents a MapParameterSelectorsSpec. + * @implements IMapParameterSelectorsSpec + * @constructor + * @param {ml_pipelines.DagOutputsSpec.IMapParameterSelectorsSpec=} [properties] Properties to set + */ + function MapParameterSelectorsSpec(properties) { + this.mappedParameters = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * MapParameterSelectorsSpec mappedParameters. + * @member {Object.<string,ml_pipelines.DagOutputsSpec.IParameterSelectorSpec>} mappedParameters + * @memberof ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec + * @instance + */ + MapParameterSelectorsSpec.prototype.mappedParameters = $util.emptyObject; + + /** + * Creates a new MapParameterSelectorsSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IMapParameterSelectorsSpec=} [properties] Properties to set + * @returns {ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec} MapParameterSelectorsSpec instance + */ + MapParameterSelectorsSpec.create = function create(properties) { + return new MapParameterSelectorsSpec(properties); + }; + + /** + * Encodes the specified MapParameterSelectorsSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IMapParameterSelectorsSpec} message MapParameterSelectorsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + MapParameterSelectorsSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.mappedParameters != null && Object.hasOwnProperty.call(message, "mappedParameters")) + for (var keys = Object.keys(message.mappedParameters), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.encode(message.mappedParameters[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + return writer; + }; + + /** + * Encodes the specified MapParameterSelectorsSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IMapParameterSelectorsSpec} message MapParameterSelectorsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + MapParameterSelectorsSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a MapParameterSelectorsSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec} MapParameterSelectorsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + MapParameterSelectorsSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 2: + if (message.mappedParameters === $util.emptyObject) + message.mappedParameters = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.mappedParameters[key] = value; + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a MapParameterSelectorsSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec} MapParameterSelectorsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + MapParameterSelectorsSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a MapParameterSelectorsSpec message. + * @function verify + * @memberof ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + MapParameterSelectorsSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.mappedParameters != null && message.hasOwnProperty("mappedParameters")) { + if (!$util.isObject(message.mappedParameters)) + return "mappedParameters: object expected"; + var key = Object.keys(message.mappedParameters); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.verify(message.mappedParameters[key[i]]); + if (error) + return "mappedParameters." + error; + } + } + return null; + }; + + /** + * Creates a MapParameterSelectorsSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec} MapParameterSelectorsSpec + */ + MapParameterSelectorsSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec) + return object; + var message = new $root.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec(); + if (object.mappedParameters) { + if (typeof object.mappedParameters !== "object") + throw TypeError(".ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.mappedParameters: object expected"); + message.mappedParameters = {}; + for (var keys = Object.keys(object.mappedParameters), i = 0; i < keys.length; ++i) { + if (typeof object.mappedParameters[keys[i]] !== "object") + throw TypeError(".ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.mappedParameters: object expected"); + message.mappedParameters[keys[i]] = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.fromObject(object.mappedParameters[keys[i]]); + } + } + return message; + }; + + /** + * Creates a plain object from a MapParameterSelectorsSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec} message MapParameterSelectorsSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + MapParameterSelectorsSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) + object.mappedParameters = {}; + var keys2; + if (message.mappedParameters && (keys2 = Object.keys(message.mappedParameters)).length) { + object.mappedParameters = {}; + for (var j = 0; j < keys2.length; ++j) + object.mappedParameters[keys2[j]] = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.toObject(message.mappedParameters[keys2[j]], options); + } + return object; + }; + + /** + * Converts this MapParameterSelectorsSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + MapParameterSelectorsSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return MapParameterSelectorsSpec; + })(); + + DagOutputsSpec.DagOutputParameterSpec = (function() { + + /** + * Properties of a DagOutputParameterSpec. + * @memberof ml_pipelines.DagOutputsSpec + * @interface IDagOutputParameterSpec + * @property {ml_pipelines.DagOutputsSpec.IParameterSelectorSpec|null} [valueFromParameter] DagOutputParameterSpec valueFromParameter + * @property {ml_pipelines.DagOutputsSpec.IParameterSelectorsSpec|null} [valueFromOneof] DagOutputParameterSpec valueFromOneof + */ + + /** + * Constructs a new DagOutputParameterSpec. + * @memberof ml_pipelines.DagOutputsSpec + * @classdesc Represents a DagOutputParameterSpec. + * @implements IDagOutputParameterSpec + * @constructor + * @param {ml_pipelines.DagOutputsSpec.IDagOutputParameterSpec=} [properties] Properties to set + */ + function DagOutputParameterSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * DagOutputParameterSpec valueFromParameter. + * @member {ml_pipelines.DagOutputsSpec.IParameterSelectorSpec|null|undefined} valueFromParameter + * @memberof ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + * @instance + */ + DagOutputParameterSpec.prototype.valueFromParameter = null; + + /** + * DagOutputParameterSpec valueFromOneof. + * @member {ml_pipelines.DagOutputsSpec.IParameterSelectorsSpec|null|undefined} valueFromOneof + * @memberof ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + * @instance + */ + DagOutputParameterSpec.prototype.valueFromOneof = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * DagOutputParameterSpec kind. + * @member {"valueFromParameter"|"valueFromOneof"|undefined} kind + * @memberof ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + * @instance + */ + Object.defineProperty(DagOutputParameterSpec.prototype, "kind", { + get: $util.oneOfGetter($oneOfFields = ["valueFromParameter", "valueFromOneof"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new DagOutputParameterSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IDagOutputParameterSpec=} [properties] Properties to set + * @returns {ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} DagOutputParameterSpec instance + */ + DagOutputParameterSpec.create = function create(properties) { + return new DagOutputParameterSpec(properties); + }; + + /** + * Encodes the specified DagOutputParameterSpec message. Does not implicitly {@link ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IDagOutputParameterSpec} message DagOutputParameterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + DagOutputParameterSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.valueFromParameter != null && Object.hasOwnProperty.call(message, "valueFromParameter")) + $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.encode(message.valueFromParameter, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.valueFromOneof != null && Object.hasOwnProperty.call(message, "valueFromOneof")) + $root.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.encode(message.valueFromOneof, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified DagOutputParameterSpec message, length delimited. Does not implicitly {@link ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.IDagOutputParameterSpec} message DagOutputParameterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + DagOutputParameterSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a DagOutputParameterSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} DagOutputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + DagOutputParameterSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.valueFromParameter = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.decode(reader, reader.uint32()); + break; + case 2: + message.valueFromOneof = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a DagOutputParameterSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} DagOutputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + DagOutputParameterSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a DagOutputParameterSpec message. + * @function verify + * @memberof ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + DagOutputParameterSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.valueFromParameter != null && message.hasOwnProperty("valueFromParameter")) { + properties.kind = 1; + { + var error = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.verify(message.valueFromParameter); + if (error) + return "valueFromParameter." + error; + } + } + if (message.valueFromOneof != null && message.hasOwnProperty("valueFromOneof")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + { + var error = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.verify(message.valueFromOneof); + if (error) + return "valueFromOneof." + error; + } + } + return null; + }; + + /** + * Creates a DagOutputParameterSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} DagOutputParameterSpec + */ + DagOutputParameterSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec) + return object; + var message = new $root.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec(); + if (object.valueFromParameter != null) { + if (typeof object.valueFromParameter !== "object") + throw TypeError(".ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.valueFromParameter: object expected"); + message.valueFromParameter = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.fromObject(object.valueFromParameter); + } + if (object.valueFromOneof != null) { + if (typeof object.valueFromOneof !== "object") + throw TypeError(".ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.valueFromOneof: object expected"); + message.valueFromOneof = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.fromObject(object.valueFromOneof); + } + return message; + }; + + /** + * Creates a plain object from a DagOutputParameterSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + * @static + * @param {ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} message DagOutputParameterSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + DagOutputParameterSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (message.valueFromParameter != null && message.hasOwnProperty("valueFromParameter")) { + object.valueFromParameter = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.toObject(message.valueFromParameter, options); + if (options.oneofs) + object.kind = "valueFromParameter"; + } + if (message.valueFromOneof != null && message.hasOwnProperty("valueFromOneof")) { + object.valueFromOneof = $root.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.toObject(message.valueFromOneof, options); + if (options.oneofs) + object.kind = "valueFromOneof"; + } + return object; + }; + + /** + * Converts this DagOutputParameterSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.DagOutputsSpec.DagOutputParameterSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + DagOutputParameterSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return DagOutputParameterSpec; + })(); + + return DagOutputsSpec; + })(); + + ml_pipelines.ComponentInputsSpec = (function() { + + /** + * Properties of a ComponentInputsSpec. + * @memberof ml_pipelines + * @interface IComponentInputsSpec + * @property {Object.<string,ml_pipelines.ComponentInputsSpec.IArtifactSpec>|null} [artifacts] ComponentInputsSpec artifacts + * @property {Object.<string,ml_pipelines.ComponentInputsSpec.IParameterSpec>|null} [parameters] ComponentInputsSpec parameters + */ + + /** + * Constructs a new ComponentInputsSpec. + * @memberof ml_pipelines + * @classdesc Represents a ComponentInputsSpec. + * @implements IComponentInputsSpec + * @constructor + * @param {ml_pipelines.IComponentInputsSpec=} [properties] Properties to set + */ + function ComponentInputsSpec(properties) { + this.artifacts = {}; + this.parameters = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ComponentInputsSpec artifacts. + * @member {Object.<string,ml_pipelines.ComponentInputsSpec.IArtifactSpec>} artifacts + * @memberof ml_pipelines.ComponentInputsSpec + * @instance + */ + ComponentInputsSpec.prototype.artifacts = $util.emptyObject; + + /** + * ComponentInputsSpec parameters. + * @member {Object.<string,ml_pipelines.ComponentInputsSpec.IParameterSpec>} parameters + * @memberof ml_pipelines.ComponentInputsSpec + * @instance + */ + ComponentInputsSpec.prototype.parameters = $util.emptyObject; + + /** + * Creates a new ComponentInputsSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.ComponentInputsSpec + * @static + * @param {ml_pipelines.IComponentInputsSpec=} [properties] Properties to set + * @returns {ml_pipelines.ComponentInputsSpec} ComponentInputsSpec instance + */ + ComponentInputsSpec.create = function create(properties) { + return new ComponentInputsSpec(properties); + }; + + /** + * Encodes the specified ComponentInputsSpec message. Does not implicitly {@link ml_pipelines.ComponentInputsSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ComponentInputsSpec + * @static + * @param {ml_pipelines.IComponentInputsSpec} message ComponentInputsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ComponentInputsSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.artifacts != null && Object.hasOwnProperty.call(message, "artifacts")) + for (var keys = Object.keys(message.artifacts), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ComponentInputsSpec.ArtifactSpec.encode(message.artifacts[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.parameters != null && Object.hasOwnProperty.call(message, "parameters")) + for (var keys = Object.keys(message.parameters), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ComponentInputsSpec.ParameterSpec.encode(message.parameters[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + return writer; + }; + + /** + * Encodes the specified ComponentInputsSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentInputsSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ComponentInputsSpec + * @static + * @param {ml_pipelines.IComponentInputsSpec} message ComponentInputsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ComponentInputsSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ComponentInputsSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ComponentInputsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ComponentInputsSpec} ComponentInputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ComponentInputsSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ComponentInputsSpec(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (message.artifacts === $util.emptyObject) + message.artifacts = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ComponentInputsSpec.ArtifactSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.artifacts[key] = value; + break; + case 2: + if (message.parameters === $util.emptyObject) + message.parameters = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ComponentInputsSpec.ParameterSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.parameters[key] = value; + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ComponentInputsSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ComponentInputsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ComponentInputsSpec} ComponentInputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ComponentInputsSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ComponentInputsSpec message. + * @function verify + * @memberof ml_pipelines.ComponentInputsSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ComponentInputsSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.artifacts != null && message.hasOwnProperty("artifacts")) { + if (!$util.isObject(message.artifacts)) + return "artifacts: object expected"; + var key = Object.keys(message.artifacts); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ComponentInputsSpec.ArtifactSpec.verify(message.artifacts[key[i]]); + if (error) + return "artifacts." + error; + } + } + if (message.parameters != null && message.hasOwnProperty("parameters")) { + if (!$util.isObject(message.parameters)) + return "parameters: object expected"; + var key = Object.keys(message.parameters); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ComponentInputsSpec.ParameterSpec.verify(message.parameters[key[i]]); + if (error) + return "parameters." + error; + } + } + return null; + }; + + /** + * Creates a ComponentInputsSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ComponentInputsSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ComponentInputsSpec} ComponentInputsSpec + */ + ComponentInputsSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ComponentInputsSpec) + return object; + var message = new $root.ml_pipelines.ComponentInputsSpec(); + if (object.artifacts) { + if (typeof object.artifacts !== "object") + throw TypeError(".ml_pipelines.ComponentInputsSpec.artifacts: object expected"); + message.artifacts = {}; + for (var keys = Object.keys(object.artifacts), i = 0; i < keys.length; ++i) { + if (typeof object.artifacts[keys[i]] !== "object") + throw TypeError(".ml_pipelines.ComponentInputsSpec.artifacts: object expected"); + message.artifacts[keys[i]] = $root.ml_pipelines.ComponentInputsSpec.ArtifactSpec.fromObject(object.artifacts[keys[i]]); + } + } + if (object.parameters) { + if (typeof object.parameters !== "object") + throw TypeError(".ml_pipelines.ComponentInputsSpec.parameters: object expected"); + message.parameters = {}; + for (var keys = Object.keys(object.parameters), i = 0; i < keys.length; ++i) { + if (typeof object.parameters[keys[i]] !== "object") + throw TypeError(".ml_pipelines.ComponentInputsSpec.parameters: object expected"); + message.parameters[keys[i]] = $root.ml_pipelines.ComponentInputsSpec.ParameterSpec.fromObject(object.parameters[keys[i]]); + } + } + return message; + }; + + /** + * Creates a plain object from a ComponentInputsSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ComponentInputsSpec + * @static + * @param {ml_pipelines.ComponentInputsSpec} message ComponentInputsSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ComponentInputsSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) { + object.artifacts = {}; + object.parameters = {}; + } + var keys2; + if (message.artifacts && (keys2 = Object.keys(message.artifacts)).length) { + object.artifacts = {}; + for (var j = 0; j < keys2.length; ++j) + object.artifacts[keys2[j]] = $root.ml_pipelines.ComponentInputsSpec.ArtifactSpec.toObject(message.artifacts[keys2[j]], options); + } + if (message.parameters && (keys2 = Object.keys(message.parameters)).length) { + object.parameters = {}; + for (var j = 0; j < keys2.length; ++j) + object.parameters[keys2[j]] = $root.ml_pipelines.ComponentInputsSpec.ParameterSpec.toObject(message.parameters[keys2[j]], options); + } + return object; + }; + + /** + * Converts this ComponentInputsSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.ComponentInputsSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ComponentInputsSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ComponentInputsSpec.ArtifactSpec = (function() { + + /** + * Properties of an ArtifactSpec. + * @memberof ml_pipelines.ComponentInputsSpec + * @interface IArtifactSpec + * @property {ml_pipelines.IArtifactTypeSchema|null} [artifactType] ArtifactSpec artifactType + */ + + /** + * Constructs a new ArtifactSpec. + * @memberof ml_pipelines.ComponentInputsSpec + * @classdesc Represents an ArtifactSpec. + * @implements IArtifactSpec + * @constructor + * @param {ml_pipelines.ComponentInputsSpec.IArtifactSpec=} [properties] Properties to set + */ + function ArtifactSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ArtifactSpec artifactType. + * @member {ml_pipelines.IArtifactTypeSchema|null|undefined} artifactType + * @memberof ml_pipelines.ComponentInputsSpec.ArtifactSpec + * @instance + */ + ArtifactSpec.prototype.artifactType = null; + + /** + * Creates a new ArtifactSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.ComponentInputsSpec.ArtifactSpec + * @static + * @param {ml_pipelines.ComponentInputsSpec.IArtifactSpec=} [properties] Properties to set + * @returns {ml_pipelines.ComponentInputsSpec.ArtifactSpec} ArtifactSpec instance + */ + ArtifactSpec.create = function create(properties) { + return new ArtifactSpec(properties); + }; + + /** + * Encodes the specified ArtifactSpec message. Does not implicitly {@link ml_pipelines.ComponentInputsSpec.ArtifactSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ComponentInputsSpec.ArtifactSpec + * @static + * @param {ml_pipelines.ComponentInputsSpec.IArtifactSpec} message ArtifactSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.artifactType != null && Object.hasOwnProperty.call(message, "artifactType")) + $root.ml_pipelines.ArtifactTypeSchema.encode(message.artifactType, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ArtifactSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentInputsSpec.ArtifactSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ComponentInputsSpec.ArtifactSpec + * @static + * @param {ml_pipelines.ComponentInputsSpec.IArtifactSpec} message ArtifactSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ArtifactSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ComponentInputsSpec.ArtifactSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ComponentInputsSpec.ArtifactSpec} ArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ComponentInputsSpec.ArtifactSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.artifactType = $root.ml_pipelines.ArtifactTypeSchema.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ArtifactSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ComponentInputsSpec.ArtifactSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ComponentInputsSpec.ArtifactSpec} ArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ArtifactSpec message. + * @function verify + * @memberof ml_pipelines.ComponentInputsSpec.ArtifactSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ArtifactSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.artifactType != null && message.hasOwnProperty("artifactType")) { + var error = $root.ml_pipelines.ArtifactTypeSchema.verify(message.artifactType); + if (error) + return "artifactType." + error; + } + return null; + }; + + /** + * Creates an ArtifactSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ComponentInputsSpec.ArtifactSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ComponentInputsSpec.ArtifactSpec} ArtifactSpec + */ + ArtifactSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ComponentInputsSpec.ArtifactSpec) + return object; + var message = new $root.ml_pipelines.ComponentInputsSpec.ArtifactSpec(); + if (object.artifactType != null) { + if (typeof object.artifactType !== "object") + throw TypeError(".ml_pipelines.ComponentInputsSpec.ArtifactSpec.artifactType: object expected"); + message.artifactType = $root.ml_pipelines.ArtifactTypeSchema.fromObject(object.artifactType); + } + return message; + }; + + /** + * Creates a plain object from an ArtifactSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ComponentInputsSpec.ArtifactSpec + * @static + * @param {ml_pipelines.ComponentInputsSpec.ArtifactSpec} message ArtifactSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ArtifactSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.artifactType = null; + if (message.artifactType != null && message.hasOwnProperty("artifactType")) + object.artifactType = $root.ml_pipelines.ArtifactTypeSchema.toObject(message.artifactType, options); + return object; + }; + + /** + * Converts this ArtifactSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.ComponentInputsSpec.ArtifactSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ArtifactSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ArtifactSpec; + })(); + + ComponentInputsSpec.ParameterSpec = (function() { + + /** + * Properties of a ParameterSpec. + * @memberof ml_pipelines.ComponentInputsSpec + * @interface IParameterSpec + * @property {ml_pipelines.PrimitiveType.PrimitiveTypeEnum|null} [type] ParameterSpec type + */ + + /** + * Constructs a new ParameterSpec. + * @memberof ml_pipelines.ComponentInputsSpec + * @classdesc Represents a ParameterSpec. + * @implements IParameterSpec + * @constructor + * @param {ml_pipelines.ComponentInputsSpec.IParameterSpec=} [properties] Properties to set + */ + function ParameterSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ParameterSpec type. + * @member {ml_pipelines.PrimitiveType.PrimitiveTypeEnum} type + * @memberof ml_pipelines.ComponentInputsSpec.ParameterSpec + * @instance + */ + ParameterSpec.prototype.type = 0; + + /** + * Creates a new ParameterSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.ComponentInputsSpec.ParameterSpec + * @static + * @param {ml_pipelines.ComponentInputsSpec.IParameterSpec=} [properties] Properties to set + * @returns {ml_pipelines.ComponentInputsSpec.ParameterSpec} ParameterSpec instance + */ + ParameterSpec.create = function create(properties) { + return new ParameterSpec(properties); + }; + + /** + * Encodes the specified ParameterSpec message. Does not implicitly {@link ml_pipelines.ComponentInputsSpec.ParameterSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ComponentInputsSpec.ParameterSpec + * @static + * @param {ml_pipelines.ComponentInputsSpec.IParameterSpec} message ParameterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ParameterSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.type != null && Object.hasOwnProperty.call(message, "type")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type); + return writer; + }; + + /** + * Encodes the specified ParameterSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentInputsSpec.ParameterSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ComponentInputsSpec.ParameterSpec + * @static + * @param {ml_pipelines.ComponentInputsSpec.IParameterSpec} message ParameterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ParameterSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ParameterSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ComponentInputsSpec.ParameterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ComponentInputsSpec.ParameterSpec} ParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ParameterSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ComponentInputsSpec.ParameterSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.type = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ParameterSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ComponentInputsSpec.ParameterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ComponentInputsSpec.ParameterSpec} ParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ParameterSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ParameterSpec message. + * @function verify + * @memberof ml_pipelines.ComponentInputsSpec.ParameterSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ParameterSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.type != null && message.hasOwnProperty("type")) + switch (message.type) { + default: + return "type: enum value expected"; + case 0: + case 1: + case 2: + case 3: + break; + } + return null; + }; + + /** + * Creates a ParameterSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ComponentInputsSpec.ParameterSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ComponentInputsSpec.ParameterSpec} ParameterSpec + */ + ParameterSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ComponentInputsSpec.ParameterSpec) + return object; + var message = new $root.ml_pipelines.ComponentInputsSpec.ParameterSpec(); + switch (object.type) { + case "PRIMITIVE_TYPE_UNSPECIFIED": + case 0: + message.type = 0; + break; + case "INT": + case 1: + message.type = 1; + break; + case "DOUBLE": + case 2: + message.type = 2; + break; + case "STRING": + case 3: + message.type = 3; + break; + } + return message; + }; + + /** + * Creates a plain object from a ParameterSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ComponentInputsSpec.ParameterSpec + * @static + * @param {ml_pipelines.ComponentInputsSpec.ParameterSpec} message ParameterSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ParameterSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.type = options.enums === String ? "PRIMITIVE_TYPE_UNSPECIFIED" : 0; + if (message.type != null && message.hasOwnProperty("type")) + object.type = options.enums === String ? $root.ml_pipelines.PrimitiveType.PrimitiveTypeEnum[message.type] : message.type; + return object; + }; + + /** + * Converts this ParameterSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.ComponentInputsSpec.ParameterSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ParameterSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ParameterSpec; + })(); + + return ComponentInputsSpec; + })(); + + ml_pipelines.ComponentOutputsSpec = (function() { + + /** + * Properties of a ComponentOutputsSpec. + * @memberof ml_pipelines + * @interface IComponentOutputsSpec + * @property {Object.<string,ml_pipelines.ComponentOutputsSpec.IArtifactSpec>|null} [artifacts] ComponentOutputsSpec artifacts + * @property {Object.<string,ml_pipelines.ComponentOutputsSpec.IParameterSpec>|null} [parameters] ComponentOutputsSpec parameters + */ + + /** + * Constructs a new ComponentOutputsSpec. + * @memberof ml_pipelines + * @classdesc Represents a ComponentOutputsSpec. + * @implements IComponentOutputsSpec + * @constructor + * @param {ml_pipelines.IComponentOutputsSpec=} [properties] Properties to set + */ + function ComponentOutputsSpec(properties) { + this.artifacts = {}; + this.parameters = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ComponentOutputsSpec artifacts. + * @member {Object.<string,ml_pipelines.ComponentOutputsSpec.IArtifactSpec>} artifacts + * @memberof ml_pipelines.ComponentOutputsSpec + * @instance + */ + ComponentOutputsSpec.prototype.artifacts = $util.emptyObject; + + /** + * ComponentOutputsSpec parameters. + * @member {Object.<string,ml_pipelines.ComponentOutputsSpec.IParameterSpec>} parameters + * @memberof ml_pipelines.ComponentOutputsSpec + * @instance + */ + ComponentOutputsSpec.prototype.parameters = $util.emptyObject; + + /** + * Creates a new ComponentOutputsSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.ComponentOutputsSpec + * @static + * @param {ml_pipelines.IComponentOutputsSpec=} [properties] Properties to set + * @returns {ml_pipelines.ComponentOutputsSpec} ComponentOutputsSpec instance + */ + ComponentOutputsSpec.create = function create(properties) { + return new ComponentOutputsSpec(properties); + }; + + /** + * Encodes the specified ComponentOutputsSpec message. Does not implicitly {@link ml_pipelines.ComponentOutputsSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ComponentOutputsSpec + * @static + * @param {ml_pipelines.IComponentOutputsSpec} message ComponentOutputsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ComponentOutputsSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.artifacts != null && Object.hasOwnProperty.call(message, "artifacts")) + for (var keys = Object.keys(message.artifacts), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.encode(message.artifacts[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.parameters != null && Object.hasOwnProperty.call(message, "parameters")) + for (var keys = Object.keys(message.parameters), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ComponentOutputsSpec.ParameterSpec.encode(message.parameters[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + return writer; + }; + + /** + * Encodes the specified ComponentOutputsSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentOutputsSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ComponentOutputsSpec + * @static + * @param {ml_pipelines.IComponentOutputsSpec} message ComponentOutputsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ComponentOutputsSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ComponentOutputsSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ComponentOutputsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ComponentOutputsSpec} ComponentOutputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ComponentOutputsSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ComponentOutputsSpec(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (message.artifacts === $util.emptyObject) + message.artifacts = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.artifacts[key] = value; + break; + case 2: + if (message.parameters === $util.emptyObject) + message.parameters = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ComponentOutputsSpec.ParameterSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.parameters[key] = value; + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ComponentOutputsSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ComponentOutputsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ComponentOutputsSpec} ComponentOutputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ComponentOutputsSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ComponentOutputsSpec message. + * @function verify + * @memberof ml_pipelines.ComponentOutputsSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ComponentOutputsSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.artifacts != null && message.hasOwnProperty("artifacts")) { + if (!$util.isObject(message.artifacts)) + return "artifacts: object expected"; + var key = Object.keys(message.artifacts); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.verify(message.artifacts[key[i]]); + if (error) + return "artifacts." + error; + } + } + if (message.parameters != null && message.hasOwnProperty("parameters")) { + if (!$util.isObject(message.parameters)) + return "parameters: object expected"; + var key = Object.keys(message.parameters); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ComponentOutputsSpec.ParameterSpec.verify(message.parameters[key[i]]); + if (error) + return "parameters." + error; + } + } + return null; + }; + + /** + * Creates a ComponentOutputsSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ComponentOutputsSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ComponentOutputsSpec} ComponentOutputsSpec + */ + ComponentOutputsSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ComponentOutputsSpec) + return object; + var message = new $root.ml_pipelines.ComponentOutputsSpec(); + if (object.artifacts) { + if (typeof object.artifacts !== "object") + throw TypeError(".ml_pipelines.ComponentOutputsSpec.artifacts: object expected"); + message.artifacts = {}; + for (var keys = Object.keys(object.artifacts), i = 0; i < keys.length; ++i) { + if (typeof object.artifacts[keys[i]] !== "object") + throw TypeError(".ml_pipelines.ComponentOutputsSpec.artifacts: object expected"); + message.artifacts[keys[i]] = $root.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.fromObject(object.artifacts[keys[i]]); + } + } + if (object.parameters) { + if (typeof object.parameters !== "object") + throw TypeError(".ml_pipelines.ComponentOutputsSpec.parameters: object expected"); + message.parameters = {}; + for (var keys = Object.keys(object.parameters), i = 0; i < keys.length; ++i) { + if (typeof object.parameters[keys[i]] !== "object") + throw TypeError(".ml_pipelines.ComponentOutputsSpec.parameters: object expected"); + message.parameters[keys[i]] = $root.ml_pipelines.ComponentOutputsSpec.ParameterSpec.fromObject(object.parameters[keys[i]]); + } + } + return message; + }; + + /** + * Creates a plain object from a ComponentOutputsSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ComponentOutputsSpec + * @static + * @param {ml_pipelines.ComponentOutputsSpec} message ComponentOutputsSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ComponentOutputsSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) { + object.artifacts = {}; + object.parameters = {}; + } + var keys2; + if (message.artifacts && (keys2 = Object.keys(message.artifacts)).length) { + object.artifacts = {}; + for (var j = 0; j < keys2.length; ++j) + object.artifacts[keys2[j]] = $root.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.toObject(message.artifacts[keys2[j]], options); + } + if (message.parameters && (keys2 = Object.keys(message.parameters)).length) { + object.parameters = {}; + for (var j = 0; j < keys2.length; ++j) + object.parameters[keys2[j]] = $root.ml_pipelines.ComponentOutputsSpec.ParameterSpec.toObject(message.parameters[keys2[j]], options); + } + return object; + }; + + /** + * Converts this ComponentOutputsSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.ComponentOutputsSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ComponentOutputsSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ComponentOutputsSpec.ArtifactSpec = (function() { + + /** + * Properties of an ArtifactSpec. + * @memberof ml_pipelines.ComponentOutputsSpec + * @interface IArtifactSpec + * @property {ml_pipelines.IArtifactTypeSchema|null} [artifactType] ArtifactSpec artifactType + * @property {Object.<string,ml_pipelines.IValueOrRuntimeParameter>|null} [properties] ArtifactSpec properties + * @property {Object.<string,ml_pipelines.IValueOrRuntimeParameter>|null} [customProperties] ArtifactSpec customProperties + * @property {google.protobuf.IStruct|null} [metadata] ArtifactSpec metadata + */ + + /** + * Constructs a new ArtifactSpec. + * @memberof ml_pipelines.ComponentOutputsSpec + * @classdesc Represents an ArtifactSpec. + * @implements IArtifactSpec + * @constructor + * @param {ml_pipelines.ComponentOutputsSpec.IArtifactSpec=} [properties] Properties to set + */ + function ArtifactSpec(properties) { + this.properties = {}; + this.customProperties = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ArtifactSpec artifactType. + * @member {ml_pipelines.IArtifactTypeSchema|null|undefined} artifactType + * @memberof ml_pipelines.ComponentOutputsSpec.ArtifactSpec + * @instance + */ + ArtifactSpec.prototype.artifactType = null; + + /** + * ArtifactSpec properties. + * @member {Object.<string,ml_pipelines.IValueOrRuntimeParameter>} properties + * @memberof ml_pipelines.ComponentOutputsSpec.ArtifactSpec + * @instance + */ + ArtifactSpec.prototype.properties = $util.emptyObject; + + /** + * ArtifactSpec customProperties. + * @member {Object.<string,ml_pipelines.IValueOrRuntimeParameter>} customProperties + * @memberof ml_pipelines.ComponentOutputsSpec.ArtifactSpec + * @instance + */ + ArtifactSpec.prototype.customProperties = $util.emptyObject; + + /** + * ArtifactSpec metadata. + * @member {google.protobuf.IStruct|null|undefined} metadata + * @memberof ml_pipelines.ComponentOutputsSpec.ArtifactSpec + * @instance + */ + ArtifactSpec.prototype.metadata = null; + + /** + * Creates a new ArtifactSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.ComponentOutputsSpec.ArtifactSpec + * @static + * @param {ml_pipelines.ComponentOutputsSpec.IArtifactSpec=} [properties] Properties to set + * @returns {ml_pipelines.ComponentOutputsSpec.ArtifactSpec} ArtifactSpec instance + */ + ArtifactSpec.create = function create(properties) { + return new ArtifactSpec(properties); + }; + + /** + * Encodes the specified ArtifactSpec message. Does not implicitly {@link ml_pipelines.ComponentOutputsSpec.ArtifactSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ComponentOutputsSpec.ArtifactSpec + * @static + * @param {ml_pipelines.ComponentOutputsSpec.IArtifactSpec} message ArtifactSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.artifactType != null && Object.hasOwnProperty.call(message, "artifactType")) + $root.ml_pipelines.ArtifactTypeSchema.encode(message.artifactType, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.properties != null && Object.hasOwnProperty.call(message, "properties")) + for (var keys = Object.keys(message.properties), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ValueOrRuntimeParameter.encode(message.properties[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.customProperties != null && Object.hasOwnProperty.call(message, "customProperties")) + for (var keys = Object.keys(message.customProperties), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 3, wireType 2 =*/26).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ValueOrRuntimeParameter.encode(message.customProperties[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.metadata != null && Object.hasOwnProperty.call(message, "metadata")) + $root.google.protobuf.Struct.encode(message.metadata, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ArtifactSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentOutputsSpec.ArtifactSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ComponentOutputsSpec.ArtifactSpec + * @static + * @param {ml_pipelines.ComponentOutputsSpec.IArtifactSpec} message ArtifactSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ArtifactSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ComponentOutputsSpec.ArtifactSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ComponentOutputsSpec.ArtifactSpec} ArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ComponentOutputsSpec.ArtifactSpec(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.artifactType = $root.ml_pipelines.ArtifactTypeSchema.decode(reader, reader.uint32()); + break; + case 2: + if (message.properties === $util.emptyObject) + message.properties = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ValueOrRuntimeParameter.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.properties[key] = value; + break; + case 3: + if (message.customProperties === $util.emptyObject) + message.customProperties = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ValueOrRuntimeParameter.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.customProperties[key] = value; + break; + case 4: + message.metadata = $root.google.protobuf.Struct.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ArtifactSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ComponentOutputsSpec.ArtifactSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ComponentOutputsSpec.ArtifactSpec} ArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ArtifactSpec message. + * @function verify + * @memberof ml_pipelines.ComponentOutputsSpec.ArtifactSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ArtifactSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.artifactType != null && message.hasOwnProperty("artifactType")) { + var error = $root.ml_pipelines.ArtifactTypeSchema.verify(message.artifactType); + if (error) + return "artifactType." + error; + } + if (message.properties != null && message.hasOwnProperty("properties")) { + if (!$util.isObject(message.properties)) + return "properties: object expected"; + var key = Object.keys(message.properties); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ValueOrRuntimeParameter.verify(message.properties[key[i]]); + if (error) + return "properties." + error; + } + } + if (message.customProperties != null && message.hasOwnProperty("customProperties")) { + if (!$util.isObject(message.customProperties)) + return "customProperties: object expected"; + var key = Object.keys(message.customProperties); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ValueOrRuntimeParameter.verify(message.customProperties[key[i]]); + if (error) + return "customProperties." + error; + } + } + if (message.metadata != null && message.hasOwnProperty("metadata")) { + var error = $root.google.protobuf.Struct.verify(message.metadata); + if (error) + return "metadata." + error; + } + return null; + }; + + /** + * Creates an ArtifactSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ComponentOutputsSpec.ArtifactSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ComponentOutputsSpec.ArtifactSpec} ArtifactSpec + */ + ArtifactSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ComponentOutputsSpec.ArtifactSpec) + return object; + var message = new $root.ml_pipelines.ComponentOutputsSpec.ArtifactSpec(); + if (object.artifactType != null) { + if (typeof object.artifactType !== "object") + throw TypeError(".ml_pipelines.ComponentOutputsSpec.ArtifactSpec.artifactType: object expected"); + message.artifactType = $root.ml_pipelines.ArtifactTypeSchema.fromObject(object.artifactType); + } + if (object.properties) { + if (typeof object.properties !== "object") + throw TypeError(".ml_pipelines.ComponentOutputsSpec.ArtifactSpec.properties: object expected"); + message.properties = {}; + for (var keys = Object.keys(object.properties), i = 0; i < keys.length; ++i) { + if (typeof object.properties[keys[i]] !== "object") + throw TypeError(".ml_pipelines.ComponentOutputsSpec.ArtifactSpec.properties: object expected"); + message.properties[keys[i]] = $root.ml_pipelines.ValueOrRuntimeParameter.fromObject(object.properties[keys[i]]); + } + } + if (object.customProperties) { + if (typeof object.customProperties !== "object") + throw TypeError(".ml_pipelines.ComponentOutputsSpec.ArtifactSpec.customProperties: object expected"); + message.customProperties = {}; + for (var keys = Object.keys(object.customProperties), i = 0; i < keys.length; ++i) { + if (typeof object.customProperties[keys[i]] !== "object") + throw TypeError(".ml_pipelines.ComponentOutputsSpec.ArtifactSpec.customProperties: object expected"); + message.customProperties[keys[i]] = $root.ml_pipelines.ValueOrRuntimeParameter.fromObject(object.customProperties[keys[i]]); + } + } + if (object.metadata != null) { + if (typeof object.metadata !== "object") + throw TypeError(".ml_pipelines.ComponentOutputsSpec.ArtifactSpec.metadata: object expected"); + message.metadata = $root.google.protobuf.Struct.fromObject(object.metadata); + } + return message; + }; + + /** + * Creates a plain object from an ArtifactSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ComponentOutputsSpec.ArtifactSpec + * @static + * @param {ml_pipelines.ComponentOutputsSpec.ArtifactSpec} message ArtifactSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ArtifactSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) { + object.properties = {}; + object.customProperties = {}; + } + if (options.defaults) { + object.artifactType = null; + object.metadata = null; + } + if (message.artifactType != null && message.hasOwnProperty("artifactType")) + object.artifactType = $root.ml_pipelines.ArtifactTypeSchema.toObject(message.artifactType, options); + var keys2; + if (message.properties && (keys2 = Object.keys(message.properties)).length) { + object.properties = {}; + for (var j = 0; j < keys2.length; ++j) + object.properties[keys2[j]] = $root.ml_pipelines.ValueOrRuntimeParameter.toObject(message.properties[keys2[j]], options); + } + if (message.customProperties && (keys2 = Object.keys(message.customProperties)).length) { + object.customProperties = {}; + for (var j = 0; j < keys2.length; ++j) + object.customProperties[keys2[j]] = $root.ml_pipelines.ValueOrRuntimeParameter.toObject(message.customProperties[keys2[j]], options); + } + if (message.metadata != null && message.hasOwnProperty("metadata")) + object.metadata = $root.google.protobuf.Struct.toObject(message.metadata, options); + return object; + }; + + /** + * Converts this ArtifactSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.ComponentOutputsSpec.ArtifactSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ArtifactSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ArtifactSpec; + })(); + + ComponentOutputsSpec.ParameterSpec = (function() { + + /** + * Properties of a ParameterSpec. + * @memberof ml_pipelines.ComponentOutputsSpec + * @interface IParameterSpec + * @property {ml_pipelines.PrimitiveType.PrimitiveTypeEnum|null} [type] ParameterSpec type + */ + + /** + * Constructs a new ParameterSpec. + * @memberof ml_pipelines.ComponentOutputsSpec + * @classdesc Represents a ParameterSpec. + * @implements IParameterSpec + * @constructor + * @param {ml_pipelines.ComponentOutputsSpec.IParameterSpec=} [properties] Properties to set + */ + function ParameterSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ParameterSpec type. + * @member {ml_pipelines.PrimitiveType.PrimitiveTypeEnum} type + * @memberof ml_pipelines.ComponentOutputsSpec.ParameterSpec + * @instance + */ + ParameterSpec.prototype.type = 0; + + /** + * Creates a new ParameterSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.ComponentOutputsSpec.ParameterSpec + * @static + * @param {ml_pipelines.ComponentOutputsSpec.IParameterSpec=} [properties] Properties to set + * @returns {ml_pipelines.ComponentOutputsSpec.ParameterSpec} ParameterSpec instance + */ + ParameterSpec.create = function create(properties) { + return new ParameterSpec(properties); + }; + + /** + * Encodes the specified ParameterSpec message. Does not implicitly {@link ml_pipelines.ComponentOutputsSpec.ParameterSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ComponentOutputsSpec.ParameterSpec + * @static + * @param {ml_pipelines.ComponentOutputsSpec.IParameterSpec} message ParameterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ParameterSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.type != null && Object.hasOwnProperty.call(message, "type")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type); + return writer; + }; + + /** + * Encodes the specified ParameterSpec message, length delimited. Does not implicitly {@link ml_pipelines.ComponentOutputsSpec.ParameterSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ComponentOutputsSpec.ParameterSpec + * @static + * @param {ml_pipelines.ComponentOutputsSpec.IParameterSpec} message ParameterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ParameterSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ParameterSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ComponentOutputsSpec.ParameterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ComponentOutputsSpec.ParameterSpec} ParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ParameterSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ComponentOutputsSpec.ParameterSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.type = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ParameterSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ComponentOutputsSpec.ParameterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ComponentOutputsSpec.ParameterSpec} ParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ParameterSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ParameterSpec message. + * @function verify + * @memberof ml_pipelines.ComponentOutputsSpec.ParameterSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ParameterSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.type != null && message.hasOwnProperty("type")) + switch (message.type) { + default: + return "type: enum value expected"; + case 0: + case 1: + case 2: + case 3: + break; + } + return null; + }; + + /** + * Creates a ParameterSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ComponentOutputsSpec.ParameterSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ComponentOutputsSpec.ParameterSpec} ParameterSpec + */ + ParameterSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ComponentOutputsSpec.ParameterSpec) + return object; + var message = new $root.ml_pipelines.ComponentOutputsSpec.ParameterSpec(); + switch (object.type) { + case "PRIMITIVE_TYPE_UNSPECIFIED": + case 0: + message.type = 0; + break; + case "INT": + case 1: + message.type = 1; + break; + case "DOUBLE": + case 2: + message.type = 2; + break; + case "STRING": + case 3: + message.type = 3; + break; + } + return message; + }; + + /** + * Creates a plain object from a ParameterSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ComponentOutputsSpec.ParameterSpec + * @static + * @param {ml_pipelines.ComponentOutputsSpec.ParameterSpec} message ParameterSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ParameterSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.type = options.enums === String ? "PRIMITIVE_TYPE_UNSPECIFIED" : 0; + if (message.type != null && message.hasOwnProperty("type")) + object.type = options.enums === String ? $root.ml_pipelines.PrimitiveType.PrimitiveTypeEnum[message.type] : message.type; + return object; + }; + + /** + * Converts this ParameterSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.ComponentOutputsSpec.ParameterSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ParameterSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ParameterSpec; + })(); + + return ComponentOutputsSpec; + })(); + + ml_pipelines.TaskInputsSpec = (function() { + + /** + * Properties of a TaskInputsSpec. + * @memberof ml_pipelines + * @interface ITaskInputsSpec + * @property {Object.<string,ml_pipelines.TaskInputsSpec.IInputParameterSpec>|null} [parameters] TaskInputsSpec parameters + * @property {Object.<string,ml_pipelines.TaskInputsSpec.IInputArtifactSpec>|null} [artifacts] TaskInputsSpec artifacts + */ + + /** + * Constructs a new TaskInputsSpec. + * @memberof ml_pipelines + * @classdesc Represents a TaskInputsSpec. + * @implements ITaskInputsSpec + * @constructor + * @param {ml_pipelines.ITaskInputsSpec=} [properties] Properties to set + */ + function TaskInputsSpec(properties) { + this.parameters = {}; + this.artifacts = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TaskInputsSpec parameters. + * @member {Object.<string,ml_pipelines.TaskInputsSpec.IInputParameterSpec>} parameters + * @memberof ml_pipelines.TaskInputsSpec + * @instance + */ + TaskInputsSpec.prototype.parameters = $util.emptyObject; + + /** + * TaskInputsSpec artifacts. + * @member {Object.<string,ml_pipelines.TaskInputsSpec.IInputArtifactSpec>} artifacts + * @memberof ml_pipelines.TaskInputsSpec + * @instance + */ + TaskInputsSpec.prototype.artifacts = $util.emptyObject; + + /** + * Creates a new TaskInputsSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.TaskInputsSpec + * @static + * @param {ml_pipelines.ITaskInputsSpec=} [properties] Properties to set + * @returns {ml_pipelines.TaskInputsSpec} TaskInputsSpec instance + */ + TaskInputsSpec.create = function create(properties) { + return new TaskInputsSpec(properties); + }; + + /** + * Encodes the specified TaskInputsSpec message. Does not implicitly {@link ml_pipelines.TaskInputsSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.TaskInputsSpec + * @static + * @param {ml_pipelines.ITaskInputsSpec} message TaskInputsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TaskInputsSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.parameters != null && Object.hasOwnProperty.call(message, "parameters")) + for (var keys = Object.keys(message.parameters), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.encode(message.parameters[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.artifacts != null && Object.hasOwnProperty.call(message, "artifacts")) + for (var keys = Object.keys(message.artifacts), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec.encode(message.artifacts[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + return writer; + }; + + /** + * Encodes the specified TaskInputsSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskInputsSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.TaskInputsSpec + * @static + * @param {ml_pipelines.ITaskInputsSpec} message TaskInputsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TaskInputsSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TaskInputsSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.TaskInputsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.TaskInputsSpec} TaskInputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TaskInputsSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.TaskInputsSpec(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (message.parameters === $util.emptyObject) + message.parameters = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.parameters[key] = value; + break; + case 2: + if (message.artifacts === $util.emptyObject) + message.artifacts = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.artifacts[key] = value; + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TaskInputsSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.TaskInputsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.TaskInputsSpec} TaskInputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TaskInputsSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TaskInputsSpec message. + * @function verify + * @memberof ml_pipelines.TaskInputsSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TaskInputsSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.parameters != null && message.hasOwnProperty("parameters")) { + if (!$util.isObject(message.parameters)) + return "parameters: object expected"; + var key = Object.keys(message.parameters); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.verify(message.parameters[key[i]]); + if (error) + return "parameters." + error; + } + } + if (message.artifacts != null && message.hasOwnProperty("artifacts")) { + if (!$util.isObject(message.artifacts)) + return "artifacts: object expected"; + var key = Object.keys(message.artifacts); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec.verify(message.artifacts[key[i]]); + if (error) + return "artifacts." + error; + } + } + return null; + }; + + /** + * Creates a TaskInputsSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.TaskInputsSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.TaskInputsSpec} TaskInputsSpec + */ + TaskInputsSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.TaskInputsSpec) + return object; + var message = new $root.ml_pipelines.TaskInputsSpec(); + if (object.parameters) { + if (typeof object.parameters !== "object") + throw TypeError(".ml_pipelines.TaskInputsSpec.parameters: object expected"); + message.parameters = {}; + for (var keys = Object.keys(object.parameters), i = 0; i < keys.length; ++i) { + if (typeof object.parameters[keys[i]] !== "object") + throw TypeError(".ml_pipelines.TaskInputsSpec.parameters: object expected"); + message.parameters[keys[i]] = $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.fromObject(object.parameters[keys[i]]); + } + } + if (object.artifacts) { + if (typeof object.artifacts !== "object") + throw TypeError(".ml_pipelines.TaskInputsSpec.artifacts: object expected"); + message.artifacts = {}; + for (var keys = Object.keys(object.artifacts), i = 0; i < keys.length; ++i) { + if (typeof object.artifacts[keys[i]] !== "object") + throw TypeError(".ml_pipelines.TaskInputsSpec.artifacts: object expected"); + message.artifacts[keys[i]] = $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec.fromObject(object.artifacts[keys[i]]); + } + } + return message; + }; + + /** + * Creates a plain object from a TaskInputsSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.TaskInputsSpec + * @static + * @param {ml_pipelines.TaskInputsSpec} message TaskInputsSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + TaskInputsSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) { + object.parameters = {}; + object.artifacts = {}; + } + var keys2; + if (message.parameters && (keys2 = Object.keys(message.parameters)).length) { + object.parameters = {}; + for (var j = 0; j < keys2.length; ++j) + object.parameters[keys2[j]] = $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.toObject(message.parameters[keys2[j]], options); + } + if (message.artifacts && (keys2 = Object.keys(message.artifacts)).length) { + object.artifacts = {}; + for (var j = 0; j < keys2.length; ++j) + object.artifacts[keys2[j]] = $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec.toObject(message.artifacts[keys2[j]], options); + } + return object; + }; + + /** + * Converts this TaskInputsSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.TaskInputsSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + TaskInputsSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + TaskInputsSpec.InputArtifactSpec = (function() { + + /** + * Properties of an InputArtifactSpec. + * @memberof ml_pipelines.TaskInputsSpec + * @interface IInputArtifactSpec + * @property {ml_pipelines.TaskInputsSpec.InputArtifactSpec.ITaskOutputArtifactSpec|null} [taskOutputArtifact] InputArtifactSpec taskOutputArtifact + * @property {string|null} [componentInputArtifact] InputArtifactSpec componentInputArtifact + */ + + /** + * Constructs a new InputArtifactSpec. + * @memberof ml_pipelines.TaskInputsSpec + * @classdesc Represents an InputArtifactSpec. + * @implements IInputArtifactSpec + * @constructor + * @param {ml_pipelines.TaskInputsSpec.IInputArtifactSpec=} [properties] Properties to set + */ + function InputArtifactSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * InputArtifactSpec taskOutputArtifact. + * @member {ml_pipelines.TaskInputsSpec.InputArtifactSpec.ITaskOutputArtifactSpec|null|undefined} taskOutputArtifact + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @instance + */ + InputArtifactSpec.prototype.taskOutputArtifact = null; + + /** + * InputArtifactSpec componentInputArtifact. + * @member {string|null|undefined} componentInputArtifact + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @instance + */ + InputArtifactSpec.prototype.componentInputArtifact = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * InputArtifactSpec kind. + * @member {"taskOutputArtifact"|"componentInputArtifact"|undefined} kind + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @instance + */ + Object.defineProperty(InputArtifactSpec.prototype, "kind", { + get: $util.oneOfGetter($oneOfFields = ["taskOutputArtifact", "componentInputArtifact"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new InputArtifactSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.IInputArtifactSpec=} [properties] Properties to set + * @returns {ml_pipelines.TaskInputsSpec.InputArtifactSpec} InputArtifactSpec instance + */ + InputArtifactSpec.create = function create(properties) { + return new InputArtifactSpec(properties); + }; + + /** + * Encodes the specified InputArtifactSpec message. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputArtifactSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.IInputArtifactSpec} message InputArtifactSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + InputArtifactSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.taskOutputArtifact != null && Object.hasOwnProperty.call(message, "taskOutputArtifact")) + $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.encode(message.taskOutputArtifact, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.componentInputArtifact != null && Object.hasOwnProperty.call(message, "componentInputArtifact")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.componentInputArtifact); + return writer; + }; + + /** + * Encodes the specified InputArtifactSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputArtifactSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.IInputArtifactSpec} message InputArtifactSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + InputArtifactSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an InputArtifactSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.TaskInputsSpec.InputArtifactSpec} InputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + InputArtifactSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 3: + message.taskOutputArtifact = $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.decode(reader, reader.uint32()); + break; + case 4: + message.componentInputArtifact = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an InputArtifactSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.TaskInputsSpec.InputArtifactSpec} InputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + InputArtifactSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an InputArtifactSpec message. + * @function verify + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + InputArtifactSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.taskOutputArtifact != null && message.hasOwnProperty("taskOutputArtifact")) { + properties.kind = 1; + { + var error = $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.verify(message.taskOutputArtifact); + if (error) + return "taskOutputArtifact." + error; + } + } + if (message.componentInputArtifact != null && message.hasOwnProperty("componentInputArtifact")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + if (!$util.isString(message.componentInputArtifact)) + return "componentInputArtifact: string expected"; + } + return null; + }; + + /** + * Creates an InputArtifactSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.TaskInputsSpec.InputArtifactSpec} InputArtifactSpec + */ + InputArtifactSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec) + return object; + var message = new $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec(); + if (object.taskOutputArtifact != null) { + if (typeof object.taskOutputArtifact !== "object") + throw TypeError(".ml_pipelines.TaskInputsSpec.InputArtifactSpec.taskOutputArtifact: object expected"); + message.taskOutputArtifact = $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.fromObject(object.taskOutputArtifact); + } + if (object.componentInputArtifact != null) + message.componentInputArtifact = String(object.componentInputArtifact); + return message; + }; + + /** + * Creates a plain object from an InputArtifactSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.InputArtifactSpec} message InputArtifactSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + InputArtifactSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (message.taskOutputArtifact != null && message.hasOwnProperty("taskOutputArtifact")) { + object.taskOutputArtifact = $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.toObject(message.taskOutputArtifact, options); + if (options.oneofs) + object.kind = "taskOutputArtifact"; + } + if (message.componentInputArtifact != null && message.hasOwnProperty("componentInputArtifact")) { + object.componentInputArtifact = message.componentInputArtifact; + if (options.oneofs) + object.kind = "componentInputArtifact"; + } + return object; + }; + + /** + * Converts this InputArtifactSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + InputArtifactSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InputArtifactSpec.TaskOutputArtifactSpec = (function() { + + /** + * Properties of a TaskOutputArtifactSpec. + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @interface ITaskOutputArtifactSpec + * @property {string|null} [producerTask] TaskOutputArtifactSpec producerTask + * @property {string|null} [outputArtifactKey] TaskOutputArtifactSpec outputArtifactKey + */ + + /** + * Constructs a new TaskOutputArtifactSpec. + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec + * @classdesc Represents a TaskOutputArtifactSpec. + * @implements ITaskOutputArtifactSpec + * @constructor + * @param {ml_pipelines.TaskInputsSpec.InputArtifactSpec.ITaskOutputArtifactSpec=} [properties] Properties to set + */ + function TaskOutputArtifactSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TaskOutputArtifactSpec producerTask. + * @member {string} producerTask + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec + * @instance + */ + TaskOutputArtifactSpec.prototype.producerTask = ""; + + /** + * TaskOutputArtifactSpec outputArtifactKey. + * @member {string} outputArtifactKey + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec + * @instance + */ + TaskOutputArtifactSpec.prototype.outputArtifactKey = ""; + + /** + * Creates a new TaskOutputArtifactSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.InputArtifactSpec.ITaskOutputArtifactSpec=} [properties] Properties to set + * @returns {ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} TaskOutputArtifactSpec instance + */ + TaskOutputArtifactSpec.create = function create(properties) { + return new TaskOutputArtifactSpec(properties); + }; + + /** + * Encodes the specified TaskOutputArtifactSpec message. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.InputArtifactSpec.ITaskOutputArtifactSpec} message TaskOutputArtifactSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TaskOutputArtifactSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.producerTask != null && Object.hasOwnProperty.call(message, "producerTask")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.producerTask); + if (message.outputArtifactKey != null && Object.hasOwnProperty.call(message, "outputArtifactKey")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.outputArtifactKey); + return writer; + }; + + /** + * Encodes the specified TaskOutputArtifactSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.InputArtifactSpec.ITaskOutputArtifactSpec} message TaskOutputArtifactSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TaskOutputArtifactSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TaskOutputArtifactSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} TaskOutputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TaskOutputArtifactSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.producerTask = reader.string(); + break; + case 2: + message.outputArtifactKey = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TaskOutputArtifactSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} TaskOutputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TaskOutputArtifactSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TaskOutputArtifactSpec message. + * @function verify + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TaskOutputArtifactSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.producerTask != null && message.hasOwnProperty("producerTask")) + if (!$util.isString(message.producerTask)) + return "producerTask: string expected"; + if (message.outputArtifactKey != null && message.hasOwnProperty("outputArtifactKey")) + if (!$util.isString(message.outputArtifactKey)) + return "outputArtifactKey: string expected"; + return null; + }; + + /** + * Creates a TaskOutputArtifactSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} TaskOutputArtifactSpec + */ + TaskOutputArtifactSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec) + return object; + var message = new $root.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec(); + if (object.producerTask != null) + message.producerTask = String(object.producerTask); + if (object.outputArtifactKey != null) + message.outputArtifactKey = String(object.outputArtifactKey); + return message; + }; + + /** + * Creates a plain object from a TaskOutputArtifactSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} message TaskOutputArtifactSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + TaskOutputArtifactSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.producerTask = ""; + object.outputArtifactKey = ""; + } + if (message.producerTask != null && message.hasOwnProperty("producerTask")) + object.producerTask = message.producerTask; + if (message.outputArtifactKey != null && message.hasOwnProperty("outputArtifactKey")) + object.outputArtifactKey = message.outputArtifactKey; + return object; + }; + + /** + * Converts this TaskOutputArtifactSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + TaskOutputArtifactSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TaskOutputArtifactSpec; + })(); + + return InputArtifactSpec; + })(); + + TaskInputsSpec.InputParameterSpec = (function() { + + /** + * Properties of an InputParameterSpec. + * @memberof ml_pipelines.TaskInputsSpec + * @interface IInputParameterSpec + * @property {ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskOutputParameterSpec|null} [taskOutputParameter] InputParameterSpec taskOutputParameter + * @property {ml_pipelines.IValueOrRuntimeParameter|null} [runtimeValue] InputParameterSpec runtimeValue + * @property {string|null} [componentInputParameter] InputParameterSpec componentInputParameter + * @property {ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskFinalStatus|null} [taskFinalStatus] InputParameterSpec taskFinalStatus + * @property {string|null} [parameterExpressionSelector] InputParameterSpec parameterExpressionSelector + */ + + /** + * Constructs a new InputParameterSpec. + * @memberof ml_pipelines.TaskInputsSpec + * @classdesc Represents an InputParameterSpec. + * @implements IInputParameterSpec + * @constructor + * @param {ml_pipelines.TaskInputsSpec.IInputParameterSpec=} [properties] Properties to set + */ + function InputParameterSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * InputParameterSpec taskOutputParameter. + * @member {ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskOutputParameterSpec|null|undefined} taskOutputParameter + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @instance + */ + InputParameterSpec.prototype.taskOutputParameter = null; + + /** + * InputParameterSpec runtimeValue. + * @member {ml_pipelines.IValueOrRuntimeParameter|null|undefined} runtimeValue + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @instance + */ + InputParameterSpec.prototype.runtimeValue = null; + + /** + * InputParameterSpec componentInputParameter. + * @member {string|null|undefined} componentInputParameter + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @instance + */ + InputParameterSpec.prototype.componentInputParameter = null; + + /** + * InputParameterSpec taskFinalStatus. + * @member {ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskFinalStatus|null|undefined} taskFinalStatus + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @instance + */ + InputParameterSpec.prototype.taskFinalStatus = null; + + /** + * InputParameterSpec parameterExpressionSelector. + * @member {string} parameterExpressionSelector + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @instance + */ + InputParameterSpec.prototype.parameterExpressionSelector = ""; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * InputParameterSpec kind. + * @member {"taskOutputParameter"|"runtimeValue"|"componentInputParameter"|"taskFinalStatus"|undefined} kind + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @instance + */ + Object.defineProperty(InputParameterSpec.prototype, "kind", { + get: $util.oneOfGetter($oneOfFields = ["taskOutputParameter", "runtimeValue", "componentInputParameter", "taskFinalStatus"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new InputParameterSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.IInputParameterSpec=} [properties] Properties to set + * @returns {ml_pipelines.TaskInputsSpec.InputParameterSpec} InputParameterSpec instance + */ + InputParameterSpec.create = function create(properties) { + return new InputParameterSpec(properties); + }; + + /** + * Encodes the specified InputParameterSpec message. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputParameterSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.IInputParameterSpec} message InputParameterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + InputParameterSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.taskOutputParameter != null && Object.hasOwnProperty.call(message, "taskOutputParameter")) + $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.encode(message.taskOutputParameter, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.runtimeValue != null && Object.hasOwnProperty.call(message, "runtimeValue")) + $root.ml_pipelines.ValueOrRuntimeParameter.encode(message.runtimeValue, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.componentInputParameter != null && Object.hasOwnProperty.call(message, "componentInputParameter")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.componentInputParameter); + if (message.parameterExpressionSelector != null && Object.hasOwnProperty.call(message, "parameterExpressionSelector")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.parameterExpressionSelector); + if (message.taskFinalStatus != null && Object.hasOwnProperty.call(message, "taskFinalStatus")) + $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.encode(message.taskFinalStatus, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified InputParameterSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputParameterSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.IInputParameterSpec} message InputParameterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + InputParameterSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an InputParameterSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.TaskInputsSpec.InputParameterSpec} InputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + InputParameterSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.TaskInputsSpec.InputParameterSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.taskOutputParameter = $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.decode(reader, reader.uint32()); + break; + case 2: + message.runtimeValue = $root.ml_pipelines.ValueOrRuntimeParameter.decode(reader, reader.uint32()); + break; + case 3: + message.componentInputParameter = reader.string(); + break; + case 5: + message.taskFinalStatus = $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.decode(reader, reader.uint32()); + break; + case 4: + message.parameterExpressionSelector = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an InputParameterSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.TaskInputsSpec.InputParameterSpec} InputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + InputParameterSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an InputParameterSpec message. + * @function verify + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + InputParameterSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.taskOutputParameter != null && message.hasOwnProperty("taskOutputParameter")) { + properties.kind = 1; + { + var error = $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.verify(message.taskOutputParameter); + if (error) + return "taskOutputParameter." + error; + } + } + if (message.runtimeValue != null && message.hasOwnProperty("runtimeValue")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + { + var error = $root.ml_pipelines.ValueOrRuntimeParameter.verify(message.runtimeValue); + if (error) + return "runtimeValue." + error; + } + } + if (message.componentInputParameter != null && message.hasOwnProperty("componentInputParameter")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + if (!$util.isString(message.componentInputParameter)) + return "componentInputParameter: string expected"; + } + if (message.taskFinalStatus != null && message.hasOwnProperty("taskFinalStatus")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + { + var error = $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.verify(message.taskFinalStatus); + if (error) + return "taskFinalStatus." + error; + } + } + if (message.parameterExpressionSelector != null && message.hasOwnProperty("parameterExpressionSelector")) + if (!$util.isString(message.parameterExpressionSelector)) + return "parameterExpressionSelector: string expected"; + return null; + }; + + /** + * Creates an InputParameterSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.TaskInputsSpec.InputParameterSpec} InputParameterSpec + */ + InputParameterSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.TaskInputsSpec.InputParameterSpec) + return object; + var message = new $root.ml_pipelines.TaskInputsSpec.InputParameterSpec(); + if (object.taskOutputParameter != null) { + if (typeof object.taskOutputParameter !== "object") + throw TypeError(".ml_pipelines.TaskInputsSpec.InputParameterSpec.taskOutputParameter: object expected"); + message.taskOutputParameter = $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.fromObject(object.taskOutputParameter); + } + if (object.runtimeValue != null) { + if (typeof object.runtimeValue !== "object") + throw TypeError(".ml_pipelines.TaskInputsSpec.InputParameterSpec.runtimeValue: object expected"); + message.runtimeValue = $root.ml_pipelines.ValueOrRuntimeParameter.fromObject(object.runtimeValue); + } + if (object.componentInputParameter != null) + message.componentInputParameter = String(object.componentInputParameter); + if (object.taskFinalStatus != null) { + if (typeof object.taskFinalStatus !== "object") + throw TypeError(".ml_pipelines.TaskInputsSpec.InputParameterSpec.taskFinalStatus: object expected"); + message.taskFinalStatus = $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.fromObject(object.taskFinalStatus); + } + if (object.parameterExpressionSelector != null) + message.parameterExpressionSelector = String(object.parameterExpressionSelector); + return message; + }; + + /** + * Creates a plain object from an InputParameterSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.InputParameterSpec} message InputParameterSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + InputParameterSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.parameterExpressionSelector = ""; + if (message.taskOutputParameter != null && message.hasOwnProperty("taskOutputParameter")) { + object.taskOutputParameter = $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.toObject(message.taskOutputParameter, options); + if (options.oneofs) + object.kind = "taskOutputParameter"; + } + if (message.runtimeValue != null && message.hasOwnProperty("runtimeValue")) { + object.runtimeValue = $root.ml_pipelines.ValueOrRuntimeParameter.toObject(message.runtimeValue, options); + if (options.oneofs) + object.kind = "runtimeValue"; + } + if (message.componentInputParameter != null && message.hasOwnProperty("componentInputParameter")) { + object.componentInputParameter = message.componentInputParameter; + if (options.oneofs) + object.kind = "componentInputParameter"; + } + if (message.parameterExpressionSelector != null && message.hasOwnProperty("parameterExpressionSelector")) + object.parameterExpressionSelector = message.parameterExpressionSelector; + if (message.taskFinalStatus != null && message.hasOwnProperty("taskFinalStatus")) { + object.taskFinalStatus = $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.toObject(message.taskFinalStatus, options); + if (options.oneofs) + object.kind = "taskFinalStatus"; + } + return object; + }; + + /** + * Converts this InputParameterSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + InputParameterSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InputParameterSpec.TaskOutputParameterSpec = (function() { + + /** + * Properties of a TaskOutputParameterSpec. + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @interface ITaskOutputParameterSpec + * @property {string|null} [producerTask] TaskOutputParameterSpec producerTask + * @property {string|null} [outputParameterKey] TaskOutputParameterSpec outputParameterKey + */ + + /** + * Constructs a new TaskOutputParameterSpec. + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @classdesc Represents a TaskOutputParameterSpec. + * @implements ITaskOutputParameterSpec + * @constructor + * @param {ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskOutputParameterSpec=} [properties] Properties to set + */ + function TaskOutputParameterSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TaskOutputParameterSpec producerTask. + * @member {string} producerTask + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec + * @instance + */ + TaskOutputParameterSpec.prototype.producerTask = ""; + + /** + * TaskOutputParameterSpec outputParameterKey. + * @member {string} outputParameterKey + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec + * @instance + */ + TaskOutputParameterSpec.prototype.outputParameterKey = ""; + + /** + * Creates a new TaskOutputParameterSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskOutputParameterSpec=} [properties] Properties to set + * @returns {ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} TaskOutputParameterSpec instance + */ + TaskOutputParameterSpec.create = function create(properties) { + return new TaskOutputParameterSpec(properties); + }; + + /** + * Encodes the specified TaskOutputParameterSpec message. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskOutputParameterSpec} message TaskOutputParameterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TaskOutputParameterSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.producerTask != null && Object.hasOwnProperty.call(message, "producerTask")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.producerTask); + if (message.outputParameterKey != null && Object.hasOwnProperty.call(message, "outputParameterKey")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.outputParameterKey); + return writer; + }; + + /** + * Encodes the specified TaskOutputParameterSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskOutputParameterSpec} message TaskOutputParameterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TaskOutputParameterSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TaskOutputParameterSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} TaskOutputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TaskOutputParameterSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.producerTask = reader.string(); + break; + case 2: + message.outputParameterKey = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TaskOutputParameterSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} TaskOutputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TaskOutputParameterSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TaskOutputParameterSpec message. + * @function verify + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TaskOutputParameterSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.producerTask != null && message.hasOwnProperty("producerTask")) + if (!$util.isString(message.producerTask)) + return "producerTask: string expected"; + if (message.outputParameterKey != null && message.hasOwnProperty("outputParameterKey")) + if (!$util.isString(message.outputParameterKey)) + return "outputParameterKey: string expected"; + return null; + }; + + /** + * Creates a TaskOutputParameterSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} TaskOutputParameterSpec + */ + TaskOutputParameterSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec) + return object; + var message = new $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec(); + if (object.producerTask != null) + message.producerTask = String(object.producerTask); + if (object.outputParameterKey != null) + message.outputParameterKey = String(object.outputParameterKey); + return message; + }; + + /** + * Creates a plain object from a TaskOutputParameterSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec + * @static + * @param {ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} message TaskOutputParameterSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + TaskOutputParameterSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.producerTask = ""; + object.outputParameterKey = ""; + } + if (message.producerTask != null && message.hasOwnProperty("producerTask")) + object.producerTask = message.producerTask; + if (message.outputParameterKey != null && message.hasOwnProperty("outputParameterKey")) + object.outputParameterKey = message.outputParameterKey; + return object; + }; + + /** + * Converts this TaskOutputParameterSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + TaskOutputParameterSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TaskOutputParameterSpec; + })(); + + InputParameterSpec.TaskFinalStatus = (function() { + + /** + * Properties of a TaskFinalStatus. + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @interface ITaskFinalStatus + * @property {string|null} [producerTask] TaskFinalStatus producerTask + */ + + /** + * Constructs a new TaskFinalStatus. + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec + * @classdesc Represents a TaskFinalStatus. + * @implements ITaskFinalStatus + * @constructor + * @param {ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskFinalStatus=} [properties] Properties to set + */ + function TaskFinalStatus(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TaskFinalStatus producerTask. + * @member {string} producerTask + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus + * @instance + */ + TaskFinalStatus.prototype.producerTask = ""; + + /** + * Creates a new TaskFinalStatus instance using the specified properties. + * @function create + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus + * @static + * @param {ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskFinalStatus=} [properties] Properties to set + * @returns {ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus} TaskFinalStatus instance + */ + TaskFinalStatus.create = function create(properties) { + return new TaskFinalStatus(properties); + }; + + /** + * Encodes the specified TaskFinalStatus message. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus + * @static + * @param {ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskFinalStatus} message TaskFinalStatus message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TaskFinalStatus.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.producerTask != null && Object.hasOwnProperty.call(message, "producerTask")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.producerTask); + return writer; + }; + + /** + * Encodes the specified TaskFinalStatus message, length delimited. Does not implicitly {@link ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus + * @static + * @param {ml_pipelines.TaskInputsSpec.InputParameterSpec.ITaskFinalStatus} message TaskFinalStatus message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TaskFinalStatus.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TaskFinalStatus message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus} TaskFinalStatus + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TaskFinalStatus.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.producerTask = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TaskFinalStatus message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus} TaskFinalStatus + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TaskFinalStatus.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TaskFinalStatus message. + * @function verify + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TaskFinalStatus.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.producerTask != null && message.hasOwnProperty("producerTask")) + if (!$util.isString(message.producerTask)) + return "producerTask: string expected"; + return null; + }; + + /** + * Creates a TaskFinalStatus message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus} TaskFinalStatus + */ + TaskFinalStatus.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus) + return object; + var message = new $root.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus(); + if (object.producerTask != null) + message.producerTask = String(object.producerTask); + return message; + }; + + /** + * Creates a plain object from a TaskFinalStatus message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus + * @static + * @param {ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus} message TaskFinalStatus + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + TaskFinalStatus.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.producerTask = ""; + if (message.producerTask != null && message.hasOwnProperty("producerTask")) + object.producerTask = message.producerTask; + return object; + }; + + /** + * Converts this TaskFinalStatus to JSON. + * @function toJSON + * @memberof ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus + * @instance + * @returns {Object.<string,*>} JSON object + */ + TaskFinalStatus.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TaskFinalStatus; + })(); + + return InputParameterSpec; + })(); + + return TaskInputsSpec; + })(); + + ml_pipelines.TaskOutputsSpec = (function() { + + /** + * Properties of a TaskOutputsSpec. + * @memberof ml_pipelines + * @interface ITaskOutputsSpec + * @property {Object.<string,ml_pipelines.TaskOutputsSpec.IOutputParameterSpec>|null} [parameters] TaskOutputsSpec parameters + * @property {Object.<string,ml_pipelines.TaskOutputsSpec.IOutputArtifactSpec>|null} [artifacts] TaskOutputsSpec artifacts + */ + + /** + * Constructs a new TaskOutputsSpec. + * @memberof ml_pipelines + * @classdesc Represents a TaskOutputsSpec. + * @implements ITaskOutputsSpec + * @constructor + * @param {ml_pipelines.ITaskOutputsSpec=} [properties] Properties to set + */ + function TaskOutputsSpec(properties) { + this.parameters = {}; + this.artifacts = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TaskOutputsSpec parameters. + * @member {Object.<string,ml_pipelines.TaskOutputsSpec.IOutputParameterSpec>} parameters + * @memberof ml_pipelines.TaskOutputsSpec + * @instance + */ + TaskOutputsSpec.prototype.parameters = $util.emptyObject; + + /** + * TaskOutputsSpec artifacts. + * @member {Object.<string,ml_pipelines.TaskOutputsSpec.IOutputArtifactSpec>} artifacts + * @memberof ml_pipelines.TaskOutputsSpec + * @instance + */ + TaskOutputsSpec.prototype.artifacts = $util.emptyObject; + + /** + * Creates a new TaskOutputsSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.TaskOutputsSpec + * @static + * @param {ml_pipelines.ITaskOutputsSpec=} [properties] Properties to set + * @returns {ml_pipelines.TaskOutputsSpec} TaskOutputsSpec instance + */ + TaskOutputsSpec.create = function create(properties) { + return new TaskOutputsSpec(properties); + }; + + /** + * Encodes the specified TaskOutputsSpec message. Does not implicitly {@link ml_pipelines.TaskOutputsSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.TaskOutputsSpec + * @static + * @param {ml_pipelines.ITaskOutputsSpec} message TaskOutputsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TaskOutputsSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.parameters != null && Object.hasOwnProperty.call(message, "parameters")) + for (var keys = Object.keys(message.parameters), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.encode(message.parameters[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.artifacts != null && Object.hasOwnProperty.call(message, "artifacts")) + for (var keys = Object.keys(message.artifacts), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.encode(message.artifacts[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + return writer; + }; + + /** + * Encodes the specified TaskOutputsSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskOutputsSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.TaskOutputsSpec + * @static + * @param {ml_pipelines.ITaskOutputsSpec} message TaskOutputsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TaskOutputsSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TaskOutputsSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.TaskOutputsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.TaskOutputsSpec} TaskOutputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TaskOutputsSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.TaskOutputsSpec(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (message.parameters === $util.emptyObject) + message.parameters = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.parameters[key] = value; + break; + case 2: + if (message.artifacts === $util.emptyObject) + message.artifacts = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.artifacts[key] = value; + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TaskOutputsSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.TaskOutputsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.TaskOutputsSpec} TaskOutputsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TaskOutputsSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TaskOutputsSpec message. + * @function verify + * @memberof ml_pipelines.TaskOutputsSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TaskOutputsSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.parameters != null && message.hasOwnProperty("parameters")) { + if (!$util.isObject(message.parameters)) + return "parameters: object expected"; + var key = Object.keys(message.parameters); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.verify(message.parameters[key[i]]); + if (error) + return "parameters." + error; + } + } + if (message.artifacts != null && message.hasOwnProperty("artifacts")) { + if (!$util.isObject(message.artifacts)) + return "artifacts: object expected"; + var key = Object.keys(message.artifacts); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.verify(message.artifacts[key[i]]); + if (error) + return "artifacts." + error; + } + } + return null; + }; + + /** + * Creates a TaskOutputsSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.TaskOutputsSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.TaskOutputsSpec} TaskOutputsSpec + */ + TaskOutputsSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.TaskOutputsSpec) + return object; + var message = new $root.ml_pipelines.TaskOutputsSpec(); + if (object.parameters) { + if (typeof object.parameters !== "object") + throw TypeError(".ml_pipelines.TaskOutputsSpec.parameters: object expected"); + message.parameters = {}; + for (var keys = Object.keys(object.parameters), i = 0; i < keys.length; ++i) { + if (typeof object.parameters[keys[i]] !== "object") + throw TypeError(".ml_pipelines.TaskOutputsSpec.parameters: object expected"); + message.parameters[keys[i]] = $root.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.fromObject(object.parameters[keys[i]]); + } + } + if (object.artifacts) { + if (typeof object.artifacts !== "object") + throw TypeError(".ml_pipelines.TaskOutputsSpec.artifacts: object expected"); + message.artifacts = {}; + for (var keys = Object.keys(object.artifacts), i = 0; i < keys.length; ++i) { + if (typeof object.artifacts[keys[i]] !== "object") + throw TypeError(".ml_pipelines.TaskOutputsSpec.artifacts: object expected"); + message.artifacts[keys[i]] = $root.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.fromObject(object.artifacts[keys[i]]); + } + } + return message; + }; + + /** + * Creates a plain object from a TaskOutputsSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.TaskOutputsSpec + * @static + * @param {ml_pipelines.TaskOutputsSpec} message TaskOutputsSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + TaskOutputsSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) { + object.parameters = {}; + object.artifacts = {}; + } + var keys2; + if (message.parameters && (keys2 = Object.keys(message.parameters)).length) { + object.parameters = {}; + for (var j = 0; j < keys2.length; ++j) + object.parameters[keys2[j]] = $root.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.toObject(message.parameters[keys2[j]], options); + } + if (message.artifacts && (keys2 = Object.keys(message.artifacts)).length) { + object.artifacts = {}; + for (var j = 0; j < keys2.length; ++j) + object.artifacts[keys2[j]] = $root.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.toObject(message.artifacts[keys2[j]], options); + } + return object; + }; + + /** + * Converts this TaskOutputsSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.TaskOutputsSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + TaskOutputsSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + TaskOutputsSpec.OutputArtifactSpec = (function() { + + /** + * Properties of an OutputArtifactSpec. + * @memberof ml_pipelines.TaskOutputsSpec + * @interface IOutputArtifactSpec + * @property {ml_pipelines.IArtifactTypeSchema|null} [artifactType] OutputArtifactSpec artifactType + * @property {Object.<string,ml_pipelines.IValueOrRuntimeParameter>|null} [properties] OutputArtifactSpec properties + * @property {Object.<string,ml_pipelines.IValueOrRuntimeParameter>|null} [customProperties] OutputArtifactSpec customProperties + */ + + /** + * Constructs a new OutputArtifactSpec. + * @memberof ml_pipelines.TaskOutputsSpec + * @classdesc Represents an OutputArtifactSpec. + * @implements IOutputArtifactSpec + * @constructor + * @param {ml_pipelines.TaskOutputsSpec.IOutputArtifactSpec=} [properties] Properties to set + */ + function OutputArtifactSpec(properties) { + this.properties = {}; + this.customProperties = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * OutputArtifactSpec artifactType. + * @member {ml_pipelines.IArtifactTypeSchema|null|undefined} artifactType + * @memberof ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + * @instance + */ + OutputArtifactSpec.prototype.artifactType = null; + + /** + * OutputArtifactSpec properties. + * @member {Object.<string,ml_pipelines.IValueOrRuntimeParameter>} properties + * @memberof ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + * @instance + */ + OutputArtifactSpec.prototype.properties = $util.emptyObject; + + /** + * OutputArtifactSpec customProperties. + * @member {Object.<string,ml_pipelines.IValueOrRuntimeParameter>} customProperties + * @memberof ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + * @instance + */ + OutputArtifactSpec.prototype.customProperties = $util.emptyObject; + + /** + * Creates a new OutputArtifactSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + * @static + * @param {ml_pipelines.TaskOutputsSpec.IOutputArtifactSpec=} [properties] Properties to set + * @returns {ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} OutputArtifactSpec instance + */ + OutputArtifactSpec.create = function create(properties) { + return new OutputArtifactSpec(properties); + }; + + /** + * Encodes the specified OutputArtifactSpec message. Does not implicitly {@link ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + * @static + * @param {ml_pipelines.TaskOutputsSpec.IOutputArtifactSpec} message OutputArtifactSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + OutputArtifactSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.artifactType != null && Object.hasOwnProperty.call(message, "artifactType")) + $root.ml_pipelines.ArtifactTypeSchema.encode(message.artifactType, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.properties != null && Object.hasOwnProperty.call(message, "properties")) + for (var keys = Object.keys(message.properties), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ValueOrRuntimeParameter.encode(message.properties[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.customProperties != null && Object.hasOwnProperty.call(message, "customProperties")) + for (var keys = Object.keys(message.customProperties), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 3, wireType 2 =*/26).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ValueOrRuntimeParameter.encode(message.customProperties[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + return writer; + }; + + /** + * Encodes the specified OutputArtifactSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + * @static + * @param {ml_pipelines.TaskOutputsSpec.IOutputArtifactSpec} message OutputArtifactSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + OutputArtifactSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an OutputArtifactSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} OutputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + OutputArtifactSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.artifactType = $root.ml_pipelines.ArtifactTypeSchema.decode(reader, reader.uint32()); + break; + case 2: + if (message.properties === $util.emptyObject) + message.properties = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ValueOrRuntimeParameter.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.properties[key] = value; + break; + case 3: + if (message.customProperties === $util.emptyObject) + message.customProperties = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ValueOrRuntimeParameter.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.customProperties[key] = value; + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an OutputArtifactSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} OutputArtifactSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + OutputArtifactSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an OutputArtifactSpec message. + * @function verify + * @memberof ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + OutputArtifactSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.artifactType != null && message.hasOwnProperty("artifactType")) { + var error = $root.ml_pipelines.ArtifactTypeSchema.verify(message.artifactType); + if (error) + return "artifactType." + error; + } + if (message.properties != null && message.hasOwnProperty("properties")) { + if (!$util.isObject(message.properties)) + return "properties: object expected"; + var key = Object.keys(message.properties); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ValueOrRuntimeParameter.verify(message.properties[key[i]]); + if (error) + return "properties." + error; + } + } + if (message.customProperties != null && message.hasOwnProperty("customProperties")) { + if (!$util.isObject(message.customProperties)) + return "customProperties: object expected"; + var key = Object.keys(message.customProperties); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ValueOrRuntimeParameter.verify(message.customProperties[key[i]]); + if (error) + return "customProperties." + error; + } + } + return null; + }; + + /** + * Creates an OutputArtifactSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} OutputArtifactSpec + */ + OutputArtifactSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec) + return object; + var message = new $root.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec(); + if (object.artifactType != null) { + if (typeof object.artifactType !== "object") + throw TypeError(".ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.artifactType: object expected"); + message.artifactType = $root.ml_pipelines.ArtifactTypeSchema.fromObject(object.artifactType); + } + if (object.properties) { + if (typeof object.properties !== "object") + throw TypeError(".ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.properties: object expected"); + message.properties = {}; + for (var keys = Object.keys(object.properties), i = 0; i < keys.length; ++i) { + if (typeof object.properties[keys[i]] !== "object") + throw TypeError(".ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.properties: object expected"); + message.properties[keys[i]] = $root.ml_pipelines.ValueOrRuntimeParameter.fromObject(object.properties[keys[i]]); + } + } + if (object.customProperties) { + if (typeof object.customProperties !== "object") + throw TypeError(".ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.customProperties: object expected"); + message.customProperties = {}; + for (var keys = Object.keys(object.customProperties), i = 0; i < keys.length; ++i) { + if (typeof object.customProperties[keys[i]] !== "object") + throw TypeError(".ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.customProperties: object expected"); + message.customProperties[keys[i]] = $root.ml_pipelines.ValueOrRuntimeParameter.fromObject(object.customProperties[keys[i]]); + } + } + return message; + }; + + /** + * Creates a plain object from an OutputArtifactSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + * @static + * @param {ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} message OutputArtifactSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + OutputArtifactSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) { + object.properties = {}; + object.customProperties = {}; + } + if (options.defaults) + object.artifactType = null; + if (message.artifactType != null && message.hasOwnProperty("artifactType")) + object.artifactType = $root.ml_pipelines.ArtifactTypeSchema.toObject(message.artifactType, options); + var keys2; + if (message.properties && (keys2 = Object.keys(message.properties)).length) { + object.properties = {}; + for (var j = 0; j < keys2.length; ++j) + object.properties[keys2[j]] = $root.ml_pipelines.ValueOrRuntimeParameter.toObject(message.properties[keys2[j]], options); + } + if (message.customProperties && (keys2 = Object.keys(message.customProperties)).length) { + object.customProperties = {}; + for (var j = 0; j < keys2.length; ++j) + object.customProperties[keys2[j]] = $root.ml_pipelines.ValueOrRuntimeParameter.toObject(message.customProperties[keys2[j]], options); + } + return object; + }; + + /** + * Converts this OutputArtifactSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.TaskOutputsSpec.OutputArtifactSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + OutputArtifactSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return OutputArtifactSpec; + })(); + + TaskOutputsSpec.OutputParameterSpec = (function() { + + /** + * Properties of an OutputParameterSpec. + * @memberof ml_pipelines.TaskOutputsSpec + * @interface IOutputParameterSpec + * @property {ml_pipelines.PrimitiveType.PrimitiveTypeEnum|null} [type] OutputParameterSpec type + */ + + /** + * Constructs a new OutputParameterSpec. + * @memberof ml_pipelines.TaskOutputsSpec + * @classdesc Represents an OutputParameterSpec. + * @implements IOutputParameterSpec + * @constructor + * @param {ml_pipelines.TaskOutputsSpec.IOutputParameterSpec=} [properties] Properties to set + */ + function OutputParameterSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * OutputParameterSpec type. + * @member {ml_pipelines.PrimitiveType.PrimitiveTypeEnum} type + * @memberof ml_pipelines.TaskOutputsSpec.OutputParameterSpec + * @instance + */ + OutputParameterSpec.prototype.type = 0; + + /** + * Creates a new OutputParameterSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.TaskOutputsSpec.OutputParameterSpec + * @static + * @param {ml_pipelines.TaskOutputsSpec.IOutputParameterSpec=} [properties] Properties to set + * @returns {ml_pipelines.TaskOutputsSpec.OutputParameterSpec} OutputParameterSpec instance + */ + OutputParameterSpec.create = function create(properties) { + return new OutputParameterSpec(properties); + }; + + /** + * Encodes the specified OutputParameterSpec message. Does not implicitly {@link ml_pipelines.TaskOutputsSpec.OutputParameterSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.TaskOutputsSpec.OutputParameterSpec + * @static + * @param {ml_pipelines.TaskOutputsSpec.IOutputParameterSpec} message OutputParameterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + OutputParameterSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.type != null && Object.hasOwnProperty.call(message, "type")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type); + return writer; + }; + + /** + * Encodes the specified OutputParameterSpec message, length delimited. Does not implicitly {@link ml_pipelines.TaskOutputsSpec.OutputParameterSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.TaskOutputsSpec.OutputParameterSpec + * @static + * @param {ml_pipelines.TaskOutputsSpec.IOutputParameterSpec} message OutputParameterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + OutputParameterSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an OutputParameterSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.TaskOutputsSpec.OutputParameterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.TaskOutputsSpec.OutputParameterSpec} OutputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + OutputParameterSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.TaskOutputsSpec.OutputParameterSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.type = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an OutputParameterSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.TaskOutputsSpec.OutputParameterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.TaskOutputsSpec.OutputParameterSpec} OutputParameterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + OutputParameterSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an OutputParameterSpec message. + * @function verify + * @memberof ml_pipelines.TaskOutputsSpec.OutputParameterSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + OutputParameterSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.type != null && message.hasOwnProperty("type")) + switch (message.type) { + default: + return "type: enum value expected"; + case 0: + case 1: + case 2: + case 3: + break; + } + return null; + }; + + /** + * Creates an OutputParameterSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.TaskOutputsSpec.OutputParameterSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.TaskOutputsSpec.OutputParameterSpec} OutputParameterSpec + */ + OutputParameterSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.TaskOutputsSpec.OutputParameterSpec) + return object; + var message = new $root.ml_pipelines.TaskOutputsSpec.OutputParameterSpec(); + switch (object.type) { + case "PRIMITIVE_TYPE_UNSPECIFIED": + case 0: + message.type = 0; + break; + case "INT": + case 1: + message.type = 1; + break; + case "DOUBLE": + case 2: + message.type = 2; + break; + case "STRING": + case 3: + message.type = 3; + break; + } + return message; + }; + + /** + * Creates a plain object from an OutputParameterSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.TaskOutputsSpec.OutputParameterSpec + * @static + * @param {ml_pipelines.TaskOutputsSpec.OutputParameterSpec} message OutputParameterSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + OutputParameterSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.type = options.enums === String ? "PRIMITIVE_TYPE_UNSPECIFIED" : 0; + if (message.type != null && message.hasOwnProperty("type")) + object.type = options.enums === String ? $root.ml_pipelines.PrimitiveType.PrimitiveTypeEnum[message.type] : message.type; + return object; + }; + + /** + * Converts this OutputParameterSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.TaskOutputsSpec.OutputParameterSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + OutputParameterSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return OutputParameterSpec; + })(); + + return TaskOutputsSpec; + })(); + + ml_pipelines.PrimitiveType = (function() { + + /** + * Properties of a PrimitiveType. + * @memberof ml_pipelines + * @interface IPrimitiveType + */ + + /** + * Constructs a new PrimitiveType. + * @memberof ml_pipelines + * @classdesc Represents a PrimitiveType. + * @implements IPrimitiveType + * @constructor + * @param {ml_pipelines.IPrimitiveType=} [properties] Properties to set + */ + function PrimitiveType(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Creates a new PrimitiveType instance using the specified properties. + * @function create + * @memberof ml_pipelines.PrimitiveType + * @static + * @param {ml_pipelines.IPrimitiveType=} [properties] Properties to set + * @returns {ml_pipelines.PrimitiveType} PrimitiveType instance + */ + PrimitiveType.create = function create(properties) { + return new PrimitiveType(properties); + }; + + /** + * Encodes the specified PrimitiveType message. Does not implicitly {@link ml_pipelines.PrimitiveType.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PrimitiveType + * @static + * @param {ml_pipelines.IPrimitiveType} message PrimitiveType message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PrimitiveType.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + return writer; + }; + + /** + * Encodes the specified PrimitiveType message, length delimited. Does not implicitly {@link ml_pipelines.PrimitiveType.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PrimitiveType + * @static + * @param {ml_pipelines.IPrimitiveType} message PrimitiveType message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PrimitiveType.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a PrimitiveType message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PrimitiveType + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PrimitiveType} PrimitiveType + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PrimitiveType.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PrimitiveType(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a PrimitiveType message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PrimitiveType + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PrimitiveType} PrimitiveType + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PrimitiveType.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a PrimitiveType message. + * @function verify + * @memberof ml_pipelines.PrimitiveType + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PrimitiveType.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + return null; + }; + + /** + * Creates a PrimitiveType message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PrimitiveType + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PrimitiveType} PrimitiveType + */ + PrimitiveType.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PrimitiveType) + return object; + return new $root.ml_pipelines.PrimitiveType(); + }; + + /** + * Creates a plain object from a PrimitiveType message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PrimitiveType + * @static + * @param {ml_pipelines.PrimitiveType} message PrimitiveType + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + PrimitiveType.toObject = function toObject() { + return {}; + }; + + /** + * Converts this PrimitiveType to JSON. + * @function toJSON + * @memberof ml_pipelines.PrimitiveType + * @instance + * @returns {Object.<string,*>} JSON object + */ + PrimitiveType.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * PrimitiveTypeEnum enum. + * @name ml_pipelines.PrimitiveType.PrimitiveTypeEnum + * @enum {number} + * @property {number} PRIMITIVE_TYPE_UNSPECIFIED=0 PRIMITIVE_TYPE_UNSPECIFIED value + * @property {number} INT=1 INT value + * @property {number} DOUBLE=2 DOUBLE value + * @property {number} STRING=3 STRING value + */ + PrimitiveType.PrimitiveTypeEnum = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "PRIMITIVE_TYPE_UNSPECIFIED"] = 0; + values[valuesById[1] = "INT"] = 1; + values[valuesById[2] = "DOUBLE"] = 2; + values[valuesById[3] = "STRING"] = 3; + return values; + })(); + + return PrimitiveType; + })(); + + ml_pipelines.PipelineTaskSpec = (function() { + + /** + * Properties of a PipelineTaskSpec. + * @memberof ml_pipelines + * @interface IPipelineTaskSpec + * @property {ml_pipelines.IPipelineTaskInfo|null} [taskInfo] PipelineTaskSpec taskInfo + * @property {ml_pipelines.ITaskInputsSpec|null} [inputs] PipelineTaskSpec inputs + * @property {Array.<string>|null} [dependentTasks] PipelineTaskSpec dependentTasks + * @property {ml_pipelines.PipelineTaskSpec.ICachingOptions|null} [cachingOptions] PipelineTaskSpec cachingOptions + * @property {ml_pipelines.IComponentRef|null} [componentRef] PipelineTaskSpec componentRef + * @property {ml_pipelines.PipelineTaskSpec.ITriggerPolicy|null} [triggerPolicy] PipelineTaskSpec triggerPolicy + * @property {ml_pipelines.IArtifactIteratorSpec|null} [artifactIterator] PipelineTaskSpec artifactIterator + * @property {ml_pipelines.IParameterIteratorSpec|null} [parameterIterator] PipelineTaskSpec parameterIterator + */ + + /** + * Constructs a new PipelineTaskSpec. + * @memberof ml_pipelines + * @classdesc Represents a PipelineTaskSpec. + * @implements IPipelineTaskSpec + * @constructor + * @param {ml_pipelines.IPipelineTaskSpec=} [properties] Properties to set + */ + function PipelineTaskSpec(properties) { + this.dependentTasks = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * PipelineTaskSpec taskInfo. + * @member {ml_pipelines.IPipelineTaskInfo|null|undefined} taskInfo + * @memberof ml_pipelines.PipelineTaskSpec + * @instance + */ + PipelineTaskSpec.prototype.taskInfo = null; + + /** + * PipelineTaskSpec inputs. + * @member {ml_pipelines.ITaskInputsSpec|null|undefined} inputs + * @memberof ml_pipelines.PipelineTaskSpec + * @instance + */ + PipelineTaskSpec.prototype.inputs = null; + + /** + * PipelineTaskSpec dependentTasks. + * @member {Array.<string>} dependentTasks + * @memberof ml_pipelines.PipelineTaskSpec + * @instance + */ + PipelineTaskSpec.prototype.dependentTasks = $util.emptyArray; + + /** + * PipelineTaskSpec cachingOptions. + * @member {ml_pipelines.PipelineTaskSpec.ICachingOptions|null|undefined} cachingOptions + * @memberof ml_pipelines.PipelineTaskSpec + * @instance + */ + PipelineTaskSpec.prototype.cachingOptions = null; + + /** + * PipelineTaskSpec componentRef. + * @member {ml_pipelines.IComponentRef|null|undefined} componentRef + * @memberof ml_pipelines.PipelineTaskSpec + * @instance + */ + PipelineTaskSpec.prototype.componentRef = null; + + /** + * PipelineTaskSpec triggerPolicy. + * @member {ml_pipelines.PipelineTaskSpec.ITriggerPolicy|null|undefined} triggerPolicy + * @memberof ml_pipelines.PipelineTaskSpec + * @instance + */ + PipelineTaskSpec.prototype.triggerPolicy = null; + + /** + * PipelineTaskSpec artifactIterator. + * @member {ml_pipelines.IArtifactIteratorSpec|null|undefined} artifactIterator + * @memberof ml_pipelines.PipelineTaskSpec + * @instance + */ + PipelineTaskSpec.prototype.artifactIterator = null; + + /** + * PipelineTaskSpec parameterIterator. + * @member {ml_pipelines.IParameterIteratorSpec|null|undefined} parameterIterator + * @memberof ml_pipelines.PipelineTaskSpec + * @instance + */ + PipelineTaskSpec.prototype.parameterIterator = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * PipelineTaskSpec iterator. + * @member {"artifactIterator"|"parameterIterator"|undefined} iterator + * @memberof ml_pipelines.PipelineTaskSpec + * @instance + */ + Object.defineProperty(PipelineTaskSpec.prototype, "iterator", { + get: $util.oneOfGetter($oneOfFields = ["artifactIterator", "parameterIterator"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new PipelineTaskSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineTaskSpec + * @static + * @param {ml_pipelines.IPipelineTaskSpec=} [properties] Properties to set + * @returns {ml_pipelines.PipelineTaskSpec} PipelineTaskSpec instance + */ + PipelineTaskSpec.create = function create(properties) { + return new PipelineTaskSpec(properties); + }; + + /** + * Encodes the specified PipelineTaskSpec message. Does not implicitly {@link ml_pipelines.PipelineTaskSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineTaskSpec + * @static + * @param {ml_pipelines.IPipelineTaskSpec} message PipelineTaskSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineTaskSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.taskInfo != null && Object.hasOwnProperty.call(message, "taskInfo")) + $root.ml_pipelines.PipelineTaskInfo.encode(message.taskInfo, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.inputs != null && Object.hasOwnProperty.call(message, "inputs")) + $root.ml_pipelines.TaskInputsSpec.encode(message.inputs, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.dependentTasks != null && message.dependentTasks.length) + for (var i = 0; i < message.dependentTasks.length; ++i) + writer.uint32(/* id 5, wireType 2 =*/42).string(message.dependentTasks[i]); + if (message.cachingOptions != null && Object.hasOwnProperty.call(message, "cachingOptions")) + $root.ml_pipelines.PipelineTaskSpec.CachingOptions.encode(message.cachingOptions, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + if (message.componentRef != null && Object.hasOwnProperty.call(message, "componentRef")) + $root.ml_pipelines.ComponentRef.encode(message.componentRef, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); + if (message.triggerPolicy != null && Object.hasOwnProperty.call(message, "triggerPolicy")) + $root.ml_pipelines.PipelineTaskSpec.TriggerPolicy.encode(message.triggerPolicy, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); + if (message.artifactIterator != null && Object.hasOwnProperty.call(message, "artifactIterator")) + $root.ml_pipelines.ArtifactIteratorSpec.encode(message.artifactIterator, writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim(); + if (message.parameterIterator != null && Object.hasOwnProperty.call(message, "parameterIterator")) + $root.ml_pipelines.ParameterIteratorSpec.encode(message.parameterIterator, writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified PipelineTaskSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineTaskSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineTaskSpec + * @static + * @param {ml_pipelines.IPipelineTaskSpec} message PipelineTaskSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineTaskSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a PipelineTaskSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineTaskSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineTaskSpec} PipelineTaskSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineTaskSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineTaskSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.taskInfo = $root.ml_pipelines.PipelineTaskInfo.decode(reader, reader.uint32()); + break; + case 2: + message.inputs = $root.ml_pipelines.TaskInputsSpec.decode(reader, reader.uint32()); + break; + case 5: + if (!(message.dependentTasks && message.dependentTasks.length)) + message.dependentTasks = []; + message.dependentTasks.push(reader.string()); + break; + case 6: + message.cachingOptions = $root.ml_pipelines.PipelineTaskSpec.CachingOptions.decode(reader, reader.uint32()); + break; + case 7: + message.componentRef = $root.ml_pipelines.ComponentRef.decode(reader, reader.uint32()); + break; + case 8: + message.triggerPolicy = $root.ml_pipelines.PipelineTaskSpec.TriggerPolicy.decode(reader, reader.uint32()); + break; + case 9: + message.artifactIterator = $root.ml_pipelines.ArtifactIteratorSpec.decode(reader, reader.uint32()); + break; + case 10: + message.parameterIterator = $root.ml_pipelines.ParameterIteratorSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a PipelineTaskSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineTaskSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineTaskSpec} PipelineTaskSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineTaskSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a PipelineTaskSpec message. + * @function verify + * @memberof ml_pipelines.PipelineTaskSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PipelineTaskSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.taskInfo != null && message.hasOwnProperty("taskInfo")) { + var error = $root.ml_pipelines.PipelineTaskInfo.verify(message.taskInfo); + if (error) + return "taskInfo." + error; + } + if (message.inputs != null && message.hasOwnProperty("inputs")) { + var error = $root.ml_pipelines.TaskInputsSpec.verify(message.inputs); + if (error) + return "inputs." + error; + } + if (message.dependentTasks != null && message.hasOwnProperty("dependentTasks")) { + if (!Array.isArray(message.dependentTasks)) + return "dependentTasks: array expected"; + for (var i = 0; i < message.dependentTasks.length; ++i) + if (!$util.isString(message.dependentTasks[i])) + return "dependentTasks: string[] expected"; + } + if (message.cachingOptions != null && message.hasOwnProperty("cachingOptions")) { + var error = $root.ml_pipelines.PipelineTaskSpec.CachingOptions.verify(message.cachingOptions); + if (error) + return "cachingOptions." + error; + } + if (message.componentRef != null && message.hasOwnProperty("componentRef")) { + var error = $root.ml_pipelines.ComponentRef.verify(message.componentRef); + if (error) + return "componentRef." + error; + } + if (message.triggerPolicy != null && message.hasOwnProperty("triggerPolicy")) { + var error = $root.ml_pipelines.PipelineTaskSpec.TriggerPolicy.verify(message.triggerPolicy); + if (error) + return "triggerPolicy." + error; + } + if (message.artifactIterator != null && message.hasOwnProperty("artifactIterator")) { + properties.iterator = 1; + { + var error = $root.ml_pipelines.ArtifactIteratorSpec.verify(message.artifactIterator); + if (error) + return "artifactIterator." + error; + } + } + if (message.parameterIterator != null && message.hasOwnProperty("parameterIterator")) { + if (properties.iterator === 1) + return "iterator: multiple values"; + properties.iterator = 1; + { + var error = $root.ml_pipelines.ParameterIteratorSpec.verify(message.parameterIterator); + if (error) + return "parameterIterator." + error; + } + } + return null; + }; + + /** + * Creates a PipelineTaskSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineTaskSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineTaskSpec} PipelineTaskSpec + */ + PipelineTaskSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineTaskSpec) + return object; + var message = new $root.ml_pipelines.PipelineTaskSpec(); + if (object.taskInfo != null) { + if (typeof object.taskInfo !== "object") + throw TypeError(".ml_pipelines.PipelineTaskSpec.taskInfo: object expected"); + message.taskInfo = $root.ml_pipelines.PipelineTaskInfo.fromObject(object.taskInfo); + } + if (object.inputs != null) { + if (typeof object.inputs !== "object") + throw TypeError(".ml_pipelines.PipelineTaskSpec.inputs: object expected"); + message.inputs = $root.ml_pipelines.TaskInputsSpec.fromObject(object.inputs); + } + if (object.dependentTasks) { + if (!Array.isArray(object.dependentTasks)) + throw TypeError(".ml_pipelines.PipelineTaskSpec.dependentTasks: array expected"); + message.dependentTasks = []; + for (var i = 0; i < object.dependentTasks.length; ++i) + message.dependentTasks[i] = String(object.dependentTasks[i]); + } + if (object.cachingOptions != null) { + if (typeof object.cachingOptions !== "object") + throw TypeError(".ml_pipelines.PipelineTaskSpec.cachingOptions: object expected"); + message.cachingOptions = $root.ml_pipelines.PipelineTaskSpec.CachingOptions.fromObject(object.cachingOptions); + } + if (object.componentRef != null) { + if (typeof object.componentRef !== "object") + throw TypeError(".ml_pipelines.PipelineTaskSpec.componentRef: object expected"); + message.componentRef = $root.ml_pipelines.ComponentRef.fromObject(object.componentRef); + } + if (object.triggerPolicy != null) { + if (typeof object.triggerPolicy !== "object") + throw TypeError(".ml_pipelines.PipelineTaskSpec.triggerPolicy: object expected"); + message.triggerPolicy = $root.ml_pipelines.PipelineTaskSpec.TriggerPolicy.fromObject(object.triggerPolicy); + } + if (object.artifactIterator != null) { + if (typeof object.artifactIterator !== "object") + throw TypeError(".ml_pipelines.PipelineTaskSpec.artifactIterator: object expected"); + message.artifactIterator = $root.ml_pipelines.ArtifactIteratorSpec.fromObject(object.artifactIterator); + } + if (object.parameterIterator != null) { + if (typeof object.parameterIterator !== "object") + throw TypeError(".ml_pipelines.PipelineTaskSpec.parameterIterator: object expected"); + message.parameterIterator = $root.ml_pipelines.ParameterIteratorSpec.fromObject(object.parameterIterator); + } + return message; + }; + + /** + * Creates a plain object from a PipelineTaskSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineTaskSpec + * @static + * @param {ml_pipelines.PipelineTaskSpec} message PipelineTaskSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + PipelineTaskSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.dependentTasks = []; + if (options.defaults) { + object.taskInfo = null; + object.inputs = null; + object.cachingOptions = null; + object.componentRef = null; + object.triggerPolicy = null; + } + if (message.taskInfo != null && message.hasOwnProperty("taskInfo")) + object.taskInfo = $root.ml_pipelines.PipelineTaskInfo.toObject(message.taskInfo, options); + if (message.inputs != null && message.hasOwnProperty("inputs")) + object.inputs = $root.ml_pipelines.TaskInputsSpec.toObject(message.inputs, options); + if (message.dependentTasks && message.dependentTasks.length) { + object.dependentTasks = []; + for (var j = 0; j < message.dependentTasks.length; ++j) + object.dependentTasks[j] = message.dependentTasks[j]; + } + if (message.cachingOptions != null && message.hasOwnProperty("cachingOptions")) + object.cachingOptions = $root.ml_pipelines.PipelineTaskSpec.CachingOptions.toObject(message.cachingOptions, options); + if (message.componentRef != null && message.hasOwnProperty("componentRef")) + object.componentRef = $root.ml_pipelines.ComponentRef.toObject(message.componentRef, options); + if (message.triggerPolicy != null && message.hasOwnProperty("triggerPolicy")) + object.triggerPolicy = $root.ml_pipelines.PipelineTaskSpec.TriggerPolicy.toObject(message.triggerPolicy, options); + if (message.artifactIterator != null && message.hasOwnProperty("artifactIterator")) { + object.artifactIterator = $root.ml_pipelines.ArtifactIteratorSpec.toObject(message.artifactIterator, options); + if (options.oneofs) + object.iterator = "artifactIterator"; + } + if (message.parameterIterator != null && message.hasOwnProperty("parameterIterator")) { + object.parameterIterator = $root.ml_pipelines.ParameterIteratorSpec.toObject(message.parameterIterator, options); + if (options.oneofs) + object.iterator = "parameterIterator"; + } + return object; + }; + + /** + * Converts this PipelineTaskSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineTaskSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + PipelineTaskSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PipelineTaskSpec.CachingOptions = (function() { + + /** + * Properties of a CachingOptions. + * @memberof ml_pipelines.PipelineTaskSpec + * @interface ICachingOptions + * @property {boolean|null} [enableCache] CachingOptions enableCache + */ + + /** + * Constructs a new CachingOptions. + * @memberof ml_pipelines.PipelineTaskSpec + * @classdesc Represents a CachingOptions. + * @implements ICachingOptions + * @constructor + * @param {ml_pipelines.PipelineTaskSpec.ICachingOptions=} [properties] Properties to set + */ + function CachingOptions(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * CachingOptions enableCache. + * @member {boolean} enableCache + * @memberof ml_pipelines.PipelineTaskSpec.CachingOptions + * @instance + */ + CachingOptions.prototype.enableCache = false; + + /** + * Creates a new CachingOptions instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineTaskSpec.CachingOptions + * @static + * @param {ml_pipelines.PipelineTaskSpec.ICachingOptions=} [properties] Properties to set + * @returns {ml_pipelines.PipelineTaskSpec.CachingOptions} CachingOptions instance + */ + CachingOptions.create = function create(properties) { + return new CachingOptions(properties); + }; + + /** + * Encodes the specified CachingOptions message. Does not implicitly {@link ml_pipelines.PipelineTaskSpec.CachingOptions.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineTaskSpec.CachingOptions + * @static + * @param {ml_pipelines.PipelineTaskSpec.ICachingOptions} message CachingOptions message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CachingOptions.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.enableCache != null && Object.hasOwnProperty.call(message, "enableCache")) + writer.uint32(/* id 1, wireType 0 =*/8).bool(message.enableCache); + return writer; + }; + + /** + * Encodes the specified CachingOptions message, length delimited. Does not implicitly {@link ml_pipelines.PipelineTaskSpec.CachingOptions.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineTaskSpec.CachingOptions + * @static + * @param {ml_pipelines.PipelineTaskSpec.ICachingOptions} message CachingOptions message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CachingOptions.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a CachingOptions message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineTaskSpec.CachingOptions + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineTaskSpec.CachingOptions} CachingOptions + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CachingOptions.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineTaskSpec.CachingOptions(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.enableCache = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a CachingOptions message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineTaskSpec.CachingOptions + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineTaskSpec.CachingOptions} CachingOptions + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CachingOptions.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a CachingOptions message. + * @function verify + * @memberof ml_pipelines.PipelineTaskSpec.CachingOptions + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + CachingOptions.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.enableCache != null && message.hasOwnProperty("enableCache")) + if (typeof message.enableCache !== "boolean") + return "enableCache: boolean expected"; + return null; + }; + + /** + * Creates a CachingOptions message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineTaskSpec.CachingOptions + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineTaskSpec.CachingOptions} CachingOptions + */ + CachingOptions.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineTaskSpec.CachingOptions) + return object; + var message = new $root.ml_pipelines.PipelineTaskSpec.CachingOptions(); + if (object.enableCache != null) + message.enableCache = Boolean(object.enableCache); + return message; + }; + + /** + * Creates a plain object from a CachingOptions message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineTaskSpec.CachingOptions + * @static + * @param {ml_pipelines.PipelineTaskSpec.CachingOptions} message CachingOptions + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + CachingOptions.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.enableCache = false; + if (message.enableCache != null && message.hasOwnProperty("enableCache")) + object.enableCache = message.enableCache; + return object; + }; + + /** + * Converts this CachingOptions to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineTaskSpec.CachingOptions + * @instance + * @returns {Object.<string,*>} JSON object + */ + CachingOptions.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return CachingOptions; + })(); + + PipelineTaskSpec.TriggerPolicy = (function() { + + /** + * Properties of a TriggerPolicy. + * @memberof ml_pipelines.PipelineTaskSpec + * @interface ITriggerPolicy + * @property {string|null} [condition] TriggerPolicy condition + * @property {ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy|null} [strategy] TriggerPolicy strategy + */ + + /** + * Constructs a new TriggerPolicy. + * @memberof ml_pipelines.PipelineTaskSpec + * @classdesc Represents a TriggerPolicy. + * @implements ITriggerPolicy + * @constructor + * @param {ml_pipelines.PipelineTaskSpec.ITriggerPolicy=} [properties] Properties to set + */ + function TriggerPolicy(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TriggerPolicy condition. + * @member {string} condition + * @memberof ml_pipelines.PipelineTaskSpec.TriggerPolicy + * @instance + */ + TriggerPolicy.prototype.condition = ""; + + /** + * TriggerPolicy strategy. + * @member {ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy} strategy + * @memberof ml_pipelines.PipelineTaskSpec.TriggerPolicy + * @instance + */ + TriggerPolicy.prototype.strategy = 0; + + /** + * Creates a new TriggerPolicy instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineTaskSpec.TriggerPolicy + * @static + * @param {ml_pipelines.PipelineTaskSpec.ITriggerPolicy=} [properties] Properties to set + * @returns {ml_pipelines.PipelineTaskSpec.TriggerPolicy} TriggerPolicy instance + */ + TriggerPolicy.create = function create(properties) { + return new TriggerPolicy(properties); + }; + + /** + * Encodes the specified TriggerPolicy message. Does not implicitly {@link ml_pipelines.PipelineTaskSpec.TriggerPolicy.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineTaskSpec.TriggerPolicy + * @static + * @param {ml_pipelines.PipelineTaskSpec.ITriggerPolicy} message TriggerPolicy message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TriggerPolicy.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.condition != null && Object.hasOwnProperty.call(message, "condition")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.condition); + if (message.strategy != null && Object.hasOwnProperty.call(message, "strategy")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.strategy); + return writer; + }; + + /** + * Encodes the specified TriggerPolicy message, length delimited. Does not implicitly {@link ml_pipelines.PipelineTaskSpec.TriggerPolicy.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineTaskSpec.TriggerPolicy + * @static + * @param {ml_pipelines.PipelineTaskSpec.ITriggerPolicy} message TriggerPolicy message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TriggerPolicy.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TriggerPolicy message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineTaskSpec.TriggerPolicy + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineTaskSpec.TriggerPolicy} TriggerPolicy + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TriggerPolicy.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineTaskSpec.TriggerPolicy(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.condition = reader.string(); + break; + case 2: + message.strategy = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TriggerPolicy message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineTaskSpec.TriggerPolicy + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineTaskSpec.TriggerPolicy} TriggerPolicy + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TriggerPolicy.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TriggerPolicy message. + * @function verify + * @memberof ml_pipelines.PipelineTaskSpec.TriggerPolicy + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TriggerPolicy.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.condition != null && message.hasOwnProperty("condition")) + if (!$util.isString(message.condition)) + return "condition: string expected"; + if (message.strategy != null && message.hasOwnProperty("strategy")) + switch (message.strategy) { + default: + return "strategy: enum value expected"; + case 0: + case 1: + case 2: + break; + } + return null; + }; + + /** + * Creates a TriggerPolicy message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineTaskSpec.TriggerPolicy + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineTaskSpec.TriggerPolicy} TriggerPolicy + */ + TriggerPolicy.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineTaskSpec.TriggerPolicy) + return object; + var message = new $root.ml_pipelines.PipelineTaskSpec.TriggerPolicy(); + if (object.condition != null) + message.condition = String(object.condition); + switch (object.strategy) { + case "TRIGGER_STRATEGY_UNSPECIFIED": + case 0: + message.strategy = 0; + break; + case "ALL_UPSTREAM_TASKS_SUCCEEDED": + case 1: + message.strategy = 1; + break; + case "ALL_UPSTREAM_TASKS_COMPLETED": + case 2: + message.strategy = 2; + break; + } + return message; + }; + + /** + * Creates a plain object from a TriggerPolicy message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineTaskSpec.TriggerPolicy + * @static + * @param {ml_pipelines.PipelineTaskSpec.TriggerPolicy} message TriggerPolicy + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + TriggerPolicy.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.condition = ""; + object.strategy = options.enums === String ? "TRIGGER_STRATEGY_UNSPECIFIED" : 0; + } + if (message.condition != null && message.hasOwnProperty("condition")) + object.condition = message.condition; + if (message.strategy != null && message.hasOwnProperty("strategy")) + object.strategy = options.enums === String ? $root.ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy[message.strategy] : message.strategy; + return object; + }; + + /** + * Converts this TriggerPolicy to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineTaskSpec.TriggerPolicy + * @instance + * @returns {Object.<string,*>} JSON object + */ + TriggerPolicy.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * TriggerStrategy enum. + * @name ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy + * @enum {number} + * @property {number} TRIGGER_STRATEGY_UNSPECIFIED=0 TRIGGER_STRATEGY_UNSPECIFIED value + * @property {number} ALL_UPSTREAM_TASKS_SUCCEEDED=1 ALL_UPSTREAM_TASKS_SUCCEEDED value + * @property {number} ALL_UPSTREAM_TASKS_COMPLETED=2 ALL_UPSTREAM_TASKS_COMPLETED value + */ + TriggerPolicy.TriggerStrategy = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "TRIGGER_STRATEGY_UNSPECIFIED"] = 0; + values[valuesById[1] = "ALL_UPSTREAM_TASKS_SUCCEEDED"] = 1; + values[valuesById[2] = "ALL_UPSTREAM_TASKS_COMPLETED"] = 2; + return values; + })(); + + return TriggerPolicy; + })(); + + return PipelineTaskSpec; + })(); + + ml_pipelines.ArtifactIteratorSpec = (function() { + + /** + * Properties of an ArtifactIteratorSpec. + * @memberof ml_pipelines + * @interface IArtifactIteratorSpec + * @property {ml_pipelines.ArtifactIteratorSpec.IItemsSpec|null} [items] ArtifactIteratorSpec items + * @property {string|null} [itemInput] ArtifactIteratorSpec itemInput + */ + + /** + * Constructs a new ArtifactIteratorSpec. + * @memberof ml_pipelines + * @classdesc Represents an ArtifactIteratorSpec. + * @implements IArtifactIteratorSpec + * @constructor + * @param {ml_pipelines.IArtifactIteratorSpec=} [properties] Properties to set + */ + function ArtifactIteratorSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ArtifactIteratorSpec items. + * @member {ml_pipelines.ArtifactIteratorSpec.IItemsSpec|null|undefined} items + * @memberof ml_pipelines.ArtifactIteratorSpec + * @instance + */ + ArtifactIteratorSpec.prototype.items = null; + + /** + * ArtifactIteratorSpec itemInput. + * @member {string} itemInput + * @memberof ml_pipelines.ArtifactIteratorSpec + * @instance + */ + ArtifactIteratorSpec.prototype.itemInput = ""; + + /** + * Creates a new ArtifactIteratorSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.ArtifactIteratorSpec + * @static + * @param {ml_pipelines.IArtifactIteratorSpec=} [properties] Properties to set + * @returns {ml_pipelines.ArtifactIteratorSpec} ArtifactIteratorSpec instance + */ + ArtifactIteratorSpec.create = function create(properties) { + return new ArtifactIteratorSpec(properties); + }; + + /** + * Encodes the specified ArtifactIteratorSpec message. Does not implicitly {@link ml_pipelines.ArtifactIteratorSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ArtifactIteratorSpec + * @static + * @param {ml_pipelines.IArtifactIteratorSpec} message ArtifactIteratorSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactIteratorSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.items != null && Object.hasOwnProperty.call(message, "items")) + $root.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.encode(message.items, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.itemInput != null && Object.hasOwnProperty.call(message, "itemInput")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.itemInput); + return writer; + }; + + /** + * Encodes the specified ArtifactIteratorSpec message, length delimited. Does not implicitly {@link ml_pipelines.ArtifactIteratorSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ArtifactIteratorSpec + * @static + * @param {ml_pipelines.IArtifactIteratorSpec} message ArtifactIteratorSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactIteratorSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ArtifactIteratorSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ArtifactIteratorSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ArtifactIteratorSpec} ArtifactIteratorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactIteratorSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ArtifactIteratorSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.items = $root.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.decode(reader, reader.uint32()); + break; + case 2: + message.itemInput = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ArtifactIteratorSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ArtifactIteratorSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ArtifactIteratorSpec} ArtifactIteratorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactIteratorSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ArtifactIteratorSpec message. + * @function verify + * @memberof ml_pipelines.ArtifactIteratorSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ArtifactIteratorSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.items != null && message.hasOwnProperty("items")) { + var error = $root.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.verify(message.items); + if (error) + return "items." + error; + } + if (message.itemInput != null && message.hasOwnProperty("itemInput")) + if (!$util.isString(message.itemInput)) + return "itemInput: string expected"; + return null; + }; + + /** + * Creates an ArtifactIteratorSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ArtifactIteratorSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ArtifactIteratorSpec} ArtifactIteratorSpec + */ + ArtifactIteratorSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ArtifactIteratorSpec) + return object; + var message = new $root.ml_pipelines.ArtifactIteratorSpec(); + if (object.items != null) { + if (typeof object.items !== "object") + throw TypeError(".ml_pipelines.ArtifactIteratorSpec.items: object expected"); + message.items = $root.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.fromObject(object.items); + } + if (object.itemInput != null) + message.itemInput = String(object.itemInput); + return message; + }; + + /** + * Creates a plain object from an ArtifactIteratorSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ArtifactIteratorSpec + * @static + * @param {ml_pipelines.ArtifactIteratorSpec} message ArtifactIteratorSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ArtifactIteratorSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.items = null; + object.itemInput = ""; + } + if (message.items != null && message.hasOwnProperty("items")) + object.items = $root.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.toObject(message.items, options); + if (message.itemInput != null && message.hasOwnProperty("itemInput")) + object.itemInput = message.itemInput; + return object; + }; + + /** + * Converts this ArtifactIteratorSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.ArtifactIteratorSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ArtifactIteratorSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ArtifactIteratorSpec.ItemsSpec = (function() { + + /** + * Properties of an ItemsSpec. + * @memberof ml_pipelines.ArtifactIteratorSpec + * @interface IItemsSpec + * @property {string|null} [inputArtifact] ItemsSpec inputArtifact + */ + + /** + * Constructs a new ItemsSpec. + * @memberof ml_pipelines.ArtifactIteratorSpec + * @classdesc Represents an ItemsSpec. + * @implements IItemsSpec + * @constructor + * @param {ml_pipelines.ArtifactIteratorSpec.IItemsSpec=} [properties] Properties to set + */ + function ItemsSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ItemsSpec inputArtifact. + * @member {string} inputArtifact + * @memberof ml_pipelines.ArtifactIteratorSpec.ItemsSpec + * @instance + */ + ItemsSpec.prototype.inputArtifact = ""; + + /** + * Creates a new ItemsSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.ArtifactIteratorSpec.ItemsSpec + * @static + * @param {ml_pipelines.ArtifactIteratorSpec.IItemsSpec=} [properties] Properties to set + * @returns {ml_pipelines.ArtifactIteratorSpec.ItemsSpec} ItemsSpec instance + */ + ItemsSpec.create = function create(properties) { + return new ItemsSpec(properties); + }; + + /** + * Encodes the specified ItemsSpec message. Does not implicitly {@link ml_pipelines.ArtifactIteratorSpec.ItemsSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ArtifactIteratorSpec.ItemsSpec + * @static + * @param {ml_pipelines.ArtifactIteratorSpec.IItemsSpec} message ItemsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ItemsSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputArtifact != null && Object.hasOwnProperty.call(message, "inputArtifact")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.inputArtifact); + return writer; + }; + + /** + * Encodes the specified ItemsSpec message, length delimited. Does not implicitly {@link ml_pipelines.ArtifactIteratorSpec.ItemsSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ArtifactIteratorSpec.ItemsSpec + * @static + * @param {ml_pipelines.ArtifactIteratorSpec.IItemsSpec} message ItemsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ItemsSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ItemsSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ArtifactIteratorSpec.ItemsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ArtifactIteratorSpec.ItemsSpec} ItemsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ItemsSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ArtifactIteratorSpec.ItemsSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputArtifact = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ItemsSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ArtifactIteratorSpec.ItemsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ArtifactIteratorSpec.ItemsSpec} ItemsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ItemsSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ItemsSpec message. + * @function verify + * @memberof ml_pipelines.ArtifactIteratorSpec.ItemsSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ItemsSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputArtifact != null && message.hasOwnProperty("inputArtifact")) + if (!$util.isString(message.inputArtifact)) + return "inputArtifact: string expected"; + return null; + }; + + /** + * Creates an ItemsSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ArtifactIteratorSpec.ItemsSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ArtifactIteratorSpec.ItemsSpec} ItemsSpec + */ + ItemsSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ArtifactIteratorSpec.ItemsSpec) + return object; + var message = new $root.ml_pipelines.ArtifactIteratorSpec.ItemsSpec(); + if (object.inputArtifact != null) + message.inputArtifact = String(object.inputArtifact); + return message; + }; + + /** + * Creates a plain object from an ItemsSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ArtifactIteratorSpec.ItemsSpec + * @static + * @param {ml_pipelines.ArtifactIteratorSpec.ItemsSpec} message ItemsSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ItemsSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.inputArtifact = ""; + if (message.inputArtifact != null && message.hasOwnProperty("inputArtifact")) + object.inputArtifact = message.inputArtifact; + return object; + }; + + /** + * Converts this ItemsSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.ArtifactIteratorSpec.ItemsSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ItemsSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ItemsSpec; + })(); + + return ArtifactIteratorSpec; + })(); + + ml_pipelines.ParameterIteratorSpec = (function() { + + /** + * Properties of a ParameterIteratorSpec. + * @memberof ml_pipelines + * @interface IParameterIteratorSpec + * @property {ml_pipelines.ParameterIteratorSpec.IItemsSpec|null} [items] ParameterIteratorSpec items + * @property {string|null} [itemInput] ParameterIteratorSpec itemInput + */ + + /** + * Constructs a new ParameterIteratorSpec. + * @memberof ml_pipelines + * @classdesc Represents a ParameterIteratorSpec. + * @implements IParameterIteratorSpec + * @constructor + * @param {ml_pipelines.IParameterIteratorSpec=} [properties] Properties to set + */ + function ParameterIteratorSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ParameterIteratorSpec items. + * @member {ml_pipelines.ParameterIteratorSpec.IItemsSpec|null|undefined} items + * @memberof ml_pipelines.ParameterIteratorSpec + * @instance + */ + ParameterIteratorSpec.prototype.items = null; + + /** + * ParameterIteratorSpec itemInput. + * @member {string} itemInput + * @memberof ml_pipelines.ParameterIteratorSpec + * @instance + */ + ParameterIteratorSpec.prototype.itemInput = ""; + + /** + * Creates a new ParameterIteratorSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.ParameterIteratorSpec + * @static + * @param {ml_pipelines.IParameterIteratorSpec=} [properties] Properties to set + * @returns {ml_pipelines.ParameterIteratorSpec} ParameterIteratorSpec instance + */ + ParameterIteratorSpec.create = function create(properties) { + return new ParameterIteratorSpec(properties); + }; + + /** + * Encodes the specified ParameterIteratorSpec message. Does not implicitly {@link ml_pipelines.ParameterIteratorSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ParameterIteratorSpec + * @static + * @param {ml_pipelines.IParameterIteratorSpec} message ParameterIteratorSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ParameterIteratorSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.items != null && Object.hasOwnProperty.call(message, "items")) + $root.ml_pipelines.ParameterIteratorSpec.ItemsSpec.encode(message.items, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.itemInput != null && Object.hasOwnProperty.call(message, "itemInput")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.itemInput); + return writer; + }; + + /** + * Encodes the specified ParameterIteratorSpec message, length delimited. Does not implicitly {@link ml_pipelines.ParameterIteratorSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ParameterIteratorSpec + * @static + * @param {ml_pipelines.IParameterIteratorSpec} message ParameterIteratorSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ParameterIteratorSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ParameterIteratorSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ParameterIteratorSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ParameterIteratorSpec} ParameterIteratorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ParameterIteratorSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ParameterIteratorSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.items = $root.ml_pipelines.ParameterIteratorSpec.ItemsSpec.decode(reader, reader.uint32()); + break; + case 2: + message.itemInput = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ParameterIteratorSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ParameterIteratorSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ParameterIteratorSpec} ParameterIteratorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ParameterIteratorSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ParameterIteratorSpec message. + * @function verify + * @memberof ml_pipelines.ParameterIteratorSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ParameterIteratorSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.items != null && message.hasOwnProperty("items")) { + var error = $root.ml_pipelines.ParameterIteratorSpec.ItemsSpec.verify(message.items); + if (error) + return "items." + error; + } + if (message.itemInput != null && message.hasOwnProperty("itemInput")) + if (!$util.isString(message.itemInput)) + return "itemInput: string expected"; + return null; + }; + + /** + * Creates a ParameterIteratorSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ParameterIteratorSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ParameterIteratorSpec} ParameterIteratorSpec + */ + ParameterIteratorSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ParameterIteratorSpec) + return object; + var message = new $root.ml_pipelines.ParameterIteratorSpec(); + if (object.items != null) { + if (typeof object.items !== "object") + throw TypeError(".ml_pipelines.ParameterIteratorSpec.items: object expected"); + message.items = $root.ml_pipelines.ParameterIteratorSpec.ItemsSpec.fromObject(object.items); + } + if (object.itemInput != null) + message.itemInput = String(object.itemInput); + return message; + }; + + /** + * Creates a plain object from a ParameterIteratorSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ParameterIteratorSpec + * @static + * @param {ml_pipelines.ParameterIteratorSpec} message ParameterIteratorSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ParameterIteratorSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.items = null; + object.itemInput = ""; + } + if (message.items != null && message.hasOwnProperty("items")) + object.items = $root.ml_pipelines.ParameterIteratorSpec.ItemsSpec.toObject(message.items, options); + if (message.itemInput != null && message.hasOwnProperty("itemInput")) + object.itemInput = message.itemInput; + return object; + }; + + /** + * Converts this ParameterIteratorSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.ParameterIteratorSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ParameterIteratorSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ParameterIteratorSpec.ItemsSpec = (function() { + + /** + * Properties of an ItemsSpec. + * @memberof ml_pipelines.ParameterIteratorSpec + * @interface IItemsSpec + * @property {string|null} [raw] ItemsSpec raw + * @property {string|null} [inputParameter] ItemsSpec inputParameter + */ + + /** + * Constructs a new ItemsSpec. + * @memberof ml_pipelines.ParameterIteratorSpec + * @classdesc Represents an ItemsSpec. + * @implements IItemsSpec + * @constructor + * @param {ml_pipelines.ParameterIteratorSpec.IItemsSpec=} [properties] Properties to set + */ + function ItemsSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ItemsSpec raw. + * @member {string|null|undefined} raw + * @memberof ml_pipelines.ParameterIteratorSpec.ItemsSpec + * @instance + */ + ItemsSpec.prototype.raw = null; + + /** + * ItemsSpec inputParameter. + * @member {string|null|undefined} inputParameter + * @memberof ml_pipelines.ParameterIteratorSpec.ItemsSpec + * @instance + */ + ItemsSpec.prototype.inputParameter = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * ItemsSpec kind. + * @member {"raw"|"inputParameter"|undefined} kind + * @memberof ml_pipelines.ParameterIteratorSpec.ItemsSpec + * @instance + */ + Object.defineProperty(ItemsSpec.prototype, "kind", { + get: $util.oneOfGetter($oneOfFields = ["raw", "inputParameter"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new ItemsSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.ParameterIteratorSpec.ItemsSpec + * @static + * @param {ml_pipelines.ParameterIteratorSpec.IItemsSpec=} [properties] Properties to set + * @returns {ml_pipelines.ParameterIteratorSpec.ItemsSpec} ItemsSpec instance + */ + ItemsSpec.create = function create(properties) { + return new ItemsSpec(properties); + }; + + /** + * Encodes the specified ItemsSpec message. Does not implicitly {@link ml_pipelines.ParameterIteratorSpec.ItemsSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ParameterIteratorSpec.ItemsSpec + * @static + * @param {ml_pipelines.ParameterIteratorSpec.IItemsSpec} message ItemsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ItemsSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.raw != null && Object.hasOwnProperty.call(message, "raw")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.raw); + if (message.inputParameter != null && Object.hasOwnProperty.call(message, "inputParameter")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.inputParameter); + return writer; + }; + + /** + * Encodes the specified ItemsSpec message, length delimited. Does not implicitly {@link ml_pipelines.ParameterIteratorSpec.ItemsSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ParameterIteratorSpec.ItemsSpec + * @static + * @param {ml_pipelines.ParameterIteratorSpec.IItemsSpec} message ItemsSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ItemsSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ItemsSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ParameterIteratorSpec.ItemsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ParameterIteratorSpec.ItemsSpec} ItemsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ItemsSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ParameterIteratorSpec.ItemsSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.raw = reader.string(); + break; + case 2: + message.inputParameter = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ItemsSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ParameterIteratorSpec.ItemsSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ParameterIteratorSpec.ItemsSpec} ItemsSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ItemsSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ItemsSpec message. + * @function verify + * @memberof ml_pipelines.ParameterIteratorSpec.ItemsSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ItemsSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.raw != null && message.hasOwnProperty("raw")) { + properties.kind = 1; + if (!$util.isString(message.raw)) + return "raw: string expected"; + } + if (message.inputParameter != null && message.hasOwnProperty("inputParameter")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + if (!$util.isString(message.inputParameter)) + return "inputParameter: string expected"; + } + return null; + }; + + /** + * Creates an ItemsSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ParameterIteratorSpec.ItemsSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ParameterIteratorSpec.ItemsSpec} ItemsSpec + */ + ItemsSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ParameterIteratorSpec.ItemsSpec) + return object; + var message = new $root.ml_pipelines.ParameterIteratorSpec.ItemsSpec(); + if (object.raw != null) + message.raw = String(object.raw); + if (object.inputParameter != null) + message.inputParameter = String(object.inputParameter); + return message; + }; + + /** + * Creates a plain object from an ItemsSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ParameterIteratorSpec.ItemsSpec + * @static + * @param {ml_pipelines.ParameterIteratorSpec.ItemsSpec} message ItemsSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ItemsSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (message.raw != null && message.hasOwnProperty("raw")) { + object.raw = message.raw; + if (options.oneofs) + object.kind = "raw"; + } + if (message.inputParameter != null && message.hasOwnProperty("inputParameter")) { + object.inputParameter = message.inputParameter; + if (options.oneofs) + object.kind = "inputParameter"; + } + return object; + }; + + /** + * Converts this ItemsSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.ParameterIteratorSpec.ItemsSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ItemsSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ItemsSpec; + })(); + + return ParameterIteratorSpec; + })(); + + ml_pipelines.ComponentRef = (function() { + + /** + * Properties of a ComponentRef. + * @memberof ml_pipelines + * @interface IComponentRef + * @property {string|null} [name] ComponentRef name + */ + + /** + * Constructs a new ComponentRef. + * @memberof ml_pipelines + * @classdesc Represents a ComponentRef. + * @implements IComponentRef + * @constructor + * @param {ml_pipelines.IComponentRef=} [properties] Properties to set + */ + function ComponentRef(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ComponentRef name. + * @member {string} name + * @memberof ml_pipelines.ComponentRef + * @instance + */ + ComponentRef.prototype.name = ""; + + /** + * Creates a new ComponentRef instance using the specified properties. + * @function create + * @memberof ml_pipelines.ComponentRef + * @static + * @param {ml_pipelines.IComponentRef=} [properties] Properties to set + * @returns {ml_pipelines.ComponentRef} ComponentRef instance + */ + ComponentRef.create = function create(properties) { + return new ComponentRef(properties); + }; + + /** + * Encodes the specified ComponentRef message. Does not implicitly {@link ml_pipelines.ComponentRef.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ComponentRef + * @static + * @param {ml_pipelines.IComponentRef} message ComponentRef message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ComponentRef.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + return writer; + }; + + /** + * Encodes the specified ComponentRef message, length delimited. Does not implicitly {@link ml_pipelines.ComponentRef.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ComponentRef + * @static + * @param {ml_pipelines.IComponentRef} message ComponentRef message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ComponentRef.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ComponentRef message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ComponentRef + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ComponentRef} ComponentRef + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ComponentRef.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ComponentRef(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ComponentRef message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ComponentRef + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ComponentRef} ComponentRef + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ComponentRef.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ComponentRef message. + * @function verify + * @memberof ml_pipelines.ComponentRef + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ComponentRef.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + return null; + }; + + /** + * Creates a ComponentRef message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ComponentRef + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ComponentRef} ComponentRef + */ + ComponentRef.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ComponentRef) + return object; + var message = new $root.ml_pipelines.ComponentRef(); + if (object.name != null) + message.name = String(object.name); + return message; + }; + + /** + * Creates a plain object from a ComponentRef message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ComponentRef + * @static + * @param {ml_pipelines.ComponentRef} message ComponentRef + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ComponentRef.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.name = ""; + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + return object; + }; + + /** + * Converts this ComponentRef to JSON. + * @function toJSON + * @memberof ml_pipelines.ComponentRef + * @instance + * @returns {Object.<string,*>} JSON object + */ + ComponentRef.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ComponentRef; + })(); + + ml_pipelines.PipelineInfo = (function() { + + /** + * Properties of a PipelineInfo. + * @memberof ml_pipelines + * @interface IPipelineInfo + * @property {string|null} [name] PipelineInfo name + */ + + /** + * Constructs a new PipelineInfo. + * @memberof ml_pipelines + * @classdesc Represents a PipelineInfo. + * @implements IPipelineInfo + * @constructor + * @param {ml_pipelines.IPipelineInfo=} [properties] Properties to set + */ + function PipelineInfo(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * PipelineInfo name. + * @member {string} name + * @memberof ml_pipelines.PipelineInfo + * @instance + */ + PipelineInfo.prototype.name = ""; + + /** + * Creates a new PipelineInfo instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineInfo + * @static + * @param {ml_pipelines.IPipelineInfo=} [properties] Properties to set + * @returns {ml_pipelines.PipelineInfo} PipelineInfo instance + */ + PipelineInfo.create = function create(properties) { + return new PipelineInfo(properties); + }; + + /** + * Encodes the specified PipelineInfo message. Does not implicitly {@link ml_pipelines.PipelineInfo.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineInfo + * @static + * @param {ml_pipelines.IPipelineInfo} message PipelineInfo message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineInfo.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + return writer; + }; + + /** + * Encodes the specified PipelineInfo message, length delimited. Does not implicitly {@link ml_pipelines.PipelineInfo.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineInfo + * @static + * @param {ml_pipelines.IPipelineInfo} message PipelineInfo message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineInfo.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a PipelineInfo message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineInfo + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineInfo} PipelineInfo + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineInfo.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineInfo(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a PipelineInfo message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineInfo + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineInfo} PipelineInfo + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineInfo.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a PipelineInfo message. + * @function verify + * @memberof ml_pipelines.PipelineInfo + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PipelineInfo.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + return null; + }; + + /** + * Creates a PipelineInfo message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineInfo + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineInfo} PipelineInfo + */ + PipelineInfo.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineInfo) + return object; + var message = new $root.ml_pipelines.PipelineInfo(); + if (object.name != null) + message.name = String(object.name); + return message; + }; + + /** + * Creates a plain object from a PipelineInfo message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineInfo + * @static + * @param {ml_pipelines.PipelineInfo} message PipelineInfo + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + PipelineInfo.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.name = ""; + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + return object; + }; + + /** + * Converts this PipelineInfo to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineInfo + * @instance + * @returns {Object.<string,*>} JSON object + */ + PipelineInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return PipelineInfo; + })(); + + ml_pipelines.ArtifactTypeSchema = (function() { + + /** + * Properties of an ArtifactTypeSchema. + * @memberof ml_pipelines + * @interface IArtifactTypeSchema + * @property {string|null} [schemaTitle] ArtifactTypeSchema schemaTitle + * @property {string|null} [schemaUri] ArtifactTypeSchema schemaUri + * @property {string|null} [instanceSchema] ArtifactTypeSchema instanceSchema + * @property {string|null} [schemaVersion] ArtifactTypeSchema schemaVersion + */ + + /** + * Constructs a new ArtifactTypeSchema. + * @memberof ml_pipelines + * @classdesc Represents an ArtifactTypeSchema. + * @implements IArtifactTypeSchema + * @constructor + * @param {ml_pipelines.IArtifactTypeSchema=} [properties] Properties to set + */ + function ArtifactTypeSchema(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ArtifactTypeSchema schemaTitle. + * @member {string|null|undefined} schemaTitle + * @memberof ml_pipelines.ArtifactTypeSchema + * @instance + */ + ArtifactTypeSchema.prototype.schemaTitle = null; + + /** + * ArtifactTypeSchema schemaUri. + * @member {string|null|undefined} schemaUri + * @memberof ml_pipelines.ArtifactTypeSchema + * @instance + */ + ArtifactTypeSchema.prototype.schemaUri = null; + + /** + * ArtifactTypeSchema instanceSchema. + * @member {string|null|undefined} instanceSchema + * @memberof ml_pipelines.ArtifactTypeSchema + * @instance + */ + ArtifactTypeSchema.prototype.instanceSchema = null; + + /** + * ArtifactTypeSchema schemaVersion. + * @member {string} schemaVersion + * @memberof ml_pipelines.ArtifactTypeSchema + * @instance + */ + ArtifactTypeSchema.prototype.schemaVersion = ""; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * ArtifactTypeSchema kind. + * @member {"schemaTitle"|"schemaUri"|"instanceSchema"|undefined} kind + * @memberof ml_pipelines.ArtifactTypeSchema + * @instance + */ + Object.defineProperty(ArtifactTypeSchema.prototype, "kind", { + get: $util.oneOfGetter($oneOfFields = ["schemaTitle", "schemaUri", "instanceSchema"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new ArtifactTypeSchema instance using the specified properties. + * @function create + * @memberof ml_pipelines.ArtifactTypeSchema + * @static + * @param {ml_pipelines.IArtifactTypeSchema=} [properties] Properties to set + * @returns {ml_pipelines.ArtifactTypeSchema} ArtifactTypeSchema instance + */ + ArtifactTypeSchema.create = function create(properties) { + return new ArtifactTypeSchema(properties); + }; + + /** + * Encodes the specified ArtifactTypeSchema message. Does not implicitly {@link ml_pipelines.ArtifactTypeSchema.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ArtifactTypeSchema + * @static + * @param {ml_pipelines.IArtifactTypeSchema} message ArtifactTypeSchema message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactTypeSchema.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.schemaTitle != null && Object.hasOwnProperty.call(message, "schemaTitle")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.schemaTitle); + if (message.schemaUri != null && Object.hasOwnProperty.call(message, "schemaUri")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.schemaUri); + if (message.instanceSchema != null && Object.hasOwnProperty.call(message, "instanceSchema")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.instanceSchema); + if (message.schemaVersion != null && Object.hasOwnProperty.call(message, "schemaVersion")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.schemaVersion); + return writer; + }; + + /** + * Encodes the specified ArtifactTypeSchema message, length delimited. Does not implicitly {@link ml_pipelines.ArtifactTypeSchema.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ArtifactTypeSchema + * @static + * @param {ml_pipelines.IArtifactTypeSchema} message ArtifactTypeSchema message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactTypeSchema.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ArtifactTypeSchema message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ArtifactTypeSchema + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ArtifactTypeSchema} ArtifactTypeSchema + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactTypeSchema.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ArtifactTypeSchema(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.schemaTitle = reader.string(); + break; + case 2: + message.schemaUri = reader.string(); + break; + case 3: + message.instanceSchema = reader.string(); + break; + case 4: + message.schemaVersion = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ArtifactTypeSchema message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ArtifactTypeSchema + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ArtifactTypeSchema} ArtifactTypeSchema + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactTypeSchema.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ArtifactTypeSchema message. + * @function verify + * @memberof ml_pipelines.ArtifactTypeSchema + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ArtifactTypeSchema.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.schemaTitle != null && message.hasOwnProperty("schemaTitle")) { + properties.kind = 1; + if (!$util.isString(message.schemaTitle)) + return "schemaTitle: string expected"; + } + if (message.schemaUri != null && message.hasOwnProperty("schemaUri")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + if (!$util.isString(message.schemaUri)) + return "schemaUri: string expected"; + } + if (message.instanceSchema != null && message.hasOwnProperty("instanceSchema")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + if (!$util.isString(message.instanceSchema)) + return "instanceSchema: string expected"; + } + if (message.schemaVersion != null && message.hasOwnProperty("schemaVersion")) + if (!$util.isString(message.schemaVersion)) + return "schemaVersion: string expected"; + return null; + }; + + /** + * Creates an ArtifactTypeSchema message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ArtifactTypeSchema + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ArtifactTypeSchema} ArtifactTypeSchema + */ + ArtifactTypeSchema.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ArtifactTypeSchema) + return object; + var message = new $root.ml_pipelines.ArtifactTypeSchema(); + if (object.schemaTitle != null) + message.schemaTitle = String(object.schemaTitle); + if (object.schemaUri != null) + message.schemaUri = String(object.schemaUri); + if (object.instanceSchema != null) + message.instanceSchema = String(object.instanceSchema); + if (object.schemaVersion != null) + message.schemaVersion = String(object.schemaVersion); + return message; + }; + + /** + * Creates a plain object from an ArtifactTypeSchema message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ArtifactTypeSchema + * @static + * @param {ml_pipelines.ArtifactTypeSchema} message ArtifactTypeSchema + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ArtifactTypeSchema.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.schemaVersion = ""; + if (message.schemaTitle != null && message.hasOwnProperty("schemaTitle")) { + object.schemaTitle = message.schemaTitle; + if (options.oneofs) + object.kind = "schemaTitle"; + } + if (message.schemaUri != null && message.hasOwnProperty("schemaUri")) { + object.schemaUri = message.schemaUri; + if (options.oneofs) + object.kind = "schemaUri"; + } + if (message.instanceSchema != null && message.hasOwnProperty("instanceSchema")) { + object.instanceSchema = message.instanceSchema; + if (options.oneofs) + object.kind = "instanceSchema"; + } + if (message.schemaVersion != null && message.hasOwnProperty("schemaVersion")) + object.schemaVersion = message.schemaVersion; + return object; + }; + + /** + * Converts this ArtifactTypeSchema to JSON. + * @function toJSON + * @memberof ml_pipelines.ArtifactTypeSchema + * @instance + * @returns {Object.<string,*>} JSON object + */ + ArtifactTypeSchema.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ArtifactTypeSchema; + })(); + + ml_pipelines.PipelineTaskInfo = (function() { + + /** + * Properties of a PipelineTaskInfo. + * @memberof ml_pipelines + * @interface IPipelineTaskInfo + * @property {string|null} [name] PipelineTaskInfo name + */ + + /** + * Constructs a new PipelineTaskInfo. + * @memberof ml_pipelines + * @classdesc Represents a PipelineTaskInfo. + * @implements IPipelineTaskInfo + * @constructor + * @param {ml_pipelines.IPipelineTaskInfo=} [properties] Properties to set + */ + function PipelineTaskInfo(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * PipelineTaskInfo name. + * @member {string} name + * @memberof ml_pipelines.PipelineTaskInfo + * @instance + */ + PipelineTaskInfo.prototype.name = ""; + + /** + * Creates a new PipelineTaskInfo instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineTaskInfo + * @static + * @param {ml_pipelines.IPipelineTaskInfo=} [properties] Properties to set + * @returns {ml_pipelines.PipelineTaskInfo} PipelineTaskInfo instance + */ + PipelineTaskInfo.create = function create(properties) { + return new PipelineTaskInfo(properties); + }; + + /** + * Encodes the specified PipelineTaskInfo message. Does not implicitly {@link ml_pipelines.PipelineTaskInfo.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineTaskInfo + * @static + * @param {ml_pipelines.IPipelineTaskInfo} message PipelineTaskInfo message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineTaskInfo.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + return writer; + }; + + /** + * Encodes the specified PipelineTaskInfo message, length delimited. Does not implicitly {@link ml_pipelines.PipelineTaskInfo.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineTaskInfo + * @static + * @param {ml_pipelines.IPipelineTaskInfo} message PipelineTaskInfo message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineTaskInfo.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a PipelineTaskInfo message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineTaskInfo + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineTaskInfo} PipelineTaskInfo + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineTaskInfo.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineTaskInfo(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a PipelineTaskInfo message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineTaskInfo + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineTaskInfo} PipelineTaskInfo + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineTaskInfo.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a PipelineTaskInfo message. + * @function verify + * @memberof ml_pipelines.PipelineTaskInfo + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PipelineTaskInfo.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + return null; + }; + + /** + * Creates a PipelineTaskInfo message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineTaskInfo + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineTaskInfo} PipelineTaskInfo + */ + PipelineTaskInfo.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineTaskInfo) + return object; + var message = new $root.ml_pipelines.PipelineTaskInfo(); + if (object.name != null) + message.name = String(object.name); + return message; + }; + + /** + * Creates a plain object from a PipelineTaskInfo message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineTaskInfo + * @static + * @param {ml_pipelines.PipelineTaskInfo} message PipelineTaskInfo + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + PipelineTaskInfo.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.name = ""; + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + return object; + }; + + /** + * Converts this PipelineTaskInfo to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineTaskInfo + * @instance + * @returns {Object.<string,*>} JSON object + */ + PipelineTaskInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return PipelineTaskInfo; + })(); + + ml_pipelines.ValueOrRuntimeParameter = (function() { + + /** + * Properties of a ValueOrRuntimeParameter. + * @memberof ml_pipelines + * @interface IValueOrRuntimeParameter + * @property {ml_pipelines.IValue|null} [constantValue] ValueOrRuntimeParameter constantValue + * @property {string|null} [runtimeParameter] ValueOrRuntimeParameter runtimeParameter + */ + + /** + * Constructs a new ValueOrRuntimeParameter. + * @memberof ml_pipelines + * @classdesc Represents a ValueOrRuntimeParameter. + * @implements IValueOrRuntimeParameter + * @constructor + * @param {ml_pipelines.IValueOrRuntimeParameter=} [properties] Properties to set + */ + function ValueOrRuntimeParameter(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ValueOrRuntimeParameter constantValue. + * @member {ml_pipelines.IValue|null|undefined} constantValue + * @memberof ml_pipelines.ValueOrRuntimeParameter + * @instance + */ + ValueOrRuntimeParameter.prototype.constantValue = null; + + /** + * ValueOrRuntimeParameter runtimeParameter. + * @member {string|null|undefined} runtimeParameter + * @memberof ml_pipelines.ValueOrRuntimeParameter + * @instance + */ + ValueOrRuntimeParameter.prototype.runtimeParameter = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * ValueOrRuntimeParameter value. + * @member {"constantValue"|"runtimeParameter"|undefined} value + * @memberof ml_pipelines.ValueOrRuntimeParameter + * @instance + */ + Object.defineProperty(ValueOrRuntimeParameter.prototype, "value", { + get: $util.oneOfGetter($oneOfFields = ["constantValue", "runtimeParameter"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new ValueOrRuntimeParameter instance using the specified properties. + * @function create + * @memberof ml_pipelines.ValueOrRuntimeParameter + * @static + * @param {ml_pipelines.IValueOrRuntimeParameter=} [properties] Properties to set + * @returns {ml_pipelines.ValueOrRuntimeParameter} ValueOrRuntimeParameter instance + */ + ValueOrRuntimeParameter.create = function create(properties) { + return new ValueOrRuntimeParameter(properties); + }; + + /** + * Encodes the specified ValueOrRuntimeParameter message. Does not implicitly {@link ml_pipelines.ValueOrRuntimeParameter.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ValueOrRuntimeParameter + * @static + * @param {ml_pipelines.IValueOrRuntimeParameter} message ValueOrRuntimeParameter message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ValueOrRuntimeParameter.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.constantValue != null && Object.hasOwnProperty.call(message, "constantValue")) + $root.ml_pipelines.Value.encode(message.constantValue, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.runtimeParameter != null && Object.hasOwnProperty.call(message, "runtimeParameter")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.runtimeParameter); + return writer; + }; + + /** + * Encodes the specified ValueOrRuntimeParameter message, length delimited. Does not implicitly {@link ml_pipelines.ValueOrRuntimeParameter.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ValueOrRuntimeParameter + * @static + * @param {ml_pipelines.IValueOrRuntimeParameter} message ValueOrRuntimeParameter message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ValueOrRuntimeParameter.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ValueOrRuntimeParameter message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ValueOrRuntimeParameter + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ValueOrRuntimeParameter} ValueOrRuntimeParameter + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ValueOrRuntimeParameter.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ValueOrRuntimeParameter(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.constantValue = $root.ml_pipelines.Value.decode(reader, reader.uint32()); + break; + case 2: + message.runtimeParameter = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ValueOrRuntimeParameter message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ValueOrRuntimeParameter + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ValueOrRuntimeParameter} ValueOrRuntimeParameter + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ValueOrRuntimeParameter.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ValueOrRuntimeParameter message. + * @function verify + * @memberof ml_pipelines.ValueOrRuntimeParameter + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ValueOrRuntimeParameter.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.constantValue != null && message.hasOwnProperty("constantValue")) { + properties.value = 1; + { + var error = $root.ml_pipelines.Value.verify(message.constantValue); + if (error) + return "constantValue." + error; + } + } + if (message.runtimeParameter != null && message.hasOwnProperty("runtimeParameter")) { + if (properties.value === 1) + return "value: multiple values"; + properties.value = 1; + if (!$util.isString(message.runtimeParameter)) + return "runtimeParameter: string expected"; + } + return null; + }; + + /** + * Creates a ValueOrRuntimeParameter message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ValueOrRuntimeParameter + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ValueOrRuntimeParameter} ValueOrRuntimeParameter + */ + ValueOrRuntimeParameter.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ValueOrRuntimeParameter) + return object; + var message = new $root.ml_pipelines.ValueOrRuntimeParameter(); + if (object.constantValue != null) { + if (typeof object.constantValue !== "object") + throw TypeError(".ml_pipelines.ValueOrRuntimeParameter.constantValue: object expected"); + message.constantValue = $root.ml_pipelines.Value.fromObject(object.constantValue); + } + if (object.runtimeParameter != null) + message.runtimeParameter = String(object.runtimeParameter); + return message; + }; + + /** + * Creates a plain object from a ValueOrRuntimeParameter message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ValueOrRuntimeParameter + * @static + * @param {ml_pipelines.ValueOrRuntimeParameter} message ValueOrRuntimeParameter + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ValueOrRuntimeParameter.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (message.constantValue != null && message.hasOwnProperty("constantValue")) { + object.constantValue = $root.ml_pipelines.Value.toObject(message.constantValue, options); + if (options.oneofs) + object.value = "constantValue"; + } + if (message.runtimeParameter != null && message.hasOwnProperty("runtimeParameter")) { + object.runtimeParameter = message.runtimeParameter; + if (options.oneofs) + object.value = "runtimeParameter"; + } + return object; + }; + + /** + * Converts this ValueOrRuntimeParameter to JSON. + * @function toJSON + * @memberof ml_pipelines.ValueOrRuntimeParameter + * @instance + * @returns {Object.<string,*>} JSON object + */ + ValueOrRuntimeParameter.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ValueOrRuntimeParameter; + })(); + + ml_pipelines.PipelineDeploymentConfig = (function() { + + /** + * Properties of a PipelineDeploymentConfig. + * @memberof ml_pipelines + * @interface IPipelineDeploymentConfig + * @property {Object.<string,ml_pipelines.PipelineDeploymentConfig.IExecutorSpec>|null} [executors] PipelineDeploymentConfig executors + */ + + /** + * Constructs a new PipelineDeploymentConfig. + * @memberof ml_pipelines + * @classdesc Represents a PipelineDeploymentConfig. + * @implements IPipelineDeploymentConfig + * @constructor + * @param {ml_pipelines.IPipelineDeploymentConfig=} [properties] Properties to set + */ + function PipelineDeploymentConfig(properties) { + this.executors = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * PipelineDeploymentConfig executors. + * @member {Object.<string,ml_pipelines.PipelineDeploymentConfig.IExecutorSpec>} executors + * @memberof ml_pipelines.PipelineDeploymentConfig + * @instance + */ + PipelineDeploymentConfig.prototype.executors = $util.emptyObject; + + /** + * Creates a new PipelineDeploymentConfig instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineDeploymentConfig + * @static + * @param {ml_pipelines.IPipelineDeploymentConfig=} [properties] Properties to set + * @returns {ml_pipelines.PipelineDeploymentConfig} PipelineDeploymentConfig instance + */ + PipelineDeploymentConfig.create = function create(properties) { + return new PipelineDeploymentConfig(properties); + }; + + /** + * Encodes the specified PipelineDeploymentConfig message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineDeploymentConfig + * @static + * @param {ml_pipelines.IPipelineDeploymentConfig} message PipelineDeploymentConfig message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineDeploymentConfig.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.executors != null && Object.hasOwnProperty.call(message, "executors")) + for (var keys = Object.keys(message.executors), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.encode(message.executors[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + return writer; + }; + + /** + * Encodes the specified PipelineDeploymentConfig message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig + * @static + * @param {ml_pipelines.IPipelineDeploymentConfig} message PipelineDeploymentConfig message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineDeploymentConfig.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a PipelineDeploymentConfig message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineDeploymentConfig + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineDeploymentConfig} PipelineDeploymentConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineDeploymentConfig.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineDeploymentConfig(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (message.executors === $util.emptyObject) + message.executors = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.executors[key] = value; + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a PipelineDeploymentConfig message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineDeploymentConfig} PipelineDeploymentConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineDeploymentConfig.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a PipelineDeploymentConfig message. + * @function verify + * @memberof ml_pipelines.PipelineDeploymentConfig + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PipelineDeploymentConfig.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.executors != null && message.hasOwnProperty("executors")) { + if (!$util.isObject(message.executors)) + return "executors: object expected"; + var key = Object.keys(message.executors); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.verify(message.executors[key[i]]); + if (error) + return "executors." + error; + } + } + return null; + }; + + /** + * Creates a PipelineDeploymentConfig message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineDeploymentConfig + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineDeploymentConfig} PipelineDeploymentConfig + */ + PipelineDeploymentConfig.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineDeploymentConfig) + return object; + var message = new $root.ml_pipelines.PipelineDeploymentConfig(); + if (object.executors) { + if (typeof object.executors !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.executors: object expected"); + message.executors = {}; + for (var keys = Object.keys(object.executors), i = 0; i < keys.length; ++i) { + if (typeof object.executors[keys[i]] !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.executors: object expected"); + message.executors[keys[i]] = $root.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.fromObject(object.executors[keys[i]]); + } + } + return message; + }; + + /** + * Creates a plain object from a PipelineDeploymentConfig message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineDeploymentConfig + * @static + * @param {ml_pipelines.PipelineDeploymentConfig} message PipelineDeploymentConfig + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + PipelineDeploymentConfig.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) + object.executors = {}; + var keys2; + if (message.executors && (keys2 = Object.keys(message.executors)).length) { + object.executors = {}; + for (var j = 0; j < keys2.length; ++j) + object.executors[keys2[j]] = $root.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.toObject(message.executors[keys2[j]], options); + } + return object; + }; + + /** + * Converts this PipelineDeploymentConfig to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineDeploymentConfig + * @instance + * @returns {Object.<string,*>} JSON object + */ + PipelineDeploymentConfig.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PipelineDeploymentConfig.PipelineContainerSpec = (function() { + + /** + * Properties of a PipelineContainerSpec. + * @memberof ml_pipelines.PipelineDeploymentConfig + * @interface IPipelineContainerSpec + * @property {string|null} [image] PipelineContainerSpec image + * @property {Array.<string>|null} [command] PipelineContainerSpec command + * @property {Array.<string>|null} [args] PipelineContainerSpec args + * @property {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ILifecycle|null} [lifecycle] PipelineContainerSpec lifecycle + * @property {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.IResourceSpec|null} [resources] PipelineContainerSpec resources + */ + + /** + * Constructs a new PipelineContainerSpec. + * @memberof ml_pipelines.PipelineDeploymentConfig + * @classdesc Represents a PipelineContainerSpec. + * @implements IPipelineContainerSpec + * @constructor + * @param {ml_pipelines.PipelineDeploymentConfig.IPipelineContainerSpec=} [properties] Properties to set + */ + function PipelineContainerSpec(properties) { + this.command = []; + this.args = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * PipelineContainerSpec image. + * @member {string} image + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @instance + */ + PipelineContainerSpec.prototype.image = ""; + + /** + * PipelineContainerSpec command. + * @member {Array.<string>} command + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @instance + */ + PipelineContainerSpec.prototype.command = $util.emptyArray; + + /** + * PipelineContainerSpec args. + * @member {Array.<string>} args + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @instance + */ + PipelineContainerSpec.prototype.args = $util.emptyArray; + + /** + * PipelineContainerSpec lifecycle. + * @member {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ILifecycle|null|undefined} lifecycle + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @instance + */ + PipelineContainerSpec.prototype.lifecycle = null; + + /** + * PipelineContainerSpec resources. + * @member {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.IResourceSpec|null|undefined} resources + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @instance + */ + PipelineContainerSpec.prototype.resources = null; + + /** + * Creates a new PipelineContainerSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IPipelineContainerSpec=} [properties] Properties to set + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} PipelineContainerSpec instance + */ + PipelineContainerSpec.create = function create(properties) { + return new PipelineContainerSpec(properties); + }; + + /** + * Encodes the specified PipelineContainerSpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IPipelineContainerSpec} message PipelineContainerSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineContainerSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.image != null && Object.hasOwnProperty.call(message, "image")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.image); + if (message.command != null && message.command.length) + for (var i = 0; i < message.command.length; ++i) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.command[i]); + if (message.args != null && message.args.length) + for (var i = 0; i < message.args.length; ++i) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.args[i]); + if (message.lifecycle != null && Object.hasOwnProperty.call(message, "lifecycle")) + $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.encode(message.lifecycle, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.resources != null && Object.hasOwnProperty.call(message, "resources")) + $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.encode(message.resources, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified PipelineContainerSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IPipelineContainerSpec} message PipelineContainerSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineContainerSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a PipelineContainerSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} PipelineContainerSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineContainerSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.image = reader.string(); + break; + case 2: + if (!(message.command && message.command.length)) + message.command = []; + message.command.push(reader.string()); + break; + case 3: + if (!(message.args && message.args.length)) + message.args = []; + message.args.push(reader.string()); + break; + case 4: + message.lifecycle = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.decode(reader, reader.uint32()); + break; + case 5: + message.resources = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a PipelineContainerSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} PipelineContainerSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineContainerSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a PipelineContainerSpec message. + * @function verify + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PipelineContainerSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.image != null && message.hasOwnProperty("image")) + if (!$util.isString(message.image)) + return "image: string expected"; + if (message.command != null && message.hasOwnProperty("command")) { + if (!Array.isArray(message.command)) + return "command: array expected"; + for (var i = 0; i < message.command.length; ++i) + if (!$util.isString(message.command[i])) + return "command: string[] expected"; + } + if (message.args != null && message.hasOwnProperty("args")) { + if (!Array.isArray(message.args)) + return "args: array expected"; + for (var i = 0; i < message.args.length; ++i) + if (!$util.isString(message.args[i])) + return "args: string[] expected"; + } + if (message.lifecycle != null && message.hasOwnProperty("lifecycle")) { + var error = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.verify(message.lifecycle); + if (error) + return "lifecycle." + error; + } + if (message.resources != null && message.hasOwnProperty("resources")) { + var error = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.verify(message.resources); + if (error) + return "resources." + error; + } + return null; + }; + + /** + * Creates a PipelineContainerSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} PipelineContainerSpec + */ + PipelineContainerSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec) + return object; + var message = new $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec(); + if (object.image != null) + message.image = String(object.image); + if (object.command) { + if (!Array.isArray(object.command)) + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.command: array expected"); + message.command = []; + for (var i = 0; i < object.command.length; ++i) + message.command[i] = String(object.command[i]); + } + if (object.args) { + if (!Array.isArray(object.args)) + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.args: array expected"); + message.args = []; + for (var i = 0; i < object.args.length; ++i) + message.args[i] = String(object.args[i]); + } + if (object.lifecycle != null) { + if (typeof object.lifecycle !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.lifecycle: object expected"); + message.lifecycle = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.fromObject(object.lifecycle); + } + if (object.resources != null) { + if (typeof object.resources !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.resources: object expected"); + message.resources = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.fromObject(object.resources); + } + return message; + }; + + /** + * Creates a plain object from a PipelineContainerSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} message PipelineContainerSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + PipelineContainerSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) { + object.command = []; + object.args = []; + } + if (options.defaults) { + object.image = ""; + object.lifecycle = null; + object.resources = null; + } + if (message.image != null && message.hasOwnProperty("image")) + object.image = message.image; + if (message.command && message.command.length) { + object.command = []; + for (var j = 0; j < message.command.length; ++j) + object.command[j] = message.command[j]; + } + if (message.args && message.args.length) { + object.args = []; + for (var j = 0; j < message.args.length; ++j) + object.args[j] = message.args[j]; + } + if (message.lifecycle != null && message.hasOwnProperty("lifecycle")) + object.lifecycle = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.toObject(message.lifecycle, options); + if (message.resources != null && message.hasOwnProperty("resources")) + object.resources = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.toObject(message.resources, options); + return object; + }; + + /** + * Converts this PipelineContainerSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + PipelineContainerSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PipelineContainerSpec.Lifecycle = (function() { + + /** + * Properties of a Lifecycle. + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @interface ILifecycle + * @property {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.IExec|null} [preCacheCheck] Lifecycle preCacheCheck + */ + + /** + * Constructs a new Lifecycle. + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @classdesc Represents a Lifecycle. + * @implements ILifecycle + * @constructor + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ILifecycle=} [properties] Properties to set + */ + function Lifecycle(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Lifecycle preCacheCheck. + * @member {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.IExec|null|undefined} preCacheCheck + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + * @instance + */ + Lifecycle.prototype.preCacheCheck = null; + + /** + * Creates a new Lifecycle instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ILifecycle=} [properties] Properties to set + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} Lifecycle instance + */ + Lifecycle.create = function create(properties) { + return new Lifecycle(properties); + }; + + /** + * Encodes the specified Lifecycle message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ILifecycle} message Lifecycle message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Lifecycle.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.preCacheCheck != null && Object.hasOwnProperty.call(message, "preCacheCheck")) + $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.encode(message.preCacheCheck, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified Lifecycle message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ILifecycle} message Lifecycle message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Lifecycle.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Lifecycle message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} Lifecycle + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Lifecycle.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.preCacheCheck = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Lifecycle message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} Lifecycle + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Lifecycle.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Lifecycle message. + * @function verify + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Lifecycle.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.preCacheCheck != null && message.hasOwnProperty("preCacheCheck")) { + var error = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.verify(message.preCacheCheck); + if (error) + return "preCacheCheck." + error; + } + return null; + }; + + /** + * Creates a Lifecycle message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} Lifecycle + */ + Lifecycle.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle) + return object; + var message = new $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle(); + if (object.preCacheCheck != null) { + if (typeof object.preCacheCheck !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.preCacheCheck: object expected"); + message.preCacheCheck = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.fromObject(object.preCacheCheck); + } + return message; + }; + + /** + * Creates a plain object from a Lifecycle message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} message Lifecycle + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + Lifecycle.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.preCacheCheck = null; + if (message.preCacheCheck != null && message.hasOwnProperty("preCacheCheck")) + object.preCacheCheck = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.toObject(message.preCacheCheck, options); + return object; + }; + + /** + * Converts this Lifecycle to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + * @instance + * @returns {Object.<string,*>} JSON object + */ + Lifecycle.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Lifecycle.Exec = (function() { + + /** + * Properties of an Exec. + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + * @interface IExec + * @property {Array.<string>|null} [command] Exec command + * @property {Array.<string>|null} [args] Exec args + */ + + /** + * Constructs a new Exec. + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle + * @classdesc Represents an Exec. + * @implements IExec + * @constructor + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.IExec=} [properties] Properties to set + */ + function Exec(properties) { + this.command = []; + this.args = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Exec command. + * @member {Array.<string>} command + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec + * @instance + */ + Exec.prototype.command = $util.emptyArray; + + /** + * Exec args. + * @member {Array.<string>} args + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec + * @instance + */ + Exec.prototype.args = $util.emptyArray; + + /** + * Creates a new Exec instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.IExec=} [properties] Properties to set + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} Exec instance + */ + Exec.create = function create(properties) { + return new Exec(properties); + }; + + /** + * Encodes the specified Exec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.IExec} message Exec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Exec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.command != null && message.command.length) + for (var i = 0; i < message.command.length; ++i) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.command[i]); + if (message.args != null && message.args.length) + for (var i = 0; i < message.args.length; ++i) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.args[i]); + return writer; + }; + + /** + * Encodes the specified Exec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.IExec} message Exec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Exec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an Exec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} Exec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Exec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 2: + if (!(message.command && message.command.length)) + message.command = []; + message.command.push(reader.string()); + break; + case 3: + if (!(message.args && message.args.length)) + message.args = []; + message.args.push(reader.string()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an Exec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} Exec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Exec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an Exec message. + * @function verify + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Exec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.command != null && message.hasOwnProperty("command")) { + if (!Array.isArray(message.command)) + return "command: array expected"; + for (var i = 0; i < message.command.length; ++i) + if (!$util.isString(message.command[i])) + return "command: string[] expected"; + } + if (message.args != null && message.hasOwnProperty("args")) { + if (!Array.isArray(message.args)) + return "args: array expected"; + for (var i = 0; i < message.args.length; ++i) + if (!$util.isString(message.args[i])) + return "args: string[] expected"; + } + return null; + }; + + /** + * Creates an Exec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} Exec + */ + Exec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec) + return object; + var message = new $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec(); + if (object.command) { + if (!Array.isArray(object.command)) + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.command: array expected"); + message.command = []; + for (var i = 0; i < object.command.length; ++i) + message.command[i] = String(object.command[i]); + } + if (object.args) { + if (!Array.isArray(object.args)) + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.args: array expected"); + message.args = []; + for (var i = 0; i < object.args.length; ++i) + message.args[i] = String(object.args[i]); + } + return message; + }; + + /** + * Creates a plain object from an Exec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} message Exec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + Exec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) { + object.command = []; + object.args = []; + } + if (message.command && message.command.length) { + object.command = []; + for (var j = 0; j < message.command.length; ++j) + object.command[j] = message.command[j]; + } + if (message.args && message.args.length) { + object.args = []; + for (var j = 0; j < message.args.length; ++j) + object.args[j] = message.args[j]; + } + return object; + }; + + /** + * Converts this Exec to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec + * @instance + * @returns {Object.<string,*>} JSON object + */ + Exec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Exec; + })(); + + return Lifecycle; + })(); + + PipelineContainerSpec.ResourceSpec = (function() { + + /** + * Properties of a ResourceSpec. + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @interface IResourceSpec + * @property {number|null} [cpuLimit] ResourceSpec cpuLimit + * @property {number|null} [memoryLimit] ResourceSpec memoryLimit + * @property {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.IAcceleratorConfig|null} [accelerator] ResourceSpec accelerator + */ + + /** + * Constructs a new ResourceSpec. + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec + * @classdesc Represents a ResourceSpec. + * @implements IResourceSpec + * @constructor + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.IResourceSpec=} [properties] Properties to set + */ + function ResourceSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ResourceSpec cpuLimit. + * @member {number} cpuLimit + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @instance + */ + ResourceSpec.prototype.cpuLimit = 0; + + /** + * ResourceSpec memoryLimit. + * @member {number} memoryLimit + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @instance + */ + ResourceSpec.prototype.memoryLimit = 0; + + /** + * ResourceSpec accelerator. + * @member {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.IAcceleratorConfig|null|undefined} accelerator + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @instance + */ + ResourceSpec.prototype.accelerator = null; + + /** + * Creates a new ResourceSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.IResourceSpec=} [properties] Properties to set + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} ResourceSpec instance + */ + ResourceSpec.create = function create(properties) { + return new ResourceSpec(properties); + }; + + /** + * Encodes the specified ResourceSpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.IResourceSpec} message ResourceSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ResourceSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.cpuLimit != null && Object.hasOwnProperty.call(message, "cpuLimit")) + writer.uint32(/* id 1, wireType 1 =*/9).double(message.cpuLimit); + if (message.memoryLimit != null && Object.hasOwnProperty.call(message, "memoryLimit")) + writer.uint32(/* id 2, wireType 1 =*/17).double(message.memoryLimit); + if (message.accelerator != null && Object.hasOwnProperty.call(message, "accelerator")) + $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.encode(message.accelerator, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ResourceSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.IResourceSpec} message ResourceSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ResourceSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ResourceSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} ResourceSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ResourceSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.cpuLimit = reader.double(); + break; + case 2: + message.memoryLimit = reader.double(); + break; + case 3: + message.accelerator = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ResourceSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} ResourceSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ResourceSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ResourceSpec message. + * @function verify + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ResourceSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.cpuLimit != null && message.hasOwnProperty("cpuLimit")) + if (typeof message.cpuLimit !== "number") + return "cpuLimit: number expected"; + if (message.memoryLimit != null && message.hasOwnProperty("memoryLimit")) + if (typeof message.memoryLimit !== "number") + return "memoryLimit: number expected"; + if (message.accelerator != null && message.hasOwnProperty("accelerator")) { + var error = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.verify(message.accelerator); + if (error) + return "accelerator." + error; + } + return null; + }; + + /** + * Creates a ResourceSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} ResourceSpec + */ + ResourceSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec) + return object; + var message = new $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec(); + if (object.cpuLimit != null) + message.cpuLimit = Number(object.cpuLimit); + if (object.memoryLimit != null) + message.memoryLimit = Number(object.memoryLimit); + if (object.accelerator != null) { + if (typeof object.accelerator !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.accelerator: object expected"); + message.accelerator = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.fromObject(object.accelerator); + } + return message; + }; + + /** + * Creates a plain object from a ResourceSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} message ResourceSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ResourceSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.cpuLimit = 0; + object.memoryLimit = 0; + object.accelerator = null; + } + if (message.cpuLimit != null && message.hasOwnProperty("cpuLimit")) + object.cpuLimit = options.json && !isFinite(message.cpuLimit) ? String(message.cpuLimit) : message.cpuLimit; + if (message.memoryLimit != null && message.hasOwnProperty("memoryLimit")) + object.memoryLimit = options.json && !isFinite(message.memoryLimit) ? String(message.memoryLimit) : message.memoryLimit; + if (message.accelerator != null && message.hasOwnProperty("accelerator")) + object.accelerator = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.toObject(message.accelerator, options); + return object; + }; + + /** + * Converts this ResourceSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ResourceSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ResourceSpec.AcceleratorConfig = (function() { + + /** + * Properties of an AcceleratorConfig. + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @interface IAcceleratorConfig + * @property {string|null} [type] AcceleratorConfig type + * @property {number|Long|null} [count] AcceleratorConfig count + */ + + /** + * Constructs a new AcceleratorConfig. + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec + * @classdesc Represents an AcceleratorConfig. + * @implements IAcceleratorConfig + * @constructor + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.IAcceleratorConfig=} [properties] Properties to set + */ + function AcceleratorConfig(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AcceleratorConfig type. + * @member {string} type + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig + * @instance + */ + AcceleratorConfig.prototype.type = ""; + + /** + * AcceleratorConfig count. + * @member {number|Long} count + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig + * @instance + */ + AcceleratorConfig.prototype.count = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * Creates a new AcceleratorConfig instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.IAcceleratorConfig=} [properties] Properties to set + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} AcceleratorConfig instance + */ + AcceleratorConfig.create = function create(properties) { + return new AcceleratorConfig(properties); + }; + + /** + * Encodes the specified AcceleratorConfig message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.IAcceleratorConfig} message AcceleratorConfig message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AcceleratorConfig.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.type != null && Object.hasOwnProperty.call(message, "type")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.type); + if (message.count != null && Object.hasOwnProperty.call(message, "count")) + writer.uint32(/* id 2, wireType 0 =*/16).int64(message.count); + return writer; + }; + + /** + * Encodes the specified AcceleratorConfig message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.IAcceleratorConfig} message AcceleratorConfig message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AcceleratorConfig.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AcceleratorConfig message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} AcceleratorConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AcceleratorConfig.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.type = reader.string(); + break; + case 2: + message.count = reader.int64(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AcceleratorConfig message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} AcceleratorConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AcceleratorConfig.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AcceleratorConfig message. + * @function verify + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AcceleratorConfig.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.type != null && message.hasOwnProperty("type")) + if (!$util.isString(message.type)) + return "type: string expected"; + if (message.count != null && message.hasOwnProperty("count")) + if (!$util.isInteger(message.count) && !(message.count && $util.isInteger(message.count.low) && $util.isInteger(message.count.high))) + return "count: integer|Long expected"; + return null; + }; + + /** + * Creates an AcceleratorConfig message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} AcceleratorConfig + */ + AcceleratorConfig.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig) + return object; + var message = new $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig(); + if (object.type != null) + message.type = String(object.type); + if (object.count != null) + if ($util.Long) + (message.count = $util.Long.fromValue(object.count)).unsigned = false; + else if (typeof object.count === "string") + message.count = parseInt(object.count, 10); + else if (typeof object.count === "number") + message.count = object.count; + else if (typeof object.count === "object") + message.count = new $util.LongBits(object.count.low >>> 0, object.count.high >>> 0).toNumber(); + return message; + }; + + /** + * Creates a plain object from an AcceleratorConfig message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} message AcceleratorConfig + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + AcceleratorConfig.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.type = ""; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.count = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.count = options.longs === String ? "0" : 0; + } + if (message.type != null && message.hasOwnProperty("type")) + object.type = message.type; + if (message.count != null && message.hasOwnProperty("count")) + if (typeof message.count === "number") + object.count = options.longs === String ? String(message.count) : message.count; + else + object.count = options.longs === String ? $util.Long.prototype.toString.call(message.count) : options.longs === Number ? new $util.LongBits(message.count.low >>> 0, message.count.high >>> 0).toNumber() : message.count; + return object; + }; + + /** + * Converts this AcceleratorConfig to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig + * @instance + * @returns {Object.<string,*>} JSON object + */ + AcceleratorConfig.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AcceleratorConfig; + })(); + + return ResourceSpec; + })(); + + return PipelineContainerSpec; + })(); + + PipelineDeploymentConfig.ImporterSpec = (function() { + + /** + * Properties of an ImporterSpec. + * @memberof ml_pipelines.PipelineDeploymentConfig + * @interface IImporterSpec + * @property {ml_pipelines.IValueOrRuntimeParameter|null} [artifactUri] ImporterSpec artifactUri + * @property {ml_pipelines.IArtifactTypeSchema|null} [typeSchema] ImporterSpec typeSchema + * @property {Object.<string,ml_pipelines.IValueOrRuntimeParameter>|null} [properties] ImporterSpec properties + * @property {Object.<string,ml_pipelines.IValueOrRuntimeParameter>|null} [customProperties] ImporterSpec customProperties + * @property {google.protobuf.IStruct|null} [metadata] ImporterSpec metadata + * @property {boolean|null} [reimport] ImporterSpec reimport + */ + + /** + * Constructs a new ImporterSpec. + * @memberof ml_pipelines.PipelineDeploymentConfig + * @classdesc Represents an ImporterSpec. + * @implements IImporterSpec + * @constructor + * @param {ml_pipelines.PipelineDeploymentConfig.IImporterSpec=} [properties] Properties to set + */ + function ImporterSpec(properties) { + this.properties = {}; + this.customProperties = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImporterSpec artifactUri. + * @member {ml_pipelines.IValueOrRuntimeParameter|null|undefined} artifactUri + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @instance + */ + ImporterSpec.prototype.artifactUri = null; + + /** + * ImporterSpec typeSchema. + * @member {ml_pipelines.IArtifactTypeSchema|null|undefined} typeSchema + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @instance + */ + ImporterSpec.prototype.typeSchema = null; + + /** + * ImporterSpec properties. + * @member {Object.<string,ml_pipelines.IValueOrRuntimeParameter>} properties + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @instance + */ + ImporterSpec.prototype.properties = $util.emptyObject; + + /** + * ImporterSpec customProperties. + * @member {Object.<string,ml_pipelines.IValueOrRuntimeParameter>} customProperties + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @instance + */ + ImporterSpec.prototype.customProperties = $util.emptyObject; + + /** + * ImporterSpec metadata. + * @member {google.protobuf.IStruct|null|undefined} metadata + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @instance + */ + ImporterSpec.prototype.metadata = null; + + /** + * ImporterSpec reimport. + * @member {boolean} reimport + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @instance + */ + ImporterSpec.prototype.reimport = false; + + /** + * Creates a new ImporterSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IImporterSpec=} [properties] Properties to set + * @returns {ml_pipelines.PipelineDeploymentConfig.ImporterSpec} ImporterSpec instance + */ + ImporterSpec.create = function create(properties) { + return new ImporterSpec(properties); + }; + + /** + * Encodes the specified ImporterSpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ImporterSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IImporterSpec} message ImporterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImporterSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.artifactUri != null && Object.hasOwnProperty.call(message, "artifactUri")) + $root.ml_pipelines.ValueOrRuntimeParameter.encode(message.artifactUri, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.typeSchema != null && Object.hasOwnProperty.call(message, "typeSchema")) + $root.ml_pipelines.ArtifactTypeSchema.encode(message.typeSchema, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.properties != null && Object.hasOwnProperty.call(message, "properties")) + for (var keys = Object.keys(message.properties), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 3, wireType 2 =*/26).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ValueOrRuntimeParameter.encode(message.properties[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.customProperties != null && Object.hasOwnProperty.call(message, "customProperties")) + for (var keys = Object.keys(message.customProperties), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 4, wireType 2 =*/34).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ValueOrRuntimeParameter.encode(message.customProperties[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.reimport != null && Object.hasOwnProperty.call(message, "reimport")) + writer.uint32(/* id 5, wireType 0 =*/40).bool(message.reimport); + if (message.metadata != null && Object.hasOwnProperty.call(message, "metadata")) + $root.google.protobuf.Struct.encode(message.metadata, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ImporterSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ImporterSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IImporterSpec} message ImporterSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImporterSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImporterSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineDeploymentConfig.ImporterSpec} ImporterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImporterSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineDeploymentConfig.ImporterSpec(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.artifactUri = $root.ml_pipelines.ValueOrRuntimeParameter.decode(reader, reader.uint32()); + break; + case 2: + message.typeSchema = $root.ml_pipelines.ArtifactTypeSchema.decode(reader, reader.uint32()); + break; + case 3: + if (message.properties === $util.emptyObject) + message.properties = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ValueOrRuntimeParameter.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.properties[key] = value; + break; + case 4: + if (message.customProperties === $util.emptyObject) + message.customProperties = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ValueOrRuntimeParameter.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.customProperties[key] = value; + break; + case 6: + message.metadata = $root.google.protobuf.Struct.decode(reader, reader.uint32()); + break; + case 5: + message.reimport = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImporterSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineDeploymentConfig.ImporterSpec} ImporterSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImporterSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImporterSpec message. + * @function verify + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImporterSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.artifactUri != null && message.hasOwnProperty("artifactUri")) { + var error = $root.ml_pipelines.ValueOrRuntimeParameter.verify(message.artifactUri); + if (error) + return "artifactUri." + error; + } + if (message.typeSchema != null && message.hasOwnProperty("typeSchema")) { + var error = $root.ml_pipelines.ArtifactTypeSchema.verify(message.typeSchema); + if (error) + return "typeSchema." + error; + } + if (message.properties != null && message.hasOwnProperty("properties")) { + if (!$util.isObject(message.properties)) + return "properties: object expected"; + var key = Object.keys(message.properties); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ValueOrRuntimeParameter.verify(message.properties[key[i]]); + if (error) + return "properties." + error; + } + } + if (message.customProperties != null && message.hasOwnProperty("customProperties")) { + if (!$util.isObject(message.customProperties)) + return "customProperties: object expected"; + var key = Object.keys(message.customProperties); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ValueOrRuntimeParameter.verify(message.customProperties[key[i]]); + if (error) + return "customProperties." + error; + } + } + if (message.metadata != null && message.hasOwnProperty("metadata")) { + var error = $root.google.protobuf.Struct.verify(message.metadata); + if (error) + return "metadata." + error; + } + if (message.reimport != null && message.hasOwnProperty("reimport")) + if (typeof message.reimport !== "boolean") + return "reimport: boolean expected"; + return null; + }; + + /** + * Creates an ImporterSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineDeploymentConfig.ImporterSpec} ImporterSpec + */ + ImporterSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineDeploymentConfig.ImporterSpec) + return object; + var message = new $root.ml_pipelines.PipelineDeploymentConfig.ImporterSpec(); + if (object.artifactUri != null) { + if (typeof object.artifactUri !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.ImporterSpec.artifactUri: object expected"); + message.artifactUri = $root.ml_pipelines.ValueOrRuntimeParameter.fromObject(object.artifactUri); + } + if (object.typeSchema != null) { + if (typeof object.typeSchema !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.ImporterSpec.typeSchema: object expected"); + message.typeSchema = $root.ml_pipelines.ArtifactTypeSchema.fromObject(object.typeSchema); + } + if (object.properties) { + if (typeof object.properties !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.ImporterSpec.properties: object expected"); + message.properties = {}; + for (var keys = Object.keys(object.properties), i = 0; i < keys.length; ++i) { + if (typeof object.properties[keys[i]] !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.ImporterSpec.properties: object expected"); + message.properties[keys[i]] = $root.ml_pipelines.ValueOrRuntimeParameter.fromObject(object.properties[keys[i]]); + } + } + if (object.customProperties) { + if (typeof object.customProperties !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.ImporterSpec.customProperties: object expected"); + message.customProperties = {}; + for (var keys = Object.keys(object.customProperties), i = 0; i < keys.length; ++i) { + if (typeof object.customProperties[keys[i]] !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.ImporterSpec.customProperties: object expected"); + message.customProperties[keys[i]] = $root.ml_pipelines.ValueOrRuntimeParameter.fromObject(object.customProperties[keys[i]]); + } + } + if (object.metadata != null) { + if (typeof object.metadata !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.ImporterSpec.metadata: object expected"); + message.metadata = $root.google.protobuf.Struct.fromObject(object.metadata); + } + if (object.reimport != null) + message.reimport = Boolean(object.reimport); + return message; + }; + + /** + * Creates a plain object from an ImporterSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.ImporterSpec} message ImporterSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ImporterSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) { + object.properties = {}; + object.customProperties = {}; + } + if (options.defaults) { + object.artifactUri = null; + object.typeSchema = null; + object.reimport = false; + object.metadata = null; + } + if (message.artifactUri != null && message.hasOwnProperty("artifactUri")) + object.artifactUri = $root.ml_pipelines.ValueOrRuntimeParameter.toObject(message.artifactUri, options); + if (message.typeSchema != null && message.hasOwnProperty("typeSchema")) + object.typeSchema = $root.ml_pipelines.ArtifactTypeSchema.toObject(message.typeSchema, options); + var keys2; + if (message.properties && (keys2 = Object.keys(message.properties)).length) { + object.properties = {}; + for (var j = 0; j < keys2.length; ++j) + object.properties[keys2[j]] = $root.ml_pipelines.ValueOrRuntimeParameter.toObject(message.properties[keys2[j]], options); + } + if (message.customProperties && (keys2 = Object.keys(message.customProperties)).length) { + object.customProperties = {}; + for (var j = 0; j < keys2.length; ++j) + object.customProperties[keys2[j]] = $root.ml_pipelines.ValueOrRuntimeParameter.toObject(message.customProperties[keys2[j]], options); + } + if (message.reimport != null && message.hasOwnProperty("reimport")) + object.reimport = message.reimport; + if (message.metadata != null && message.hasOwnProperty("metadata")) + object.metadata = $root.google.protobuf.Struct.toObject(message.metadata, options); + return object; + }; + + /** + * Converts this ImporterSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineDeploymentConfig.ImporterSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ImporterSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImporterSpec; + })(); + + PipelineDeploymentConfig.ResolverSpec = (function() { + + /** + * Properties of a ResolverSpec. + * @memberof ml_pipelines.PipelineDeploymentConfig + * @interface IResolverSpec + * @property {Object.<string,ml_pipelines.PipelineDeploymentConfig.ResolverSpec.IArtifactQuerySpec>|null} [outputArtifactQueries] ResolverSpec outputArtifactQueries + */ + + /** + * Constructs a new ResolverSpec. + * @memberof ml_pipelines.PipelineDeploymentConfig + * @classdesc Represents a ResolverSpec. + * @implements IResolverSpec + * @constructor + * @param {ml_pipelines.PipelineDeploymentConfig.IResolverSpec=} [properties] Properties to set + */ + function ResolverSpec(properties) { + this.outputArtifactQueries = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ResolverSpec outputArtifactQueries. + * @member {Object.<string,ml_pipelines.PipelineDeploymentConfig.ResolverSpec.IArtifactQuerySpec>} outputArtifactQueries + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec + * @instance + */ + ResolverSpec.prototype.outputArtifactQueries = $util.emptyObject; + + /** + * Creates a new ResolverSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IResolverSpec=} [properties] Properties to set + * @returns {ml_pipelines.PipelineDeploymentConfig.ResolverSpec} ResolverSpec instance + */ + ResolverSpec.create = function create(properties) { + return new ResolverSpec(properties); + }; + + /** + * Encodes the specified ResolverSpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ResolverSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IResolverSpec} message ResolverSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ResolverSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.outputArtifactQueries != null && Object.hasOwnProperty.call(message, "outputArtifactQueries")) + for (var keys = Object.keys(message.outputArtifactQueries), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.encode(message.outputArtifactQueries[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + return writer; + }; + + /** + * Encodes the specified ResolverSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ResolverSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IResolverSpec} message ResolverSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ResolverSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ResolverSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineDeploymentConfig.ResolverSpec} ResolverSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ResolverSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (message.outputArtifactQueries === $util.emptyObject) + message.outputArtifactQueries = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.outputArtifactQueries[key] = value; + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ResolverSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineDeploymentConfig.ResolverSpec} ResolverSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ResolverSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ResolverSpec message. + * @function verify + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ResolverSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.outputArtifactQueries != null && message.hasOwnProperty("outputArtifactQueries")) { + if (!$util.isObject(message.outputArtifactQueries)) + return "outputArtifactQueries: object expected"; + var key = Object.keys(message.outputArtifactQueries); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.verify(message.outputArtifactQueries[key[i]]); + if (error) + return "outputArtifactQueries." + error; + } + } + return null; + }; + + /** + * Creates a ResolverSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineDeploymentConfig.ResolverSpec} ResolverSpec + */ + ResolverSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec) + return object; + var message = new $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec(); + if (object.outputArtifactQueries) { + if (typeof object.outputArtifactQueries !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.ResolverSpec.outputArtifactQueries: object expected"); + message.outputArtifactQueries = {}; + for (var keys = Object.keys(object.outputArtifactQueries), i = 0; i < keys.length; ++i) { + if (typeof object.outputArtifactQueries[keys[i]] !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.ResolverSpec.outputArtifactQueries: object expected"); + message.outputArtifactQueries[keys[i]] = $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.fromObject(object.outputArtifactQueries[keys[i]]); + } + } + return message; + }; + + /** + * Creates a plain object from a ResolverSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.ResolverSpec} message ResolverSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ResolverSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) + object.outputArtifactQueries = {}; + var keys2; + if (message.outputArtifactQueries && (keys2 = Object.keys(message.outputArtifactQueries)).length) { + object.outputArtifactQueries = {}; + for (var j = 0; j < keys2.length; ++j) + object.outputArtifactQueries[keys2[j]] = $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.toObject(message.outputArtifactQueries[keys2[j]], options); + } + return object; + }; + + /** + * Converts this ResolverSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ResolverSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ResolverSpec.ArtifactQuerySpec = (function() { + + /** + * Properties of an ArtifactQuerySpec. + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec + * @interface IArtifactQuerySpec + * @property {string|null} [filter] ArtifactQuerySpec filter + * @property {number|null} [limit] ArtifactQuerySpec limit + */ + + /** + * Constructs a new ArtifactQuerySpec. + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec + * @classdesc Represents an ArtifactQuerySpec. + * @implements IArtifactQuerySpec + * @constructor + * @param {ml_pipelines.PipelineDeploymentConfig.ResolverSpec.IArtifactQuerySpec=} [properties] Properties to set + */ + function ArtifactQuerySpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ArtifactQuerySpec filter. + * @member {string} filter + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec + * @instance + */ + ArtifactQuerySpec.prototype.filter = ""; + + /** + * ArtifactQuerySpec limit. + * @member {number} limit + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec + * @instance + */ + ArtifactQuerySpec.prototype.limit = 0; + + /** + * Creates a new ArtifactQuerySpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.ResolverSpec.IArtifactQuerySpec=} [properties] Properties to set + * @returns {ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec} ArtifactQuerySpec instance + */ + ArtifactQuerySpec.create = function create(properties) { + return new ArtifactQuerySpec(properties); + }; + + /** + * Encodes the specified ArtifactQuerySpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.ResolverSpec.IArtifactQuerySpec} message ArtifactQuerySpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactQuerySpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.filter != null && Object.hasOwnProperty.call(message, "filter")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.filter); + if (message.limit != null && Object.hasOwnProperty.call(message, "limit")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.limit); + return writer; + }; + + /** + * Encodes the specified ArtifactQuerySpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.ResolverSpec.IArtifactQuerySpec} message ArtifactQuerySpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactQuerySpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ArtifactQuerySpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec} ArtifactQuerySpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactQuerySpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.filter = reader.string(); + break; + case 2: + message.limit = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ArtifactQuerySpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec} ArtifactQuerySpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactQuerySpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ArtifactQuerySpec message. + * @function verify + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ArtifactQuerySpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.filter != null && message.hasOwnProperty("filter")) + if (!$util.isString(message.filter)) + return "filter: string expected"; + if (message.limit != null && message.hasOwnProperty("limit")) + if (!$util.isInteger(message.limit)) + return "limit: integer expected"; + return null; + }; + + /** + * Creates an ArtifactQuerySpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec} ArtifactQuerySpec + */ + ArtifactQuerySpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec) + return object; + var message = new $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec(); + if (object.filter != null) + message.filter = String(object.filter); + if (object.limit != null) + message.limit = object.limit | 0; + return message; + }; + + /** + * Creates a plain object from an ArtifactQuerySpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec} message ArtifactQuerySpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ArtifactQuerySpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.filter = ""; + object.limit = 0; + } + if (message.filter != null && message.hasOwnProperty("filter")) + object.filter = message.filter; + if (message.limit != null && message.hasOwnProperty("limit")) + object.limit = message.limit; + return object; + }; + + /** + * Converts this ArtifactQuerySpec to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ArtifactQuerySpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ArtifactQuerySpec; + })(); + + return ResolverSpec; + })(); + + PipelineDeploymentConfig.AIPlatformCustomJobSpec = (function() { + + /** + * Properties of a AIPlatformCustomJobSpec. + * @memberof ml_pipelines.PipelineDeploymentConfig + * @interface IAIPlatformCustomJobSpec + * @property {google.protobuf.IStruct|null} [customJob] AIPlatformCustomJobSpec customJob + */ + + /** + * Constructs a new AIPlatformCustomJobSpec. + * @memberof ml_pipelines.PipelineDeploymentConfig + * @classdesc Represents a AIPlatformCustomJobSpec. + * @implements IAIPlatformCustomJobSpec + * @constructor + * @param {ml_pipelines.PipelineDeploymentConfig.IAIPlatformCustomJobSpec=} [properties] Properties to set + */ + function AIPlatformCustomJobSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AIPlatformCustomJobSpec customJob. + * @member {google.protobuf.IStruct|null|undefined} customJob + * @memberof ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec + * @instance + */ + AIPlatformCustomJobSpec.prototype.customJob = null; + + /** + * Creates a new AIPlatformCustomJobSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IAIPlatformCustomJobSpec=} [properties] Properties to set + * @returns {ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} AIPlatformCustomJobSpec instance + */ + AIPlatformCustomJobSpec.create = function create(properties) { + return new AIPlatformCustomJobSpec(properties); + }; + + /** + * Encodes the specified AIPlatformCustomJobSpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IAIPlatformCustomJobSpec} message AIPlatformCustomJobSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AIPlatformCustomJobSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.customJob != null && Object.hasOwnProperty.call(message, "customJob")) + $root.google.protobuf.Struct.encode(message.customJob, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AIPlatformCustomJobSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IAIPlatformCustomJobSpec} message AIPlatformCustomJobSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AIPlatformCustomJobSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a AIPlatformCustomJobSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} AIPlatformCustomJobSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AIPlatformCustomJobSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.customJob = $root.google.protobuf.Struct.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a AIPlatformCustomJobSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} AIPlatformCustomJobSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AIPlatformCustomJobSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a AIPlatformCustomJobSpec message. + * @function verify + * @memberof ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AIPlatformCustomJobSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.customJob != null && message.hasOwnProperty("customJob")) { + var error = $root.google.protobuf.Struct.verify(message.customJob); + if (error) + return "customJob." + error; + } + return null; + }; + + /** + * Creates a AIPlatformCustomJobSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} AIPlatformCustomJobSpec + */ + AIPlatformCustomJobSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec) + return object; + var message = new $root.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec(); + if (object.customJob != null) { + if (typeof object.customJob !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.customJob: object expected"); + message.customJob = $root.google.protobuf.Struct.fromObject(object.customJob); + } + return message; + }; + + /** + * Creates a plain object from a AIPlatformCustomJobSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} message AIPlatformCustomJobSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + AIPlatformCustomJobSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.customJob = null; + if (message.customJob != null && message.hasOwnProperty("customJob")) + object.customJob = $root.google.protobuf.Struct.toObject(message.customJob, options); + return object; + }; + + /** + * Converts this AIPlatformCustomJobSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + AIPlatformCustomJobSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AIPlatformCustomJobSpec; + })(); + + PipelineDeploymentConfig.ExecutorSpec = (function() { + + /** + * Properties of an ExecutorSpec. + * @memberof ml_pipelines.PipelineDeploymentConfig + * @interface IExecutorSpec + * @property {ml_pipelines.PipelineDeploymentConfig.IPipelineContainerSpec|null} [container] ExecutorSpec container + * @property {ml_pipelines.PipelineDeploymentConfig.IImporterSpec|null} [importer] ExecutorSpec importer + * @property {ml_pipelines.PipelineDeploymentConfig.IResolverSpec|null} [resolver] ExecutorSpec resolver + * @property {ml_pipelines.PipelineDeploymentConfig.IAIPlatformCustomJobSpec|null} [customJob] ExecutorSpec customJob + */ + + /** + * Constructs a new ExecutorSpec. + * @memberof ml_pipelines.PipelineDeploymentConfig + * @classdesc Represents an ExecutorSpec. + * @implements IExecutorSpec + * @constructor + * @param {ml_pipelines.PipelineDeploymentConfig.IExecutorSpec=} [properties] Properties to set + */ + function ExecutorSpec(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ExecutorSpec container. + * @member {ml_pipelines.PipelineDeploymentConfig.IPipelineContainerSpec|null|undefined} container + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @instance + */ + ExecutorSpec.prototype.container = null; + + /** + * ExecutorSpec importer. + * @member {ml_pipelines.PipelineDeploymentConfig.IImporterSpec|null|undefined} importer + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @instance + */ + ExecutorSpec.prototype.importer = null; + + /** + * ExecutorSpec resolver. + * @member {ml_pipelines.PipelineDeploymentConfig.IResolverSpec|null|undefined} resolver + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @instance + */ + ExecutorSpec.prototype.resolver = null; + + /** + * ExecutorSpec customJob. + * @member {ml_pipelines.PipelineDeploymentConfig.IAIPlatformCustomJobSpec|null|undefined} customJob + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @instance + */ + ExecutorSpec.prototype.customJob = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * ExecutorSpec spec. + * @member {"container"|"importer"|"resolver"|"customJob"|undefined} spec + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @instance + */ + Object.defineProperty(ExecutorSpec.prototype, "spec", { + get: $util.oneOfGetter($oneOfFields = ["container", "importer", "resolver", "customJob"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new ExecutorSpec instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IExecutorSpec=} [properties] Properties to set + * @returns {ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} ExecutorSpec instance + */ + ExecutorSpec.create = function create(properties) { + return new ExecutorSpec(properties); + }; + + /** + * Encodes the specified ExecutorSpec message. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IExecutorSpec} message ExecutorSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ExecutorSpec.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.container != null && Object.hasOwnProperty.call(message, "container")) + $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.encode(message.container, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.importer != null && Object.hasOwnProperty.call(message, "importer")) + $root.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.encode(message.importer, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.resolver != null && Object.hasOwnProperty.call(message, "resolver")) + $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.encode(message.resolver, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.customJob != null && Object.hasOwnProperty.call(message, "customJob")) + $root.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.encode(message.customJob, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ExecutorSpec message, length delimited. Does not implicitly {@link ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.IExecutorSpec} message ExecutorSpec message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ExecutorSpec.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ExecutorSpec message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} ExecutorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ExecutorSpec.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.container = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.decode(reader, reader.uint32()); + break; + case 2: + message.importer = $root.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.decode(reader, reader.uint32()); + break; + case 3: + message.resolver = $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.decode(reader, reader.uint32()); + break; + case 4: + message.customJob = $root.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ExecutorSpec message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} ExecutorSpec + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ExecutorSpec.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ExecutorSpec message. + * @function verify + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ExecutorSpec.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.container != null && message.hasOwnProperty("container")) { + properties.spec = 1; + { + var error = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.verify(message.container); + if (error) + return "container." + error; + } + } + if (message.importer != null && message.hasOwnProperty("importer")) { + if (properties.spec === 1) + return "spec: multiple values"; + properties.spec = 1; + { + var error = $root.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.verify(message.importer); + if (error) + return "importer." + error; + } + } + if (message.resolver != null && message.hasOwnProperty("resolver")) { + if (properties.spec === 1) + return "spec: multiple values"; + properties.spec = 1; + { + var error = $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.verify(message.resolver); + if (error) + return "resolver." + error; + } + } + if (message.customJob != null && message.hasOwnProperty("customJob")) { + if (properties.spec === 1) + return "spec: multiple values"; + properties.spec = 1; + { + var error = $root.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.verify(message.customJob); + if (error) + return "customJob." + error; + } + } + return null; + }; + + /** + * Creates an ExecutorSpec message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} ExecutorSpec + */ + ExecutorSpec.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec) + return object; + var message = new $root.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec(); + if (object.container != null) { + if (typeof object.container !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.container: object expected"); + message.container = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.fromObject(object.container); + } + if (object.importer != null) { + if (typeof object.importer !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.importer: object expected"); + message.importer = $root.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.fromObject(object.importer); + } + if (object.resolver != null) { + if (typeof object.resolver !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.resolver: object expected"); + message.resolver = $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.fromObject(object.resolver); + } + if (object.customJob != null) { + if (typeof object.customJob !== "object") + throw TypeError(".ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.customJob: object expected"); + message.customJob = $root.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.fromObject(object.customJob); + } + return message; + }; + + /** + * Creates a plain object from an ExecutorSpec message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @static + * @param {ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} message ExecutorSpec + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ExecutorSpec.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (message.container != null && message.hasOwnProperty("container")) { + object.container = $root.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.toObject(message.container, options); + if (options.oneofs) + object.spec = "container"; + } + if (message.importer != null && message.hasOwnProperty("importer")) { + object.importer = $root.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.toObject(message.importer, options); + if (options.oneofs) + object.spec = "importer"; + } + if (message.resolver != null && message.hasOwnProperty("resolver")) { + object.resolver = $root.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.toObject(message.resolver, options); + if (options.oneofs) + object.spec = "resolver"; + } + if (message.customJob != null && message.hasOwnProperty("customJob")) { + object.customJob = $root.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.toObject(message.customJob, options); + if (options.oneofs) + object.spec = "customJob"; + } + return object; + }; + + /** + * Converts this ExecutorSpec to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineDeploymentConfig.ExecutorSpec + * @instance + * @returns {Object.<string,*>} JSON object + */ + ExecutorSpec.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ExecutorSpec; + })(); + + return PipelineDeploymentConfig; + })(); + + ml_pipelines.Value = (function() { + + /** + * Properties of a Value. + * @memberof ml_pipelines + * @interface IValue + * @property {number|Long|null} [intValue] Value intValue + * @property {number|null} [doubleValue] Value doubleValue + * @property {string|null} [stringValue] Value stringValue + */ + + /** + * Constructs a new Value. + * @memberof ml_pipelines + * @classdesc Represents a Value. + * @implements IValue + * @constructor + * @param {ml_pipelines.IValue=} [properties] Properties to set + */ + function Value(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Value intValue. + * @member {number|Long|null|undefined} intValue + * @memberof ml_pipelines.Value + * @instance + */ + Value.prototype.intValue = null; + + /** + * Value doubleValue. + * @member {number|null|undefined} doubleValue + * @memberof ml_pipelines.Value + * @instance + */ + Value.prototype.doubleValue = null; + + /** + * Value stringValue. + * @member {string|null|undefined} stringValue + * @memberof ml_pipelines.Value + * @instance + */ + Value.prototype.stringValue = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * Value value. + * @member {"intValue"|"doubleValue"|"stringValue"|undefined} value + * @memberof ml_pipelines.Value + * @instance + */ + Object.defineProperty(Value.prototype, "value", { + get: $util.oneOfGetter($oneOfFields = ["intValue", "doubleValue", "stringValue"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new Value instance using the specified properties. + * @function create + * @memberof ml_pipelines.Value + * @static + * @param {ml_pipelines.IValue=} [properties] Properties to set + * @returns {ml_pipelines.Value} Value instance + */ + Value.create = function create(properties) { + return new Value(properties); + }; + + /** + * Encodes the specified Value message. Does not implicitly {@link ml_pipelines.Value.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.Value + * @static + * @param {ml_pipelines.IValue} message Value message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Value.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.intValue != null && Object.hasOwnProperty.call(message, "intValue")) + writer.uint32(/* id 1, wireType 0 =*/8).int64(message.intValue); + if (message.doubleValue != null && Object.hasOwnProperty.call(message, "doubleValue")) + writer.uint32(/* id 2, wireType 1 =*/17).double(message.doubleValue); + if (message.stringValue != null && Object.hasOwnProperty.call(message, "stringValue")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.stringValue); + return writer; + }; + + /** + * Encodes the specified Value message, length delimited. Does not implicitly {@link ml_pipelines.Value.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.Value + * @static + * @param {ml_pipelines.IValue} message Value message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Value.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Value message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.Value + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.Value} Value + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Value.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.Value(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.intValue = reader.int64(); + break; + case 2: + message.doubleValue = reader.double(); + break; + case 3: + message.stringValue = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Value message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.Value + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.Value} Value + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Value.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Value message. + * @function verify + * @memberof ml_pipelines.Value + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Value.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.intValue != null && message.hasOwnProperty("intValue")) { + properties.value = 1; + if (!$util.isInteger(message.intValue) && !(message.intValue && $util.isInteger(message.intValue.low) && $util.isInteger(message.intValue.high))) + return "intValue: integer|Long expected"; + } + if (message.doubleValue != null && message.hasOwnProperty("doubleValue")) { + if (properties.value === 1) + return "value: multiple values"; + properties.value = 1; + if (typeof message.doubleValue !== "number") + return "doubleValue: number expected"; + } + if (message.stringValue != null && message.hasOwnProperty("stringValue")) { + if (properties.value === 1) + return "value: multiple values"; + properties.value = 1; + if (!$util.isString(message.stringValue)) + return "stringValue: string expected"; + } + return null; + }; + + /** + * Creates a Value message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.Value + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.Value} Value + */ + Value.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.Value) + return object; + var message = new $root.ml_pipelines.Value(); + if (object.intValue != null) + if ($util.Long) + (message.intValue = $util.Long.fromValue(object.intValue)).unsigned = false; + else if (typeof object.intValue === "string") + message.intValue = parseInt(object.intValue, 10); + else if (typeof object.intValue === "number") + message.intValue = object.intValue; + else if (typeof object.intValue === "object") + message.intValue = new $util.LongBits(object.intValue.low >>> 0, object.intValue.high >>> 0).toNumber(); + if (object.doubleValue != null) + message.doubleValue = Number(object.doubleValue); + if (object.stringValue != null) + message.stringValue = String(object.stringValue); + return message; + }; + + /** + * Creates a plain object from a Value message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.Value + * @static + * @param {ml_pipelines.Value} message Value + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + Value.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (message.intValue != null && message.hasOwnProperty("intValue")) { + if (typeof message.intValue === "number") + object.intValue = options.longs === String ? String(message.intValue) : message.intValue; + else + object.intValue = options.longs === String ? $util.Long.prototype.toString.call(message.intValue) : options.longs === Number ? new $util.LongBits(message.intValue.low >>> 0, message.intValue.high >>> 0).toNumber() : message.intValue; + if (options.oneofs) + object.value = "intValue"; + } + if (message.doubleValue != null && message.hasOwnProperty("doubleValue")) { + object.doubleValue = options.json && !isFinite(message.doubleValue) ? String(message.doubleValue) : message.doubleValue; + if (options.oneofs) + object.value = "doubleValue"; + } + if (message.stringValue != null && message.hasOwnProperty("stringValue")) { + object.stringValue = message.stringValue; + if (options.oneofs) + object.value = "stringValue"; + } + return object; + }; + + /** + * Converts this Value to JSON. + * @function toJSON + * @memberof ml_pipelines.Value + * @instance + * @returns {Object.<string,*>} JSON object + */ + Value.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Value; + })(); + + ml_pipelines.RuntimeArtifact = (function() { + + /** + * Properties of a RuntimeArtifact. + * @memberof ml_pipelines + * @interface IRuntimeArtifact + * @property {string|null} [name] RuntimeArtifact name + * @property {ml_pipelines.IArtifactTypeSchema|null} [type] RuntimeArtifact type + * @property {string|null} [uri] RuntimeArtifact uri + * @property {Object.<string,ml_pipelines.IValue>|null} [properties] RuntimeArtifact properties + * @property {Object.<string,ml_pipelines.IValue>|null} [customProperties] RuntimeArtifact customProperties + * @property {google.protobuf.IStruct|null} [metadata] RuntimeArtifact metadata + */ + + /** + * Constructs a new RuntimeArtifact. + * @memberof ml_pipelines + * @classdesc Represents a RuntimeArtifact. + * @implements IRuntimeArtifact + * @constructor + * @param {ml_pipelines.IRuntimeArtifact=} [properties] Properties to set + */ + function RuntimeArtifact(properties) { + this.properties = {}; + this.customProperties = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * RuntimeArtifact name. + * @member {string} name + * @memberof ml_pipelines.RuntimeArtifact + * @instance + */ + RuntimeArtifact.prototype.name = ""; + + /** + * RuntimeArtifact type. + * @member {ml_pipelines.IArtifactTypeSchema|null|undefined} type + * @memberof ml_pipelines.RuntimeArtifact + * @instance + */ + RuntimeArtifact.prototype.type = null; + + /** + * RuntimeArtifact uri. + * @member {string} uri + * @memberof ml_pipelines.RuntimeArtifact + * @instance + */ + RuntimeArtifact.prototype.uri = ""; + + /** + * RuntimeArtifact properties. + * @member {Object.<string,ml_pipelines.IValue>} properties + * @memberof ml_pipelines.RuntimeArtifact + * @instance + */ + RuntimeArtifact.prototype.properties = $util.emptyObject; + + /** + * RuntimeArtifact customProperties. + * @member {Object.<string,ml_pipelines.IValue>} customProperties + * @memberof ml_pipelines.RuntimeArtifact + * @instance + */ + RuntimeArtifact.prototype.customProperties = $util.emptyObject; + + /** + * RuntimeArtifact metadata. + * @member {google.protobuf.IStruct|null|undefined} metadata + * @memberof ml_pipelines.RuntimeArtifact + * @instance + */ + RuntimeArtifact.prototype.metadata = null; + + /** + * Creates a new RuntimeArtifact instance using the specified properties. + * @function create + * @memberof ml_pipelines.RuntimeArtifact + * @static + * @param {ml_pipelines.IRuntimeArtifact=} [properties] Properties to set + * @returns {ml_pipelines.RuntimeArtifact} RuntimeArtifact instance + */ + RuntimeArtifact.create = function create(properties) { + return new RuntimeArtifact(properties); + }; + + /** + * Encodes the specified RuntimeArtifact message. Does not implicitly {@link ml_pipelines.RuntimeArtifact.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.RuntimeArtifact + * @static + * @param {ml_pipelines.IRuntimeArtifact} message RuntimeArtifact message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + RuntimeArtifact.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + if (message.type != null && Object.hasOwnProperty.call(message, "type")) + $root.ml_pipelines.ArtifactTypeSchema.encode(message.type, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.uri != null && Object.hasOwnProperty.call(message, "uri")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.uri); + if (message.properties != null && Object.hasOwnProperty.call(message, "properties")) + for (var keys = Object.keys(message.properties), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 4, wireType 2 =*/34).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.Value.encode(message.properties[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.customProperties != null && Object.hasOwnProperty.call(message, "customProperties")) + for (var keys = Object.keys(message.customProperties), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 5, wireType 2 =*/42).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.Value.encode(message.customProperties[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.metadata != null && Object.hasOwnProperty.call(message, "metadata")) + $root.google.protobuf.Struct.encode(message.metadata, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified RuntimeArtifact message, length delimited. Does not implicitly {@link ml_pipelines.RuntimeArtifact.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.RuntimeArtifact + * @static + * @param {ml_pipelines.IRuntimeArtifact} message RuntimeArtifact message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + RuntimeArtifact.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a RuntimeArtifact message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.RuntimeArtifact + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.RuntimeArtifact} RuntimeArtifact + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + RuntimeArtifact.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.RuntimeArtifact(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + case 2: + message.type = $root.ml_pipelines.ArtifactTypeSchema.decode(reader, reader.uint32()); + break; + case 3: + message.uri = reader.string(); + break; + case 4: + if (message.properties === $util.emptyObject) + message.properties = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.Value.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.properties[key] = value; + break; + case 5: + if (message.customProperties === $util.emptyObject) + message.customProperties = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.Value.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.customProperties[key] = value; + break; + case 6: + message.metadata = $root.google.protobuf.Struct.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a RuntimeArtifact message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.RuntimeArtifact + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.RuntimeArtifact} RuntimeArtifact + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + RuntimeArtifact.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a RuntimeArtifact message. + * @function verify + * @memberof ml_pipelines.RuntimeArtifact + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + RuntimeArtifact.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + if (message.type != null && message.hasOwnProperty("type")) { + var error = $root.ml_pipelines.ArtifactTypeSchema.verify(message.type); + if (error) + return "type." + error; + } + if (message.uri != null && message.hasOwnProperty("uri")) + if (!$util.isString(message.uri)) + return "uri: string expected"; + if (message.properties != null && message.hasOwnProperty("properties")) { + if (!$util.isObject(message.properties)) + return "properties: object expected"; + var key = Object.keys(message.properties); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.Value.verify(message.properties[key[i]]); + if (error) + return "properties." + error; + } + } + if (message.customProperties != null && message.hasOwnProperty("customProperties")) { + if (!$util.isObject(message.customProperties)) + return "customProperties: object expected"; + var key = Object.keys(message.customProperties); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.Value.verify(message.customProperties[key[i]]); + if (error) + return "customProperties." + error; + } + } + if (message.metadata != null && message.hasOwnProperty("metadata")) { + var error = $root.google.protobuf.Struct.verify(message.metadata); + if (error) + return "metadata." + error; + } + return null; + }; + + /** + * Creates a RuntimeArtifact message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.RuntimeArtifact + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.RuntimeArtifact} RuntimeArtifact + */ + RuntimeArtifact.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.RuntimeArtifact) + return object; + var message = new $root.ml_pipelines.RuntimeArtifact(); + if (object.name != null) + message.name = String(object.name); + if (object.type != null) { + if (typeof object.type !== "object") + throw TypeError(".ml_pipelines.RuntimeArtifact.type: object expected"); + message.type = $root.ml_pipelines.ArtifactTypeSchema.fromObject(object.type); + } + if (object.uri != null) + message.uri = String(object.uri); + if (object.properties) { + if (typeof object.properties !== "object") + throw TypeError(".ml_pipelines.RuntimeArtifact.properties: object expected"); + message.properties = {}; + for (var keys = Object.keys(object.properties), i = 0; i < keys.length; ++i) { + if (typeof object.properties[keys[i]] !== "object") + throw TypeError(".ml_pipelines.RuntimeArtifact.properties: object expected"); + message.properties[keys[i]] = $root.ml_pipelines.Value.fromObject(object.properties[keys[i]]); + } + } + if (object.customProperties) { + if (typeof object.customProperties !== "object") + throw TypeError(".ml_pipelines.RuntimeArtifact.customProperties: object expected"); + message.customProperties = {}; + for (var keys = Object.keys(object.customProperties), i = 0; i < keys.length; ++i) { + if (typeof object.customProperties[keys[i]] !== "object") + throw TypeError(".ml_pipelines.RuntimeArtifact.customProperties: object expected"); + message.customProperties[keys[i]] = $root.ml_pipelines.Value.fromObject(object.customProperties[keys[i]]); + } + } + if (object.metadata != null) { + if (typeof object.metadata !== "object") + throw TypeError(".ml_pipelines.RuntimeArtifact.metadata: object expected"); + message.metadata = $root.google.protobuf.Struct.fromObject(object.metadata); + } + return message; + }; + + /** + * Creates a plain object from a RuntimeArtifact message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.RuntimeArtifact + * @static + * @param {ml_pipelines.RuntimeArtifact} message RuntimeArtifact + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + RuntimeArtifact.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) { + object.properties = {}; + object.customProperties = {}; + } + if (options.defaults) { + object.name = ""; + object.type = null; + object.uri = ""; + object.metadata = null; + } + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + if (message.type != null && message.hasOwnProperty("type")) + object.type = $root.ml_pipelines.ArtifactTypeSchema.toObject(message.type, options); + if (message.uri != null && message.hasOwnProperty("uri")) + object.uri = message.uri; + var keys2; + if (message.properties && (keys2 = Object.keys(message.properties)).length) { + object.properties = {}; + for (var j = 0; j < keys2.length; ++j) + object.properties[keys2[j]] = $root.ml_pipelines.Value.toObject(message.properties[keys2[j]], options); + } + if (message.customProperties && (keys2 = Object.keys(message.customProperties)).length) { + object.customProperties = {}; + for (var j = 0; j < keys2.length; ++j) + object.customProperties[keys2[j]] = $root.ml_pipelines.Value.toObject(message.customProperties[keys2[j]], options); + } + if (message.metadata != null && message.hasOwnProperty("metadata")) + object.metadata = $root.google.protobuf.Struct.toObject(message.metadata, options); + return object; + }; + + /** + * Converts this RuntimeArtifact to JSON. + * @function toJSON + * @memberof ml_pipelines.RuntimeArtifact + * @instance + * @returns {Object.<string,*>} JSON object + */ + RuntimeArtifact.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return RuntimeArtifact; + })(); + + ml_pipelines.ArtifactList = (function() { + + /** + * Properties of an ArtifactList. + * @memberof ml_pipelines + * @interface IArtifactList + * @property {Array.<ml_pipelines.IRuntimeArtifact>|null} [artifacts] ArtifactList artifacts + */ + + /** + * Constructs a new ArtifactList. + * @memberof ml_pipelines + * @classdesc Represents an ArtifactList. + * @implements IArtifactList + * @constructor + * @param {ml_pipelines.IArtifactList=} [properties] Properties to set + */ + function ArtifactList(properties) { + this.artifacts = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ArtifactList artifacts. + * @member {Array.<ml_pipelines.IRuntimeArtifact>} artifacts + * @memberof ml_pipelines.ArtifactList + * @instance + */ + ArtifactList.prototype.artifacts = $util.emptyArray; + + /** + * Creates a new ArtifactList instance using the specified properties. + * @function create + * @memberof ml_pipelines.ArtifactList + * @static + * @param {ml_pipelines.IArtifactList=} [properties] Properties to set + * @returns {ml_pipelines.ArtifactList} ArtifactList instance + */ + ArtifactList.create = function create(properties) { + return new ArtifactList(properties); + }; + + /** + * Encodes the specified ArtifactList message. Does not implicitly {@link ml_pipelines.ArtifactList.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ArtifactList + * @static + * @param {ml_pipelines.IArtifactList} message ArtifactList message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactList.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.artifacts != null && message.artifacts.length) + for (var i = 0; i < message.artifacts.length; ++i) + $root.ml_pipelines.RuntimeArtifact.encode(message.artifacts[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ArtifactList message, length delimited. Does not implicitly {@link ml_pipelines.ArtifactList.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ArtifactList + * @static + * @param {ml_pipelines.IArtifactList} message ArtifactList message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ArtifactList.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ArtifactList message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ArtifactList + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ArtifactList} ArtifactList + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactList.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ArtifactList(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.artifacts && message.artifacts.length)) + message.artifacts = []; + message.artifacts.push($root.ml_pipelines.RuntimeArtifact.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ArtifactList message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ArtifactList + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ArtifactList} ArtifactList + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ArtifactList.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ArtifactList message. + * @function verify + * @memberof ml_pipelines.ArtifactList + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ArtifactList.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.artifacts != null && message.hasOwnProperty("artifacts")) { + if (!Array.isArray(message.artifacts)) + return "artifacts: array expected"; + for (var i = 0; i < message.artifacts.length; ++i) { + var error = $root.ml_pipelines.RuntimeArtifact.verify(message.artifacts[i]); + if (error) + return "artifacts." + error; + } + } + return null; + }; + + /** + * Creates an ArtifactList message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ArtifactList + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ArtifactList} ArtifactList + */ + ArtifactList.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ArtifactList) + return object; + var message = new $root.ml_pipelines.ArtifactList(); + if (object.artifacts) { + if (!Array.isArray(object.artifacts)) + throw TypeError(".ml_pipelines.ArtifactList.artifacts: array expected"); + message.artifacts = []; + for (var i = 0; i < object.artifacts.length; ++i) { + if (typeof object.artifacts[i] !== "object") + throw TypeError(".ml_pipelines.ArtifactList.artifacts: object expected"); + message.artifacts[i] = $root.ml_pipelines.RuntimeArtifact.fromObject(object.artifacts[i]); + } + } + return message; + }; + + /** + * Creates a plain object from an ArtifactList message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ArtifactList + * @static + * @param {ml_pipelines.ArtifactList} message ArtifactList + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ArtifactList.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.artifacts = []; + if (message.artifacts && message.artifacts.length) { + object.artifacts = []; + for (var j = 0; j < message.artifacts.length; ++j) + object.artifacts[j] = $root.ml_pipelines.RuntimeArtifact.toObject(message.artifacts[j], options); + } + return object; + }; + + /** + * Converts this ArtifactList to JSON. + * @function toJSON + * @memberof ml_pipelines.ArtifactList + * @instance + * @returns {Object.<string,*>} JSON object + */ + ArtifactList.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ArtifactList; + })(); + + ml_pipelines.ExecutorInput = (function() { + + /** + * Properties of an ExecutorInput. + * @memberof ml_pipelines + * @interface IExecutorInput + * @property {ml_pipelines.ExecutorInput.IInputs|null} [inputs] ExecutorInput inputs + * @property {ml_pipelines.ExecutorInput.IOutputs|null} [outputs] ExecutorInput outputs + */ + + /** + * Constructs a new ExecutorInput. + * @memberof ml_pipelines + * @classdesc Represents an ExecutorInput. + * @implements IExecutorInput + * @constructor + * @param {ml_pipelines.IExecutorInput=} [properties] Properties to set + */ + function ExecutorInput(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ExecutorInput inputs. + * @member {ml_pipelines.ExecutorInput.IInputs|null|undefined} inputs + * @memberof ml_pipelines.ExecutorInput + * @instance + */ + ExecutorInput.prototype.inputs = null; + + /** + * ExecutorInput outputs. + * @member {ml_pipelines.ExecutorInput.IOutputs|null|undefined} outputs + * @memberof ml_pipelines.ExecutorInput + * @instance + */ + ExecutorInput.prototype.outputs = null; + + /** + * Creates a new ExecutorInput instance using the specified properties. + * @function create + * @memberof ml_pipelines.ExecutorInput + * @static + * @param {ml_pipelines.IExecutorInput=} [properties] Properties to set + * @returns {ml_pipelines.ExecutorInput} ExecutorInput instance + */ + ExecutorInput.create = function create(properties) { + return new ExecutorInput(properties); + }; + + /** + * Encodes the specified ExecutorInput message. Does not implicitly {@link ml_pipelines.ExecutorInput.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ExecutorInput + * @static + * @param {ml_pipelines.IExecutorInput} message ExecutorInput message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ExecutorInput.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputs != null && Object.hasOwnProperty.call(message, "inputs")) + $root.ml_pipelines.ExecutorInput.Inputs.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.outputs != null && Object.hasOwnProperty.call(message, "outputs")) + $root.ml_pipelines.ExecutorInput.Outputs.encode(message.outputs, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ExecutorInput message, length delimited. Does not implicitly {@link ml_pipelines.ExecutorInput.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ExecutorInput + * @static + * @param {ml_pipelines.IExecutorInput} message ExecutorInput message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ExecutorInput.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ExecutorInput message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ExecutorInput + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ExecutorInput} ExecutorInput + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ExecutorInput.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ExecutorInput(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputs = $root.ml_pipelines.ExecutorInput.Inputs.decode(reader, reader.uint32()); + break; + case 2: + message.outputs = $root.ml_pipelines.ExecutorInput.Outputs.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ExecutorInput message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ExecutorInput + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ExecutorInput} ExecutorInput + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ExecutorInput.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ExecutorInput message. + * @function verify + * @memberof ml_pipelines.ExecutorInput + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ExecutorInput.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputs != null && message.hasOwnProperty("inputs")) { + var error = $root.ml_pipelines.ExecutorInput.Inputs.verify(message.inputs); + if (error) + return "inputs." + error; + } + if (message.outputs != null && message.hasOwnProperty("outputs")) { + var error = $root.ml_pipelines.ExecutorInput.Outputs.verify(message.outputs); + if (error) + return "outputs." + error; + } + return null; + }; + + /** + * Creates an ExecutorInput message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ExecutorInput + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ExecutorInput} ExecutorInput + */ + ExecutorInput.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ExecutorInput) + return object; + var message = new $root.ml_pipelines.ExecutorInput(); + if (object.inputs != null) { + if (typeof object.inputs !== "object") + throw TypeError(".ml_pipelines.ExecutorInput.inputs: object expected"); + message.inputs = $root.ml_pipelines.ExecutorInput.Inputs.fromObject(object.inputs); + } + if (object.outputs != null) { + if (typeof object.outputs !== "object") + throw TypeError(".ml_pipelines.ExecutorInput.outputs: object expected"); + message.outputs = $root.ml_pipelines.ExecutorInput.Outputs.fromObject(object.outputs); + } + return message; + }; + + /** + * Creates a plain object from an ExecutorInput message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ExecutorInput + * @static + * @param {ml_pipelines.ExecutorInput} message ExecutorInput + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ExecutorInput.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.inputs = null; + object.outputs = null; + } + if (message.inputs != null && message.hasOwnProperty("inputs")) + object.inputs = $root.ml_pipelines.ExecutorInput.Inputs.toObject(message.inputs, options); + if (message.outputs != null && message.hasOwnProperty("outputs")) + object.outputs = $root.ml_pipelines.ExecutorInput.Outputs.toObject(message.outputs, options); + return object; + }; + + /** + * Converts this ExecutorInput to JSON. + * @function toJSON + * @memberof ml_pipelines.ExecutorInput + * @instance + * @returns {Object.<string,*>} JSON object + */ + ExecutorInput.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ExecutorInput.Inputs = (function() { + + /** + * Properties of an Inputs. + * @memberof ml_pipelines.ExecutorInput + * @interface IInputs + * @property {Object.<string,ml_pipelines.IValue>|null} [parameters] Inputs parameters + * @property {Object.<string,ml_pipelines.IArtifactList>|null} [artifacts] Inputs artifacts + */ + + /** + * Constructs a new Inputs. + * @memberof ml_pipelines.ExecutorInput + * @classdesc Represents an Inputs. + * @implements IInputs + * @constructor + * @param {ml_pipelines.ExecutorInput.IInputs=} [properties] Properties to set + */ + function Inputs(properties) { + this.parameters = {}; + this.artifacts = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Inputs parameters. + * @member {Object.<string,ml_pipelines.IValue>} parameters + * @memberof ml_pipelines.ExecutorInput.Inputs + * @instance + */ + Inputs.prototype.parameters = $util.emptyObject; + + /** + * Inputs artifacts. + * @member {Object.<string,ml_pipelines.IArtifactList>} artifacts + * @memberof ml_pipelines.ExecutorInput.Inputs + * @instance + */ + Inputs.prototype.artifacts = $util.emptyObject; + + /** + * Creates a new Inputs instance using the specified properties. + * @function create + * @memberof ml_pipelines.ExecutorInput.Inputs + * @static + * @param {ml_pipelines.ExecutorInput.IInputs=} [properties] Properties to set + * @returns {ml_pipelines.ExecutorInput.Inputs} Inputs instance + */ + Inputs.create = function create(properties) { + return new Inputs(properties); + }; + + /** + * Encodes the specified Inputs message. Does not implicitly {@link ml_pipelines.ExecutorInput.Inputs.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ExecutorInput.Inputs + * @static + * @param {ml_pipelines.ExecutorInput.IInputs} message Inputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Inputs.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.parameters != null && Object.hasOwnProperty.call(message, "parameters")) + for (var keys = Object.keys(message.parameters), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.Value.encode(message.parameters[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.artifacts != null && Object.hasOwnProperty.call(message, "artifacts")) + for (var keys = Object.keys(message.artifacts), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ArtifactList.encode(message.artifacts[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + return writer; + }; + + /** + * Encodes the specified Inputs message, length delimited. Does not implicitly {@link ml_pipelines.ExecutorInput.Inputs.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ExecutorInput.Inputs + * @static + * @param {ml_pipelines.ExecutorInput.IInputs} message Inputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Inputs.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an Inputs message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ExecutorInput.Inputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ExecutorInput.Inputs} Inputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Inputs.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ExecutorInput.Inputs(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (message.parameters === $util.emptyObject) + message.parameters = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.Value.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.parameters[key] = value; + break; + case 2: + if (message.artifacts === $util.emptyObject) + message.artifacts = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ArtifactList.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.artifacts[key] = value; + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an Inputs message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ExecutorInput.Inputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ExecutorInput.Inputs} Inputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Inputs.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an Inputs message. + * @function verify + * @memberof ml_pipelines.ExecutorInput.Inputs + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Inputs.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.parameters != null && message.hasOwnProperty("parameters")) { + if (!$util.isObject(message.parameters)) + return "parameters: object expected"; + var key = Object.keys(message.parameters); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.Value.verify(message.parameters[key[i]]); + if (error) + return "parameters." + error; + } + } + if (message.artifacts != null && message.hasOwnProperty("artifacts")) { + if (!$util.isObject(message.artifacts)) + return "artifacts: object expected"; + var key = Object.keys(message.artifacts); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ArtifactList.verify(message.artifacts[key[i]]); + if (error) + return "artifacts." + error; + } + } + return null; + }; + + /** + * Creates an Inputs message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ExecutorInput.Inputs + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ExecutorInput.Inputs} Inputs + */ + Inputs.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ExecutorInput.Inputs) + return object; + var message = new $root.ml_pipelines.ExecutorInput.Inputs(); + if (object.parameters) { + if (typeof object.parameters !== "object") + throw TypeError(".ml_pipelines.ExecutorInput.Inputs.parameters: object expected"); + message.parameters = {}; + for (var keys = Object.keys(object.parameters), i = 0; i < keys.length; ++i) { + if (typeof object.parameters[keys[i]] !== "object") + throw TypeError(".ml_pipelines.ExecutorInput.Inputs.parameters: object expected"); + message.parameters[keys[i]] = $root.ml_pipelines.Value.fromObject(object.parameters[keys[i]]); + } + } + if (object.artifacts) { + if (typeof object.artifacts !== "object") + throw TypeError(".ml_pipelines.ExecutorInput.Inputs.artifacts: object expected"); + message.artifacts = {}; + for (var keys = Object.keys(object.artifacts), i = 0; i < keys.length; ++i) { + if (typeof object.artifacts[keys[i]] !== "object") + throw TypeError(".ml_pipelines.ExecutorInput.Inputs.artifacts: object expected"); + message.artifacts[keys[i]] = $root.ml_pipelines.ArtifactList.fromObject(object.artifacts[keys[i]]); + } + } + return message; + }; + + /** + * Creates a plain object from an Inputs message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ExecutorInput.Inputs + * @static + * @param {ml_pipelines.ExecutorInput.Inputs} message Inputs + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + Inputs.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) { + object.parameters = {}; + object.artifacts = {}; + } + var keys2; + if (message.parameters && (keys2 = Object.keys(message.parameters)).length) { + object.parameters = {}; + for (var j = 0; j < keys2.length; ++j) + object.parameters[keys2[j]] = $root.ml_pipelines.Value.toObject(message.parameters[keys2[j]], options); + } + if (message.artifacts && (keys2 = Object.keys(message.artifacts)).length) { + object.artifacts = {}; + for (var j = 0; j < keys2.length; ++j) + object.artifacts[keys2[j]] = $root.ml_pipelines.ArtifactList.toObject(message.artifacts[keys2[j]], options); + } + return object; + }; + + /** + * Converts this Inputs to JSON. + * @function toJSON + * @memberof ml_pipelines.ExecutorInput.Inputs + * @instance + * @returns {Object.<string,*>} JSON object + */ + Inputs.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Inputs; + })(); + + ExecutorInput.OutputParameter = (function() { + + /** + * Properties of an OutputParameter. + * @memberof ml_pipelines.ExecutorInput + * @interface IOutputParameter + * @property {string|null} [outputFile] OutputParameter outputFile + */ + + /** + * Constructs a new OutputParameter. + * @memberof ml_pipelines.ExecutorInput + * @classdesc Represents an OutputParameter. + * @implements IOutputParameter + * @constructor + * @param {ml_pipelines.ExecutorInput.IOutputParameter=} [properties] Properties to set + */ + function OutputParameter(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * OutputParameter outputFile. + * @member {string} outputFile + * @memberof ml_pipelines.ExecutorInput.OutputParameter + * @instance + */ + OutputParameter.prototype.outputFile = ""; + + /** + * Creates a new OutputParameter instance using the specified properties. + * @function create + * @memberof ml_pipelines.ExecutorInput.OutputParameter + * @static + * @param {ml_pipelines.ExecutorInput.IOutputParameter=} [properties] Properties to set + * @returns {ml_pipelines.ExecutorInput.OutputParameter} OutputParameter instance + */ + OutputParameter.create = function create(properties) { + return new OutputParameter(properties); + }; + + /** + * Encodes the specified OutputParameter message. Does not implicitly {@link ml_pipelines.ExecutorInput.OutputParameter.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ExecutorInput.OutputParameter + * @static + * @param {ml_pipelines.ExecutorInput.IOutputParameter} message OutputParameter message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + OutputParameter.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.outputFile != null && Object.hasOwnProperty.call(message, "outputFile")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.outputFile); + return writer; + }; + + /** + * Encodes the specified OutputParameter message, length delimited. Does not implicitly {@link ml_pipelines.ExecutorInput.OutputParameter.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ExecutorInput.OutputParameter + * @static + * @param {ml_pipelines.ExecutorInput.IOutputParameter} message OutputParameter message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + OutputParameter.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an OutputParameter message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ExecutorInput.OutputParameter + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ExecutorInput.OutputParameter} OutputParameter + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + OutputParameter.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ExecutorInput.OutputParameter(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.outputFile = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an OutputParameter message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ExecutorInput.OutputParameter + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ExecutorInput.OutputParameter} OutputParameter + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + OutputParameter.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an OutputParameter message. + * @function verify + * @memberof ml_pipelines.ExecutorInput.OutputParameter + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + OutputParameter.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.outputFile != null && message.hasOwnProperty("outputFile")) + if (!$util.isString(message.outputFile)) + return "outputFile: string expected"; + return null; + }; + + /** + * Creates an OutputParameter message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ExecutorInput.OutputParameter + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ExecutorInput.OutputParameter} OutputParameter + */ + OutputParameter.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ExecutorInput.OutputParameter) + return object; + var message = new $root.ml_pipelines.ExecutorInput.OutputParameter(); + if (object.outputFile != null) + message.outputFile = String(object.outputFile); + return message; + }; + + /** + * Creates a plain object from an OutputParameter message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ExecutorInput.OutputParameter + * @static + * @param {ml_pipelines.ExecutorInput.OutputParameter} message OutputParameter + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + OutputParameter.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.outputFile = ""; + if (message.outputFile != null && message.hasOwnProperty("outputFile")) + object.outputFile = message.outputFile; + return object; + }; + + /** + * Converts this OutputParameter to JSON. + * @function toJSON + * @memberof ml_pipelines.ExecutorInput.OutputParameter + * @instance + * @returns {Object.<string,*>} JSON object + */ + OutputParameter.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return OutputParameter; + })(); + + ExecutorInput.Outputs = (function() { + + /** + * Properties of an Outputs. + * @memberof ml_pipelines.ExecutorInput + * @interface IOutputs + * @property {Object.<string,ml_pipelines.ExecutorInput.IOutputParameter>|null} [parameters] Outputs parameters + * @property {Object.<string,ml_pipelines.IArtifactList>|null} [artifacts] Outputs artifacts + * @property {string|null} [outputFile] Outputs outputFile + */ + + /** + * Constructs a new Outputs. + * @memberof ml_pipelines.ExecutorInput + * @classdesc Represents an Outputs. + * @implements IOutputs + * @constructor + * @param {ml_pipelines.ExecutorInput.IOutputs=} [properties] Properties to set + */ + function Outputs(properties) { + this.parameters = {}; + this.artifacts = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Outputs parameters. + * @member {Object.<string,ml_pipelines.ExecutorInput.IOutputParameter>} parameters + * @memberof ml_pipelines.ExecutorInput.Outputs + * @instance + */ + Outputs.prototype.parameters = $util.emptyObject; + + /** + * Outputs artifacts. + * @member {Object.<string,ml_pipelines.IArtifactList>} artifacts + * @memberof ml_pipelines.ExecutorInput.Outputs + * @instance + */ + Outputs.prototype.artifacts = $util.emptyObject; + + /** + * Outputs outputFile. + * @member {string} outputFile + * @memberof ml_pipelines.ExecutorInput.Outputs + * @instance + */ + Outputs.prototype.outputFile = ""; + + /** + * Creates a new Outputs instance using the specified properties. + * @function create + * @memberof ml_pipelines.ExecutorInput.Outputs + * @static + * @param {ml_pipelines.ExecutorInput.IOutputs=} [properties] Properties to set + * @returns {ml_pipelines.ExecutorInput.Outputs} Outputs instance + */ + Outputs.create = function create(properties) { + return new Outputs(properties); + }; + + /** + * Encodes the specified Outputs message. Does not implicitly {@link ml_pipelines.ExecutorInput.Outputs.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ExecutorInput.Outputs + * @static + * @param {ml_pipelines.ExecutorInput.IOutputs} message Outputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Outputs.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.parameters != null && Object.hasOwnProperty.call(message, "parameters")) + for (var keys = Object.keys(message.parameters), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ExecutorInput.OutputParameter.encode(message.parameters[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.artifacts != null && Object.hasOwnProperty.call(message, "artifacts")) + for (var keys = Object.keys(message.artifacts), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ArtifactList.encode(message.artifacts[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.outputFile != null && Object.hasOwnProperty.call(message, "outputFile")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.outputFile); + return writer; + }; + + /** + * Encodes the specified Outputs message, length delimited. Does not implicitly {@link ml_pipelines.ExecutorInput.Outputs.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ExecutorInput.Outputs + * @static + * @param {ml_pipelines.ExecutorInput.IOutputs} message Outputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Outputs.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an Outputs message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ExecutorInput.Outputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ExecutorInput.Outputs} Outputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Outputs.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ExecutorInput.Outputs(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (message.parameters === $util.emptyObject) + message.parameters = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ExecutorInput.OutputParameter.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.parameters[key] = value; + break; + case 2: + if (message.artifacts === $util.emptyObject) + message.artifacts = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ArtifactList.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.artifacts[key] = value; + break; + case 3: + message.outputFile = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an Outputs message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ExecutorInput.Outputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ExecutorInput.Outputs} Outputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Outputs.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an Outputs message. + * @function verify + * @memberof ml_pipelines.ExecutorInput.Outputs + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Outputs.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.parameters != null && message.hasOwnProperty("parameters")) { + if (!$util.isObject(message.parameters)) + return "parameters: object expected"; + var key = Object.keys(message.parameters); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ExecutorInput.OutputParameter.verify(message.parameters[key[i]]); + if (error) + return "parameters." + error; + } + } + if (message.artifacts != null && message.hasOwnProperty("artifacts")) { + if (!$util.isObject(message.artifacts)) + return "artifacts: object expected"; + var key = Object.keys(message.artifacts); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ArtifactList.verify(message.artifacts[key[i]]); + if (error) + return "artifacts." + error; + } + } + if (message.outputFile != null && message.hasOwnProperty("outputFile")) + if (!$util.isString(message.outputFile)) + return "outputFile: string expected"; + return null; + }; + + /** + * Creates an Outputs message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ExecutorInput.Outputs + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ExecutorInput.Outputs} Outputs + */ + Outputs.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ExecutorInput.Outputs) + return object; + var message = new $root.ml_pipelines.ExecutorInput.Outputs(); + if (object.parameters) { + if (typeof object.parameters !== "object") + throw TypeError(".ml_pipelines.ExecutorInput.Outputs.parameters: object expected"); + message.parameters = {}; + for (var keys = Object.keys(object.parameters), i = 0; i < keys.length; ++i) { + if (typeof object.parameters[keys[i]] !== "object") + throw TypeError(".ml_pipelines.ExecutorInput.Outputs.parameters: object expected"); + message.parameters[keys[i]] = $root.ml_pipelines.ExecutorInput.OutputParameter.fromObject(object.parameters[keys[i]]); + } + } + if (object.artifacts) { + if (typeof object.artifacts !== "object") + throw TypeError(".ml_pipelines.ExecutorInput.Outputs.artifacts: object expected"); + message.artifacts = {}; + for (var keys = Object.keys(object.artifacts), i = 0; i < keys.length; ++i) { + if (typeof object.artifacts[keys[i]] !== "object") + throw TypeError(".ml_pipelines.ExecutorInput.Outputs.artifacts: object expected"); + message.artifacts[keys[i]] = $root.ml_pipelines.ArtifactList.fromObject(object.artifacts[keys[i]]); + } + } + if (object.outputFile != null) + message.outputFile = String(object.outputFile); + return message; + }; + + /** + * Creates a plain object from an Outputs message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ExecutorInput.Outputs + * @static + * @param {ml_pipelines.ExecutorInput.Outputs} message Outputs + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + Outputs.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) { + object.parameters = {}; + object.artifacts = {}; + } + if (options.defaults) + object.outputFile = ""; + var keys2; + if (message.parameters && (keys2 = Object.keys(message.parameters)).length) { + object.parameters = {}; + for (var j = 0; j < keys2.length; ++j) + object.parameters[keys2[j]] = $root.ml_pipelines.ExecutorInput.OutputParameter.toObject(message.parameters[keys2[j]], options); + } + if (message.artifacts && (keys2 = Object.keys(message.artifacts)).length) { + object.artifacts = {}; + for (var j = 0; j < keys2.length; ++j) + object.artifacts[keys2[j]] = $root.ml_pipelines.ArtifactList.toObject(message.artifacts[keys2[j]], options); + } + if (message.outputFile != null && message.hasOwnProperty("outputFile")) + object.outputFile = message.outputFile; + return object; + }; + + /** + * Converts this Outputs to JSON. + * @function toJSON + * @memberof ml_pipelines.ExecutorInput.Outputs + * @instance + * @returns {Object.<string,*>} JSON object + */ + Outputs.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Outputs; + })(); + + return ExecutorInput; + })(); + + ml_pipelines.ExecutorOutput = (function() { + + /** + * Properties of an ExecutorOutput. + * @memberof ml_pipelines + * @interface IExecutorOutput + * @property {Object.<string,ml_pipelines.IValue>|null} [parameters] ExecutorOutput parameters + * @property {Object.<string,ml_pipelines.IArtifactList>|null} [artifacts] ExecutorOutput artifacts + */ + + /** + * Constructs a new ExecutorOutput. + * @memberof ml_pipelines + * @classdesc Represents an ExecutorOutput. + * @implements IExecutorOutput + * @constructor + * @param {ml_pipelines.IExecutorOutput=} [properties] Properties to set + */ + function ExecutorOutput(properties) { + this.parameters = {}; + this.artifacts = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ExecutorOutput parameters. + * @member {Object.<string,ml_pipelines.IValue>} parameters + * @memberof ml_pipelines.ExecutorOutput + * @instance + */ + ExecutorOutput.prototype.parameters = $util.emptyObject; + + /** + * ExecutorOutput artifacts. + * @member {Object.<string,ml_pipelines.IArtifactList>} artifacts + * @memberof ml_pipelines.ExecutorOutput + * @instance + */ + ExecutorOutput.prototype.artifacts = $util.emptyObject; + + /** + * Creates a new ExecutorOutput instance using the specified properties. + * @function create + * @memberof ml_pipelines.ExecutorOutput + * @static + * @param {ml_pipelines.IExecutorOutput=} [properties] Properties to set + * @returns {ml_pipelines.ExecutorOutput} ExecutorOutput instance + */ + ExecutorOutput.create = function create(properties) { + return new ExecutorOutput(properties); + }; + + /** + * Encodes the specified ExecutorOutput message. Does not implicitly {@link ml_pipelines.ExecutorOutput.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.ExecutorOutput + * @static + * @param {ml_pipelines.IExecutorOutput} message ExecutorOutput message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ExecutorOutput.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.parameters != null && Object.hasOwnProperty.call(message, "parameters")) + for (var keys = Object.keys(message.parameters), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.Value.encode(message.parameters[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.artifacts != null && Object.hasOwnProperty.call(message, "artifacts")) + for (var keys = Object.keys(message.artifacts), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.ml_pipelines.ArtifactList.encode(message.artifacts[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + return writer; + }; + + /** + * Encodes the specified ExecutorOutput message, length delimited. Does not implicitly {@link ml_pipelines.ExecutorOutput.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.ExecutorOutput + * @static + * @param {ml_pipelines.IExecutorOutput} message ExecutorOutput message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ExecutorOutput.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ExecutorOutput message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.ExecutorOutput + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.ExecutorOutput} ExecutorOutput + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ExecutorOutput.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.ExecutorOutput(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (message.parameters === $util.emptyObject) + message.parameters = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.Value.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.parameters[key] = value; + break; + case 2: + if (message.artifacts === $util.emptyObject) + message.artifacts = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.ml_pipelines.ArtifactList.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.artifacts[key] = value; + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ExecutorOutput message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.ExecutorOutput + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.ExecutorOutput} ExecutorOutput + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ExecutorOutput.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ExecutorOutput message. + * @function verify + * @memberof ml_pipelines.ExecutorOutput + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ExecutorOutput.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.parameters != null && message.hasOwnProperty("parameters")) { + if (!$util.isObject(message.parameters)) + return "parameters: object expected"; + var key = Object.keys(message.parameters); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.Value.verify(message.parameters[key[i]]); + if (error) + return "parameters." + error; + } + } + if (message.artifacts != null && message.hasOwnProperty("artifacts")) { + if (!$util.isObject(message.artifacts)) + return "artifacts: object expected"; + var key = Object.keys(message.artifacts); + for (var i = 0; i < key.length; ++i) { + var error = $root.ml_pipelines.ArtifactList.verify(message.artifacts[key[i]]); + if (error) + return "artifacts." + error; + } + } + return null; + }; + + /** + * Creates an ExecutorOutput message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.ExecutorOutput + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.ExecutorOutput} ExecutorOutput + */ + ExecutorOutput.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.ExecutorOutput) + return object; + var message = new $root.ml_pipelines.ExecutorOutput(); + if (object.parameters) { + if (typeof object.parameters !== "object") + throw TypeError(".ml_pipelines.ExecutorOutput.parameters: object expected"); + message.parameters = {}; + for (var keys = Object.keys(object.parameters), i = 0; i < keys.length; ++i) { + if (typeof object.parameters[keys[i]] !== "object") + throw TypeError(".ml_pipelines.ExecutorOutput.parameters: object expected"); + message.parameters[keys[i]] = $root.ml_pipelines.Value.fromObject(object.parameters[keys[i]]); + } + } + if (object.artifacts) { + if (typeof object.artifacts !== "object") + throw TypeError(".ml_pipelines.ExecutorOutput.artifacts: object expected"); + message.artifacts = {}; + for (var keys = Object.keys(object.artifacts), i = 0; i < keys.length; ++i) { + if (typeof object.artifacts[keys[i]] !== "object") + throw TypeError(".ml_pipelines.ExecutorOutput.artifacts: object expected"); + message.artifacts[keys[i]] = $root.ml_pipelines.ArtifactList.fromObject(object.artifacts[keys[i]]); + } + } + return message; + }; + + /** + * Creates a plain object from an ExecutorOutput message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.ExecutorOutput + * @static + * @param {ml_pipelines.ExecutorOutput} message ExecutorOutput + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ExecutorOutput.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) { + object.parameters = {}; + object.artifacts = {}; + } + var keys2; + if (message.parameters && (keys2 = Object.keys(message.parameters)).length) { + object.parameters = {}; + for (var j = 0; j < keys2.length; ++j) + object.parameters[keys2[j]] = $root.ml_pipelines.Value.toObject(message.parameters[keys2[j]], options); + } + if (message.artifacts && (keys2 = Object.keys(message.artifacts)).length) { + object.artifacts = {}; + for (var j = 0; j < keys2.length; ++j) + object.artifacts[keys2[j]] = $root.ml_pipelines.ArtifactList.toObject(message.artifacts[keys2[j]], options); + } + return object; + }; + + /** + * Converts this ExecutorOutput to JSON. + * @function toJSON + * @memberof ml_pipelines.ExecutorOutput + * @instance + * @returns {Object.<string,*>} JSON object + */ + ExecutorOutput.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ExecutorOutput; + })(); + + ml_pipelines.PipelineTaskFinalStatus = (function() { + + /** + * Properties of a PipelineTaskFinalStatus. + * @memberof ml_pipelines + * @interface IPipelineTaskFinalStatus + * @property {string|null} [state] PipelineTaskFinalStatus state + * @property {google.rpc.IStatus|null} [error] PipelineTaskFinalStatus error + */ + + /** + * Constructs a new PipelineTaskFinalStatus. + * @memberof ml_pipelines + * @classdesc Represents a PipelineTaskFinalStatus. + * @implements IPipelineTaskFinalStatus + * @constructor + * @param {ml_pipelines.IPipelineTaskFinalStatus=} [properties] Properties to set + */ + function PipelineTaskFinalStatus(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * PipelineTaskFinalStatus state. + * @member {string} state + * @memberof ml_pipelines.PipelineTaskFinalStatus + * @instance + */ + PipelineTaskFinalStatus.prototype.state = ""; + + /** + * PipelineTaskFinalStatus error. + * @member {google.rpc.IStatus|null|undefined} error + * @memberof ml_pipelines.PipelineTaskFinalStatus + * @instance + */ + PipelineTaskFinalStatus.prototype.error = null; + + /** + * Creates a new PipelineTaskFinalStatus instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineTaskFinalStatus + * @static + * @param {ml_pipelines.IPipelineTaskFinalStatus=} [properties] Properties to set + * @returns {ml_pipelines.PipelineTaskFinalStatus} PipelineTaskFinalStatus instance + */ + PipelineTaskFinalStatus.create = function create(properties) { + return new PipelineTaskFinalStatus(properties); + }; + + /** + * Encodes the specified PipelineTaskFinalStatus message. Does not implicitly {@link ml_pipelines.PipelineTaskFinalStatus.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineTaskFinalStatus + * @static + * @param {ml_pipelines.IPipelineTaskFinalStatus} message PipelineTaskFinalStatus message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineTaskFinalStatus.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.state != null && Object.hasOwnProperty.call(message, "state")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.state); + if (message.error != null && Object.hasOwnProperty.call(message, "error")) + $root.google.rpc.Status.encode(message.error, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified PipelineTaskFinalStatus message, length delimited. Does not implicitly {@link ml_pipelines.PipelineTaskFinalStatus.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineTaskFinalStatus + * @static + * @param {ml_pipelines.IPipelineTaskFinalStatus} message PipelineTaskFinalStatus message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineTaskFinalStatus.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a PipelineTaskFinalStatus message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineTaskFinalStatus + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineTaskFinalStatus} PipelineTaskFinalStatus + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineTaskFinalStatus.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineTaskFinalStatus(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.state = reader.string(); + break; + case 2: + message.error = $root.google.rpc.Status.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a PipelineTaskFinalStatus message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineTaskFinalStatus + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineTaskFinalStatus} PipelineTaskFinalStatus + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineTaskFinalStatus.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a PipelineTaskFinalStatus message. + * @function verify + * @memberof ml_pipelines.PipelineTaskFinalStatus + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PipelineTaskFinalStatus.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.state != null && message.hasOwnProperty("state")) + if (!$util.isString(message.state)) + return "state: string expected"; + if (message.error != null && message.hasOwnProperty("error")) { + var error = $root.google.rpc.Status.verify(message.error); + if (error) + return "error." + error; + } + return null; + }; + + /** + * Creates a PipelineTaskFinalStatus message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineTaskFinalStatus + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineTaskFinalStatus} PipelineTaskFinalStatus + */ + PipelineTaskFinalStatus.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineTaskFinalStatus) + return object; + var message = new $root.ml_pipelines.PipelineTaskFinalStatus(); + if (object.state != null) + message.state = String(object.state); + if (object.error != null) { + if (typeof object.error !== "object") + throw TypeError(".ml_pipelines.PipelineTaskFinalStatus.error: object expected"); + message.error = $root.google.rpc.Status.fromObject(object.error); + } + return message; + }; + + /** + * Creates a plain object from a PipelineTaskFinalStatus message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineTaskFinalStatus + * @static + * @param {ml_pipelines.PipelineTaskFinalStatus} message PipelineTaskFinalStatus + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + PipelineTaskFinalStatus.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.state = ""; + object.error = null; + } + if (message.state != null && message.hasOwnProperty("state")) + object.state = message.state; + if (message.error != null && message.hasOwnProperty("error")) + object.error = $root.google.rpc.Status.toObject(message.error, options); + return object; + }; + + /** + * Converts this PipelineTaskFinalStatus to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineTaskFinalStatus + * @instance + * @returns {Object.<string,*>} JSON object + */ + PipelineTaskFinalStatus.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return PipelineTaskFinalStatus; + })(); + + ml_pipelines.PipelineStateEnum = (function() { + + /** + * Properties of a PipelineStateEnum. + * @memberof ml_pipelines + * @interface IPipelineStateEnum + */ + + /** + * Constructs a new PipelineStateEnum. + * @memberof ml_pipelines + * @classdesc Represents a PipelineStateEnum. + * @implements IPipelineStateEnum + * @constructor + * @param {ml_pipelines.IPipelineStateEnum=} [properties] Properties to set + */ + function PipelineStateEnum(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Creates a new PipelineStateEnum instance using the specified properties. + * @function create + * @memberof ml_pipelines.PipelineStateEnum + * @static + * @param {ml_pipelines.IPipelineStateEnum=} [properties] Properties to set + * @returns {ml_pipelines.PipelineStateEnum} PipelineStateEnum instance + */ + PipelineStateEnum.create = function create(properties) { + return new PipelineStateEnum(properties); + }; + + /** + * Encodes the specified PipelineStateEnum message. Does not implicitly {@link ml_pipelines.PipelineStateEnum.verify|verify} messages. + * @function encode + * @memberof ml_pipelines.PipelineStateEnum + * @static + * @param {ml_pipelines.IPipelineStateEnum} message PipelineStateEnum message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineStateEnum.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + return writer; + }; + + /** + * Encodes the specified PipelineStateEnum message, length delimited. Does not implicitly {@link ml_pipelines.PipelineStateEnum.verify|verify} messages. + * @function encodeDelimited + * @memberof ml_pipelines.PipelineStateEnum + * @static + * @param {ml_pipelines.IPipelineStateEnum} message PipelineStateEnum message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PipelineStateEnum.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a PipelineStateEnum message from the specified reader or buffer. + * @function decode + * @memberof ml_pipelines.PipelineStateEnum + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {ml_pipelines.PipelineStateEnum} PipelineStateEnum + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineStateEnum.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ml_pipelines.PipelineStateEnum(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a PipelineStateEnum message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof ml_pipelines.PipelineStateEnum + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {ml_pipelines.PipelineStateEnum} PipelineStateEnum + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PipelineStateEnum.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a PipelineStateEnum message. + * @function verify + * @memberof ml_pipelines.PipelineStateEnum + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PipelineStateEnum.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + return null; + }; + + /** + * Creates a PipelineStateEnum message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof ml_pipelines.PipelineStateEnum + * @static + * @param {Object.<string,*>} object Plain object + * @returns {ml_pipelines.PipelineStateEnum} PipelineStateEnum + */ + PipelineStateEnum.fromObject = function fromObject(object) { + if (object instanceof $root.ml_pipelines.PipelineStateEnum) + return object; + return new $root.ml_pipelines.PipelineStateEnum(); + }; + + /** + * Creates a plain object from a PipelineStateEnum message. Also converts values to other types if specified. + * @function toObject + * @memberof ml_pipelines.PipelineStateEnum + * @static + * @param {ml_pipelines.PipelineStateEnum} message PipelineStateEnum + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + PipelineStateEnum.toObject = function toObject() { + return {}; + }; + + /** + * Converts this PipelineStateEnum to JSON. + * @function toJSON + * @memberof ml_pipelines.PipelineStateEnum + * @instance + * @returns {Object.<string,*>} JSON object + */ + PipelineStateEnum.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * PipelineTaskState enum. + * @name ml_pipelines.PipelineStateEnum.PipelineTaskState + * @enum {number} + * @property {number} TASK_STATE_UNSPECIFIED=0 TASK_STATE_UNSPECIFIED value + * @property {number} PENDING=1 PENDING value + * @property {number} RUNNING_DRIVER=2 RUNNING_DRIVER value + * @property {number} DRIVER_SUCCEEDED=3 DRIVER_SUCCEEDED value + * @property {number} RUNNING_EXECUTOR=4 RUNNING_EXECUTOR value + * @property {number} SUCCEEDED=5 SUCCEEDED value + * @property {number} CANCEL_PENDING=6 CANCEL_PENDING value + * @property {number} CANCELLING=7 CANCELLING value + * @property {number} CANCELLED=8 CANCELLED value + * @property {number} FAILED=9 FAILED value + * @property {number} SKIPPED=10 SKIPPED value + * @property {number} QUEUED=11 QUEUED value + * @property {number} NOT_TRIGGERED=12 NOT_TRIGGERED value + * @property {number} UNSCHEDULABLE=13 UNSCHEDULABLE value + */ + PipelineStateEnum.PipelineTaskState = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "TASK_STATE_UNSPECIFIED"] = 0; + values[valuesById[1] = "PENDING"] = 1; + values[valuesById[2] = "RUNNING_DRIVER"] = 2; + values[valuesById[3] = "DRIVER_SUCCEEDED"] = 3; + values[valuesById[4] = "RUNNING_EXECUTOR"] = 4; + values[valuesById[5] = "SUCCEEDED"] = 5; + values[valuesById[6] = "CANCEL_PENDING"] = 6; + values[valuesById[7] = "CANCELLING"] = 7; + values[valuesById[8] = "CANCELLED"] = 8; + values[valuesById[9] = "FAILED"] = 9; + values[valuesById[10] = "SKIPPED"] = 10; + values[valuesById[11] = "QUEUED"] = 11; + values[valuesById[12] = "NOT_TRIGGERED"] = 12; + values[valuesById[13] = "UNSCHEDULABLE"] = 13; + return values; + })(); + + return PipelineStateEnum; + })(); + + return ml_pipelines; +})(); + +$root.google = (function() { + + /** + * Namespace google. + * @exports google + * @namespace + */ + var google = {}; + + google.protobuf = (function() { + + /** + * Namespace protobuf. + * @memberof google + * @namespace + */ + var protobuf = {}; + + protobuf.Any = (function() { + + /** + * Properties of an Any. + * @memberof google.protobuf + * @interface IAny + * @property {string|null} [type_url] Any type_url + * @property {Uint8Array|null} [value] Any value + */ + + /** + * Constructs a new Any. + * @memberof google.protobuf + * @classdesc Represents an Any. + * @implements IAny + * @constructor + * @param {google.protobuf.IAny=} [properties] Properties to set + */ + function Any(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Any type_url. + * @member {string} type_url + * @memberof google.protobuf.Any + * @instance + */ + Any.prototype.type_url = ""; + + /** + * Any value. + * @member {Uint8Array} value + * @memberof google.protobuf.Any + * @instance + */ + Any.prototype.value = $util.newBuffer([]); + + /** + * Creates a new Any instance using the specified properties. + * @function create + * @memberof google.protobuf.Any + * @static + * @param {google.protobuf.IAny=} [properties] Properties to set + * @returns {google.protobuf.Any} Any instance + */ + Any.create = function create(properties) { + return new Any(properties); + }; + + /** + * Encodes the specified Any message. Does not implicitly {@link google.protobuf.Any.verify|verify} messages. + * @function encode + * @memberof google.protobuf.Any + * @static + * @param {google.protobuf.IAny} message Any message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Any.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.type_url != null && Object.hasOwnProperty.call(message, "type_url")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.type_url); + if (message.value != null && Object.hasOwnProperty.call(message, "value")) + writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.value); + return writer; + }; + + /** + * Encodes the specified Any message, length delimited. Does not implicitly {@link google.protobuf.Any.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.Any + * @static + * @param {google.protobuf.IAny} message Any message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Any.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an Any message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.Any + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.Any} Any + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Any.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Any(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.type_url = reader.string(); + break; + case 2: + message.value = reader.bytes(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an Any message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.Any + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.Any} Any + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Any.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an Any message. + * @function verify + * @memberof google.protobuf.Any + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Any.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.type_url != null && message.hasOwnProperty("type_url")) + if (!$util.isString(message.type_url)) + return "type_url: string expected"; + if (message.value != null && message.hasOwnProperty("value")) + if (!(message.value && typeof message.value.length === "number" || $util.isString(message.value))) + return "value: buffer expected"; + return null; + }; + + /** + * Creates an Any message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.Any + * @static + * @param {Object.<string,*>} object Plain object + * @returns {google.protobuf.Any} Any + */ + Any.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.Any) + return object; + var message = new $root.google.protobuf.Any(); + if (object.type_url != null) + message.type_url = String(object.type_url); + if (object.value != null) + if (typeof object.value === "string") + $util.base64.decode(object.value, message.value = $util.newBuffer($util.base64.length(object.value)), 0); + else if (object.value.length) + message.value = object.value; + return message; + }; + + /** + * Creates a plain object from an Any message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.Any + * @static + * @param {google.protobuf.Any} message Any + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + Any.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.type_url = ""; + if (options.bytes === String) + object.value = ""; + else { + object.value = []; + if (options.bytes !== Array) + object.value = $util.newBuffer(object.value); + } + } + if (message.type_url != null && message.hasOwnProperty("type_url")) + object.type_url = message.type_url; + if (message.value != null && message.hasOwnProperty("value")) + object.value = options.bytes === String ? $util.base64.encode(message.value, 0, message.value.length) : options.bytes === Array ? Array.prototype.slice.call(message.value) : message.value; + return object; + }; + + /** + * Converts this Any to JSON. + * @function toJSON + * @memberof google.protobuf.Any + * @instance + * @returns {Object.<string,*>} JSON object + */ + Any.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Any; + })(); + + protobuf.Struct = (function() { + + /** + * Properties of a Struct. + * @memberof google.protobuf + * @interface IStruct + * @property {Object.<string,google.protobuf.IValue>|null} [fields] Struct fields + */ + + /** + * Constructs a new Struct. + * @memberof google.protobuf + * @classdesc Represents a Struct. + * @implements IStruct + * @constructor + * @param {google.protobuf.IStruct=} [properties] Properties to set + */ + function Struct(properties) { + this.fields = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Struct fields. + * @member {Object.<string,google.protobuf.IValue>} fields + * @memberof google.protobuf.Struct + * @instance + */ + Struct.prototype.fields = $util.emptyObject; + + /** + * Creates a new Struct instance using the specified properties. + * @function create + * @memberof google.protobuf.Struct + * @static + * @param {google.protobuf.IStruct=} [properties] Properties to set + * @returns {google.protobuf.Struct} Struct instance + */ + Struct.create = function create(properties) { + return new Struct(properties); + }; + + /** + * Encodes the specified Struct message. Does not implicitly {@link google.protobuf.Struct.verify|verify} messages. + * @function encode + * @memberof google.protobuf.Struct + * @static + * @param {google.protobuf.IStruct} message Struct message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Struct.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.fields != null && Object.hasOwnProperty.call(message, "fields")) + for (var keys = Object.keys(message.fields), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.google.protobuf.Value.encode(message.fields[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + return writer; + }; + + /** + * Encodes the specified Struct message, length delimited. Does not implicitly {@link google.protobuf.Struct.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.Struct + * @static + * @param {google.protobuf.IStruct} message Struct message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Struct.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Struct message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.Struct + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.Struct} Struct + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Struct.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Struct(), key, value; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (message.fields === $util.emptyObject) + message.fields = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.google.protobuf.Value.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.fields[key] = value; + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Struct message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.Struct + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.Struct} Struct + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Struct.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Struct message. + * @function verify + * @memberof google.protobuf.Struct + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Struct.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.fields != null && message.hasOwnProperty("fields")) { + if (!$util.isObject(message.fields)) + return "fields: object expected"; + var key = Object.keys(message.fields); + for (var i = 0; i < key.length; ++i) { + var error = $root.google.protobuf.Value.verify(message.fields[key[i]]); + if (error) + return "fields." + error; + } + } + return null; + }; + + /** + * Creates a Struct message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.Struct + * @static + * @param {Object.<string,*>} object Plain object + * @returns {google.protobuf.Struct} Struct + */ + Struct.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.Struct) + return object; + var message = new $root.google.protobuf.Struct(); + if (object.fields) { + if (typeof object.fields !== "object") + throw TypeError(".google.protobuf.Struct.fields: object expected"); + message.fields = {}; + for (var keys = Object.keys(object.fields), i = 0; i < keys.length; ++i) { + if (typeof object.fields[keys[i]] !== "object") + throw TypeError(".google.protobuf.Struct.fields: object expected"); + message.fields[keys[i]] = $root.google.protobuf.Value.fromObject(object.fields[keys[i]]); + } + } + return message; + }; + + /** + * Creates a plain object from a Struct message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.Struct + * @static + * @param {google.protobuf.Struct} message Struct + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + Struct.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) + object.fields = {}; + var keys2; + if (message.fields && (keys2 = Object.keys(message.fields)).length) { + object.fields = {}; + for (var j = 0; j < keys2.length; ++j) + object.fields[keys2[j]] = $root.google.protobuf.Value.toObject(message.fields[keys2[j]], options); + } + return object; + }; + + /** + * Converts this Struct to JSON. + * @function toJSON + * @memberof google.protobuf.Struct + * @instance + * @returns {Object.<string,*>} JSON object + */ + Struct.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Struct; + })(); + + protobuf.Value = (function() { + + /** + * Properties of a Value. + * @memberof google.protobuf + * @interface IValue + * @property {google.protobuf.NullValue|null} [nullValue] Value nullValue + * @property {number|null} [numberValue] Value numberValue + * @property {string|null} [stringValue] Value stringValue + * @property {boolean|null} [boolValue] Value boolValue + * @property {google.protobuf.IStruct|null} [structValue] Value structValue + * @property {google.protobuf.IListValue|null} [listValue] Value listValue + */ + + /** + * Constructs a new Value. + * @memberof google.protobuf + * @classdesc Represents a Value. + * @implements IValue + * @constructor + * @param {google.protobuf.IValue=} [properties] Properties to set + */ + function Value(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Value nullValue. + * @member {google.protobuf.NullValue|null|undefined} nullValue + * @memberof google.protobuf.Value + * @instance + */ + Value.prototype.nullValue = null; + + /** + * Value numberValue. + * @member {number|null|undefined} numberValue + * @memberof google.protobuf.Value + * @instance + */ + Value.prototype.numberValue = null; + + /** + * Value stringValue. + * @member {string|null|undefined} stringValue + * @memberof google.protobuf.Value + * @instance + */ + Value.prototype.stringValue = null; + + /** + * Value boolValue. + * @member {boolean|null|undefined} boolValue + * @memberof google.protobuf.Value + * @instance + */ + Value.prototype.boolValue = null; + + /** + * Value structValue. + * @member {google.protobuf.IStruct|null|undefined} structValue + * @memberof google.protobuf.Value + * @instance + */ + Value.prototype.structValue = null; + + /** + * Value listValue. + * @member {google.protobuf.IListValue|null|undefined} listValue + * @memberof google.protobuf.Value + * @instance + */ + Value.prototype.listValue = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * Value kind. + * @member {"nullValue"|"numberValue"|"stringValue"|"boolValue"|"structValue"|"listValue"|undefined} kind + * @memberof google.protobuf.Value + * @instance + */ + Object.defineProperty(Value.prototype, "kind", { + get: $util.oneOfGetter($oneOfFields = ["nullValue", "numberValue", "stringValue", "boolValue", "structValue", "listValue"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new Value instance using the specified properties. + * @function create + * @memberof google.protobuf.Value + * @static + * @param {google.protobuf.IValue=} [properties] Properties to set + * @returns {google.protobuf.Value} Value instance + */ + Value.create = function create(properties) { + return new Value(properties); + }; + + /** + * Encodes the specified Value message. Does not implicitly {@link google.protobuf.Value.verify|verify} messages. + * @function encode + * @memberof google.protobuf.Value + * @static + * @param {google.protobuf.IValue} message Value message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Value.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.nullValue != null && Object.hasOwnProperty.call(message, "nullValue")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.nullValue); + if (message.numberValue != null && Object.hasOwnProperty.call(message, "numberValue")) + writer.uint32(/* id 2, wireType 1 =*/17).double(message.numberValue); + if (message.stringValue != null && Object.hasOwnProperty.call(message, "stringValue")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.stringValue); + if (message.boolValue != null && Object.hasOwnProperty.call(message, "boolValue")) + writer.uint32(/* id 4, wireType 0 =*/32).bool(message.boolValue); + if (message.structValue != null && Object.hasOwnProperty.call(message, "structValue")) + $root.google.protobuf.Struct.encode(message.structValue, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.listValue != null && Object.hasOwnProperty.call(message, "listValue")) + $root.google.protobuf.ListValue.encode(message.listValue, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified Value message, length delimited. Does not implicitly {@link google.protobuf.Value.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.Value + * @static + * @param {google.protobuf.IValue} message Value message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Value.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Value message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.Value + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.Value} Value + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Value.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Value(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.nullValue = reader.int32(); + break; + case 2: + message.numberValue = reader.double(); + break; + case 3: + message.stringValue = reader.string(); + break; + case 4: + message.boolValue = reader.bool(); + break; + case 5: + message.structValue = $root.google.protobuf.Struct.decode(reader, reader.uint32()); + break; + case 6: + message.listValue = $root.google.protobuf.ListValue.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Value message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.Value + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.Value} Value + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Value.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Value message. + * @function verify + * @memberof google.protobuf.Value + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Value.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.nullValue != null && message.hasOwnProperty("nullValue")) { + properties.kind = 1; + switch (message.nullValue) { + default: + return "nullValue: enum value expected"; + case 0: + break; + } + } + if (message.numberValue != null && message.hasOwnProperty("numberValue")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + if (typeof message.numberValue !== "number") + return "numberValue: number expected"; + } + if (message.stringValue != null && message.hasOwnProperty("stringValue")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + if (!$util.isString(message.stringValue)) + return "stringValue: string expected"; + } + if (message.boolValue != null && message.hasOwnProperty("boolValue")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + if (typeof message.boolValue !== "boolean") + return "boolValue: boolean expected"; + } + if (message.structValue != null && message.hasOwnProperty("structValue")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + { + var error = $root.google.protobuf.Struct.verify(message.structValue); + if (error) + return "structValue." + error; + } + } + if (message.listValue != null && message.hasOwnProperty("listValue")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + { + var error = $root.google.protobuf.ListValue.verify(message.listValue); + if (error) + return "listValue." + error; + } + } + return null; + }; + + /** + * Creates a Value message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.Value + * @static + * @param {Object.<string,*>} object Plain object + * @returns {google.protobuf.Value} Value + */ + Value.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.Value) + return object; + var message = new $root.google.protobuf.Value(); + switch (object.nullValue) { + case "NULL_VALUE": + case 0: + message.nullValue = 0; + break; + } + if (object.numberValue != null) + message.numberValue = Number(object.numberValue); + if (object.stringValue != null) + message.stringValue = String(object.stringValue); + if (object.boolValue != null) + message.boolValue = Boolean(object.boolValue); + if (object.structValue != null) { + if (typeof object.structValue !== "object") + throw TypeError(".google.protobuf.Value.structValue: object expected"); + message.structValue = $root.google.protobuf.Struct.fromObject(object.structValue); + } + if (object.listValue != null) { + if (typeof object.listValue !== "object") + throw TypeError(".google.protobuf.Value.listValue: object expected"); + message.listValue = $root.google.protobuf.ListValue.fromObject(object.listValue); + } + return message; + }; + + /** + * Creates a plain object from a Value message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.Value + * @static + * @param {google.protobuf.Value} message Value + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + Value.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (message.nullValue != null && message.hasOwnProperty("nullValue")) { + object.nullValue = options.enums === String ? $root.google.protobuf.NullValue[message.nullValue] : message.nullValue; + if (options.oneofs) + object.kind = "nullValue"; + } + if (message.numberValue != null && message.hasOwnProperty("numberValue")) { + object.numberValue = options.json && !isFinite(message.numberValue) ? String(message.numberValue) : message.numberValue; + if (options.oneofs) + object.kind = "numberValue"; + } + if (message.stringValue != null && message.hasOwnProperty("stringValue")) { + object.stringValue = message.stringValue; + if (options.oneofs) + object.kind = "stringValue"; + } + if (message.boolValue != null && message.hasOwnProperty("boolValue")) { + object.boolValue = message.boolValue; + if (options.oneofs) + object.kind = "boolValue"; + } + if (message.structValue != null && message.hasOwnProperty("structValue")) { + object.structValue = $root.google.protobuf.Struct.toObject(message.structValue, options); + if (options.oneofs) + object.kind = "structValue"; + } + if (message.listValue != null && message.hasOwnProperty("listValue")) { + object.listValue = $root.google.protobuf.ListValue.toObject(message.listValue, options); + if (options.oneofs) + object.kind = "listValue"; + } + return object; + }; + + /** + * Converts this Value to JSON. + * @function toJSON + * @memberof google.protobuf.Value + * @instance + * @returns {Object.<string,*>} JSON object + */ + Value.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Value; + })(); + + /** + * NullValue enum. + * @name google.protobuf.NullValue + * @enum {number} + * @property {number} NULL_VALUE=0 NULL_VALUE value + */ + protobuf.NullValue = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NULL_VALUE"] = 0; + return values; + })(); + + protobuf.ListValue = (function() { + + /** + * Properties of a ListValue. + * @memberof google.protobuf + * @interface IListValue + * @property {Array.<google.protobuf.IValue>|null} [values] ListValue values + */ + + /** + * Constructs a new ListValue. + * @memberof google.protobuf + * @classdesc Represents a ListValue. + * @implements IListValue + * @constructor + * @param {google.protobuf.IListValue=} [properties] Properties to set + */ + function ListValue(properties) { + this.values = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ListValue values. + * @member {Array.<google.protobuf.IValue>} values + * @memberof google.protobuf.ListValue + * @instance + */ + ListValue.prototype.values = $util.emptyArray; + + /** + * Creates a new ListValue instance using the specified properties. + * @function create + * @memberof google.protobuf.ListValue + * @static + * @param {google.protobuf.IListValue=} [properties] Properties to set + * @returns {google.protobuf.ListValue} ListValue instance + */ + ListValue.create = function create(properties) { + return new ListValue(properties); + }; + + /** + * Encodes the specified ListValue message. Does not implicitly {@link google.protobuf.ListValue.verify|verify} messages. + * @function encode + * @memberof google.protobuf.ListValue + * @static + * @param {google.protobuf.IListValue} message ListValue message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ListValue.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.values != null && message.values.length) + for (var i = 0; i < message.values.length; ++i) + $root.google.protobuf.Value.encode(message.values[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ListValue message, length delimited. Does not implicitly {@link google.protobuf.ListValue.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.ListValue + * @static + * @param {google.protobuf.IListValue} message ListValue message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ListValue.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ListValue message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.ListValue + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.ListValue} ListValue + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ListValue.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ListValue(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.values && message.values.length)) + message.values = []; + message.values.push($root.google.protobuf.Value.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ListValue message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.ListValue + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.ListValue} ListValue + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ListValue.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ListValue message. + * @function verify + * @memberof google.protobuf.ListValue + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ListValue.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.values != null && message.hasOwnProperty("values")) { + if (!Array.isArray(message.values)) + return "values: array expected"; + for (var i = 0; i < message.values.length; ++i) { + var error = $root.google.protobuf.Value.verify(message.values[i]); + if (error) + return "values." + error; + } + } + return null; + }; + + /** + * Creates a ListValue message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.ListValue + * @static + * @param {Object.<string,*>} object Plain object + * @returns {google.protobuf.ListValue} ListValue + */ + ListValue.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.ListValue) + return object; + var message = new $root.google.protobuf.ListValue(); + if (object.values) { + if (!Array.isArray(object.values)) + throw TypeError(".google.protobuf.ListValue.values: array expected"); + message.values = []; + for (var i = 0; i < object.values.length; ++i) { + if (typeof object.values[i] !== "object") + throw TypeError(".google.protobuf.ListValue.values: object expected"); + message.values[i] = $root.google.protobuf.Value.fromObject(object.values[i]); + } + } + return message; + }; + + /** + * Creates a plain object from a ListValue message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.ListValue + * @static + * @param {google.protobuf.ListValue} message ListValue + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + ListValue.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.values = []; + if (message.values && message.values.length) { + object.values = []; + for (var j = 0; j < message.values.length; ++j) + object.values[j] = $root.google.protobuf.Value.toObject(message.values[j], options); + } + return object; + }; + + /** + * Converts this ListValue to JSON. + * @function toJSON + * @memberof google.protobuf.ListValue + * @instance + * @returns {Object.<string,*>} JSON object + */ + ListValue.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ListValue; + })(); + + return protobuf; + })(); + + google.rpc = (function() { + + /** + * Namespace rpc. + * @memberof google + * @namespace + */ + var rpc = {}; + + rpc.Status = (function() { + + /** + * Properties of a Status. + * @memberof google.rpc + * @interface IStatus + * @property {number|null} [code] Status code + * @property {string|null} [message] Status message + * @property {Array.<google.protobuf.IAny>|null} [details] Status details + */ + + /** + * Constructs a new Status. + * @memberof google.rpc + * @classdesc Represents a Status. + * @implements IStatus + * @constructor + * @param {google.rpc.IStatus=} [properties] Properties to set + */ + function Status(properties) { + this.details = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Status code. + * @member {number} code + * @memberof google.rpc.Status + * @instance + */ + Status.prototype.code = 0; + + /** + * Status message. + * @member {string} message + * @memberof google.rpc.Status + * @instance + */ + Status.prototype.message = ""; + + /** + * Status details. + * @member {Array.<google.protobuf.IAny>} details + * @memberof google.rpc.Status + * @instance + */ + Status.prototype.details = $util.emptyArray; + + /** + * Creates a new Status instance using the specified properties. + * @function create + * @memberof google.rpc.Status + * @static + * @param {google.rpc.IStatus=} [properties] Properties to set + * @returns {google.rpc.Status} Status instance + */ + Status.create = function create(properties) { + return new Status(properties); + }; + + /** + * Encodes the specified Status message. Does not implicitly {@link google.rpc.Status.verify|verify} messages. + * @function encode + * @memberof google.rpc.Status + * @static + * @param {google.rpc.IStatus} message Status message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Status.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.code != null && Object.hasOwnProperty.call(message, "code")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.code); + if (message.message != null && Object.hasOwnProperty.call(message, "message")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.message); + if (message.details != null && message.details.length) + for (var i = 0; i < message.details.length; ++i) + $root.google.protobuf.Any.encode(message.details[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified Status message, length delimited. Does not implicitly {@link google.rpc.Status.verify|verify} messages. + * @function encodeDelimited + * @memberof google.rpc.Status + * @static + * @param {google.rpc.IStatus} message Status message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Status.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Status message from the specified reader or buffer. + * @function decode + * @memberof google.rpc.Status + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.rpc.Status} Status + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Status.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.rpc.Status(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.code = reader.int32(); + break; + case 2: + message.message = reader.string(); + break; + case 3: + if (!(message.details && message.details.length)) + message.details = []; + message.details.push($root.google.protobuf.Any.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Status message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.rpc.Status + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.rpc.Status} Status + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Status.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Status message. + * @function verify + * @memberof google.rpc.Status + * @static + * @param {Object.<string,*>} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Status.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.code != null && message.hasOwnProperty("code")) + if (!$util.isInteger(message.code)) + return "code: integer expected"; + if (message.message != null && message.hasOwnProperty("message")) + if (!$util.isString(message.message)) + return "message: string expected"; + if (message.details != null && message.hasOwnProperty("details")) { + if (!Array.isArray(message.details)) + return "details: array expected"; + for (var i = 0; i < message.details.length; ++i) { + var error = $root.google.protobuf.Any.verify(message.details[i]); + if (error) + return "details." + error; + } + } + return null; + }; + + /** + * Creates a Status message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.rpc.Status + * @static + * @param {Object.<string,*>} object Plain object + * @returns {google.rpc.Status} Status + */ + Status.fromObject = function fromObject(object) { + if (object instanceof $root.google.rpc.Status) + return object; + var message = new $root.google.rpc.Status(); + if (object.code != null) + message.code = object.code | 0; + if (object.message != null) + message.message = String(object.message); + if (object.details) { + if (!Array.isArray(object.details)) + throw TypeError(".google.rpc.Status.details: array expected"); + message.details = []; + for (var i = 0; i < object.details.length; ++i) { + if (typeof object.details[i] !== "object") + throw TypeError(".google.rpc.Status.details: object expected"); + message.details[i] = $root.google.protobuf.Any.fromObject(object.details[i]); + } + } + return message; + }; + + /** + * Creates a plain object from a Status message. Also converts values to other types if specified. + * @function toObject + * @memberof google.rpc.Status + * @static + * @param {google.rpc.Status} message Status + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.<string,*>} Plain object + */ + Status.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.details = []; + if (options.defaults) { + object.code = 0; + object.message = ""; + } + if (message.code != null && message.hasOwnProperty("code")) + object.code = message.code; + if (message.message != null && message.hasOwnProperty("message")) + object.message = message.message; + if (message.details && message.details.length) { + object.details = []; + for (var j = 0; j < message.details.length; ++j) + object.details[j] = $root.google.protobuf.Any.toObject(message.details[j], options); + } + return object; + }; + + /** + * Converts this Status to JSON. + * @function toJSON + * @memberof google.rpc.Status + * @instance + * @returns {Object.<string,*>} JSON object + */ + Status.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Status; + })(); + + return rpc; + })(); + + return google; +})(); + +module.exports = $root; diff --git a/frontend/src/generated/pipeline_spec/pipeline_spec_pb.d.ts b/frontend/src/generated/pipeline_spec/pipeline_spec_pb.d.ts new file mode 100644 index 0000000000..2546565040 --- /dev/null +++ b/frontend/src/generated/pipeline_spec/pipeline_spec_pb.d.ts @@ -0,0 +1,1696 @@ +import * as jspb from 'google-protobuf' + +import * as google_protobuf_any_pb from 'google-protobuf/google/protobuf/any_pb'; +import * as google_protobuf_struct_pb from 'google-protobuf/google/protobuf/struct_pb'; +import * as google_rpc_status_pb from './google/rpc/status_pb'; + + +export class PipelineJob extends jspb.Message { + getName(): string; + setName(value: string): PipelineJob; + + getDisplayName(): string; + setDisplayName(value: string): PipelineJob; + + getPipelineSpec(): google_protobuf_struct_pb.Struct | undefined; + setPipelineSpec(value?: google_protobuf_struct_pb.Struct): PipelineJob; + hasPipelineSpec(): boolean; + clearPipelineSpec(): PipelineJob; + + getLabelsMap(): jspb.Map<string, string>; + clearLabelsMap(): PipelineJob; + + getRuntimeConfig(): PipelineJob.RuntimeConfig | undefined; + setRuntimeConfig(value?: PipelineJob.RuntimeConfig): PipelineJob; + hasRuntimeConfig(): boolean; + clearRuntimeConfig(): PipelineJob; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PipelineJob.AsObject; + static toObject(includeInstance: boolean, msg: PipelineJob): PipelineJob.AsObject; + static serializeBinaryToWriter(message: PipelineJob, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PipelineJob; + static deserializeBinaryFromReader(message: PipelineJob, reader: jspb.BinaryReader): PipelineJob; +} + +export namespace PipelineJob { + export type AsObject = { + name: string, + displayName: string, + pipelineSpec?: google_protobuf_struct_pb.Struct.AsObject, + labelsMap: Array<[string, string]>, + runtimeConfig?: PipelineJob.RuntimeConfig.AsObject, + } + + export class RuntimeConfig extends jspb.Message { + getParametersMap(): jspb.Map<string, Value>; + clearParametersMap(): RuntimeConfig; + + getGcsOutputDirectory(): string; + setGcsOutputDirectory(value: string): RuntimeConfig; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RuntimeConfig.AsObject; + static toObject(includeInstance: boolean, msg: RuntimeConfig): RuntimeConfig.AsObject; + static serializeBinaryToWriter(message: RuntimeConfig, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RuntimeConfig; + static deserializeBinaryFromReader(message: RuntimeConfig, reader: jspb.BinaryReader): RuntimeConfig; + } + + export namespace RuntimeConfig { + export type AsObject = { + parametersMap: Array<[string, Value.AsObject]>, + gcsOutputDirectory: string, + } + } + +} + +export class PipelineSpec extends jspb.Message { + getPipelineInfo(): PipelineInfo | undefined; + setPipelineInfo(value?: PipelineInfo): PipelineSpec; + hasPipelineInfo(): boolean; + clearPipelineInfo(): PipelineSpec; + + getDeploymentSpec(): google_protobuf_struct_pb.Struct | undefined; + setDeploymentSpec(value?: google_protobuf_struct_pb.Struct): PipelineSpec; + hasDeploymentSpec(): boolean; + clearDeploymentSpec(): PipelineSpec; + + getSdkVersion(): string; + setSdkVersion(value: string): PipelineSpec; + + getSchemaVersion(): string; + setSchemaVersion(value: string): PipelineSpec; + + getComponentsMap(): jspb.Map<string, ComponentSpec>; + clearComponentsMap(): PipelineSpec; + + getRoot(): ComponentSpec | undefined; + setRoot(value?: ComponentSpec): PipelineSpec; + hasRoot(): boolean; + clearRoot(): PipelineSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PipelineSpec.AsObject; + static toObject(includeInstance: boolean, msg: PipelineSpec): PipelineSpec.AsObject; + static serializeBinaryToWriter(message: PipelineSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PipelineSpec; + static deserializeBinaryFromReader(message: PipelineSpec, reader: jspb.BinaryReader): PipelineSpec; +} + +export namespace PipelineSpec { + export type AsObject = { + pipelineInfo?: PipelineInfo.AsObject, + deploymentSpec?: google_protobuf_struct_pb.Struct.AsObject, + sdkVersion: string, + schemaVersion: string, + componentsMap: Array<[string, ComponentSpec.AsObject]>, + root?: ComponentSpec.AsObject, + } + + export class RuntimeParameter extends jspb.Message { + getType(): PrimitiveType.PrimitiveTypeEnum; + setType(value: PrimitiveType.PrimitiveTypeEnum): RuntimeParameter; + + getDefaultValue(): Value | undefined; + setDefaultValue(value?: Value): RuntimeParameter; + hasDefaultValue(): boolean; + clearDefaultValue(): RuntimeParameter; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RuntimeParameter.AsObject; + static toObject(includeInstance: boolean, msg: RuntimeParameter): RuntimeParameter.AsObject; + static serializeBinaryToWriter(message: RuntimeParameter, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RuntimeParameter; + static deserializeBinaryFromReader(message: RuntimeParameter, reader: jspb.BinaryReader): RuntimeParameter; + } + + export namespace RuntimeParameter { + export type AsObject = { + type: PrimitiveType.PrimitiveTypeEnum, + defaultValue?: Value.AsObject, + } + } + +} + +export class ComponentSpec extends jspb.Message { + getInputDefinitions(): ComponentInputsSpec | undefined; + setInputDefinitions(value?: ComponentInputsSpec): ComponentSpec; + hasInputDefinitions(): boolean; + clearInputDefinitions(): ComponentSpec; + + getOutputDefinitions(): ComponentOutputsSpec | undefined; + setOutputDefinitions(value?: ComponentOutputsSpec): ComponentSpec; + hasOutputDefinitions(): boolean; + clearOutputDefinitions(): ComponentSpec; + + getDag(): DagSpec | undefined; + setDag(value?: DagSpec): ComponentSpec; + hasDag(): boolean; + clearDag(): ComponentSpec; + + getExecutorLabel(): string; + setExecutorLabel(value: string): ComponentSpec; + + getImplementationCase(): ComponentSpec.ImplementationCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ComponentSpec.AsObject; + static toObject(includeInstance: boolean, msg: ComponentSpec): ComponentSpec.AsObject; + static serializeBinaryToWriter(message: ComponentSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ComponentSpec; + static deserializeBinaryFromReader(message: ComponentSpec, reader: jspb.BinaryReader): ComponentSpec; +} + +export namespace ComponentSpec { + export type AsObject = { + inputDefinitions?: ComponentInputsSpec.AsObject, + outputDefinitions?: ComponentOutputsSpec.AsObject, + dag?: DagSpec.AsObject, + executorLabel: string, + } + + export enum ImplementationCase { + IMPLEMENTATION_NOT_SET = 0, + DAG = 3, + EXECUTOR_LABEL = 4, + } +} + +export class DagSpec extends jspb.Message { + getTasksMap(): jspb.Map<string, PipelineTaskSpec>; + clearTasksMap(): DagSpec; + + getOutputs(): DagOutputsSpec | undefined; + setOutputs(value?: DagOutputsSpec): DagSpec; + hasOutputs(): boolean; + clearOutputs(): DagSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DagSpec.AsObject; + static toObject(includeInstance: boolean, msg: DagSpec): DagSpec.AsObject; + static serializeBinaryToWriter(message: DagSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DagSpec; + static deserializeBinaryFromReader(message: DagSpec, reader: jspb.BinaryReader): DagSpec; +} + +export namespace DagSpec { + export type AsObject = { + tasksMap: Array<[string, PipelineTaskSpec.AsObject]>, + outputs?: DagOutputsSpec.AsObject, + } +} + +export class DagOutputsSpec extends jspb.Message { + getArtifactsMap(): jspb.Map<string, DagOutputsSpec.DagOutputArtifactSpec>; + clearArtifactsMap(): DagOutputsSpec; + + getParametersMap(): jspb.Map<string, DagOutputsSpec.DagOutputParameterSpec>; + clearParametersMap(): DagOutputsSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DagOutputsSpec.AsObject; + static toObject(includeInstance: boolean, msg: DagOutputsSpec): DagOutputsSpec.AsObject; + static serializeBinaryToWriter(message: DagOutputsSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DagOutputsSpec; + static deserializeBinaryFromReader(message: DagOutputsSpec, reader: jspb.BinaryReader): DagOutputsSpec; +} + +export namespace DagOutputsSpec { + export type AsObject = { + artifactsMap: Array<[string, DagOutputsSpec.DagOutputArtifactSpec.AsObject]>, + parametersMap: Array<[string, DagOutputsSpec.DagOutputParameterSpec.AsObject]>, + } + + export class ArtifactSelectorSpec extends jspb.Message { + getProducerSubtask(): string; + setProducerSubtask(value: string): ArtifactSelectorSpec; + + getOutputArtifactKey(): string; + setOutputArtifactKey(value: string): ArtifactSelectorSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactSelectorSpec.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactSelectorSpec): ArtifactSelectorSpec.AsObject; + static serializeBinaryToWriter(message: ArtifactSelectorSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactSelectorSpec; + static deserializeBinaryFromReader(message: ArtifactSelectorSpec, reader: jspb.BinaryReader): ArtifactSelectorSpec; + } + + export namespace ArtifactSelectorSpec { + export type AsObject = { + producerSubtask: string, + outputArtifactKey: string, + } + } + + + export class DagOutputArtifactSpec extends jspb.Message { + getArtifactSelectorsList(): Array<DagOutputsSpec.ArtifactSelectorSpec>; + setArtifactSelectorsList(value: Array<DagOutputsSpec.ArtifactSelectorSpec>): DagOutputArtifactSpec; + clearArtifactSelectorsList(): DagOutputArtifactSpec; + addArtifactSelectors(value?: DagOutputsSpec.ArtifactSelectorSpec, index?: number): DagOutputsSpec.ArtifactSelectorSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DagOutputArtifactSpec.AsObject; + static toObject(includeInstance: boolean, msg: DagOutputArtifactSpec): DagOutputArtifactSpec.AsObject; + static serializeBinaryToWriter(message: DagOutputArtifactSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DagOutputArtifactSpec; + static deserializeBinaryFromReader(message: DagOutputArtifactSpec, reader: jspb.BinaryReader): DagOutputArtifactSpec; + } + + export namespace DagOutputArtifactSpec { + export type AsObject = { + artifactSelectorsList: Array<DagOutputsSpec.ArtifactSelectorSpec.AsObject>, + } + } + + + export class ParameterSelectorSpec extends jspb.Message { + getProducerSubtask(): string; + setProducerSubtask(value: string): ParameterSelectorSpec; + + getOutputParameterKey(): string; + setOutputParameterKey(value: string): ParameterSelectorSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ParameterSelectorSpec.AsObject; + static toObject(includeInstance: boolean, msg: ParameterSelectorSpec): ParameterSelectorSpec.AsObject; + static serializeBinaryToWriter(message: ParameterSelectorSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ParameterSelectorSpec; + static deserializeBinaryFromReader(message: ParameterSelectorSpec, reader: jspb.BinaryReader): ParameterSelectorSpec; + } + + export namespace ParameterSelectorSpec { + export type AsObject = { + producerSubtask: string, + outputParameterKey: string, + } + } + + + export class ParameterSelectorsSpec extends jspb.Message { + getParameterSelectorsList(): Array<DagOutputsSpec.ParameterSelectorSpec>; + setParameterSelectorsList(value: Array<DagOutputsSpec.ParameterSelectorSpec>): ParameterSelectorsSpec; + clearParameterSelectorsList(): ParameterSelectorsSpec; + addParameterSelectors(value?: DagOutputsSpec.ParameterSelectorSpec, index?: number): DagOutputsSpec.ParameterSelectorSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ParameterSelectorsSpec.AsObject; + static toObject(includeInstance: boolean, msg: ParameterSelectorsSpec): ParameterSelectorsSpec.AsObject; + static serializeBinaryToWriter(message: ParameterSelectorsSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ParameterSelectorsSpec; + static deserializeBinaryFromReader(message: ParameterSelectorsSpec, reader: jspb.BinaryReader): ParameterSelectorsSpec; + } + + export namespace ParameterSelectorsSpec { + export type AsObject = { + parameterSelectorsList: Array<DagOutputsSpec.ParameterSelectorSpec.AsObject>, + } + } + + + export class MapParameterSelectorsSpec extends jspb.Message { + getMappedParametersMap(): jspb.Map<string, DagOutputsSpec.ParameterSelectorSpec>; + clearMappedParametersMap(): MapParameterSelectorsSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): MapParameterSelectorsSpec.AsObject; + static toObject(includeInstance: boolean, msg: MapParameterSelectorsSpec): MapParameterSelectorsSpec.AsObject; + static serializeBinaryToWriter(message: MapParameterSelectorsSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): MapParameterSelectorsSpec; + static deserializeBinaryFromReader(message: MapParameterSelectorsSpec, reader: jspb.BinaryReader): MapParameterSelectorsSpec; + } + + export namespace MapParameterSelectorsSpec { + export type AsObject = { + mappedParametersMap: Array<[string, DagOutputsSpec.ParameterSelectorSpec.AsObject]>, + } + } + + + export class DagOutputParameterSpec extends jspb.Message { + getValueFromParameter(): DagOutputsSpec.ParameterSelectorSpec | undefined; + setValueFromParameter(value?: DagOutputsSpec.ParameterSelectorSpec): DagOutputParameterSpec; + hasValueFromParameter(): boolean; + clearValueFromParameter(): DagOutputParameterSpec; + + getValueFromOneof(): DagOutputsSpec.ParameterSelectorsSpec | undefined; + setValueFromOneof(value?: DagOutputsSpec.ParameterSelectorsSpec): DagOutputParameterSpec; + hasValueFromOneof(): boolean; + clearValueFromOneof(): DagOutputParameterSpec; + + getKindCase(): DagOutputParameterSpec.KindCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DagOutputParameterSpec.AsObject; + static toObject(includeInstance: boolean, msg: DagOutputParameterSpec): DagOutputParameterSpec.AsObject; + static serializeBinaryToWriter(message: DagOutputParameterSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DagOutputParameterSpec; + static deserializeBinaryFromReader(message: DagOutputParameterSpec, reader: jspb.BinaryReader): DagOutputParameterSpec; + } + + export namespace DagOutputParameterSpec { + export type AsObject = { + valueFromParameter?: DagOutputsSpec.ParameterSelectorSpec.AsObject, + valueFromOneof?: DagOutputsSpec.ParameterSelectorsSpec.AsObject, + } + + export enum KindCase { + KIND_NOT_SET = 0, + VALUE_FROM_PARAMETER = 1, + VALUE_FROM_ONEOF = 2, + } + } + +} + +export class ComponentInputsSpec extends jspb.Message { + getArtifactsMap(): jspb.Map<string, ComponentInputsSpec.ArtifactSpec>; + clearArtifactsMap(): ComponentInputsSpec; + + getParametersMap(): jspb.Map<string, ComponentInputsSpec.ParameterSpec>; + clearParametersMap(): ComponentInputsSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ComponentInputsSpec.AsObject; + static toObject(includeInstance: boolean, msg: ComponentInputsSpec): ComponentInputsSpec.AsObject; + static serializeBinaryToWriter(message: ComponentInputsSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ComponentInputsSpec; + static deserializeBinaryFromReader(message: ComponentInputsSpec, reader: jspb.BinaryReader): ComponentInputsSpec; +} + +export namespace ComponentInputsSpec { + export type AsObject = { + artifactsMap: Array<[string, ComponentInputsSpec.ArtifactSpec.AsObject]>, + parametersMap: Array<[string, ComponentInputsSpec.ParameterSpec.AsObject]>, + } + + export class ArtifactSpec extends jspb.Message { + getArtifactType(): ArtifactTypeSchema | undefined; + setArtifactType(value?: ArtifactTypeSchema): ArtifactSpec; + hasArtifactType(): boolean; + clearArtifactType(): ArtifactSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactSpec.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactSpec): ArtifactSpec.AsObject; + static serializeBinaryToWriter(message: ArtifactSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactSpec; + static deserializeBinaryFromReader(message: ArtifactSpec, reader: jspb.BinaryReader): ArtifactSpec; + } + + export namespace ArtifactSpec { + export type AsObject = { + artifactType?: ArtifactTypeSchema.AsObject, + } + } + + + export class ParameterSpec extends jspb.Message { + getType(): PrimitiveType.PrimitiveTypeEnum; + setType(value: PrimitiveType.PrimitiveTypeEnum): ParameterSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ParameterSpec.AsObject; + static toObject(includeInstance: boolean, msg: ParameterSpec): ParameterSpec.AsObject; + static serializeBinaryToWriter(message: ParameterSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ParameterSpec; + static deserializeBinaryFromReader(message: ParameterSpec, reader: jspb.BinaryReader): ParameterSpec; + } + + export namespace ParameterSpec { + export type AsObject = { + type: PrimitiveType.PrimitiveTypeEnum, + } + } + +} + +export class ComponentOutputsSpec extends jspb.Message { + getArtifactsMap(): jspb.Map<string, ComponentOutputsSpec.ArtifactSpec>; + clearArtifactsMap(): ComponentOutputsSpec; + + getParametersMap(): jspb.Map<string, ComponentOutputsSpec.ParameterSpec>; + clearParametersMap(): ComponentOutputsSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ComponentOutputsSpec.AsObject; + static toObject(includeInstance: boolean, msg: ComponentOutputsSpec): ComponentOutputsSpec.AsObject; + static serializeBinaryToWriter(message: ComponentOutputsSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ComponentOutputsSpec; + static deserializeBinaryFromReader(message: ComponentOutputsSpec, reader: jspb.BinaryReader): ComponentOutputsSpec; +} + +export namespace ComponentOutputsSpec { + export type AsObject = { + artifactsMap: Array<[string, ComponentOutputsSpec.ArtifactSpec.AsObject]>, + parametersMap: Array<[string, ComponentOutputsSpec.ParameterSpec.AsObject]>, + } + + export class ArtifactSpec extends jspb.Message { + getArtifactType(): ArtifactTypeSchema | undefined; + setArtifactType(value?: ArtifactTypeSchema): ArtifactSpec; + hasArtifactType(): boolean; + clearArtifactType(): ArtifactSpec; + + getPropertiesMap(): jspb.Map<string, ValueOrRuntimeParameter>; + clearPropertiesMap(): ArtifactSpec; + + getCustomPropertiesMap(): jspb.Map<string, ValueOrRuntimeParameter>; + clearCustomPropertiesMap(): ArtifactSpec; + + getMetadata(): google_protobuf_struct_pb.Struct | undefined; + setMetadata(value?: google_protobuf_struct_pb.Struct): ArtifactSpec; + hasMetadata(): boolean; + clearMetadata(): ArtifactSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactSpec.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactSpec): ArtifactSpec.AsObject; + static serializeBinaryToWriter(message: ArtifactSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactSpec; + static deserializeBinaryFromReader(message: ArtifactSpec, reader: jspb.BinaryReader): ArtifactSpec; + } + + export namespace ArtifactSpec { + export type AsObject = { + artifactType?: ArtifactTypeSchema.AsObject, + propertiesMap: Array<[string, ValueOrRuntimeParameter.AsObject]>, + customPropertiesMap: Array<[string, ValueOrRuntimeParameter.AsObject]>, + metadata?: google_protobuf_struct_pb.Struct.AsObject, + } + } + + + export class ParameterSpec extends jspb.Message { + getType(): PrimitiveType.PrimitiveTypeEnum; + setType(value: PrimitiveType.PrimitiveTypeEnum): ParameterSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ParameterSpec.AsObject; + static toObject(includeInstance: boolean, msg: ParameterSpec): ParameterSpec.AsObject; + static serializeBinaryToWriter(message: ParameterSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ParameterSpec; + static deserializeBinaryFromReader(message: ParameterSpec, reader: jspb.BinaryReader): ParameterSpec; + } + + export namespace ParameterSpec { + export type AsObject = { + type: PrimitiveType.PrimitiveTypeEnum, + } + } + +} + +export class TaskInputsSpec extends jspb.Message { + getParametersMap(): jspb.Map<string, TaskInputsSpec.InputParameterSpec>; + clearParametersMap(): TaskInputsSpec; + + getArtifactsMap(): jspb.Map<string, TaskInputsSpec.InputArtifactSpec>; + clearArtifactsMap(): TaskInputsSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): TaskInputsSpec.AsObject; + static toObject(includeInstance: boolean, msg: TaskInputsSpec): TaskInputsSpec.AsObject; + static serializeBinaryToWriter(message: TaskInputsSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): TaskInputsSpec; + static deserializeBinaryFromReader(message: TaskInputsSpec, reader: jspb.BinaryReader): TaskInputsSpec; +} + +export namespace TaskInputsSpec { + export type AsObject = { + parametersMap: Array<[string, TaskInputsSpec.InputParameterSpec.AsObject]>, + artifactsMap: Array<[string, TaskInputsSpec.InputArtifactSpec.AsObject]>, + } + + export class InputArtifactSpec extends jspb.Message { + getTaskOutputArtifact(): TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec | undefined; + setTaskOutputArtifact(value?: TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec): InputArtifactSpec; + hasTaskOutputArtifact(): boolean; + clearTaskOutputArtifact(): InputArtifactSpec; + + getComponentInputArtifact(): string; + setComponentInputArtifact(value: string): InputArtifactSpec; + + getKindCase(): InputArtifactSpec.KindCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): InputArtifactSpec.AsObject; + static toObject(includeInstance: boolean, msg: InputArtifactSpec): InputArtifactSpec.AsObject; + static serializeBinaryToWriter(message: InputArtifactSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): InputArtifactSpec; + static deserializeBinaryFromReader(message: InputArtifactSpec, reader: jspb.BinaryReader): InputArtifactSpec; + } + + export namespace InputArtifactSpec { + export type AsObject = { + taskOutputArtifact?: TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.AsObject, + componentInputArtifact: string, + } + + export class TaskOutputArtifactSpec extends jspb.Message { + getProducerTask(): string; + setProducerTask(value: string): TaskOutputArtifactSpec; + + getOutputArtifactKey(): string; + setOutputArtifactKey(value: string): TaskOutputArtifactSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): TaskOutputArtifactSpec.AsObject; + static toObject(includeInstance: boolean, msg: TaskOutputArtifactSpec): TaskOutputArtifactSpec.AsObject; + static serializeBinaryToWriter(message: TaskOutputArtifactSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): TaskOutputArtifactSpec; + static deserializeBinaryFromReader(message: TaskOutputArtifactSpec, reader: jspb.BinaryReader): TaskOutputArtifactSpec; + } + + export namespace TaskOutputArtifactSpec { + export type AsObject = { + producerTask: string, + outputArtifactKey: string, + } + } + + + export enum KindCase { + KIND_NOT_SET = 0, + TASK_OUTPUT_ARTIFACT = 3, + COMPONENT_INPUT_ARTIFACT = 4, + } + } + + + export class InputParameterSpec extends jspb.Message { + getTaskOutputParameter(): TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec | undefined; + setTaskOutputParameter(value?: TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec): InputParameterSpec; + hasTaskOutputParameter(): boolean; + clearTaskOutputParameter(): InputParameterSpec; + + getRuntimeValue(): ValueOrRuntimeParameter | undefined; + setRuntimeValue(value?: ValueOrRuntimeParameter): InputParameterSpec; + hasRuntimeValue(): boolean; + clearRuntimeValue(): InputParameterSpec; + + getComponentInputParameter(): string; + setComponentInputParameter(value: string): InputParameterSpec; + + getTaskFinalStatus(): TaskInputsSpec.InputParameterSpec.TaskFinalStatus | undefined; + setTaskFinalStatus(value?: TaskInputsSpec.InputParameterSpec.TaskFinalStatus): InputParameterSpec; + hasTaskFinalStatus(): boolean; + clearTaskFinalStatus(): InputParameterSpec; + + getParameterExpressionSelector(): string; + setParameterExpressionSelector(value: string): InputParameterSpec; + + getKindCase(): InputParameterSpec.KindCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): InputParameterSpec.AsObject; + static toObject(includeInstance: boolean, msg: InputParameterSpec): InputParameterSpec.AsObject; + static serializeBinaryToWriter(message: InputParameterSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): InputParameterSpec; + static deserializeBinaryFromReader(message: InputParameterSpec, reader: jspb.BinaryReader): InputParameterSpec; + } + + export namespace InputParameterSpec { + export type AsObject = { + taskOutputParameter?: TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.AsObject, + runtimeValue?: ValueOrRuntimeParameter.AsObject, + componentInputParameter: string, + taskFinalStatus?: TaskInputsSpec.InputParameterSpec.TaskFinalStatus.AsObject, + parameterExpressionSelector: string, + } + + export class TaskOutputParameterSpec extends jspb.Message { + getProducerTask(): string; + setProducerTask(value: string): TaskOutputParameterSpec; + + getOutputParameterKey(): string; + setOutputParameterKey(value: string): TaskOutputParameterSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): TaskOutputParameterSpec.AsObject; + static toObject(includeInstance: boolean, msg: TaskOutputParameterSpec): TaskOutputParameterSpec.AsObject; + static serializeBinaryToWriter(message: TaskOutputParameterSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): TaskOutputParameterSpec; + static deserializeBinaryFromReader(message: TaskOutputParameterSpec, reader: jspb.BinaryReader): TaskOutputParameterSpec; + } + + export namespace TaskOutputParameterSpec { + export type AsObject = { + producerTask: string, + outputParameterKey: string, + } + } + + + export class TaskFinalStatus extends jspb.Message { + getProducerTask(): string; + setProducerTask(value: string): TaskFinalStatus; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): TaskFinalStatus.AsObject; + static toObject(includeInstance: boolean, msg: TaskFinalStatus): TaskFinalStatus.AsObject; + static serializeBinaryToWriter(message: TaskFinalStatus, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): TaskFinalStatus; + static deserializeBinaryFromReader(message: TaskFinalStatus, reader: jspb.BinaryReader): TaskFinalStatus; + } + + export namespace TaskFinalStatus { + export type AsObject = { + producerTask: string, + } + } + + + export enum KindCase { + KIND_NOT_SET = 0, + TASK_OUTPUT_PARAMETER = 1, + RUNTIME_VALUE = 2, + COMPONENT_INPUT_PARAMETER = 3, + TASK_FINAL_STATUS = 5, + } + } + +} + +export class TaskOutputsSpec extends jspb.Message { + getParametersMap(): jspb.Map<string, TaskOutputsSpec.OutputParameterSpec>; + clearParametersMap(): TaskOutputsSpec; + + getArtifactsMap(): jspb.Map<string, TaskOutputsSpec.OutputArtifactSpec>; + clearArtifactsMap(): TaskOutputsSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): TaskOutputsSpec.AsObject; + static toObject(includeInstance: boolean, msg: TaskOutputsSpec): TaskOutputsSpec.AsObject; + static serializeBinaryToWriter(message: TaskOutputsSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): TaskOutputsSpec; + static deserializeBinaryFromReader(message: TaskOutputsSpec, reader: jspb.BinaryReader): TaskOutputsSpec; +} + +export namespace TaskOutputsSpec { + export type AsObject = { + parametersMap: Array<[string, TaskOutputsSpec.OutputParameterSpec.AsObject]>, + artifactsMap: Array<[string, TaskOutputsSpec.OutputArtifactSpec.AsObject]>, + } + + export class OutputArtifactSpec extends jspb.Message { + getArtifactType(): ArtifactTypeSchema | undefined; + setArtifactType(value?: ArtifactTypeSchema): OutputArtifactSpec; + hasArtifactType(): boolean; + clearArtifactType(): OutputArtifactSpec; + + getPropertiesMap(): jspb.Map<string, ValueOrRuntimeParameter>; + clearPropertiesMap(): OutputArtifactSpec; + + getCustomPropertiesMap(): jspb.Map<string, ValueOrRuntimeParameter>; + clearCustomPropertiesMap(): OutputArtifactSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): OutputArtifactSpec.AsObject; + static toObject(includeInstance: boolean, msg: OutputArtifactSpec): OutputArtifactSpec.AsObject; + static serializeBinaryToWriter(message: OutputArtifactSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): OutputArtifactSpec; + static deserializeBinaryFromReader(message: OutputArtifactSpec, reader: jspb.BinaryReader): OutputArtifactSpec; + } + + export namespace OutputArtifactSpec { + export type AsObject = { + artifactType?: ArtifactTypeSchema.AsObject, + propertiesMap: Array<[string, ValueOrRuntimeParameter.AsObject]>, + customPropertiesMap: Array<[string, ValueOrRuntimeParameter.AsObject]>, + } + } + + + export class OutputParameterSpec extends jspb.Message { + getType(): PrimitiveType.PrimitiveTypeEnum; + setType(value: PrimitiveType.PrimitiveTypeEnum): OutputParameterSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): OutputParameterSpec.AsObject; + static toObject(includeInstance: boolean, msg: OutputParameterSpec): OutputParameterSpec.AsObject; + static serializeBinaryToWriter(message: OutputParameterSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): OutputParameterSpec; + static deserializeBinaryFromReader(message: OutputParameterSpec, reader: jspb.BinaryReader): OutputParameterSpec; + } + + export namespace OutputParameterSpec { + export type AsObject = { + type: PrimitiveType.PrimitiveTypeEnum, + } + } + +} + +export class PrimitiveType extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PrimitiveType.AsObject; + static toObject(includeInstance: boolean, msg: PrimitiveType): PrimitiveType.AsObject; + static serializeBinaryToWriter(message: PrimitiveType, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PrimitiveType; + static deserializeBinaryFromReader(message: PrimitiveType, reader: jspb.BinaryReader): PrimitiveType; +} + +export namespace PrimitiveType { + export type AsObject = { + } + + export enum PrimitiveTypeEnum { + PRIMITIVE_TYPE_UNSPECIFIED = 0, + INT = 1, + DOUBLE = 2, + STRING = 3, + } +} + +export class PipelineTaskSpec extends jspb.Message { + getTaskInfo(): PipelineTaskInfo | undefined; + setTaskInfo(value?: PipelineTaskInfo): PipelineTaskSpec; + hasTaskInfo(): boolean; + clearTaskInfo(): PipelineTaskSpec; + + getInputs(): TaskInputsSpec | undefined; + setInputs(value?: TaskInputsSpec): PipelineTaskSpec; + hasInputs(): boolean; + clearInputs(): PipelineTaskSpec; + + getDependentTasksList(): Array<string>; + setDependentTasksList(value: Array<string>): PipelineTaskSpec; + clearDependentTasksList(): PipelineTaskSpec; + addDependentTasks(value: string, index?: number): PipelineTaskSpec; + + getCachingOptions(): PipelineTaskSpec.CachingOptions | undefined; + setCachingOptions(value?: PipelineTaskSpec.CachingOptions): PipelineTaskSpec; + hasCachingOptions(): boolean; + clearCachingOptions(): PipelineTaskSpec; + + getComponentRef(): ComponentRef | undefined; + setComponentRef(value?: ComponentRef): PipelineTaskSpec; + hasComponentRef(): boolean; + clearComponentRef(): PipelineTaskSpec; + + getTriggerPolicy(): PipelineTaskSpec.TriggerPolicy | undefined; + setTriggerPolicy(value?: PipelineTaskSpec.TriggerPolicy): PipelineTaskSpec; + hasTriggerPolicy(): boolean; + clearTriggerPolicy(): PipelineTaskSpec; + + getArtifactIterator(): ArtifactIteratorSpec | undefined; + setArtifactIterator(value?: ArtifactIteratorSpec): PipelineTaskSpec; + hasArtifactIterator(): boolean; + clearArtifactIterator(): PipelineTaskSpec; + + getParameterIterator(): ParameterIteratorSpec | undefined; + setParameterIterator(value?: ParameterIteratorSpec): PipelineTaskSpec; + hasParameterIterator(): boolean; + clearParameterIterator(): PipelineTaskSpec; + + getIteratorCase(): PipelineTaskSpec.IteratorCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PipelineTaskSpec.AsObject; + static toObject(includeInstance: boolean, msg: PipelineTaskSpec): PipelineTaskSpec.AsObject; + static serializeBinaryToWriter(message: PipelineTaskSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PipelineTaskSpec; + static deserializeBinaryFromReader(message: PipelineTaskSpec, reader: jspb.BinaryReader): PipelineTaskSpec; +} + +export namespace PipelineTaskSpec { + export type AsObject = { + taskInfo?: PipelineTaskInfo.AsObject, + inputs?: TaskInputsSpec.AsObject, + dependentTasksList: Array<string>, + cachingOptions?: PipelineTaskSpec.CachingOptions.AsObject, + componentRef?: ComponentRef.AsObject, + triggerPolicy?: PipelineTaskSpec.TriggerPolicy.AsObject, + artifactIterator?: ArtifactIteratorSpec.AsObject, + parameterIterator?: ParameterIteratorSpec.AsObject, + } + + export class CachingOptions extends jspb.Message { + getEnableCache(): boolean; + setEnableCache(value: boolean): CachingOptions; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): CachingOptions.AsObject; + static toObject(includeInstance: boolean, msg: CachingOptions): CachingOptions.AsObject; + static serializeBinaryToWriter(message: CachingOptions, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): CachingOptions; + static deserializeBinaryFromReader(message: CachingOptions, reader: jspb.BinaryReader): CachingOptions; + } + + export namespace CachingOptions { + export type AsObject = { + enableCache: boolean, + } + } + + + export class TriggerPolicy extends jspb.Message { + getCondition(): string; + setCondition(value: string): TriggerPolicy; + + getStrategy(): PipelineTaskSpec.TriggerPolicy.TriggerStrategy; + setStrategy(value: PipelineTaskSpec.TriggerPolicy.TriggerStrategy): TriggerPolicy; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): TriggerPolicy.AsObject; + static toObject(includeInstance: boolean, msg: TriggerPolicy): TriggerPolicy.AsObject; + static serializeBinaryToWriter(message: TriggerPolicy, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): TriggerPolicy; + static deserializeBinaryFromReader(message: TriggerPolicy, reader: jspb.BinaryReader): TriggerPolicy; + } + + export namespace TriggerPolicy { + export type AsObject = { + condition: string, + strategy: PipelineTaskSpec.TriggerPolicy.TriggerStrategy, + } + + export enum TriggerStrategy { + TRIGGER_STRATEGY_UNSPECIFIED = 0, + ALL_UPSTREAM_TASKS_SUCCEEDED = 1, + ALL_UPSTREAM_TASKS_COMPLETED = 2, + } + } + + + export enum IteratorCase { + ITERATOR_NOT_SET = 0, + ARTIFACT_ITERATOR = 9, + PARAMETER_ITERATOR = 10, + } +} + +export class ArtifactIteratorSpec extends jspb.Message { + getItems(): ArtifactIteratorSpec.ItemsSpec | undefined; + setItems(value?: ArtifactIteratorSpec.ItemsSpec): ArtifactIteratorSpec; + hasItems(): boolean; + clearItems(): ArtifactIteratorSpec; + + getItemInput(): string; + setItemInput(value: string): ArtifactIteratorSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactIteratorSpec.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactIteratorSpec): ArtifactIteratorSpec.AsObject; + static serializeBinaryToWriter(message: ArtifactIteratorSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactIteratorSpec; + static deserializeBinaryFromReader(message: ArtifactIteratorSpec, reader: jspb.BinaryReader): ArtifactIteratorSpec; +} + +export namespace ArtifactIteratorSpec { + export type AsObject = { + items?: ArtifactIteratorSpec.ItemsSpec.AsObject, + itemInput: string, + } + + export class ItemsSpec extends jspb.Message { + getInputArtifact(): string; + setInputArtifact(value: string): ItemsSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ItemsSpec.AsObject; + static toObject(includeInstance: boolean, msg: ItemsSpec): ItemsSpec.AsObject; + static serializeBinaryToWriter(message: ItemsSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ItemsSpec; + static deserializeBinaryFromReader(message: ItemsSpec, reader: jspb.BinaryReader): ItemsSpec; + } + + export namespace ItemsSpec { + export type AsObject = { + inputArtifact: string, + } + } + +} + +export class ParameterIteratorSpec extends jspb.Message { + getItems(): ParameterIteratorSpec.ItemsSpec | undefined; + setItems(value?: ParameterIteratorSpec.ItemsSpec): ParameterIteratorSpec; + hasItems(): boolean; + clearItems(): ParameterIteratorSpec; + + getItemInput(): string; + setItemInput(value: string): ParameterIteratorSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ParameterIteratorSpec.AsObject; + static toObject(includeInstance: boolean, msg: ParameterIteratorSpec): ParameterIteratorSpec.AsObject; + static serializeBinaryToWriter(message: ParameterIteratorSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ParameterIteratorSpec; + static deserializeBinaryFromReader(message: ParameterIteratorSpec, reader: jspb.BinaryReader): ParameterIteratorSpec; +} + +export namespace ParameterIteratorSpec { + export type AsObject = { + items?: ParameterIteratorSpec.ItemsSpec.AsObject, + itemInput: string, + } + + export class ItemsSpec extends jspb.Message { + getRaw(): string; + setRaw(value: string): ItemsSpec; + + getInputParameter(): string; + setInputParameter(value: string): ItemsSpec; + + getKindCase(): ItemsSpec.KindCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ItemsSpec.AsObject; + static toObject(includeInstance: boolean, msg: ItemsSpec): ItemsSpec.AsObject; + static serializeBinaryToWriter(message: ItemsSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ItemsSpec; + static deserializeBinaryFromReader(message: ItemsSpec, reader: jspb.BinaryReader): ItemsSpec; + } + + export namespace ItemsSpec { + export type AsObject = { + raw: string, + inputParameter: string, + } + + export enum KindCase { + KIND_NOT_SET = 0, + RAW = 1, + INPUT_PARAMETER = 2, + } + } + +} + +export class ComponentRef extends jspb.Message { + getName(): string; + setName(value: string): ComponentRef; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ComponentRef.AsObject; + static toObject(includeInstance: boolean, msg: ComponentRef): ComponentRef.AsObject; + static serializeBinaryToWriter(message: ComponentRef, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ComponentRef; + static deserializeBinaryFromReader(message: ComponentRef, reader: jspb.BinaryReader): ComponentRef; +} + +export namespace ComponentRef { + export type AsObject = { + name: string, + } +} + +export class PipelineInfo extends jspb.Message { + getName(): string; + setName(value: string): PipelineInfo; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PipelineInfo.AsObject; + static toObject(includeInstance: boolean, msg: PipelineInfo): PipelineInfo.AsObject; + static serializeBinaryToWriter(message: PipelineInfo, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PipelineInfo; + static deserializeBinaryFromReader(message: PipelineInfo, reader: jspb.BinaryReader): PipelineInfo; +} + +export namespace PipelineInfo { + export type AsObject = { + name: string, + } +} + +export class ArtifactTypeSchema extends jspb.Message { + getSchemaTitle(): string; + setSchemaTitle(value: string): ArtifactTypeSchema; + + getSchemaUri(): string; + setSchemaUri(value: string): ArtifactTypeSchema; + + getInstanceSchema(): string; + setInstanceSchema(value: string): ArtifactTypeSchema; + + getSchemaVersion(): string; + setSchemaVersion(value: string): ArtifactTypeSchema; + + getKindCase(): ArtifactTypeSchema.KindCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactTypeSchema.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactTypeSchema): ArtifactTypeSchema.AsObject; + static serializeBinaryToWriter(message: ArtifactTypeSchema, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactTypeSchema; + static deserializeBinaryFromReader(message: ArtifactTypeSchema, reader: jspb.BinaryReader): ArtifactTypeSchema; +} + +export namespace ArtifactTypeSchema { + export type AsObject = { + schemaTitle: string, + schemaUri: string, + instanceSchema: string, + schemaVersion: string, + } + + export enum KindCase { + KIND_NOT_SET = 0, + SCHEMA_TITLE = 1, + SCHEMA_URI = 2, + INSTANCE_SCHEMA = 3, + } +} + +export class PipelineTaskInfo extends jspb.Message { + getName(): string; + setName(value: string): PipelineTaskInfo; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PipelineTaskInfo.AsObject; + static toObject(includeInstance: boolean, msg: PipelineTaskInfo): PipelineTaskInfo.AsObject; + static serializeBinaryToWriter(message: PipelineTaskInfo, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PipelineTaskInfo; + static deserializeBinaryFromReader(message: PipelineTaskInfo, reader: jspb.BinaryReader): PipelineTaskInfo; +} + +export namespace PipelineTaskInfo { + export type AsObject = { + name: string, + } +} + +export class ValueOrRuntimeParameter extends jspb.Message { + getConstantValue(): Value | undefined; + setConstantValue(value?: Value): ValueOrRuntimeParameter; + hasConstantValue(): boolean; + clearConstantValue(): ValueOrRuntimeParameter; + + getRuntimeParameter(): string; + setRuntimeParameter(value: string): ValueOrRuntimeParameter; + + getValueCase(): ValueOrRuntimeParameter.ValueCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ValueOrRuntimeParameter.AsObject; + static toObject(includeInstance: boolean, msg: ValueOrRuntimeParameter): ValueOrRuntimeParameter.AsObject; + static serializeBinaryToWriter(message: ValueOrRuntimeParameter, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ValueOrRuntimeParameter; + static deserializeBinaryFromReader(message: ValueOrRuntimeParameter, reader: jspb.BinaryReader): ValueOrRuntimeParameter; +} + +export namespace ValueOrRuntimeParameter { + export type AsObject = { + constantValue?: Value.AsObject, + runtimeParameter: string, + } + + export enum ValueCase { + VALUE_NOT_SET = 0, + CONSTANT_VALUE = 1, + RUNTIME_PARAMETER = 2, + } +} + +export class PipelineDeploymentConfig extends jspb.Message { + getExecutorsMap(): jspb.Map<string, PipelineDeploymentConfig.ExecutorSpec>; + clearExecutorsMap(): PipelineDeploymentConfig; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PipelineDeploymentConfig.AsObject; + static toObject(includeInstance: boolean, msg: PipelineDeploymentConfig): PipelineDeploymentConfig.AsObject; + static serializeBinaryToWriter(message: PipelineDeploymentConfig, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PipelineDeploymentConfig; + static deserializeBinaryFromReader(message: PipelineDeploymentConfig, reader: jspb.BinaryReader): PipelineDeploymentConfig; +} + +export namespace PipelineDeploymentConfig { + export type AsObject = { + executorsMap: Array<[string, PipelineDeploymentConfig.ExecutorSpec.AsObject]>, + } + + export class PipelineContainerSpec extends jspb.Message { + getImage(): string; + setImage(value: string): PipelineContainerSpec; + + getCommandList(): Array<string>; + setCommandList(value: Array<string>): PipelineContainerSpec; + clearCommandList(): PipelineContainerSpec; + addCommand(value: string, index?: number): PipelineContainerSpec; + + getArgsList(): Array<string>; + setArgsList(value: Array<string>): PipelineContainerSpec; + clearArgsList(): PipelineContainerSpec; + addArgs(value: string, index?: number): PipelineContainerSpec; + + getLifecycle(): PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle | undefined; + setLifecycle(value?: PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle): PipelineContainerSpec; + hasLifecycle(): boolean; + clearLifecycle(): PipelineContainerSpec; + + getResources(): PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec | undefined; + setResources(value?: PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec): PipelineContainerSpec; + hasResources(): boolean; + clearResources(): PipelineContainerSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PipelineContainerSpec.AsObject; + static toObject(includeInstance: boolean, msg: PipelineContainerSpec): PipelineContainerSpec.AsObject; + static serializeBinaryToWriter(message: PipelineContainerSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PipelineContainerSpec; + static deserializeBinaryFromReader(message: PipelineContainerSpec, reader: jspb.BinaryReader): PipelineContainerSpec; + } + + export namespace PipelineContainerSpec { + export type AsObject = { + image: string, + commandList: Array<string>, + argsList: Array<string>, + lifecycle?: PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.AsObject, + resources?: PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AsObject, + } + + export class Lifecycle extends jspb.Message { + getPreCacheCheck(): PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec | undefined; + setPreCacheCheck(value?: PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec): Lifecycle; + hasPreCacheCheck(): boolean; + clearPreCacheCheck(): Lifecycle; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Lifecycle.AsObject; + static toObject(includeInstance: boolean, msg: Lifecycle): Lifecycle.AsObject; + static serializeBinaryToWriter(message: Lifecycle, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Lifecycle; + static deserializeBinaryFromReader(message: Lifecycle, reader: jspb.BinaryReader): Lifecycle; + } + + export namespace Lifecycle { + export type AsObject = { + preCacheCheck?: PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.AsObject, + } + + export class Exec extends jspb.Message { + getCommandList(): Array<string>; + setCommandList(value: Array<string>): Exec; + clearCommandList(): Exec; + addCommand(value: string, index?: number): Exec; + + getArgsList(): Array<string>; + setArgsList(value: Array<string>): Exec; + clearArgsList(): Exec; + addArgs(value: string, index?: number): Exec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Exec.AsObject; + static toObject(includeInstance: boolean, msg: Exec): Exec.AsObject; + static serializeBinaryToWriter(message: Exec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Exec; + static deserializeBinaryFromReader(message: Exec, reader: jspb.BinaryReader): Exec; + } + + export namespace Exec { + export type AsObject = { + commandList: Array<string>, + argsList: Array<string>, + } + } + + } + + + export class ResourceSpec extends jspb.Message { + getCpuLimit(): number; + setCpuLimit(value: number): ResourceSpec; + + getMemoryLimit(): number; + setMemoryLimit(value: number): ResourceSpec; + + getAccelerator(): PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig | undefined; + setAccelerator(value?: PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig): ResourceSpec; + hasAccelerator(): boolean; + clearAccelerator(): ResourceSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ResourceSpec.AsObject; + static toObject(includeInstance: boolean, msg: ResourceSpec): ResourceSpec.AsObject; + static serializeBinaryToWriter(message: ResourceSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ResourceSpec; + static deserializeBinaryFromReader(message: ResourceSpec, reader: jspb.BinaryReader): ResourceSpec; + } + + export namespace ResourceSpec { + export type AsObject = { + cpuLimit: number, + memoryLimit: number, + accelerator?: PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.AsObject, + } + + export class AcceleratorConfig extends jspb.Message { + getType(): string; + setType(value: string): AcceleratorConfig; + + getCount(): number; + setCount(value: number): AcceleratorConfig; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): AcceleratorConfig.AsObject; + static toObject(includeInstance: boolean, msg: AcceleratorConfig): AcceleratorConfig.AsObject; + static serializeBinaryToWriter(message: AcceleratorConfig, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): AcceleratorConfig; + static deserializeBinaryFromReader(message: AcceleratorConfig, reader: jspb.BinaryReader): AcceleratorConfig; + } + + export namespace AcceleratorConfig { + export type AsObject = { + type: string, + count: number, + } + } + + } + + } + + + export class ImporterSpec extends jspb.Message { + getArtifactUri(): ValueOrRuntimeParameter | undefined; + setArtifactUri(value?: ValueOrRuntimeParameter): ImporterSpec; + hasArtifactUri(): boolean; + clearArtifactUri(): ImporterSpec; + + getTypeSchema(): ArtifactTypeSchema | undefined; + setTypeSchema(value?: ArtifactTypeSchema): ImporterSpec; + hasTypeSchema(): boolean; + clearTypeSchema(): ImporterSpec; + + getPropertiesMap(): jspb.Map<string, ValueOrRuntimeParameter>; + clearPropertiesMap(): ImporterSpec; + + getCustomPropertiesMap(): jspb.Map<string, ValueOrRuntimeParameter>; + clearCustomPropertiesMap(): ImporterSpec; + + getMetadata(): google_protobuf_struct_pb.Struct | undefined; + setMetadata(value?: google_protobuf_struct_pb.Struct): ImporterSpec; + hasMetadata(): boolean; + clearMetadata(): ImporterSpec; + + getReimport(): boolean; + setReimport(value: boolean): ImporterSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ImporterSpec.AsObject; + static toObject(includeInstance: boolean, msg: ImporterSpec): ImporterSpec.AsObject; + static serializeBinaryToWriter(message: ImporterSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ImporterSpec; + static deserializeBinaryFromReader(message: ImporterSpec, reader: jspb.BinaryReader): ImporterSpec; + } + + export namespace ImporterSpec { + export type AsObject = { + artifactUri?: ValueOrRuntimeParameter.AsObject, + typeSchema?: ArtifactTypeSchema.AsObject, + propertiesMap: Array<[string, ValueOrRuntimeParameter.AsObject]>, + customPropertiesMap: Array<[string, ValueOrRuntimeParameter.AsObject]>, + metadata?: google_protobuf_struct_pb.Struct.AsObject, + reimport: boolean, + } + } + + + export class ResolverSpec extends jspb.Message { + getOutputArtifactQueriesMap(): jspb.Map<string, PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec>; + clearOutputArtifactQueriesMap(): ResolverSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ResolverSpec.AsObject; + static toObject(includeInstance: boolean, msg: ResolverSpec): ResolverSpec.AsObject; + static serializeBinaryToWriter(message: ResolverSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ResolverSpec; + static deserializeBinaryFromReader(message: ResolverSpec, reader: jspb.BinaryReader): ResolverSpec; + } + + export namespace ResolverSpec { + export type AsObject = { + outputArtifactQueriesMap: Array<[string, PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.AsObject]>, + } + + export class ArtifactQuerySpec extends jspb.Message { + getFilter(): string; + setFilter(value: string): ArtifactQuerySpec; + + getLimit(): number; + setLimit(value: number): ArtifactQuerySpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactQuerySpec.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactQuerySpec): ArtifactQuerySpec.AsObject; + static serializeBinaryToWriter(message: ArtifactQuerySpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactQuerySpec; + static deserializeBinaryFromReader(message: ArtifactQuerySpec, reader: jspb.BinaryReader): ArtifactQuerySpec; + } + + export namespace ArtifactQuerySpec { + export type AsObject = { + filter: string, + limit: number, + } + } + + } + + + export class AIPlatformCustomJobSpec extends jspb.Message { + getCustomJob(): google_protobuf_struct_pb.Struct | undefined; + setCustomJob(value?: google_protobuf_struct_pb.Struct): AIPlatformCustomJobSpec; + hasCustomJob(): boolean; + clearCustomJob(): AIPlatformCustomJobSpec; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): AIPlatformCustomJobSpec.AsObject; + static toObject(includeInstance: boolean, msg: AIPlatformCustomJobSpec): AIPlatformCustomJobSpec.AsObject; + static serializeBinaryToWriter(message: AIPlatformCustomJobSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): AIPlatformCustomJobSpec; + static deserializeBinaryFromReader(message: AIPlatformCustomJobSpec, reader: jspb.BinaryReader): AIPlatformCustomJobSpec; + } + + export namespace AIPlatformCustomJobSpec { + export type AsObject = { + customJob?: google_protobuf_struct_pb.Struct.AsObject, + } + } + + + export class ExecutorSpec extends jspb.Message { + getContainer(): PipelineDeploymentConfig.PipelineContainerSpec | undefined; + setContainer(value?: PipelineDeploymentConfig.PipelineContainerSpec): ExecutorSpec; + hasContainer(): boolean; + clearContainer(): ExecutorSpec; + + getImporter(): PipelineDeploymentConfig.ImporterSpec | undefined; + setImporter(value?: PipelineDeploymentConfig.ImporterSpec): ExecutorSpec; + hasImporter(): boolean; + clearImporter(): ExecutorSpec; + + getResolver(): PipelineDeploymentConfig.ResolverSpec | undefined; + setResolver(value?: PipelineDeploymentConfig.ResolverSpec): ExecutorSpec; + hasResolver(): boolean; + clearResolver(): ExecutorSpec; + + getCustomJob(): PipelineDeploymentConfig.AIPlatformCustomJobSpec | undefined; + setCustomJob(value?: PipelineDeploymentConfig.AIPlatformCustomJobSpec): ExecutorSpec; + hasCustomJob(): boolean; + clearCustomJob(): ExecutorSpec; + + getSpecCase(): ExecutorSpec.SpecCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ExecutorSpec.AsObject; + static toObject(includeInstance: boolean, msg: ExecutorSpec): ExecutorSpec.AsObject; + static serializeBinaryToWriter(message: ExecutorSpec, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ExecutorSpec; + static deserializeBinaryFromReader(message: ExecutorSpec, reader: jspb.BinaryReader): ExecutorSpec; + } + + export namespace ExecutorSpec { + export type AsObject = { + container?: PipelineDeploymentConfig.PipelineContainerSpec.AsObject, + importer?: PipelineDeploymentConfig.ImporterSpec.AsObject, + resolver?: PipelineDeploymentConfig.ResolverSpec.AsObject, + customJob?: PipelineDeploymentConfig.AIPlatformCustomJobSpec.AsObject, + } + + export enum SpecCase { + SPEC_NOT_SET = 0, + CONTAINER = 1, + IMPORTER = 2, + RESOLVER = 3, + CUSTOM_JOB = 4, + } + } + +} + +export class Value extends jspb.Message { + getIntValue(): number; + setIntValue(value: number): Value; + + getDoubleValue(): number; + setDoubleValue(value: number): Value; + + getStringValue(): string; + setStringValue(value: string): Value; + + getValueCase(): Value.ValueCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Value.AsObject; + static toObject(includeInstance: boolean, msg: Value): Value.AsObject; + static serializeBinaryToWriter(message: Value, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Value; + static deserializeBinaryFromReader(message: Value, reader: jspb.BinaryReader): Value; +} + +export namespace Value { + export type AsObject = { + intValue: number, + doubleValue: number, + stringValue: string, + } + + export enum ValueCase { + VALUE_NOT_SET = 0, + INT_VALUE = 1, + DOUBLE_VALUE = 2, + STRING_VALUE = 3, + } +} + +export class RuntimeArtifact extends jspb.Message { + getName(): string; + setName(value: string): RuntimeArtifact; + + getType(): ArtifactTypeSchema | undefined; + setType(value?: ArtifactTypeSchema): RuntimeArtifact; + hasType(): boolean; + clearType(): RuntimeArtifact; + + getUri(): string; + setUri(value: string): RuntimeArtifact; + + getPropertiesMap(): jspb.Map<string, Value>; + clearPropertiesMap(): RuntimeArtifact; + + getCustomPropertiesMap(): jspb.Map<string, Value>; + clearCustomPropertiesMap(): RuntimeArtifact; + + getMetadata(): google_protobuf_struct_pb.Struct | undefined; + setMetadata(value?: google_protobuf_struct_pb.Struct): RuntimeArtifact; + hasMetadata(): boolean; + clearMetadata(): RuntimeArtifact; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RuntimeArtifact.AsObject; + static toObject(includeInstance: boolean, msg: RuntimeArtifact): RuntimeArtifact.AsObject; + static serializeBinaryToWriter(message: RuntimeArtifact, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RuntimeArtifact; + static deserializeBinaryFromReader(message: RuntimeArtifact, reader: jspb.BinaryReader): RuntimeArtifact; +} + +export namespace RuntimeArtifact { + export type AsObject = { + name: string, + type?: ArtifactTypeSchema.AsObject, + uri: string, + propertiesMap: Array<[string, Value.AsObject]>, + customPropertiesMap: Array<[string, Value.AsObject]>, + metadata?: google_protobuf_struct_pb.Struct.AsObject, + } +} + +export class ArtifactList extends jspb.Message { + getArtifactsList(): Array<RuntimeArtifact>; + setArtifactsList(value: Array<RuntimeArtifact>): ArtifactList; + clearArtifactsList(): ArtifactList; + addArtifacts(value?: RuntimeArtifact, index?: number): RuntimeArtifact; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactList.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactList): ArtifactList.AsObject; + static serializeBinaryToWriter(message: ArtifactList, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactList; + static deserializeBinaryFromReader(message: ArtifactList, reader: jspb.BinaryReader): ArtifactList; +} + +export namespace ArtifactList { + export type AsObject = { + artifactsList: Array<RuntimeArtifact.AsObject>, + } +} + +export class ExecutorInput extends jspb.Message { + getInputs(): ExecutorInput.Inputs | undefined; + setInputs(value?: ExecutorInput.Inputs): ExecutorInput; + hasInputs(): boolean; + clearInputs(): ExecutorInput; + + getOutputs(): ExecutorInput.Outputs | undefined; + setOutputs(value?: ExecutorInput.Outputs): ExecutorInput; + hasOutputs(): boolean; + clearOutputs(): ExecutorInput; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ExecutorInput.AsObject; + static toObject(includeInstance: boolean, msg: ExecutorInput): ExecutorInput.AsObject; + static serializeBinaryToWriter(message: ExecutorInput, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ExecutorInput; + static deserializeBinaryFromReader(message: ExecutorInput, reader: jspb.BinaryReader): ExecutorInput; +} + +export namespace ExecutorInput { + export type AsObject = { + inputs?: ExecutorInput.Inputs.AsObject, + outputs?: ExecutorInput.Outputs.AsObject, + } + + export class Inputs extends jspb.Message { + getParametersMap(): jspb.Map<string, Value>; + clearParametersMap(): Inputs; + + getArtifactsMap(): jspb.Map<string, ArtifactList>; + clearArtifactsMap(): Inputs; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Inputs.AsObject; + static toObject(includeInstance: boolean, msg: Inputs): Inputs.AsObject; + static serializeBinaryToWriter(message: Inputs, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Inputs; + static deserializeBinaryFromReader(message: Inputs, reader: jspb.BinaryReader): Inputs; + } + + export namespace Inputs { + export type AsObject = { + parametersMap: Array<[string, Value.AsObject]>, + artifactsMap: Array<[string, ArtifactList.AsObject]>, + } + } + + + export class OutputParameter extends jspb.Message { + getOutputFile(): string; + setOutputFile(value: string): OutputParameter; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): OutputParameter.AsObject; + static toObject(includeInstance: boolean, msg: OutputParameter): OutputParameter.AsObject; + static serializeBinaryToWriter(message: OutputParameter, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): OutputParameter; + static deserializeBinaryFromReader(message: OutputParameter, reader: jspb.BinaryReader): OutputParameter; + } + + export namespace OutputParameter { + export type AsObject = { + outputFile: string, + } + } + + + export class Outputs extends jspb.Message { + getParametersMap(): jspb.Map<string, ExecutorInput.OutputParameter>; + clearParametersMap(): Outputs; + + getArtifactsMap(): jspb.Map<string, ArtifactList>; + clearArtifactsMap(): Outputs; + + getOutputFile(): string; + setOutputFile(value: string): Outputs; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Outputs.AsObject; + static toObject(includeInstance: boolean, msg: Outputs): Outputs.AsObject; + static serializeBinaryToWriter(message: Outputs, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Outputs; + static deserializeBinaryFromReader(message: Outputs, reader: jspb.BinaryReader): Outputs; + } + + export namespace Outputs { + export type AsObject = { + parametersMap: Array<[string, ExecutorInput.OutputParameter.AsObject]>, + artifactsMap: Array<[string, ArtifactList.AsObject]>, + outputFile: string, + } + } + +} + +export class ExecutorOutput extends jspb.Message { + getParametersMap(): jspb.Map<string, Value>; + clearParametersMap(): ExecutorOutput; + + getArtifactsMap(): jspb.Map<string, ArtifactList>; + clearArtifactsMap(): ExecutorOutput; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ExecutorOutput.AsObject; + static toObject(includeInstance: boolean, msg: ExecutorOutput): ExecutorOutput.AsObject; + static serializeBinaryToWriter(message: ExecutorOutput, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ExecutorOutput; + static deserializeBinaryFromReader(message: ExecutorOutput, reader: jspb.BinaryReader): ExecutorOutput; +} + +export namespace ExecutorOutput { + export type AsObject = { + parametersMap: Array<[string, Value.AsObject]>, + artifactsMap: Array<[string, ArtifactList.AsObject]>, + } +} + +export class PipelineTaskFinalStatus extends jspb.Message { + getState(): string; + setState(value: string): PipelineTaskFinalStatus; + + getError(): google_rpc_status_pb.Status | undefined; + setError(value?: google_rpc_status_pb.Status): PipelineTaskFinalStatus; + hasError(): boolean; + clearError(): PipelineTaskFinalStatus; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PipelineTaskFinalStatus.AsObject; + static toObject(includeInstance: boolean, msg: PipelineTaskFinalStatus): PipelineTaskFinalStatus.AsObject; + static serializeBinaryToWriter(message: PipelineTaskFinalStatus, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PipelineTaskFinalStatus; + static deserializeBinaryFromReader(message: PipelineTaskFinalStatus, reader: jspb.BinaryReader): PipelineTaskFinalStatus; +} + +export namespace PipelineTaskFinalStatus { + export type AsObject = { + state: string, + error?: google_rpc_status_pb.Status.AsObject, + } +} + +export class PipelineStateEnum extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PipelineStateEnum.AsObject; + static toObject(includeInstance: boolean, msg: PipelineStateEnum): PipelineStateEnum.AsObject; + static serializeBinaryToWriter(message: PipelineStateEnum, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PipelineStateEnum; + static deserializeBinaryFromReader(message: PipelineStateEnum, reader: jspb.BinaryReader): PipelineStateEnum; +} + +export namespace PipelineStateEnum { + export type AsObject = { + } + + export enum PipelineTaskState { + TASK_STATE_UNSPECIFIED = 0, + PENDING = 1, + RUNNING_DRIVER = 2, + DRIVER_SUCCEEDED = 3, + RUNNING_EXECUTOR = 4, + SUCCEEDED = 5, + CANCEL_PENDING = 6, + CANCELLING = 7, + CANCELLED = 8, + FAILED = 9, + SKIPPED = 10, + QUEUED = 11, + NOT_TRIGGERED = 12, + UNSCHEDULABLE = 13, + } +} diff --git a/frontend/src/generated/pipeline_spec/pipeline_spec_pb.js b/frontend/src/generated/pipeline_spec/pipeline_spec_pb.js new file mode 100644 index 0000000000..33360c8b9b --- /dev/null +++ b/frontend/src/generated/pipeline_spec/pipeline_spec_pb.js @@ -0,0 +1,13610 @@ +// source: pipeline_spec.proto +/** + * @fileoverview + * @enhanceable + * @suppress {missingRequire} reports error on implicit type usages. + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +var google_protobuf_any_pb = require('google-protobuf/google/protobuf/any_pb.js'); +goog.object.extend(proto, google_protobuf_any_pb); +var google_protobuf_struct_pb = require('google-protobuf/google/protobuf/struct_pb.js'); +goog.object.extend(proto, google_protobuf_struct_pb); +var google_rpc_status_pb = require('./google/rpc/status_pb.js'); +goog.object.extend(proto, google_rpc_status_pb); +goog.exportSymbol('proto.ml_pipelines.ArtifactIteratorSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.ArtifactList', null, global); +goog.exportSymbol('proto.ml_pipelines.ArtifactTypeSchema', null, global); +goog.exportSymbol('proto.ml_pipelines.ArtifactTypeSchema.KindCase', null, global); +goog.exportSymbol('proto.ml_pipelines.ComponentInputsSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.ComponentInputsSpec.ParameterSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.ComponentOutputsSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.ComponentRef', null, global); +goog.exportSymbol('proto.ml_pipelines.ComponentSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.ComponentSpec.ImplementationCase', null, global); +goog.exportSymbol('proto.ml_pipelines.DagOutputsSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.KindCase', null, global); +goog.exportSymbol('proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.DagSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.ExecutorInput', null, global); +goog.exportSymbol('proto.ml_pipelines.ExecutorInput.Inputs', null, global); +goog.exportSymbol('proto.ml_pipelines.ExecutorInput.OutputParameter', null, global); +goog.exportSymbol('proto.ml_pipelines.ExecutorInput.Outputs', null, global); +goog.exportSymbol('proto.ml_pipelines.ExecutorOutput', null, global); +goog.exportSymbol('proto.ml_pipelines.ParameterIteratorSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.KindCase', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineDeploymentConfig', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.SpecCase', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineInfo', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineJob', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineJob.RuntimeConfig', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineSpec.RuntimeParameter', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineStateEnum', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineStateEnum.PipelineTaskState', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineTaskFinalStatus', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineTaskInfo', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineTaskSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineTaskSpec.CachingOptions', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineTaskSpec.IteratorCase', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy', null, global); +goog.exportSymbol('proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy', null, global); +goog.exportSymbol('proto.ml_pipelines.PrimitiveType', null, global); +goog.exportSymbol('proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum', null, global); +goog.exportSymbol('proto.ml_pipelines.RuntimeArtifact', null, global); +goog.exportSymbol('proto.ml_pipelines.TaskInputsSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.KindCase', null, global); +goog.exportSymbol('proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.TaskInputsSpec.InputParameterSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.KindCase', null, global); +goog.exportSymbol('proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus', null, global); +goog.exportSymbol('proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.TaskOutputsSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec', null, global); +goog.exportSymbol('proto.ml_pipelines.Value', null, global); +goog.exportSymbol('proto.ml_pipelines.Value.ValueCase', null, global); +goog.exportSymbol('proto.ml_pipelines.ValueOrRuntimeParameter', null, global); +goog.exportSymbol('proto.ml_pipelines.ValueOrRuntimeParameter.ValueCase', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineJob = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineJob, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineJob.displayName = 'proto.ml_pipelines.PipelineJob'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineJob.RuntimeConfig = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineJob.RuntimeConfig, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineJob.RuntimeConfig.displayName = 'proto.ml_pipelines.PipelineJob.RuntimeConfig'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineSpec.displayName = 'proto.ml_pipelines.PipelineSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineSpec.RuntimeParameter = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineSpec.RuntimeParameter, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineSpec.RuntimeParameter.displayName = 'proto.ml_pipelines.PipelineSpec.RuntimeParameter'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ComponentSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_pipelines.ComponentSpec.oneofGroups_); +}; +goog.inherits(proto.ml_pipelines.ComponentSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ComponentSpec.displayName = 'proto.ml_pipelines.ComponentSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.DagSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.DagSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.DagSpec.displayName = 'proto.ml_pipelines.DagSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.DagOutputsSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.DagOutputsSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.DagOutputsSpec.displayName = 'proto.ml_pipelines.DagOutputsSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.displayName = 'proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.repeatedFields_, null); +}; +goog.inherits(proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.displayName = 'proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.displayName = 'proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.repeatedFields_, null); +}; +goog.inherits(proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.displayName = 'proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.displayName = 'proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.oneofGroups_); +}; +goog.inherits(proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.displayName = 'proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ComponentInputsSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ComponentInputsSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ComponentInputsSpec.displayName = 'proto.ml_pipelines.ComponentInputsSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.displayName = 'proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ComponentInputsSpec.ParameterSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ComponentInputsSpec.ParameterSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.displayName = 'proto.ml_pipelines.ComponentInputsSpec.ParameterSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ComponentOutputsSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ComponentOutputsSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ComponentOutputsSpec.displayName = 'proto.ml_pipelines.ComponentOutputsSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.displayName = 'proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.displayName = 'proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.TaskInputsSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.TaskInputsSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.TaskInputsSpec.displayName = 'proto.ml_pipelines.TaskInputsSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.oneofGroups_); +}; +goog.inherits(proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.displayName = 'proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.displayName = 'proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.oneofGroups_); +}; +goog.inherits(proto.ml_pipelines.TaskInputsSpec.InputParameterSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.displayName = 'proto.ml_pipelines.TaskInputsSpec.InputParameterSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.displayName = 'proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.displayName = 'proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.TaskOutputsSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.TaskOutputsSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.TaskOutputsSpec.displayName = 'proto.ml_pipelines.TaskOutputsSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.displayName = 'proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.displayName = 'proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PrimitiveType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PrimitiveType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PrimitiveType.displayName = 'proto.ml_pipelines.PrimitiveType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineTaskSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_pipelines.PipelineTaskSpec.repeatedFields_, proto.ml_pipelines.PipelineTaskSpec.oneofGroups_); +}; +goog.inherits(proto.ml_pipelines.PipelineTaskSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineTaskSpec.displayName = 'proto.ml_pipelines.PipelineTaskSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineTaskSpec.CachingOptions = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineTaskSpec.CachingOptions, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineTaskSpec.CachingOptions.displayName = 'proto.ml_pipelines.PipelineTaskSpec.CachingOptions'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.displayName = 'proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ArtifactIteratorSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ArtifactIteratorSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ArtifactIteratorSpec.displayName = 'proto.ml_pipelines.ArtifactIteratorSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.displayName = 'proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ParameterIteratorSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ParameterIteratorSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ParameterIteratorSpec.displayName = 'proto.ml_pipelines.ParameterIteratorSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.oneofGroups_); +}; +goog.inherits(proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.displayName = 'proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ComponentRef = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ComponentRef, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ComponentRef.displayName = 'proto.ml_pipelines.ComponentRef'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineInfo = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineInfo, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineInfo.displayName = 'proto.ml_pipelines.PipelineInfo'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ArtifactTypeSchema = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_pipelines.ArtifactTypeSchema.oneofGroups_); +}; +goog.inherits(proto.ml_pipelines.ArtifactTypeSchema, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ArtifactTypeSchema.displayName = 'proto.ml_pipelines.ArtifactTypeSchema'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineTaskInfo = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineTaskInfo, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineTaskInfo.displayName = 'proto.ml_pipelines.PipelineTaskInfo'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ValueOrRuntimeParameter = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_pipelines.ValueOrRuntimeParameter.oneofGroups_); +}; +goog.inherits(proto.ml_pipelines.ValueOrRuntimeParameter, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ValueOrRuntimeParameter.displayName = 'proto.ml_pipelines.ValueOrRuntimeParameter'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineDeploymentConfig = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineDeploymentConfig, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineDeploymentConfig.displayName = 'proto.ml_pipelines.PipelineDeploymentConfig'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.repeatedFields_, null); +}; +goog.inherits(proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.displayName = 'proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.displayName = 'proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.repeatedFields_, null); +}; +goog.inherits(proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.displayName = 'proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.displayName = 'proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.displayName = 'proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.displayName = 'proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.displayName = 'proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.displayName = 'proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.displayName = 'proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.oneofGroups_); +}; +goog.inherits(proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.displayName = 'proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.Value = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_pipelines.Value.oneofGroups_); +}; +goog.inherits(proto.ml_pipelines.Value, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.Value.displayName = 'proto.ml_pipelines.Value'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.RuntimeArtifact = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.RuntimeArtifact, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.RuntimeArtifact.displayName = 'proto.ml_pipelines.RuntimeArtifact'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ArtifactList = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_pipelines.ArtifactList.repeatedFields_, null); +}; +goog.inherits(proto.ml_pipelines.ArtifactList, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ArtifactList.displayName = 'proto.ml_pipelines.ArtifactList'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ExecutorInput = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ExecutorInput, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ExecutorInput.displayName = 'proto.ml_pipelines.ExecutorInput'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ExecutorInput.Inputs = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ExecutorInput.Inputs, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ExecutorInput.Inputs.displayName = 'proto.ml_pipelines.ExecutorInput.Inputs'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ExecutorInput.OutputParameter = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ExecutorInput.OutputParameter, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ExecutorInput.OutputParameter.displayName = 'proto.ml_pipelines.ExecutorInput.OutputParameter'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ExecutorInput.Outputs = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ExecutorInput.Outputs, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ExecutorInput.Outputs.displayName = 'proto.ml_pipelines.ExecutorInput.Outputs'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.ExecutorOutput = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.ExecutorOutput, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.ExecutorOutput.displayName = 'proto.ml_pipelines.ExecutorOutput'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineTaskFinalStatus = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineTaskFinalStatus, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineTaskFinalStatus.displayName = 'proto.ml_pipelines.PipelineTaskFinalStatus'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_pipelines.PipelineStateEnum = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_pipelines.PipelineStateEnum, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_pipelines.PipelineStateEnum.displayName = 'proto.ml_pipelines.PipelineStateEnum'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineJob.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineJob.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineJob} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineJob.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + displayName: jspb.Message.getFieldWithDefault(msg, 2, ""), + pipelineSpec: (f = msg.getPipelineSpec()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f), + labelsMap: (f = msg.getLabelsMap()) ? f.toObject(includeInstance, undefined) : [], + runtimeConfig: (f = msg.getRuntimeConfig()) && proto.ml_pipelines.PipelineJob.RuntimeConfig.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineJob} + */ +proto.ml_pipelines.PipelineJob.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineJob; + return proto.ml_pipelines.PipelineJob.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineJob} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineJob} + */ +proto.ml_pipelines.PipelineJob.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setDisplayName(value); + break; + case 7: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setPipelineSpec(value); + break; + case 11: + var value = msg.getLabelsMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", ""); + }); + break; + case 12: + var value = new proto.ml_pipelines.PipelineJob.RuntimeConfig; + reader.readMessage(value,proto.ml_pipelines.PipelineJob.RuntimeConfig.deserializeBinaryFromReader); + msg.setRuntimeConfig(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineJob.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineJob.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineJob} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineJob.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getDisplayName(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getPipelineSpec(); + if (f != null) { + writer.writeMessage( + 7, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } + f = message.getLabelsMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(11, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString); + } + f = message.getRuntimeConfig(); + if (f != null) { + writer.writeMessage( + 12, + f, + proto.ml_pipelines.PipelineJob.RuntimeConfig.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineJob.RuntimeConfig.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineJob.RuntimeConfig.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineJob.RuntimeConfig} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineJob.RuntimeConfig.toObject = function(includeInstance, msg) { + var f, obj = { + parametersMap: (f = msg.getParametersMap()) ? f.toObject(includeInstance, proto.ml_pipelines.Value.toObject) : [], + gcsOutputDirectory: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineJob.RuntimeConfig} + */ +proto.ml_pipelines.PipelineJob.RuntimeConfig.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineJob.RuntimeConfig; + return proto.ml_pipelines.PipelineJob.RuntimeConfig.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineJob.RuntimeConfig} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineJob.RuntimeConfig} + */ +proto.ml_pipelines.PipelineJob.RuntimeConfig.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getParametersMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.Value.deserializeBinaryFromReader, "", new proto.ml_pipelines.Value()); + }); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setGcsOutputDirectory(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineJob.RuntimeConfig.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineJob.RuntimeConfig.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineJob.RuntimeConfig} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineJob.RuntimeConfig.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getParametersMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.Value.serializeBinaryToWriter); + } + f = message.getGcsOutputDirectory(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * map<string, Value> parameters = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.Value>} + */ +proto.ml_pipelines.PipelineJob.RuntimeConfig.prototype.getParametersMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.Value>} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_pipelines.Value)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.PipelineJob.RuntimeConfig} returns this + */ +proto.ml_pipelines.PipelineJob.RuntimeConfig.prototype.clearParametersMap = function() { + this.getParametersMap().clear(); + return this;}; + + +/** + * optional string gcs_output_directory = 2; + * @return {string} + */ +proto.ml_pipelines.PipelineJob.RuntimeConfig.prototype.getGcsOutputDirectory = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.PipelineJob.RuntimeConfig} returns this + */ +proto.ml_pipelines.PipelineJob.RuntimeConfig.prototype.setGcsOutputDirectory = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.ml_pipelines.PipelineJob.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.PipelineJob} returns this + */ +proto.ml_pipelines.PipelineJob.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string display_name = 2; + * @return {string} + */ +proto.ml_pipelines.PipelineJob.prototype.getDisplayName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.PipelineJob} returns this + */ +proto.ml_pipelines.PipelineJob.prototype.setDisplayName = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional google.protobuf.Struct pipeline_spec = 7; + * @return {?proto.google.protobuf.Struct} + */ +proto.ml_pipelines.PipelineJob.prototype.getPipelineSpec = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 7)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.ml_pipelines.PipelineJob} returns this +*/ +proto.ml_pipelines.PipelineJob.prototype.setPipelineSpec = function(value) { + return jspb.Message.setWrapperField(this, 7, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineJob} returns this + */ +proto.ml_pipelines.PipelineJob.prototype.clearPipelineSpec = function() { + return this.setPipelineSpec(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineJob.prototype.hasPipelineSpec = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * map<string, string> labels = 11; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,string>} + */ +proto.ml_pipelines.PipelineJob.prototype.getLabelsMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,string>} */ ( + jspb.Message.getMapField(this, 11, opt_noLazyCreate, + null)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.PipelineJob} returns this + */ +proto.ml_pipelines.PipelineJob.prototype.clearLabelsMap = function() { + this.getLabelsMap().clear(); + return this;}; + + +/** + * optional RuntimeConfig runtime_config = 12; + * @return {?proto.ml_pipelines.PipelineJob.RuntimeConfig} + */ +proto.ml_pipelines.PipelineJob.prototype.getRuntimeConfig = function() { + return /** @type{?proto.ml_pipelines.PipelineJob.RuntimeConfig} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.PipelineJob.RuntimeConfig, 12)); +}; + + +/** + * @param {?proto.ml_pipelines.PipelineJob.RuntimeConfig|undefined} value + * @return {!proto.ml_pipelines.PipelineJob} returns this +*/ +proto.ml_pipelines.PipelineJob.prototype.setRuntimeConfig = function(value) { + return jspb.Message.setWrapperField(this, 12, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineJob} returns this + */ +proto.ml_pipelines.PipelineJob.prototype.clearRuntimeConfig = function() { + return this.setRuntimeConfig(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineJob.prototype.hasRuntimeConfig = function() { + return jspb.Message.getField(this, 12) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineSpec.toObject = function(includeInstance, msg) { + var f, obj = { + pipelineInfo: (f = msg.getPipelineInfo()) && proto.ml_pipelines.PipelineInfo.toObject(includeInstance, f), + deploymentSpec: (f = msg.getDeploymentSpec()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f), + sdkVersion: jspb.Message.getFieldWithDefault(msg, 4, ""), + schemaVersion: jspb.Message.getFieldWithDefault(msg, 5, ""), + componentsMap: (f = msg.getComponentsMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ComponentSpec.toObject) : [], + root: (f = msg.getRoot()) && proto.ml_pipelines.ComponentSpec.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineSpec} + */ +proto.ml_pipelines.PipelineSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineSpec; + return proto.ml_pipelines.PipelineSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineSpec} + */ +proto.ml_pipelines.PipelineSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.PipelineInfo; + reader.readMessage(value,proto.ml_pipelines.PipelineInfo.deserializeBinaryFromReader); + msg.setPipelineInfo(value); + break; + case 7: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setDeploymentSpec(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setSdkVersion(value); + break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setSchemaVersion(value); + break; + case 8: + var value = msg.getComponentsMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ComponentSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.ComponentSpec()); + }); + break; + case 9: + var value = new proto.ml_pipelines.ComponentSpec; + reader.readMessage(value,proto.ml_pipelines.ComponentSpec.deserializeBinaryFromReader); + msg.setRoot(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getPipelineInfo(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.PipelineInfo.serializeBinaryToWriter + ); + } + f = message.getDeploymentSpec(); + if (f != null) { + writer.writeMessage( + 7, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } + f = message.getSdkVersion(); + if (f.length > 0) { + writer.writeString( + 4, + f + ); + } + f = message.getSchemaVersion(); + if (f.length > 0) { + writer.writeString( + 5, + f + ); + } + f = message.getComponentsMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(8, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ComponentSpec.serializeBinaryToWriter); + } + f = message.getRoot(); + if (f != null) { + writer.writeMessage( + 9, + f, + proto.ml_pipelines.ComponentSpec.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineSpec.RuntimeParameter.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineSpec.RuntimeParameter.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineSpec.RuntimeParameter} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineSpec.RuntimeParameter.toObject = function(includeInstance, msg) { + var f, obj = { + type: jspb.Message.getFieldWithDefault(msg, 1, 0), + defaultValue: (f = msg.getDefaultValue()) && proto.ml_pipelines.Value.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineSpec.RuntimeParameter} + */ +proto.ml_pipelines.PipelineSpec.RuntimeParameter.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineSpec.RuntimeParameter; + return proto.ml_pipelines.PipelineSpec.RuntimeParameter.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineSpec.RuntimeParameter} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineSpec.RuntimeParameter} + */ +proto.ml_pipelines.PipelineSpec.RuntimeParameter.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} */ (reader.readEnum()); + msg.setType(value); + break; + case 2: + var value = new proto.ml_pipelines.Value; + reader.readMessage(value,proto.ml_pipelines.Value.deserializeBinaryFromReader); + msg.setDefaultValue(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineSpec.RuntimeParameter.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineSpec.RuntimeParameter.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineSpec.RuntimeParameter} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineSpec.RuntimeParameter.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getType(); + if (f !== 0.0) { + writer.writeEnum( + 1, + f + ); + } + f = message.getDefaultValue(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_pipelines.Value.serializeBinaryToWriter + ); + } +}; + + +/** + * optional PrimitiveType.PrimitiveTypeEnum type = 1; + * @return {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} + */ +proto.ml_pipelines.PipelineSpec.RuntimeParameter.prototype.getType = function() { + return /** @type {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} value + * @return {!proto.ml_pipelines.PipelineSpec.RuntimeParameter} returns this + */ +proto.ml_pipelines.PipelineSpec.RuntimeParameter.prototype.setType = function(value) { + return jspb.Message.setProto3EnumField(this, 1, value); +}; + + +/** + * optional Value default_value = 2; + * @return {?proto.ml_pipelines.Value} + */ +proto.ml_pipelines.PipelineSpec.RuntimeParameter.prototype.getDefaultValue = function() { + return /** @type{?proto.ml_pipelines.Value} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.Value, 2)); +}; + + +/** + * @param {?proto.ml_pipelines.Value|undefined} value + * @return {!proto.ml_pipelines.PipelineSpec.RuntimeParameter} returns this +*/ +proto.ml_pipelines.PipelineSpec.RuntimeParameter.prototype.setDefaultValue = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineSpec.RuntimeParameter} returns this + */ +proto.ml_pipelines.PipelineSpec.RuntimeParameter.prototype.clearDefaultValue = function() { + return this.setDefaultValue(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineSpec.RuntimeParameter.prototype.hasDefaultValue = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional PipelineInfo pipeline_info = 1; + * @return {?proto.ml_pipelines.PipelineInfo} + */ +proto.ml_pipelines.PipelineSpec.prototype.getPipelineInfo = function() { + return /** @type{?proto.ml_pipelines.PipelineInfo} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.PipelineInfo, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.PipelineInfo|undefined} value + * @return {!proto.ml_pipelines.PipelineSpec} returns this +*/ +proto.ml_pipelines.PipelineSpec.prototype.setPipelineInfo = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineSpec} returns this + */ +proto.ml_pipelines.PipelineSpec.prototype.clearPipelineInfo = function() { + return this.setPipelineInfo(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineSpec.prototype.hasPipelineInfo = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional google.protobuf.Struct deployment_spec = 7; + * @return {?proto.google.protobuf.Struct} + */ +proto.ml_pipelines.PipelineSpec.prototype.getDeploymentSpec = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 7)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.ml_pipelines.PipelineSpec} returns this +*/ +proto.ml_pipelines.PipelineSpec.prototype.setDeploymentSpec = function(value) { + return jspb.Message.setWrapperField(this, 7, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineSpec} returns this + */ +proto.ml_pipelines.PipelineSpec.prototype.clearDeploymentSpec = function() { + return this.setDeploymentSpec(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineSpec.prototype.hasDeploymentSpec = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * optional string sdk_version = 4; + * @return {string} + */ +proto.ml_pipelines.PipelineSpec.prototype.getSdkVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.PipelineSpec} returns this + */ +proto.ml_pipelines.PipelineSpec.prototype.setSdkVersion = function(value) { + return jspb.Message.setProto3StringField(this, 4, value); +}; + + +/** + * optional string schema_version = 5; + * @return {string} + */ +proto.ml_pipelines.PipelineSpec.prototype.getSchemaVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.PipelineSpec} returns this + */ +proto.ml_pipelines.PipelineSpec.prototype.setSchemaVersion = function(value) { + return jspb.Message.setProto3StringField(this, 5, value); +}; + + +/** + * map<string, ComponentSpec> components = 8; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ComponentSpec>} + */ +proto.ml_pipelines.PipelineSpec.prototype.getComponentsMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ComponentSpec>} */ ( + jspb.Message.getMapField(this, 8, opt_noLazyCreate, + proto.ml_pipelines.ComponentSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.PipelineSpec} returns this + */ +proto.ml_pipelines.PipelineSpec.prototype.clearComponentsMap = function() { + this.getComponentsMap().clear(); + return this;}; + + +/** + * optional ComponentSpec root = 9; + * @return {?proto.ml_pipelines.ComponentSpec} + */ +proto.ml_pipelines.PipelineSpec.prototype.getRoot = function() { + return /** @type{?proto.ml_pipelines.ComponentSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ComponentSpec, 9)); +}; + + +/** + * @param {?proto.ml_pipelines.ComponentSpec|undefined} value + * @return {!proto.ml_pipelines.PipelineSpec} returns this +*/ +proto.ml_pipelines.PipelineSpec.prototype.setRoot = function(value) { + return jspb.Message.setWrapperField(this, 9, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineSpec} returns this + */ +proto.ml_pipelines.PipelineSpec.prototype.clearRoot = function() { + return this.setRoot(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineSpec.prototype.hasRoot = function() { + return jspb.Message.getField(this, 9) != null; +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array<!Array<number>>} + * @const + */ +proto.ml_pipelines.ComponentSpec.oneofGroups_ = [[3,4]]; + +/** + * @enum {number} + */ +proto.ml_pipelines.ComponentSpec.ImplementationCase = { + IMPLEMENTATION_NOT_SET: 0, + DAG: 3, + EXECUTOR_LABEL: 4 +}; + +/** + * @return {proto.ml_pipelines.ComponentSpec.ImplementationCase} + */ +proto.ml_pipelines.ComponentSpec.prototype.getImplementationCase = function() { + return /** @type {proto.ml_pipelines.ComponentSpec.ImplementationCase} */(jspb.Message.computeOneofCase(this, proto.ml_pipelines.ComponentSpec.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ComponentSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ComponentSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ComponentSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentSpec.toObject = function(includeInstance, msg) { + var f, obj = { + inputDefinitions: (f = msg.getInputDefinitions()) && proto.ml_pipelines.ComponentInputsSpec.toObject(includeInstance, f), + outputDefinitions: (f = msg.getOutputDefinitions()) && proto.ml_pipelines.ComponentOutputsSpec.toObject(includeInstance, f), + dag: (f = msg.getDag()) && proto.ml_pipelines.DagSpec.toObject(includeInstance, f), + executorLabel: jspb.Message.getFieldWithDefault(msg, 4, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ComponentSpec} + */ +proto.ml_pipelines.ComponentSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ComponentSpec; + return proto.ml_pipelines.ComponentSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ComponentSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ComponentSpec} + */ +proto.ml_pipelines.ComponentSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.ComponentInputsSpec; + reader.readMessage(value,proto.ml_pipelines.ComponentInputsSpec.deserializeBinaryFromReader); + msg.setInputDefinitions(value); + break; + case 2: + var value = new proto.ml_pipelines.ComponentOutputsSpec; + reader.readMessage(value,proto.ml_pipelines.ComponentOutputsSpec.deserializeBinaryFromReader); + msg.setOutputDefinitions(value); + break; + case 3: + var value = new proto.ml_pipelines.DagSpec; + reader.readMessage(value,proto.ml_pipelines.DagSpec.deserializeBinaryFromReader); + msg.setDag(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setExecutorLabel(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ComponentSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ComponentSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ComponentSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getInputDefinitions(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.ComponentInputsSpec.serializeBinaryToWriter + ); + } + f = message.getOutputDefinitions(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_pipelines.ComponentOutputsSpec.serializeBinaryToWriter + ); + } + f = message.getDag(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.ml_pipelines.DagSpec.serializeBinaryToWriter + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeString( + 4, + f + ); + } +}; + + +/** + * optional ComponentInputsSpec input_definitions = 1; + * @return {?proto.ml_pipelines.ComponentInputsSpec} + */ +proto.ml_pipelines.ComponentSpec.prototype.getInputDefinitions = function() { + return /** @type{?proto.ml_pipelines.ComponentInputsSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ComponentInputsSpec, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.ComponentInputsSpec|undefined} value + * @return {!proto.ml_pipelines.ComponentSpec} returns this +*/ +proto.ml_pipelines.ComponentSpec.prototype.setInputDefinitions = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.ComponentSpec} returns this + */ +proto.ml_pipelines.ComponentSpec.prototype.clearInputDefinitions = function() { + return this.setInputDefinitions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ComponentSpec.prototype.hasInputDefinitions = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ComponentOutputsSpec output_definitions = 2; + * @return {?proto.ml_pipelines.ComponentOutputsSpec} + */ +proto.ml_pipelines.ComponentSpec.prototype.getOutputDefinitions = function() { + return /** @type{?proto.ml_pipelines.ComponentOutputsSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ComponentOutputsSpec, 2)); +}; + + +/** + * @param {?proto.ml_pipelines.ComponentOutputsSpec|undefined} value + * @return {!proto.ml_pipelines.ComponentSpec} returns this +*/ +proto.ml_pipelines.ComponentSpec.prototype.setOutputDefinitions = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.ComponentSpec} returns this + */ +proto.ml_pipelines.ComponentSpec.prototype.clearOutputDefinitions = function() { + return this.setOutputDefinitions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ComponentSpec.prototype.hasOutputDefinitions = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional DagSpec dag = 3; + * @return {?proto.ml_pipelines.DagSpec} + */ +proto.ml_pipelines.ComponentSpec.prototype.getDag = function() { + return /** @type{?proto.ml_pipelines.DagSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.DagSpec, 3)); +}; + + +/** + * @param {?proto.ml_pipelines.DagSpec|undefined} value + * @return {!proto.ml_pipelines.ComponentSpec} returns this +*/ +proto.ml_pipelines.ComponentSpec.prototype.setDag = function(value) { + return jspb.Message.setOneofWrapperField(this, 3, proto.ml_pipelines.ComponentSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.ComponentSpec} returns this + */ +proto.ml_pipelines.ComponentSpec.prototype.clearDag = function() { + return this.setDag(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ComponentSpec.prototype.hasDag = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional string executor_label = 4; + * @return {string} + */ +proto.ml_pipelines.ComponentSpec.prototype.getExecutorLabel = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ComponentSpec} returns this + */ +proto.ml_pipelines.ComponentSpec.prototype.setExecutorLabel = function(value) { + return jspb.Message.setOneofField(this, 4, proto.ml_pipelines.ComponentSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_pipelines.ComponentSpec} returns this + */ +proto.ml_pipelines.ComponentSpec.prototype.clearExecutorLabel = function() { + return jspb.Message.setOneofField(this, 4, proto.ml_pipelines.ComponentSpec.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ComponentSpec.prototype.hasExecutorLabel = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.DagSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.DagSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.DagSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagSpec.toObject = function(includeInstance, msg) { + var f, obj = { + tasksMap: (f = msg.getTasksMap()) ? f.toObject(includeInstance, proto.ml_pipelines.PipelineTaskSpec.toObject) : [], + outputs: (f = msg.getOutputs()) && proto.ml_pipelines.DagOutputsSpec.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.DagSpec} + */ +proto.ml_pipelines.DagSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.DagSpec; + return proto.ml_pipelines.DagSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.DagSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.DagSpec} + */ +proto.ml_pipelines.DagSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getTasksMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.PipelineTaskSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.PipelineTaskSpec()); + }); + break; + case 2: + var value = new proto.ml_pipelines.DagOutputsSpec; + reader.readMessage(value,proto.ml_pipelines.DagOutputsSpec.deserializeBinaryFromReader); + msg.setOutputs(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.DagSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.DagSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.DagSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTasksMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.PipelineTaskSpec.serializeBinaryToWriter); + } + f = message.getOutputs(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_pipelines.DagOutputsSpec.serializeBinaryToWriter + ); + } +}; + + +/** + * map<string, PipelineTaskSpec> tasks = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.PipelineTaskSpec>} + */ +proto.ml_pipelines.DagSpec.prototype.getTasksMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.PipelineTaskSpec>} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_pipelines.PipelineTaskSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.DagSpec} returns this + */ +proto.ml_pipelines.DagSpec.prototype.clearTasksMap = function() { + this.getTasksMap().clear(); + return this;}; + + +/** + * optional DagOutputsSpec outputs = 2; + * @return {?proto.ml_pipelines.DagOutputsSpec} + */ +proto.ml_pipelines.DagSpec.prototype.getOutputs = function() { + return /** @type{?proto.ml_pipelines.DagOutputsSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.DagOutputsSpec, 2)); +}; + + +/** + * @param {?proto.ml_pipelines.DagOutputsSpec|undefined} value + * @return {!proto.ml_pipelines.DagSpec} returns this +*/ +proto.ml_pipelines.DagSpec.prototype.setOutputs = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.DagSpec} returns this + */ +proto.ml_pipelines.DagSpec.prototype.clearOutputs = function() { + return this.setOutputs(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.DagSpec.prototype.hasOutputs = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.DagOutputsSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.DagOutputsSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.DagOutputsSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.toObject = function(includeInstance, msg) { + var f, obj = { + artifactsMap: (f = msg.getArtifactsMap()) ? f.toObject(includeInstance, proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.toObject) : [], + parametersMap: (f = msg.getParametersMap()) ? f.toObject(includeInstance, proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.toObject) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.DagOutputsSpec} + */ +proto.ml_pipelines.DagOutputsSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.DagOutputsSpec; + return proto.ml_pipelines.DagOutputsSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.DagOutputsSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.DagOutputsSpec} + */ +proto.ml_pipelines.DagOutputsSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getArtifactsMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec()); + }); + break; + case 2: + var value = msg.getParametersMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec()); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.DagOutputsSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.DagOutputsSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.DagOutputsSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactsMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.serializeBinaryToWriter); + } + f = message.getParametersMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.serializeBinaryToWriter); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.toObject = function(includeInstance, msg) { + var f, obj = { + producerSubtask: jspb.Message.getFieldWithDefault(msg, 1, ""), + outputArtifactKey: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec} + */ +proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec; + return proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec} + */ +proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setProducerSubtask(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setOutputArtifactKey(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getProducerSubtask(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getOutputArtifactKey(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string producer_subtask = 1; + * @return {string} + */ +proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.prototype.getProducerSubtask = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec} returns this + */ +proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.prototype.setProducerSubtask = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string output_artifact_key = 2; + * @return {string} + */ +proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.prototype.getOutputArtifactKey = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec} returns this + */ +proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.prototype.setOutputArtifactKey = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array<number>} + * @const + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.toObject = function(includeInstance, msg) { + var f, obj = { + artifactSelectorsList: jspb.Message.toObjectList(msg.getArtifactSelectorsList(), + proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec; + return proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec; + reader.readMessage(value,proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.deserializeBinaryFromReader); + msg.addArtifactSelectors(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactSelectorsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ArtifactSelectorSpec artifact_selectors = 1; + * @return {!Array<!proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec>} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.prototype.getArtifactSelectorsList = function() { + return /** @type{!Array<!proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec>} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec, 1)); +}; + + +/** + * @param {!Array<!proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec>} value + * @return {!proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec} returns this +*/ +proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.prototype.setArtifactSelectorsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.prototype.addArtifactSelectors = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_pipelines.DagOutputsSpec.ArtifactSelectorSpec, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec} returns this + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec.prototype.clearArtifactSelectorsList = function() { + return this.setArtifactSelectorsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.toObject = function(includeInstance, msg) { + var f, obj = { + producerSubtask: jspb.Message.getFieldWithDefault(msg, 1, ""), + outputParameterKey: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec; + return proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setProducerSubtask(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setOutputParameterKey(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getProducerSubtask(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getOutputParameterKey(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string producer_subtask = 1; + * @return {string} + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.prototype.getProducerSubtask = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} returns this + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.prototype.setProducerSubtask = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string output_parameter_key = 2; + * @return {string} + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.prototype.getOutputParameterKey = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} returns this + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.prototype.setOutputParameterKey = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array<number>} + * @const + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.toObject = function(includeInstance, msg) { + var f, obj = { + parameterSelectorsList: jspb.Message.toObjectList(msg.getParameterSelectorsList(), + proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec; + return proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec; + reader.readMessage(value,proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.deserializeBinaryFromReader); + msg.addParameterSelectors(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getParameterSelectorsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ParameterSelectorSpec parameter_selectors = 1; + * @return {!Array<!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec>} + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.prototype.getParameterSelectorsList = function() { + return /** @type{!Array<!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec>} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec, 1)); +}; + + +/** + * @param {!Array<!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec>} value + * @return {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} returns this +*/ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.prototype.setParameterSelectorsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.prototype.addParameterSelectors = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} returns this + */ +proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.prototype.clearParameterSelectorsList = function() { + return this.setParameterSelectorsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.toObject = function(includeInstance, msg) { + var f, obj = { + mappedParametersMap: (f = msg.getMappedParametersMap()) ? f.toObject(includeInstance, proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.toObject) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec} + */ +proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec; + return proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec} + */ +proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 2: + var value = msg.getMappedParametersMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec()); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getMappedParametersMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.serializeBinaryToWriter); + } +}; + + +/** + * map<string, ParameterSelectorSpec> mapped_parameters = 2; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec>} + */ +proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.prototype.getMappedParametersMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec>} */ ( + jspb.Message.getMapField(this, 2, opt_noLazyCreate, + proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec} returns this + */ +proto.ml_pipelines.DagOutputsSpec.MapParameterSelectorsSpec.prototype.clearMappedParametersMap = function() { + this.getMappedParametersMap().clear(); + return this;}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array<!Array<number>>} + * @const + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.oneofGroups_ = [[1,2]]; + +/** + * @enum {number} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.KindCase = { + KIND_NOT_SET: 0, + VALUE_FROM_PARAMETER: 1, + VALUE_FROM_ONEOF: 2 +}; + +/** + * @return {proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.KindCase} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.prototype.getKindCase = function() { + return /** @type {proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.KindCase} */(jspb.Message.computeOneofCase(this, proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.toObject = function(includeInstance, msg) { + var f, obj = { + valueFromParameter: (f = msg.getValueFromParameter()) && proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.toObject(includeInstance, f), + valueFromOneof: (f = msg.getValueFromOneof()) && proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec; + return proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec; + reader.readMessage(value,proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.deserializeBinaryFromReader); + msg.setValueFromParameter(value); + break; + case 2: + var value = new proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec; + reader.readMessage(value,proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.deserializeBinaryFromReader); + msg.setValueFromOneof(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getValueFromParameter(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec.serializeBinaryToWriter + ); + } + f = message.getValueFromOneof(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ParameterSelectorSpec value_from_parameter = 1; + * @return {?proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.prototype.getValueFromParameter = function() { + return /** @type{?proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.DagOutputsSpec.ParameterSelectorSpec|undefined} value + * @return {!proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} returns this +*/ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.prototype.setValueFromParameter = function(value) { + return jspb.Message.setOneofWrapperField(this, 1, proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} returns this + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.prototype.clearValueFromParameter = function() { + return this.setValueFromParameter(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.prototype.hasValueFromParameter = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ParameterSelectorsSpec value_from_oneof = 2; + * @return {?proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.prototype.getValueFromOneof = function() { + return /** @type{?proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec, 2)); +}; + + +/** + * @param {?proto.ml_pipelines.DagOutputsSpec.ParameterSelectorsSpec|undefined} value + * @return {!proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} returns this +*/ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.prototype.setValueFromOneof = function(value) { + return jspb.Message.setOneofWrapperField(this, 2, proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec} returns this + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.prototype.clearValueFromOneof = function() { + return this.setValueFromOneof(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec.prototype.hasValueFromOneof = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * map<string, DagOutputArtifactSpec> artifacts = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec>} + */ +proto.ml_pipelines.DagOutputsSpec.prototype.getArtifactsMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec>} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_pipelines.DagOutputsSpec.DagOutputArtifactSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.DagOutputsSpec} returns this + */ +proto.ml_pipelines.DagOutputsSpec.prototype.clearArtifactsMap = function() { + this.getArtifactsMap().clear(); + return this;}; + + +/** + * map<string, DagOutputParameterSpec> parameters = 2; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec>} + */ +proto.ml_pipelines.DagOutputsSpec.prototype.getParametersMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec>} */ ( + jspb.Message.getMapField(this, 2, opt_noLazyCreate, + proto.ml_pipelines.DagOutputsSpec.DagOutputParameterSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.DagOutputsSpec} returns this + */ +proto.ml_pipelines.DagOutputsSpec.prototype.clearParametersMap = function() { + this.getParametersMap().clear(); + return this;}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ComponentInputsSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ComponentInputsSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ComponentInputsSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentInputsSpec.toObject = function(includeInstance, msg) { + var f, obj = { + artifactsMap: (f = msg.getArtifactsMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.toObject) : [], + parametersMap: (f = msg.getParametersMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.toObject) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ComponentInputsSpec} + */ +proto.ml_pipelines.ComponentInputsSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ComponentInputsSpec; + return proto.ml_pipelines.ComponentInputsSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ComponentInputsSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ComponentInputsSpec} + */ +proto.ml_pipelines.ComponentInputsSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getArtifactsMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec()); + }); + break; + case 2: + var value = msg.getParametersMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.ComponentInputsSpec.ParameterSpec()); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ComponentInputsSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ComponentInputsSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ComponentInputsSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentInputsSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactsMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.serializeBinaryToWriter); + } + f = message.getParametersMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.serializeBinaryToWriter); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.toObject = function(includeInstance, msg) { + var f, obj = { + artifactType: (f = msg.getArtifactType()) && proto.ml_pipelines.ArtifactTypeSchema.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec} + */ +proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec; + return proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec} + */ +proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.ArtifactTypeSchema; + reader.readMessage(value,proto.ml_pipelines.ArtifactTypeSchema.deserializeBinaryFromReader); + msg.setArtifactType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactType(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.ArtifactTypeSchema.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ArtifactTypeSchema artifact_type = 1; + * @return {?proto.ml_pipelines.ArtifactTypeSchema} + */ +proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.prototype.getArtifactType = function() { + return /** @type{?proto.ml_pipelines.ArtifactTypeSchema} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ArtifactTypeSchema, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.ArtifactTypeSchema|undefined} value + * @return {!proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec} returns this +*/ +proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.prototype.setArtifactType = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec} returns this + */ +proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.prototype.clearArtifactType = function() { + return this.setArtifactType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec.prototype.hasArtifactType = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ComponentInputsSpec.ParameterSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.toObject = function(includeInstance, msg) { + var f, obj = { + type: jspb.Message.getFieldWithDefault(msg, 1, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ComponentInputsSpec.ParameterSpec} + */ +proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ComponentInputsSpec.ParameterSpec; + return proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ComponentInputsSpec.ParameterSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ComponentInputsSpec.ParameterSpec} + */ +proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} */ (reader.readEnum()); + msg.setType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ComponentInputsSpec.ParameterSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getType(); + if (f !== 0.0) { + writer.writeEnum( + 1, + f + ); + } +}; + + +/** + * optional PrimitiveType.PrimitiveTypeEnum type = 1; + * @return {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} + */ +proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.prototype.getType = function() { + return /** @type {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} value + * @return {!proto.ml_pipelines.ComponentInputsSpec.ParameterSpec} returns this + */ +proto.ml_pipelines.ComponentInputsSpec.ParameterSpec.prototype.setType = function(value) { + return jspb.Message.setProto3EnumField(this, 1, value); +}; + + +/** + * map<string, ArtifactSpec> artifacts = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec>} + */ +proto.ml_pipelines.ComponentInputsSpec.prototype.getArtifactsMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec>} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_pipelines.ComponentInputsSpec.ArtifactSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.ComponentInputsSpec} returns this + */ +proto.ml_pipelines.ComponentInputsSpec.prototype.clearArtifactsMap = function() { + this.getArtifactsMap().clear(); + return this;}; + + +/** + * map<string, ParameterSpec> parameters = 2; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ComponentInputsSpec.ParameterSpec>} + */ +proto.ml_pipelines.ComponentInputsSpec.prototype.getParametersMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ComponentInputsSpec.ParameterSpec>} */ ( + jspb.Message.getMapField(this, 2, opt_noLazyCreate, + proto.ml_pipelines.ComponentInputsSpec.ParameterSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.ComponentInputsSpec} returns this + */ +proto.ml_pipelines.ComponentInputsSpec.prototype.clearParametersMap = function() { + this.getParametersMap().clear(); + return this;}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ComponentOutputsSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ComponentOutputsSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ComponentOutputsSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentOutputsSpec.toObject = function(includeInstance, msg) { + var f, obj = { + artifactsMap: (f = msg.getArtifactsMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.toObject) : [], + parametersMap: (f = msg.getParametersMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.toObject) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ComponentOutputsSpec} + */ +proto.ml_pipelines.ComponentOutputsSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ComponentOutputsSpec; + return proto.ml_pipelines.ComponentOutputsSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ComponentOutputsSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ComponentOutputsSpec} + */ +proto.ml_pipelines.ComponentOutputsSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getArtifactsMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec()); + }); + break; + case 2: + var value = msg.getParametersMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec()); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ComponentOutputsSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ComponentOutputsSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ComponentOutputsSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentOutputsSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactsMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.serializeBinaryToWriter); + } + f = message.getParametersMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.serializeBinaryToWriter); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.toObject = function(includeInstance, msg) { + var f, obj = { + artifactType: (f = msg.getArtifactType()) && proto.ml_pipelines.ArtifactTypeSchema.toObject(includeInstance, f), + propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ValueOrRuntimeParameter.toObject) : [], + customPropertiesMap: (f = msg.getCustomPropertiesMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ValueOrRuntimeParameter.toObject) : [], + metadata: (f = msg.getMetadata()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec} + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec; + return proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec} + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.ArtifactTypeSchema; + reader.readMessage(value,proto.ml_pipelines.ArtifactTypeSchema.deserializeBinaryFromReader); + msg.setArtifactType(value); + break; + case 2: + var value = msg.getPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ValueOrRuntimeParameter.deserializeBinaryFromReader, "", new proto.ml_pipelines.ValueOrRuntimeParameter()); + }); + break; + case 3: + var value = msg.getCustomPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ValueOrRuntimeParameter.deserializeBinaryFromReader, "", new proto.ml_pipelines.ValueOrRuntimeParameter()); + }); + break; + case 4: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setMetadata(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactType(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.ArtifactTypeSchema.serializeBinaryToWriter + ); + } + f = message.getPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ValueOrRuntimeParameter.serializeBinaryToWriter); + } + f = message.getCustomPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(3, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ValueOrRuntimeParameter.serializeBinaryToWriter); + } + f = message.getMetadata(); + if (f != null) { + writer.writeMessage( + 4, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ArtifactTypeSchema artifact_type = 1; + * @return {?proto.ml_pipelines.ArtifactTypeSchema} + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.getArtifactType = function() { + return /** @type{?proto.ml_pipelines.ArtifactTypeSchema} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ArtifactTypeSchema, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.ArtifactTypeSchema|undefined} value + * @return {!proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec} returns this +*/ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.setArtifactType = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec} returns this + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.clearArtifactType = function() { + return this.setArtifactType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.hasArtifactType = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * map<string, ValueOrRuntimeParameter> properties = 2; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ValueOrRuntimeParameter>} + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.getPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ValueOrRuntimeParameter>} */ ( + jspb.Message.getMapField(this, 2, opt_noLazyCreate, + proto.ml_pipelines.ValueOrRuntimeParameter)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec} returns this + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.clearPropertiesMap = function() { + this.getPropertiesMap().clear(); + return this;}; + + +/** + * map<string, ValueOrRuntimeParameter> custom_properties = 3; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ValueOrRuntimeParameter>} + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.getCustomPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ValueOrRuntimeParameter>} */ ( + jspb.Message.getMapField(this, 3, opt_noLazyCreate, + proto.ml_pipelines.ValueOrRuntimeParameter)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec} returns this + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.clearCustomPropertiesMap = function() { + this.getCustomPropertiesMap().clear(); + return this;}; + + +/** + * optional google.protobuf.Struct metadata = 4; + * @return {?proto.google.protobuf.Struct} + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.getMetadata = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 4)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec} returns this +*/ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.setMetadata = function(value) { + return jspb.Message.setWrapperField(this, 4, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec} returns this + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.clearMetadata = function() { + return this.setMetadata(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec.prototype.hasMetadata = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.toObject = function(includeInstance, msg) { + var f, obj = { + type: jspb.Message.getFieldWithDefault(msg, 1, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec} + */ +proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec; + return proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec} + */ +proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} */ (reader.readEnum()); + msg.setType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getType(); + if (f !== 0.0) { + writer.writeEnum( + 1, + f + ); + } +}; + + +/** + * optional PrimitiveType.PrimitiveTypeEnum type = 1; + * @return {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} + */ +proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.prototype.getType = function() { + return /** @type {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} value + * @return {!proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec} returns this + */ +proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec.prototype.setType = function(value) { + return jspb.Message.setProto3EnumField(this, 1, value); +}; + + +/** + * map<string, ArtifactSpec> artifacts = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec>} + */ +proto.ml_pipelines.ComponentOutputsSpec.prototype.getArtifactsMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec>} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_pipelines.ComponentOutputsSpec.ArtifactSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.ComponentOutputsSpec} returns this + */ +proto.ml_pipelines.ComponentOutputsSpec.prototype.clearArtifactsMap = function() { + this.getArtifactsMap().clear(); + return this;}; + + +/** + * map<string, ParameterSpec> parameters = 2; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec>} + */ +proto.ml_pipelines.ComponentOutputsSpec.prototype.getParametersMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec>} */ ( + jspb.Message.getMapField(this, 2, opt_noLazyCreate, + proto.ml_pipelines.ComponentOutputsSpec.ParameterSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.ComponentOutputsSpec} returns this + */ +proto.ml_pipelines.ComponentOutputsSpec.prototype.clearParametersMap = function() { + this.getParametersMap().clear(); + return this;}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.TaskInputsSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.TaskInputsSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.TaskInputsSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskInputsSpec.toObject = function(includeInstance, msg) { + var f, obj = { + parametersMap: (f = msg.getParametersMap()) ? f.toObject(includeInstance, proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.toObject) : [], + artifactsMap: (f = msg.getArtifactsMap()) ? f.toObject(includeInstance, proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.toObject) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.TaskInputsSpec} + */ +proto.ml_pipelines.TaskInputsSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.TaskInputsSpec; + return proto.ml_pipelines.TaskInputsSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.TaskInputsSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.TaskInputsSpec} + */ +proto.ml_pipelines.TaskInputsSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getParametersMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.TaskInputsSpec.InputParameterSpec()); + }); + break; + case 2: + var value = msg.getArtifactsMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec()); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.TaskInputsSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.TaskInputsSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.TaskInputsSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskInputsSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getParametersMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.serializeBinaryToWriter); + } + f = message.getArtifactsMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.serializeBinaryToWriter); + } +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array<!Array<number>>} + * @const + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.oneofGroups_ = [[3,4]]; + +/** + * @enum {number} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.KindCase = { + KIND_NOT_SET: 0, + TASK_OUTPUT_ARTIFACT: 3, + COMPONENT_INPUT_ARTIFACT: 4 +}; + +/** + * @return {proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.KindCase} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.prototype.getKindCase = function() { + return /** @type {proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.KindCase} */(jspb.Message.computeOneofCase(this, proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.toObject = function(includeInstance, msg) { + var f, obj = { + taskOutputArtifact: (f = msg.getTaskOutputArtifact()) && proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.toObject(includeInstance, f), + componentInputArtifact: jspb.Message.getFieldWithDefault(msg, 4, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec; + return proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 3: + var value = new proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec; + reader.readMessage(value,proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.deserializeBinaryFromReader); + msg.setTaskOutputArtifact(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setComponentInputArtifact(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTaskOutputArtifact(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.serializeBinaryToWriter + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeString( + 4, + f + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.toObject = function(includeInstance, msg) { + var f, obj = { + producerTask: jspb.Message.getFieldWithDefault(msg, 1, ""), + outputArtifactKey: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec; + return proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setProducerTask(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setOutputArtifactKey(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getProducerTask(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getOutputArtifactKey(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string producer_task = 1; + * @return {string} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.prototype.getProducerTask = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.prototype.setProducerTask = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string output_artifact_key = 2; + * @return {string} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.prototype.getOutputArtifactKey = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec.prototype.setOutputArtifactKey = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional TaskOutputArtifactSpec task_output_artifact = 3; + * @return {?proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.prototype.getTaskOutputArtifact = function() { + return /** @type{?proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec, 3)); +}; + + +/** + * @param {?proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.TaskOutputArtifactSpec|undefined} value + * @return {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec} returns this +*/ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.prototype.setTaskOutputArtifact = function(value) { + return jspb.Message.setOneofWrapperField(this, 3, proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.prototype.clearTaskOutputArtifact = function() { + return this.setTaskOutputArtifact(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.prototype.hasTaskOutputArtifact = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional string component_input_artifact = 4; + * @return {string} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.prototype.getComponentInputArtifact = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.prototype.setComponentInputArtifact = function(value) { + return jspb.Message.setOneofField(this, 4, proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.prototype.clearComponentInputArtifact = function() { + return jspb.Message.setOneofField(this, 4, proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec.prototype.hasComponentInputArtifact = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array<!Array<number>>} + * @const + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.oneofGroups_ = [[1,2,3,5]]; + +/** + * @enum {number} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.KindCase = { + KIND_NOT_SET: 0, + TASK_OUTPUT_PARAMETER: 1, + RUNTIME_VALUE: 2, + COMPONENT_INPUT_PARAMETER: 3, + TASK_FINAL_STATUS: 5 +}; + +/** + * @return {proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.KindCase} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.getKindCase = function() { + return /** @type {proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.KindCase} */(jspb.Message.computeOneofCase(this, proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.toObject = function(includeInstance, msg) { + var f, obj = { + taskOutputParameter: (f = msg.getTaskOutputParameter()) && proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.toObject(includeInstance, f), + runtimeValue: (f = msg.getRuntimeValue()) && proto.ml_pipelines.ValueOrRuntimeParameter.toObject(includeInstance, f), + componentInputParameter: jspb.Message.getFieldWithDefault(msg, 3, ""), + taskFinalStatus: (f = msg.getTaskFinalStatus()) && proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.toObject(includeInstance, f), + parameterExpressionSelector: jspb.Message.getFieldWithDefault(msg, 4, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.TaskInputsSpec.InputParameterSpec; + return proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec; + reader.readMessage(value,proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.deserializeBinaryFromReader); + msg.setTaskOutputParameter(value); + break; + case 2: + var value = new proto.ml_pipelines.ValueOrRuntimeParameter; + reader.readMessage(value,proto.ml_pipelines.ValueOrRuntimeParameter.deserializeBinaryFromReader); + msg.setRuntimeValue(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setComponentInputParameter(value); + break; + case 5: + var value = new proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus; + reader.readMessage(value,proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.deserializeBinaryFromReader); + msg.setTaskFinalStatus(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setParameterExpressionSelector(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTaskOutputParameter(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.serializeBinaryToWriter + ); + } + f = message.getRuntimeValue(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_pipelines.ValueOrRuntimeParameter.serializeBinaryToWriter + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } + f = message.getTaskFinalStatus(); + if (f != null) { + writer.writeMessage( + 5, + f, + proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.serializeBinaryToWriter + ); + } + f = message.getParameterExpressionSelector(); + if (f.length > 0) { + writer.writeString( + 4, + f + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.toObject = function(includeInstance, msg) { + var f, obj = { + producerTask: jspb.Message.getFieldWithDefault(msg, 1, ""), + outputParameterKey: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec; + return proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setProducerTask(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setOutputParameterKey(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getProducerTask(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getOutputParameterKey(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string producer_task = 1; + * @return {string} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.prototype.getProducerTask = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.prototype.setProducerTask = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string output_parameter_key = 2; + * @return {string} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.prototype.getOutputParameterKey = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec.prototype.setOutputParameterKey = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.toObject = function(includeInstance, msg) { + var f, obj = { + producerTask: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus; + return proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setProducerTask(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getProducerTask(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string producer_task = 1; + * @return {string} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.prototype.getProducerTask = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus.prototype.setProducerTask = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional TaskOutputParameterSpec task_output_parameter = 1; + * @return {?proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.getTaskOutputParameter = function() { + return /** @type{?proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskOutputParameterSpec|undefined} value + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} returns this +*/ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.setTaskOutputParameter = function(value) { + return jspb.Message.setOneofWrapperField(this, 1, proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.clearTaskOutputParameter = function() { + return this.setTaskOutputParameter(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.hasTaskOutputParameter = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ValueOrRuntimeParameter runtime_value = 2; + * @return {?proto.ml_pipelines.ValueOrRuntimeParameter} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.getRuntimeValue = function() { + return /** @type{?proto.ml_pipelines.ValueOrRuntimeParameter} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ValueOrRuntimeParameter, 2)); +}; + + +/** + * @param {?proto.ml_pipelines.ValueOrRuntimeParameter|undefined} value + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} returns this +*/ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.setRuntimeValue = function(value) { + return jspb.Message.setOneofWrapperField(this, 2, proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.clearRuntimeValue = function() { + return this.setRuntimeValue(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.hasRuntimeValue = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string component_input_parameter = 3; + * @return {string} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.getComponentInputParameter = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.setComponentInputParameter = function(value) { + return jspb.Message.setOneofField(this, 3, proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.clearComponentInputParameter = function() { + return jspb.Message.setOneofField(this, 3, proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.hasComponentInputParameter = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional TaskFinalStatus task_final_status = 5; + * @return {?proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.getTaskFinalStatus = function() { + return /** @type{?proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus, 5)); +}; + + +/** + * @param {?proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.TaskFinalStatus|undefined} value + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} returns this +*/ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.setTaskFinalStatus = function(value) { + return jspb.Message.setOneofWrapperField(this, 5, proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.clearTaskFinalStatus = function() { + return this.setTaskFinalStatus(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.hasTaskFinalStatus = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional string parameter_expression_selector = 4; + * @return {string} + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.getParameterExpressionSelector = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.InputParameterSpec.prototype.setParameterExpressionSelector = function(value) { + return jspb.Message.setProto3StringField(this, 4, value); +}; + + +/** + * map<string, InputParameterSpec> parameters = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec>} + */ +proto.ml_pipelines.TaskInputsSpec.prototype.getParametersMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.TaskInputsSpec.InputParameterSpec>} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_pipelines.TaskInputsSpec.InputParameterSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.TaskInputsSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.prototype.clearParametersMap = function() { + this.getParametersMap().clear(); + return this;}; + + +/** + * map<string, InputArtifactSpec> artifacts = 2; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec>} + */ +proto.ml_pipelines.TaskInputsSpec.prototype.getArtifactsMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec>} */ ( + jspb.Message.getMapField(this, 2, opt_noLazyCreate, + proto.ml_pipelines.TaskInputsSpec.InputArtifactSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.TaskInputsSpec} returns this + */ +proto.ml_pipelines.TaskInputsSpec.prototype.clearArtifactsMap = function() { + this.getArtifactsMap().clear(); + return this;}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.TaskOutputsSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.TaskOutputsSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.TaskOutputsSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskOutputsSpec.toObject = function(includeInstance, msg) { + var f, obj = { + parametersMap: (f = msg.getParametersMap()) ? f.toObject(includeInstance, proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.toObject) : [], + artifactsMap: (f = msg.getArtifactsMap()) ? f.toObject(includeInstance, proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.toObject) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.TaskOutputsSpec} + */ +proto.ml_pipelines.TaskOutputsSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.TaskOutputsSpec; + return proto.ml_pipelines.TaskOutputsSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.TaskOutputsSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.TaskOutputsSpec} + */ +proto.ml_pipelines.TaskOutputsSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getParametersMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec()); + }); + break; + case 2: + var value = msg.getArtifactsMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec()); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.TaskOutputsSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.TaskOutputsSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.TaskOutputsSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskOutputsSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getParametersMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.serializeBinaryToWriter); + } + f = message.getArtifactsMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.serializeBinaryToWriter); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.toObject = function(includeInstance, msg) { + var f, obj = { + artifactType: (f = msg.getArtifactType()) && proto.ml_pipelines.ArtifactTypeSchema.toObject(includeInstance, f), + propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ValueOrRuntimeParameter.toObject) : [], + customPropertiesMap: (f = msg.getCustomPropertiesMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ValueOrRuntimeParameter.toObject) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec; + return proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.ArtifactTypeSchema; + reader.readMessage(value,proto.ml_pipelines.ArtifactTypeSchema.deserializeBinaryFromReader); + msg.setArtifactType(value); + break; + case 2: + var value = msg.getPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ValueOrRuntimeParameter.deserializeBinaryFromReader, "", new proto.ml_pipelines.ValueOrRuntimeParameter()); + }); + break; + case 3: + var value = msg.getCustomPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ValueOrRuntimeParameter.deserializeBinaryFromReader, "", new proto.ml_pipelines.ValueOrRuntimeParameter()); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactType(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.ArtifactTypeSchema.serializeBinaryToWriter + ); + } + f = message.getPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ValueOrRuntimeParameter.serializeBinaryToWriter); + } + f = message.getCustomPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(3, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ValueOrRuntimeParameter.serializeBinaryToWriter); + } +}; + + +/** + * optional ArtifactTypeSchema artifact_type = 1; + * @return {?proto.ml_pipelines.ArtifactTypeSchema} + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.prototype.getArtifactType = function() { + return /** @type{?proto.ml_pipelines.ArtifactTypeSchema} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ArtifactTypeSchema, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.ArtifactTypeSchema|undefined} value + * @return {!proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} returns this +*/ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.prototype.setArtifactType = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} returns this + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.prototype.clearArtifactType = function() { + return this.setArtifactType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.prototype.hasArtifactType = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * map<string, ValueOrRuntimeParameter> properties = 2; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ValueOrRuntimeParameter>} + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.prototype.getPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ValueOrRuntimeParameter>} */ ( + jspb.Message.getMapField(this, 2, opt_noLazyCreate, + proto.ml_pipelines.ValueOrRuntimeParameter)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} returns this + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.prototype.clearPropertiesMap = function() { + this.getPropertiesMap().clear(); + return this;}; + + +/** + * map<string, ValueOrRuntimeParameter> custom_properties = 3; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ValueOrRuntimeParameter>} + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.prototype.getCustomPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ValueOrRuntimeParameter>} */ ( + jspb.Message.getMapField(this, 3, opt_noLazyCreate, + proto.ml_pipelines.ValueOrRuntimeParameter)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec} returns this + */ +proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec.prototype.clearCustomPropertiesMap = function() { + this.getCustomPropertiesMap().clear(); + return this;}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.toObject = function(includeInstance, msg) { + var f, obj = { + type: jspb.Message.getFieldWithDefault(msg, 1, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec} + */ +proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec; + return proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec} + */ +proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} */ (reader.readEnum()); + msg.setType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getType(); + if (f !== 0.0) { + writer.writeEnum( + 1, + f + ); + } +}; + + +/** + * optional PrimitiveType.PrimitiveTypeEnum type = 1; + * @return {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} + */ +proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.prototype.getType = function() { + return /** @type {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {!proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum} value + * @return {!proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec} returns this + */ +proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec.prototype.setType = function(value) { + return jspb.Message.setProto3EnumField(this, 1, value); +}; + + +/** + * map<string, OutputParameterSpec> parameters = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec>} + */ +proto.ml_pipelines.TaskOutputsSpec.prototype.getParametersMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec>} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_pipelines.TaskOutputsSpec.OutputParameterSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.TaskOutputsSpec} returns this + */ +proto.ml_pipelines.TaskOutputsSpec.prototype.clearParametersMap = function() { + this.getParametersMap().clear(); + return this;}; + + +/** + * map<string, OutputArtifactSpec> artifacts = 2; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec>} + */ +proto.ml_pipelines.TaskOutputsSpec.prototype.getArtifactsMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec>} */ ( + jspb.Message.getMapField(this, 2, opt_noLazyCreate, + proto.ml_pipelines.TaskOutputsSpec.OutputArtifactSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.TaskOutputsSpec} returns this + */ +proto.ml_pipelines.TaskOutputsSpec.prototype.clearArtifactsMap = function() { + this.getArtifactsMap().clear(); + return this;}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PrimitiveType.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PrimitiveType.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PrimitiveType} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PrimitiveType.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PrimitiveType} + */ +proto.ml_pipelines.PrimitiveType.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PrimitiveType; + return proto.ml_pipelines.PrimitiveType.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PrimitiveType} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PrimitiveType} + */ +proto.ml_pipelines.PrimitiveType.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PrimitiveType.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PrimitiveType.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PrimitiveType} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PrimitiveType.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + +/** + * @enum {number} + */ +proto.ml_pipelines.PrimitiveType.PrimitiveTypeEnum = { + PRIMITIVE_TYPE_UNSPECIFIED: 0, + INT: 1, + DOUBLE: 2, + STRING: 3 +}; + + +/** + * List of repeated fields within this message type. + * @private {!Array<number>} + * @const + */ +proto.ml_pipelines.PipelineTaskSpec.repeatedFields_ = [5]; + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array<!Array<number>>} + * @const + */ +proto.ml_pipelines.PipelineTaskSpec.oneofGroups_ = [[9,10]]; + +/** + * @enum {number} + */ +proto.ml_pipelines.PipelineTaskSpec.IteratorCase = { + ITERATOR_NOT_SET: 0, + ARTIFACT_ITERATOR: 9, + PARAMETER_ITERATOR: 10 +}; + +/** + * @return {proto.ml_pipelines.PipelineTaskSpec.IteratorCase} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.getIteratorCase = function() { + return /** @type {proto.ml_pipelines.PipelineTaskSpec.IteratorCase} */(jspb.Message.computeOneofCase(this, proto.ml_pipelines.PipelineTaskSpec.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineTaskSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineTaskSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineTaskSpec.toObject = function(includeInstance, msg) { + var f, obj = { + taskInfo: (f = msg.getTaskInfo()) && proto.ml_pipelines.PipelineTaskInfo.toObject(includeInstance, f), + inputs: (f = msg.getInputs()) && proto.ml_pipelines.TaskInputsSpec.toObject(includeInstance, f), + dependentTasksList: (f = jspb.Message.getRepeatedField(msg, 5)) == null ? undefined : f, + cachingOptions: (f = msg.getCachingOptions()) && proto.ml_pipelines.PipelineTaskSpec.CachingOptions.toObject(includeInstance, f), + componentRef: (f = msg.getComponentRef()) && proto.ml_pipelines.ComponentRef.toObject(includeInstance, f), + triggerPolicy: (f = msg.getTriggerPolicy()) && proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.toObject(includeInstance, f), + artifactIterator: (f = msg.getArtifactIterator()) && proto.ml_pipelines.ArtifactIteratorSpec.toObject(includeInstance, f), + parameterIterator: (f = msg.getParameterIterator()) && proto.ml_pipelines.ParameterIteratorSpec.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineTaskSpec} + */ +proto.ml_pipelines.PipelineTaskSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineTaskSpec; + return proto.ml_pipelines.PipelineTaskSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineTaskSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineTaskSpec} + */ +proto.ml_pipelines.PipelineTaskSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.PipelineTaskInfo; + reader.readMessage(value,proto.ml_pipelines.PipelineTaskInfo.deserializeBinaryFromReader); + msg.setTaskInfo(value); + break; + case 2: + var value = new proto.ml_pipelines.TaskInputsSpec; + reader.readMessage(value,proto.ml_pipelines.TaskInputsSpec.deserializeBinaryFromReader); + msg.setInputs(value); + break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.addDependentTasks(value); + break; + case 6: + var value = new proto.ml_pipelines.PipelineTaskSpec.CachingOptions; + reader.readMessage(value,proto.ml_pipelines.PipelineTaskSpec.CachingOptions.deserializeBinaryFromReader); + msg.setCachingOptions(value); + break; + case 7: + var value = new proto.ml_pipelines.ComponentRef; + reader.readMessage(value,proto.ml_pipelines.ComponentRef.deserializeBinaryFromReader); + msg.setComponentRef(value); + break; + case 8: + var value = new proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy; + reader.readMessage(value,proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.deserializeBinaryFromReader); + msg.setTriggerPolicy(value); + break; + case 9: + var value = new proto.ml_pipelines.ArtifactIteratorSpec; + reader.readMessage(value,proto.ml_pipelines.ArtifactIteratorSpec.deserializeBinaryFromReader); + msg.setArtifactIterator(value); + break; + case 10: + var value = new proto.ml_pipelines.ParameterIteratorSpec; + reader.readMessage(value,proto.ml_pipelines.ParameterIteratorSpec.deserializeBinaryFromReader); + msg.setParameterIterator(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineTaskSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineTaskSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineTaskSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTaskInfo(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.PipelineTaskInfo.serializeBinaryToWriter + ); + } + f = message.getInputs(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_pipelines.TaskInputsSpec.serializeBinaryToWriter + ); + } + f = message.getDependentTasksList(); + if (f.length > 0) { + writer.writeRepeatedString( + 5, + f + ); + } + f = message.getCachingOptions(); + if (f != null) { + writer.writeMessage( + 6, + f, + proto.ml_pipelines.PipelineTaskSpec.CachingOptions.serializeBinaryToWriter + ); + } + f = message.getComponentRef(); + if (f != null) { + writer.writeMessage( + 7, + f, + proto.ml_pipelines.ComponentRef.serializeBinaryToWriter + ); + } + f = message.getTriggerPolicy(); + if (f != null) { + writer.writeMessage( + 8, + f, + proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.serializeBinaryToWriter + ); + } + f = message.getArtifactIterator(); + if (f != null) { + writer.writeMessage( + 9, + f, + proto.ml_pipelines.ArtifactIteratorSpec.serializeBinaryToWriter + ); + } + f = message.getParameterIterator(); + if (f != null) { + writer.writeMessage( + 10, + f, + proto.ml_pipelines.ParameterIteratorSpec.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineTaskSpec.CachingOptions.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineTaskSpec.CachingOptions.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineTaskSpec.CachingOptions} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineTaskSpec.CachingOptions.toObject = function(includeInstance, msg) { + var f, obj = { + enableCache: jspb.Message.getBooleanFieldWithDefault(msg, 1, false) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineTaskSpec.CachingOptions} + */ +proto.ml_pipelines.PipelineTaskSpec.CachingOptions.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineTaskSpec.CachingOptions; + return proto.ml_pipelines.PipelineTaskSpec.CachingOptions.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineTaskSpec.CachingOptions} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineTaskSpec.CachingOptions} + */ +proto.ml_pipelines.PipelineTaskSpec.CachingOptions.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setEnableCache(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineTaskSpec.CachingOptions.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineTaskSpec.CachingOptions.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineTaskSpec.CachingOptions} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineTaskSpec.CachingOptions.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getEnableCache(); + if (f) { + writer.writeBool( + 1, + f + ); + } +}; + + +/** + * optional bool enable_cache = 1; + * @return {boolean} + */ +proto.ml_pipelines.PipelineTaskSpec.CachingOptions.prototype.getEnableCache = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 1, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_pipelines.PipelineTaskSpec.CachingOptions} returns this + */ +proto.ml_pipelines.PipelineTaskSpec.CachingOptions.prototype.setEnableCache = function(value) { + return jspb.Message.setProto3BooleanField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.toObject = function(includeInstance, msg) { + var f, obj = { + condition: jspb.Message.getFieldWithDefault(msg, 1, ""), + strategy: jspb.Message.getFieldWithDefault(msg, 2, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy} + */ +proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy; + return proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy} + */ +proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setCondition(value); + break; + case 2: + var value = /** @type {!proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy} */ (reader.readEnum()); + msg.setStrategy(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getCondition(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getStrategy(); + if (f !== 0.0) { + writer.writeEnum( + 2, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy = { + TRIGGER_STRATEGY_UNSPECIFIED: 0, + ALL_UPSTREAM_TASKS_SUCCEEDED: 1, + ALL_UPSTREAM_TASKS_COMPLETED: 2 +}; + +/** + * optional string condition = 1; + * @return {string} + */ +proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.prototype.getCondition = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy} returns this + */ +proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.prototype.setCondition = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional TriggerStrategy strategy = 2; + * @return {!proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy} + */ +proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.prototype.getStrategy = function() { + return /** @type {!proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {!proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.TriggerStrategy} value + * @return {!proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy} returns this + */ +proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy.prototype.setStrategy = function(value) { + return jspb.Message.setProto3EnumField(this, 2, value); +}; + + +/** + * optional PipelineTaskInfo task_info = 1; + * @return {?proto.ml_pipelines.PipelineTaskInfo} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.getTaskInfo = function() { + return /** @type{?proto.ml_pipelines.PipelineTaskInfo} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.PipelineTaskInfo, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.PipelineTaskInfo|undefined} value + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this +*/ +proto.ml_pipelines.PipelineTaskSpec.prototype.setTaskInfo = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.clearTaskInfo = function() { + return this.setTaskInfo(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.hasTaskInfo = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional TaskInputsSpec inputs = 2; + * @return {?proto.ml_pipelines.TaskInputsSpec} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.getInputs = function() { + return /** @type{?proto.ml_pipelines.TaskInputsSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.TaskInputsSpec, 2)); +}; + + +/** + * @param {?proto.ml_pipelines.TaskInputsSpec|undefined} value + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this +*/ +proto.ml_pipelines.PipelineTaskSpec.prototype.setInputs = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.clearInputs = function() { + return this.setInputs(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.hasInputs = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * repeated string dependent_tasks = 5; + * @return {!Array<string>} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.getDependentTasksList = function() { + return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 5)); +}; + + +/** + * @param {!Array<string>} value + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.setDependentTasksList = function(value) { + return jspb.Message.setField(this, 5, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.addDependentTasks = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 5, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.clearDependentTasksList = function() { + return this.setDependentTasksList([]); +}; + + +/** + * optional CachingOptions caching_options = 6; + * @return {?proto.ml_pipelines.PipelineTaskSpec.CachingOptions} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.getCachingOptions = function() { + return /** @type{?proto.ml_pipelines.PipelineTaskSpec.CachingOptions} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.PipelineTaskSpec.CachingOptions, 6)); +}; + + +/** + * @param {?proto.ml_pipelines.PipelineTaskSpec.CachingOptions|undefined} value + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this +*/ +proto.ml_pipelines.PipelineTaskSpec.prototype.setCachingOptions = function(value) { + return jspb.Message.setWrapperField(this, 6, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.clearCachingOptions = function() { + return this.setCachingOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.hasCachingOptions = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional ComponentRef component_ref = 7; + * @return {?proto.ml_pipelines.ComponentRef} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.getComponentRef = function() { + return /** @type{?proto.ml_pipelines.ComponentRef} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ComponentRef, 7)); +}; + + +/** + * @param {?proto.ml_pipelines.ComponentRef|undefined} value + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this +*/ +proto.ml_pipelines.PipelineTaskSpec.prototype.setComponentRef = function(value) { + return jspb.Message.setWrapperField(this, 7, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.clearComponentRef = function() { + return this.setComponentRef(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.hasComponentRef = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * optional TriggerPolicy trigger_policy = 8; + * @return {?proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.getTriggerPolicy = function() { + return /** @type{?proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy, 8)); +}; + + +/** + * @param {?proto.ml_pipelines.PipelineTaskSpec.TriggerPolicy|undefined} value + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this +*/ +proto.ml_pipelines.PipelineTaskSpec.prototype.setTriggerPolicy = function(value) { + return jspb.Message.setWrapperField(this, 8, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.clearTriggerPolicy = function() { + return this.setTriggerPolicy(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.hasTriggerPolicy = function() { + return jspb.Message.getField(this, 8) != null; +}; + + +/** + * optional ArtifactIteratorSpec artifact_iterator = 9; + * @return {?proto.ml_pipelines.ArtifactIteratorSpec} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.getArtifactIterator = function() { + return /** @type{?proto.ml_pipelines.ArtifactIteratorSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ArtifactIteratorSpec, 9)); +}; + + +/** + * @param {?proto.ml_pipelines.ArtifactIteratorSpec|undefined} value + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this +*/ +proto.ml_pipelines.PipelineTaskSpec.prototype.setArtifactIterator = function(value) { + return jspb.Message.setOneofWrapperField(this, 9, proto.ml_pipelines.PipelineTaskSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.clearArtifactIterator = function() { + return this.setArtifactIterator(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.hasArtifactIterator = function() { + return jspb.Message.getField(this, 9) != null; +}; + + +/** + * optional ParameterIteratorSpec parameter_iterator = 10; + * @return {?proto.ml_pipelines.ParameterIteratorSpec} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.getParameterIterator = function() { + return /** @type{?proto.ml_pipelines.ParameterIteratorSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ParameterIteratorSpec, 10)); +}; + + +/** + * @param {?proto.ml_pipelines.ParameterIteratorSpec|undefined} value + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this +*/ +proto.ml_pipelines.PipelineTaskSpec.prototype.setParameterIterator = function(value) { + return jspb.Message.setOneofWrapperField(this, 10, proto.ml_pipelines.PipelineTaskSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineTaskSpec} returns this + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.clearParameterIterator = function() { + return this.setParameterIterator(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineTaskSpec.prototype.hasParameterIterator = function() { + return jspb.Message.getField(this, 10) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ArtifactIteratorSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ArtifactIteratorSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ArtifactIteratorSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ArtifactIteratorSpec.toObject = function(includeInstance, msg) { + var f, obj = { + items: (f = msg.getItems()) && proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.toObject(includeInstance, f), + itemInput: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ArtifactIteratorSpec} + */ +proto.ml_pipelines.ArtifactIteratorSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ArtifactIteratorSpec; + return proto.ml_pipelines.ArtifactIteratorSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ArtifactIteratorSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ArtifactIteratorSpec} + */ +proto.ml_pipelines.ArtifactIteratorSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec; + reader.readMessage(value,proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.deserializeBinaryFromReader); + msg.setItems(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setItemInput(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ArtifactIteratorSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ArtifactIteratorSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ArtifactIteratorSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ArtifactIteratorSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getItems(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.serializeBinaryToWriter + ); + } + f = message.getItemInput(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.toObject = function(includeInstance, msg) { + var f, obj = { + inputArtifact: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec} + */ +proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec; + return proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec} + */ +proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setInputArtifact(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getInputArtifact(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string input_artifact = 1; + * @return {string} + */ +proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.prototype.getInputArtifact = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec} returns this + */ +proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec.prototype.setInputArtifact = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional ItemsSpec items = 1; + * @return {?proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec} + */ +proto.ml_pipelines.ArtifactIteratorSpec.prototype.getItems = function() { + return /** @type{?proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.ArtifactIteratorSpec.ItemsSpec|undefined} value + * @return {!proto.ml_pipelines.ArtifactIteratorSpec} returns this +*/ +proto.ml_pipelines.ArtifactIteratorSpec.prototype.setItems = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.ArtifactIteratorSpec} returns this + */ +proto.ml_pipelines.ArtifactIteratorSpec.prototype.clearItems = function() { + return this.setItems(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ArtifactIteratorSpec.prototype.hasItems = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string item_input = 2; + * @return {string} + */ +proto.ml_pipelines.ArtifactIteratorSpec.prototype.getItemInput = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ArtifactIteratorSpec} returns this + */ +proto.ml_pipelines.ArtifactIteratorSpec.prototype.setItemInput = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ParameterIteratorSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ParameterIteratorSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ParameterIteratorSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ParameterIteratorSpec.toObject = function(includeInstance, msg) { + var f, obj = { + items: (f = msg.getItems()) && proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.toObject(includeInstance, f), + itemInput: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ParameterIteratorSpec} + */ +proto.ml_pipelines.ParameterIteratorSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ParameterIteratorSpec; + return proto.ml_pipelines.ParameterIteratorSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ParameterIteratorSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ParameterIteratorSpec} + */ +proto.ml_pipelines.ParameterIteratorSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec; + reader.readMessage(value,proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.deserializeBinaryFromReader); + msg.setItems(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setItemInput(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ParameterIteratorSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ParameterIteratorSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ParameterIteratorSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ParameterIteratorSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getItems(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.serializeBinaryToWriter + ); + } + f = message.getItemInput(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array<!Array<number>>} + * @const + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.oneofGroups_ = [[1,2]]; + +/** + * @enum {number} + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.KindCase = { + KIND_NOT_SET: 0, + RAW: 1, + INPUT_PARAMETER: 2 +}; + +/** + * @return {proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.KindCase} + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.prototype.getKindCase = function() { + return /** @type {proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.KindCase} */(jspb.Message.computeOneofCase(this, proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.toObject = function(includeInstance, msg) { + var f, obj = { + raw: jspb.Message.getFieldWithDefault(msg, 1, ""), + inputParameter: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec} + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec; + return proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec} + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setRaw(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setInputParameter(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string raw = 1; + * @return {string} + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.prototype.getRaw = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec} returns this + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.prototype.setRaw = function(value) { + return jspb.Message.setOneofField(this, 1, proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec} returns this + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.prototype.clearRaw = function() { + return jspb.Message.setOneofField(this, 1, proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.prototype.hasRaw = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string input_parameter = 2; + * @return {string} + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.prototype.getInputParameter = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec} returns this + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.prototype.setInputParameter = function(value) { + return jspb.Message.setOneofField(this, 2, proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec} returns this + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.prototype.clearInputParameter = function() { + return jspb.Message.setOneofField(this, 2, proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec.prototype.hasInputParameter = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional ItemsSpec items = 1; + * @return {?proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec} + */ +proto.ml_pipelines.ParameterIteratorSpec.prototype.getItems = function() { + return /** @type{?proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.ParameterIteratorSpec.ItemsSpec|undefined} value + * @return {!proto.ml_pipelines.ParameterIteratorSpec} returns this +*/ +proto.ml_pipelines.ParameterIteratorSpec.prototype.setItems = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.ParameterIteratorSpec} returns this + */ +proto.ml_pipelines.ParameterIteratorSpec.prototype.clearItems = function() { + return this.setItems(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ParameterIteratorSpec.prototype.hasItems = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string item_input = 2; + * @return {string} + */ +proto.ml_pipelines.ParameterIteratorSpec.prototype.getItemInput = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ParameterIteratorSpec} returns this + */ +proto.ml_pipelines.ParameterIteratorSpec.prototype.setItemInput = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ComponentRef.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ComponentRef.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ComponentRef} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentRef.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ComponentRef} + */ +proto.ml_pipelines.ComponentRef.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ComponentRef; + return proto.ml_pipelines.ComponentRef.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ComponentRef} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ComponentRef} + */ +proto.ml_pipelines.ComponentRef.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ComponentRef.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ComponentRef.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ComponentRef} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ComponentRef.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.ml_pipelines.ComponentRef.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ComponentRef} returns this + */ +proto.ml_pipelines.ComponentRef.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineInfo.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineInfo.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineInfo} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineInfo.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineInfo} + */ +proto.ml_pipelines.PipelineInfo.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineInfo; + return proto.ml_pipelines.PipelineInfo.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineInfo} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineInfo} + */ +proto.ml_pipelines.PipelineInfo.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineInfo.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineInfo.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineInfo} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineInfo.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.ml_pipelines.PipelineInfo.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.PipelineInfo} returns this + */ +proto.ml_pipelines.PipelineInfo.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array<!Array<number>>} + * @const + */ +proto.ml_pipelines.ArtifactTypeSchema.oneofGroups_ = [[1,2,3]]; + +/** + * @enum {number} + */ +proto.ml_pipelines.ArtifactTypeSchema.KindCase = { + KIND_NOT_SET: 0, + SCHEMA_TITLE: 1, + SCHEMA_URI: 2, + INSTANCE_SCHEMA: 3 +}; + +/** + * @return {proto.ml_pipelines.ArtifactTypeSchema.KindCase} + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.getKindCase = function() { + return /** @type {proto.ml_pipelines.ArtifactTypeSchema.KindCase} */(jspb.Message.computeOneofCase(this, proto.ml_pipelines.ArtifactTypeSchema.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ArtifactTypeSchema.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ArtifactTypeSchema} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ArtifactTypeSchema.toObject = function(includeInstance, msg) { + var f, obj = { + schemaTitle: jspb.Message.getFieldWithDefault(msg, 1, ""), + schemaUri: jspb.Message.getFieldWithDefault(msg, 2, ""), + instanceSchema: jspb.Message.getFieldWithDefault(msg, 3, ""), + schemaVersion: jspb.Message.getFieldWithDefault(msg, 4, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ArtifactTypeSchema} + */ +proto.ml_pipelines.ArtifactTypeSchema.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ArtifactTypeSchema; + return proto.ml_pipelines.ArtifactTypeSchema.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ArtifactTypeSchema} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ArtifactTypeSchema} + */ +proto.ml_pipelines.ArtifactTypeSchema.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setSchemaTitle(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setSchemaUri(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setInstanceSchema(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setSchemaVersion(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ArtifactTypeSchema.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ArtifactTypeSchema} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ArtifactTypeSchema.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } + f = message.getSchemaVersion(); + if (f.length > 0) { + writer.writeString( + 4, + f + ); + } +}; + + +/** + * optional string schema_title = 1; + * @return {string} + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.getSchemaTitle = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ArtifactTypeSchema} returns this + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.setSchemaTitle = function(value) { + return jspb.Message.setOneofField(this, 1, proto.ml_pipelines.ArtifactTypeSchema.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_pipelines.ArtifactTypeSchema} returns this + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.clearSchemaTitle = function() { + return jspb.Message.setOneofField(this, 1, proto.ml_pipelines.ArtifactTypeSchema.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.hasSchemaTitle = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string schema_uri = 2; + * @return {string} + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.getSchemaUri = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ArtifactTypeSchema} returns this + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.setSchemaUri = function(value) { + return jspb.Message.setOneofField(this, 2, proto.ml_pipelines.ArtifactTypeSchema.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_pipelines.ArtifactTypeSchema} returns this + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.clearSchemaUri = function() { + return jspb.Message.setOneofField(this, 2, proto.ml_pipelines.ArtifactTypeSchema.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.hasSchemaUri = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string instance_schema = 3; + * @return {string} + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.getInstanceSchema = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ArtifactTypeSchema} returns this + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.setInstanceSchema = function(value) { + return jspb.Message.setOneofField(this, 3, proto.ml_pipelines.ArtifactTypeSchema.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_pipelines.ArtifactTypeSchema} returns this + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.clearInstanceSchema = function() { + return jspb.Message.setOneofField(this, 3, proto.ml_pipelines.ArtifactTypeSchema.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.hasInstanceSchema = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional string schema_version = 4; + * @return {string} + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.getSchemaVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ArtifactTypeSchema} returns this + */ +proto.ml_pipelines.ArtifactTypeSchema.prototype.setSchemaVersion = function(value) { + return jspb.Message.setProto3StringField(this, 4, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineTaskInfo.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineTaskInfo.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineTaskInfo} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineTaskInfo.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineTaskInfo} + */ +proto.ml_pipelines.PipelineTaskInfo.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineTaskInfo; + return proto.ml_pipelines.PipelineTaskInfo.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineTaskInfo} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineTaskInfo} + */ +proto.ml_pipelines.PipelineTaskInfo.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineTaskInfo.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineTaskInfo.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineTaskInfo} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineTaskInfo.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.ml_pipelines.PipelineTaskInfo.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.PipelineTaskInfo} returns this + */ +proto.ml_pipelines.PipelineTaskInfo.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array<!Array<number>>} + * @const + */ +proto.ml_pipelines.ValueOrRuntimeParameter.oneofGroups_ = [[1,2]]; + +/** + * @enum {number} + */ +proto.ml_pipelines.ValueOrRuntimeParameter.ValueCase = { + VALUE_NOT_SET: 0, + CONSTANT_VALUE: 1, + RUNTIME_PARAMETER: 2 +}; + +/** + * @return {proto.ml_pipelines.ValueOrRuntimeParameter.ValueCase} + */ +proto.ml_pipelines.ValueOrRuntimeParameter.prototype.getValueCase = function() { + return /** @type {proto.ml_pipelines.ValueOrRuntimeParameter.ValueCase} */(jspb.Message.computeOneofCase(this, proto.ml_pipelines.ValueOrRuntimeParameter.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ValueOrRuntimeParameter.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ValueOrRuntimeParameter.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ValueOrRuntimeParameter} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ValueOrRuntimeParameter.toObject = function(includeInstance, msg) { + var f, obj = { + constantValue: (f = msg.getConstantValue()) && proto.ml_pipelines.Value.toObject(includeInstance, f), + runtimeParameter: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ValueOrRuntimeParameter} + */ +proto.ml_pipelines.ValueOrRuntimeParameter.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ValueOrRuntimeParameter; + return proto.ml_pipelines.ValueOrRuntimeParameter.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ValueOrRuntimeParameter} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ValueOrRuntimeParameter} + */ +proto.ml_pipelines.ValueOrRuntimeParameter.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.Value; + reader.readMessage(value,proto.ml_pipelines.Value.deserializeBinaryFromReader); + msg.setConstantValue(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setRuntimeParameter(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ValueOrRuntimeParameter.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ValueOrRuntimeParameter.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ValueOrRuntimeParameter} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ValueOrRuntimeParameter.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getConstantValue(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.Value.serializeBinaryToWriter + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional Value constant_value = 1; + * @return {?proto.ml_pipelines.Value} + */ +proto.ml_pipelines.ValueOrRuntimeParameter.prototype.getConstantValue = function() { + return /** @type{?proto.ml_pipelines.Value} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.Value, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.Value|undefined} value + * @return {!proto.ml_pipelines.ValueOrRuntimeParameter} returns this +*/ +proto.ml_pipelines.ValueOrRuntimeParameter.prototype.setConstantValue = function(value) { + return jspb.Message.setOneofWrapperField(this, 1, proto.ml_pipelines.ValueOrRuntimeParameter.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.ValueOrRuntimeParameter} returns this + */ +proto.ml_pipelines.ValueOrRuntimeParameter.prototype.clearConstantValue = function() { + return this.setConstantValue(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ValueOrRuntimeParameter.prototype.hasConstantValue = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string runtime_parameter = 2; + * @return {string} + */ +proto.ml_pipelines.ValueOrRuntimeParameter.prototype.getRuntimeParameter = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ValueOrRuntimeParameter} returns this + */ +proto.ml_pipelines.ValueOrRuntimeParameter.prototype.setRuntimeParameter = function(value) { + return jspb.Message.setOneofField(this, 2, proto.ml_pipelines.ValueOrRuntimeParameter.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_pipelines.ValueOrRuntimeParameter} returns this + */ +proto.ml_pipelines.ValueOrRuntimeParameter.prototype.clearRuntimeParameter = function() { + return jspb.Message.setOneofField(this, 2, proto.ml_pipelines.ValueOrRuntimeParameter.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ValueOrRuntimeParameter.prototype.hasRuntimeParameter = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineDeploymentConfig.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineDeploymentConfig.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineDeploymentConfig} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.toObject = function(includeInstance, msg) { + var f, obj = { + executorsMap: (f = msg.getExecutorsMap()) ? f.toObject(includeInstance, proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.toObject) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig} + */ +proto.ml_pipelines.PipelineDeploymentConfig.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineDeploymentConfig; + return proto.ml_pipelines.PipelineDeploymentConfig.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig} + */ +proto.ml_pipelines.PipelineDeploymentConfig.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getExecutorsMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec()); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineDeploymentConfig.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineDeploymentConfig.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecutorsMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.serializeBinaryToWriter); + } +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array<number>} + * @const + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.repeatedFields_ = [2,3]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.toObject = function(includeInstance, msg) { + var f, obj = { + image: jspb.Message.getFieldWithDefault(msg, 1, ""), + commandList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f, + argsList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f, + lifecycle: (f = msg.getLifecycle()) && proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.toObject(includeInstance, f), + resources: (f = msg.getResources()) && proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec; + return proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setImage(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.addCommand(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.addArgs(value); + break; + case 4: + var value = new proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle; + reader.readMessage(value,proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.deserializeBinaryFromReader); + msg.setLifecycle(value); + break; + case 5: + var value = new proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec; + reader.readMessage(value,proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.deserializeBinaryFromReader); + msg.setResources(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getImage(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getCommandList(); + if (f.length > 0) { + writer.writeRepeatedString( + 2, + f + ); + } + f = message.getArgsList(); + if (f.length > 0) { + writer.writeRepeatedString( + 3, + f + ); + } + f = message.getLifecycle(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.serializeBinaryToWriter + ); + } + f = message.getResources(); + if (f != null) { + writer.writeMessage( + 5, + f, + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.toObject = function(includeInstance, msg) { + var f, obj = { + preCacheCheck: (f = msg.getPreCacheCheck()) && proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle; + return proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec; + reader.readMessage(value,proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.deserializeBinaryFromReader); + msg.setPreCacheCheck(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getPreCacheCheck(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.serializeBinaryToWriter + ); + } +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array<number>} + * @const + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.repeatedFields_ = [2,3]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.toObject = function(includeInstance, msg) { + var f, obj = { + commandList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f, + argsList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec; + return proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.addCommand(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.addArgs(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getCommandList(); + if (f.length > 0) { + writer.writeRepeatedString( + 2, + f + ); + } + f = message.getArgsList(); + if (f.length > 0) { + writer.writeRepeatedString( + 3, + f + ); + } +}; + + +/** + * repeated string command = 2; + * @return {!Array<string>} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.prototype.getCommandList = function() { + return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 2)); +}; + + +/** + * @param {!Array<string>} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.prototype.setCommandList = function(value) { + return jspb.Message.setField(this, 2, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.prototype.addCommand = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 2, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.prototype.clearCommandList = function() { + return this.setCommandList([]); +}; + + +/** + * repeated string args = 3; + * @return {!Array<string>} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.prototype.getArgsList = function() { + return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 3)); +}; + + +/** + * @param {!Array<string>} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.prototype.setArgsList = function(value) { + return jspb.Message.setField(this, 3, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.prototype.addArgs = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 3, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec.prototype.clearArgsList = function() { + return this.setArgsList([]); +}; + + +/** + * optional Exec pre_cache_check = 1; + * @return {?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.prototype.getPreCacheCheck = function() { + return /** @type{?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.Exec|undefined} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} returns this +*/ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.prototype.setPreCacheCheck = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.prototype.clearPreCacheCheck = function() { + return this.setPreCacheCheck(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle.prototype.hasPreCacheCheck = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.toObject = function(includeInstance, msg) { + var f, obj = { + cpuLimit: jspb.Message.getFloatingPointFieldWithDefault(msg, 1, 0.0), + memoryLimit: jspb.Message.getFloatingPointFieldWithDefault(msg, 2, 0.0), + accelerator: (f = msg.getAccelerator()) && proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec; + return proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readDouble()); + msg.setCpuLimit(value); + break; + case 2: + var value = /** @type {number} */ (reader.readDouble()); + msg.setMemoryLimit(value); + break; + case 3: + var value = new proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig; + reader.readMessage(value,proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.deserializeBinaryFromReader); + msg.setAccelerator(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getCpuLimit(); + if (f !== 0.0) { + writer.writeDouble( + 1, + f + ); + } + f = message.getMemoryLimit(); + if (f !== 0.0) { + writer.writeDouble( + 2, + f + ); + } + f = message.getAccelerator(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.toObject = function(includeInstance, msg) { + var f, obj = { + type: jspb.Message.getFieldWithDefault(msg, 1, ""), + count: jspb.Message.getFieldWithDefault(msg, 2, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig; + return proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setType(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt64()); + msg.setCount(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getType(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getCount(); + if (f !== 0) { + writer.writeInt64( + 2, + f + ); + } +}; + + +/** + * optional string type = 1; + * @return {string} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.prototype.getType = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.prototype.setType = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional int64 count = 2; + * @return {number} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.prototype.getCount = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig.prototype.setCount = function(value) { + return jspb.Message.setProto3IntField(this, 2, value); +}; + + +/** + * optional double cpu_limit = 1; + * @return {number} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.prototype.getCpuLimit = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 1, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.prototype.setCpuLimit = function(value) { + return jspb.Message.setProto3FloatField(this, 1, value); +}; + + +/** + * optional double memory_limit = 2; + * @return {number} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.prototype.getMemoryLimit = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.prototype.setMemoryLimit = function(value) { + return jspb.Message.setProto3FloatField(this, 2, value); +}; + + +/** + * optional AcceleratorConfig accelerator = 3; + * @return {?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.prototype.getAccelerator = function() { + return /** @type{?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig, 3)); +}; + + +/** + * @param {?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.AcceleratorConfig|undefined} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} returns this +*/ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.prototype.setAccelerator = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.prototype.clearAccelerator = function() { + return this.setAccelerator(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec.prototype.hasAccelerator = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional string image = 1; + * @return {string} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.getImage = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.setImage = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * repeated string command = 2; + * @return {!Array<string>} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.getCommandList = function() { + return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 2)); +}; + + +/** + * @param {!Array<string>} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.setCommandList = function(value) { + return jspb.Message.setField(this, 2, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.addCommand = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 2, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.clearCommandList = function() { + return this.setCommandList([]); +}; + + +/** + * repeated string args = 3; + * @return {!Array<string>} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.getArgsList = function() { + return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 3)); +}; + + +/** + * @param {!Array<string>} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.setArgsList = function(value) { + return jspb.Message.setField(this, 3, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.addArgs = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 3, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.clearArgsList = function() { + return this.setArgsList([]); +}; + + +/** + * optional Lifecycle lifecycle = 4; + * @return {?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.getLifecycle = function() { + return /** @type{?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle, 4)); +}; + + +/** + * @param {?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.Lifecycle|undefined} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} returns this +*/ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.setLifecycle = function(value) { + return jspb.Message.setWrapperField(this, 4, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.clearLifecycle = function() { + return this.setLifecycle(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.hasLifecycle = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional ResourceSpec resources = 5; + * @return {?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.getResources = function() { + return /** @type{?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec, 5)); +}; + + +/** + * @param {?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.ResourceSpec|undefined} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} returns this +*/ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.setResources = function(value) { + return jspb.Message.setWrapperField(this, 5, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.clearResources = function() { + return this.setResources(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.prototype.hasResources = function() { + return jspb.Message.getField(this, 5) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.toObject = function(includeInstance, msg) { + var f, obj = { + artifactUri: (f = msg.getArtifactUri()) && proto.ml_pipelines.ValueOrRuntimeParameter.toObject(includeInstance, f), + typeSchema: (f = msg.getTypeSchema()) && proto.ml_pipelines.ArtifactTypeSchema.toObject(includeInstance, f), + propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ValueOrRuntimeParameter.toObject) : [], + customPropertiesMap: (f = msg.getCustomPropertiesMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ValueOrRuntimeParameter.toObject) : [], + metadata: (f = msg.getMetadata()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f), + reimport: jspb.Message.getBooleanFieldWithDefault(msg, 5, false) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec; + return proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.ValueOrRuntimeParameter; + reader.readMessage(value,proto.ml_pipelines.ValueOrRuntimeParameter.deserializeBinaryFromReader); + msg.setArtifactUri(value); + break; + case 2: + var value = new proto.ml_pipelines.ArtifactTypeSchema; + reader.readMessage(value,proto.ml_pipelines.ArtifactTypeSchema.deserializeBinaryFromReader); + msg.setTypeSchema(value); + break; + case 3: + var value = msg.getPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ValueOrRuntimeParameter.deserializeBinaryFromReader, "", new proto.ml_pipelines.ValueOrRuntimeParameter()); + }); + break; + case 4: + var value = msg.getCustomPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ValueOrRuntimeParameter.deserializeBinaryFromReader, "", new proto.ml_pipelines.ValueOrRuntimeParameter()); + }); + break; + case 6: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setMetadata(value); + break; + case 5: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setReimport(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactUri(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.ValueOrRuntimeParameter.serializeBinaryToWriter + ); + } + f = message.getTypeSchema(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_pipelines.ArtifactTypeSchema.serializeBinaryToWriter + ); + } + f = message.getPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(3, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ValueOrRuntimeParameter.serializeBinaryToWriter); + } + f = message.getCustomPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(4, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ValueOrRuntimeParameter.serializeBinaryToWriter); + } + f = message.getMetadata(); + if (f != null) { + writer.writeMessage( + 6, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } + f = message.getReimport(); + if (f) { + writer.writeBool( + 5, + f + ); + } +}; + + +/** + * optional ValueOrRuntimeParameter artifact_uri = 1; + * @return {?proto.ml_pipelines.ValueOrRuntimeParameter} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.getArtifactUri = function() { + return /** @type{?proto.ml_pipelines.ValueOrRuntimeParameter} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ValueOrRuntimeParameter, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.ValueOrRuntimeParameter|undefined} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} returns this +*/ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.setArtifactUri = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.clearArtifactUri = function() { + return this.setArtifactUri(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.hasArtifactUri = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ArtifactTypeSchema type_schema = 2; + * @return {?proto.ml_pipelines.ArtifactTypeSchema} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.getTypeSchema = function() { + return /** @type{?proto.ml_pipelines.ArtifactTypeSchema} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ArtifactTypeSchema, 2)); +}; + + +/** + * @param {?proto.ml_pipelines.ArtifactTypeSchema|undefined} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} returns this +*/ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.setTypeSchema = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.clearTypeSchema = function() { + return this.setTypeSchema(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.hasTypeSchema = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * map<string, ValueOrRuntimeParameter> properties = 3; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ValueOrRuntimeParameter>} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.getPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ValueOrRuntimeParameter>} */ ( + jspb.Message.getMapField(this, 3, opt_noLazyCreate, + proto.ml_pipelines.ValueOrRuntimeParameter)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.clearPropertiesMap = function() { + this.getPropertiesMap().clear(); + return this;}; + + +/** + * map<string, ValueOrRuntimeParameter> custom_properties = 4; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ValueOrRuntimeParameter>} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.getCustomPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ValueOrRuntimeParameter>} */ ( + jspb.Message.getMapField(this, 4, opt_noLazyCreate, + proto.ml_pipelines.ValueOrRuntimeParameter)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.clearCustomPropertiesMap = function() { + this.getCustomPropertiesMap().clear(); + return this;}; + + +/** + * optional google.protobuf.Struct metadata = 6; + * @return {?proto.google.protobuf.Struct} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.getMetadata = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 6)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} returns this +*/ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.setMetadata = function(value) { + return jspb.Message.setWrapperField(this, 6, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.clearMetadata = function() { + return this.setMetadata(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.hasMetadata = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional bool reimport = 5; + * @return {boolean} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.getReimport = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 5, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.prototype.setReimport = function(value) { + return jspb.Message.setProto3BooleanField(this, 5, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.toObject = function(includeInstance, msg) { + var f, obj = { + outputArtifactQueriesMap: (f = msg.getOutputArtifactQueriesMap()) ? f.toObject(includeInstance, proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.toObject) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec; + return proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getOutputArtifactQueriesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.deserializeBinaryFromReader, "", new proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec()); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getOutputArtifactQueriesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.serializeBinaryToWriter); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.toObject = function(includeInstance, msg) { + var f, obj = { + filter: jspb.Message.getFieldWithDefault(msg, 1, ""), + limit: jspb.Message.getFieldWithDefault(msg, 2, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec; + return proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setFilter(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt32()); + msg.setLimit(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getFilter(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getLimit(); + if (f !== 0) { + writer.writeInt32( + 2, + f + ); + } +}; + + +/** + * optional string filter = 1; + * @return {string} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.prototype.getFilter = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.prototype.setFilter = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional int32 limit = 2; + * @return {number} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.prototype.getLimit = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec.prototype.setLimit = function(value) { + return jspb.Message.setProto3IntField(this, 2, value); +}; + + +/** + * map<string, ArtifactQuerySpec> output_artifact_queries = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec>} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.prototype.getOutputArtifactQueriesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec>} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.ArtifactQuerySpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.prototype.clearOutputArtifactQueriesMap = function() { + this.getOutputArtifactQueriesMap().clear(); + return this;}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.toObject = function(includeInstance, msg) { + var f, obj = { + customJob: (f = msg.getCustomJob()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec; + return proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setCustomJob(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getCustomJob(); + if (f != null) { + writer.writeMessage( + 1, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } +}; + + +/** + * optional google.protobuf.Struct custom_job = 1; + * @return {?proto.google.protobuf.Struct} + */ +proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.prototype.getCustomJob = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 1)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} returns this +*/ +proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.prototype.setCustomJob = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.prototype.clearCustomJob = function() { + return this.setCustomJob(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.prototype.hasCustomJob = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array<!Array<number>>} + * @const + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.oneofGroups_ = [[1,2,3,4]]; + +/** + * @enum {number} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.SpecCase = { + SPEC_NOT_SET: 0, + CONTAINER: 1, + IMPORTER: 2, + RESOLVER: 3, + CUSTOM_JOB: 4 +}; + +/** + * @return {proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.SpecCase} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.getSpecCase = function() { + return /** @type {proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.SpecCase} */(jspb.Message.computeOneofCase(this, proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.toObject = function(includeInstance, msg) { + var f, obj = { + container: (f = msg.getContainer()) && proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.toObject(includeInstance, f), + importer: (f = msg.getImporter()) && proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.toObject(includeInstance, f), + resolver: (f = msg.getResolver()) && proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.toObject(includeInstance, f), + customJob: (f = msg.getCustomJob()) && proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec; + return proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec; + reader.readMessage(value,proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.deserializeBinaryFromReader); + msg.setContainer(value); + break; + case 2: + var value = new proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec; + reader.readMessage(value,proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.deserializeBinaryFromReader); + msg.setImporter(value); + break; + case 3: + var value = new proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec; + reader.readMessage(value,proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.deserializeBinaryFromReader); + msg.setResolver(value); + break; + case 4: + var value = new proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec; + reader.readMessage(value,proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.deserializeBinaryFromReader); + msg.setCustomJob(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContainer(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec.serializeBinaryToWriter + ); + } + f = message.getImporter(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec.serializeBinaryToWriter + ); + } + f = message.getResolver(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec.serializeBinaryToWriter + ); + } + f = message.getCustomJob(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec.serializeBinaryToWriter + ); + } +}; + + +/** + * optional PipelineContainerSpec container = 1; + * @return {?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.getContainer = function() { + return /** @type{?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.PipelineDeploymentConfig.PipelineContainerSpec|undefined} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} returns this +*/ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.setContainer = function(value) { + return jspb.Message.setOneofWrapperField(this, 1, proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.clearContainer = function() { + return this.setContainer(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.hasContainer = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ImporterSpec importer = 2; + * @return {?proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.getImporter = function() { + return /** @type{?proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec, 2)); +}; + + +/** + * @param {?proto.ml_pipelines.PipelineDeploymentConfig.ImporterSpec|undefined} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} returns this +*/ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.setImporter = function(value) { + return jspb.Message.setOneofWrapperField(this, 2, proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.clearImporter = function() { + return this.setImporter(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.hasImporter = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional ResolverSpec resolver = 3; + * @return {?proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.getResolver = function() { + return /** @type{?proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec, 3)); +}; + + +/** + * @param {?proto.ml_pipelines.PipelineDeploymentConfig.ResolverSpec|undefined} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} returns this +*/ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.setResolver = function(value) { + return jspb.Message.setOneofWrapperField(this, 3, proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.clearResolver = function() { + return this.setResolver(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.hasResolver = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional AIPlatformCustomJobSpec custom_job = 4; + * @return {?proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.getCustomJob = function() { + return /** @type{?proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec, 4)); +}; + + +/** + * @param {?proto.ml_pipelines.PipelineDeploymentConfig.AIPlatformCustomJobSpec|undefined} value + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} returns this +*/ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.setCustomJob = function(value) { + return jspb.Message.setOneofWrapperField(this, 4, proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.clearCustomJob = function() { + return this.setCustomJob(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec.prototype.hasCustomJob = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * map<string, ExecutorSpec> executors = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec>} + */ +proto.ml_pipelines.PipelineDeploymentConfig.prototype.getExecutorsMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec>} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_pipelines.PipelineDeploymentConfig.ExecutorSpec)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.PipelineDeploymentConfig} returns this + */ +proto.ml_pipelines.PipelineDeploymentConfig.prototype.clearExecutorsMap = function() { + this.getExecutorsMap().clear(); + return this;}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array<!Array<number>>} + * @const + */ +proto.ml_pipelines.Value.oneofGroups_ = [[1,2,3]]; + +/** + * @enum {number} + */ +proto.ml_pipelines.Value.ValueCase = { + VALUE_NOT_SET: 0, + INT_VALUE: 1, + DOUBLE_VALUE: 2, + STRING_VALUE: 3 +}; + +/** + * @return {proto.ml_pipelines.Value.ValueCase} + */ +proto.ml_pipelines.Value.prototype.getValueCase = function() { + return /** @type {proto.ml_pipelines.Value.ValueCase} */(jspb.Message.computeOneofCase(this, proto.ml_pipelines.Value.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.Value.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.Value.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.Value} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.Value.toObject = function(includeInstance, msg) { + var f, obj = { + intValue: jspb.Message.getFieldWithDefault(msg, 1, 0), + doubleValue: jspb.Message.getFloatingPointFieldWithDefault(msg, 2, 0.0), + stringValue: jspb.Message.getFieldWithDefault(msg, 3, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.Value} + */ +proto.ml_pipelines.Value.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.Value; + return proto.ml_pipelines.Value.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.Value} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.Value} + */ +proto.ml_pipelines.Value.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setIntValue(value); + break; + case 2: + var value = /** @type {number} */ (reader.readDouble()); + msg.setDoubleValue(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setStringValue(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.Value.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.Value.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.Value} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.Value.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeDouble( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * optional int64 int_value = 1; + * @return {number} + */ +proto.ml_pipelines.Value.prototype.getIntValue = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_pipelines.Value} returns this + */ +proto.ml_pipelines.Value.prototype.setIntValue = function(value) { + return jspb.Message.setOneofField(this, 1, proto.ml_pipelines.Value.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_pipelines.Value} returns this + */ +proto.ml_pipelines.Value.prototype.clearIntValue = function() { + return jspb.Message.setOneofField(this, 1, proto.ml_pipelines.Value.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.Value.prototype.hasIntValue = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional double double_value = 2; + * @return {number} + */ +proto.ml_pipelines.Value.prototype.getDoubleValue = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_pipelines.Value} returns this + */ +proto.ml_pipelines.Value.prototype.setDoubleValue = function(value) { + return jspb.Message.setOneofField(this, 2, proto.ml_pipelines.Value.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_pipelines.Value} returns this + */ +proto.ml_pipelines.Value.prototype.clearDoubleValue = function() { + return jspb.Message.setOneofField(this, 2, proto.ml_pipelines.Value.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.Value.prototype.hasDoubleValue = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string string_value = 3; + * @return {string} + */ +proto.ml_pipelines.Value.prototype.getStringValue = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.Value} returns this + */ +proto.ml_pipelines.Value.prototype.setStringValue = function(value) { + return jspb.Message.setOneofField(this, 3, proto.ml_pipelines.Value.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_pipelines.Value} returns this + */ +proto.ml_pipelines.Value.prototype.clearStringValue = function() { + return jspb.Message.setOneofField(this, 3, proto.ml_pipelines.Value.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.Value.prototype.hasStringValue = function() { + return jspb.Message.getField(this, 3) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.RuntimeArtifact.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.RuntimeArtifact.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.RuntimeArtifact} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.RuntimeArtifact.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + type: (f = msg.getType()) && proto.ml_pipelines.ArtifactTypeSchema.toObject(includeInstance, f), + uri: jspb.Message.getFieldWithDefault(msg, 3, ""), + propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, proto.ml_pipelines.Value.toObject) : [], + customPropertiesMap: (f = msg.getCustomPropertiesMap()) ? f.toObject(includeInstance, proto.ml_pipelines.Value.toObject) : [], + metadata: (f = msg.getMetadata()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.RuntimeArtifact} + */ +proto.ml_pipelines.RuntimeArtifact.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.RuntimeArtifact; + return proto.ml_pipelines.RuntimeArtifact.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.RuntimeArtifact} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.RuntimeArtifact} + */ +proto.ml_pipelines.RuntimeArtifact.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = new proto.ml_pipelines.ArtifactTypeSchema; + reader.readMessage(value,proto.ml_pipelines.ArtifactTypeSchema.deserializeBinaryFromReader); + msg.setType(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setUri(value); + break; + case 4: + var value = msg.getPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.Value.deserializeBinaryFromReader, "", new proto.ml_pipelines.Value()); + }); + break; + case 5: + var value = msg.getCustomPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.Value.deserializeBinaryFromReader, "", new proto.ml_pipelines.Value()); + }); + break; + case 6: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setMetadata(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.RuntimeArtifact.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.RuntimeArtifact.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.RuntimeArtifact} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.RuntimeArtifact.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getType(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_pipelines.ArtifactTypeSchema.serializeBinaryToWriter + ); + } + f = message.getUri(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } + f = message.getPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(4, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.Value.serializeBinaryToWriter); + } + f = message.getCustomPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(5, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.Value.serializeBinaryToWriter); + } + f = message.getMetadata(); + if (f != null) { + writer.writeMessage( + 6, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.ml_pipelines.RuntimeArtifact.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.RuntimeArtifact} returns this + */ +proto.ml_pipelines.RuntimeArtifact.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional ArtifactTypeSchema type = 2; + * @return {?proto.ml_pipelines.ArtifactTypeSchema} + */ +proto.ml_pipelines.RuntimeArtifact.prototype.getType = function() { + return /** @type{?proto.ml_pipelines.ArtifactTypeSchema} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ArtifactTypeSchema, 2)); +}; + + +/** + * @param {?proto.ml_pipelines.ArtifactTypeSchema|undefined} value + * @return {!proto.ml_pipelines.RuntimeArtifact} returns this +*/ +proto.ml_pipelines.RuntimeArtifact.prototype.setType = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.RuntimeArtifact} returns this + */ +proto.ml_pipelines.RuntimeArtifact.prototype.clearType = function() { + return this.setType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.RuntimeArtifact.prototype.hasType = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string uri = 3; + * @return {string} + */ +proto.ml_pipelines.RuntimeArtifact.prototype.getUri = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.RuntimeArtifact} returns this + */ +proto.ml_pipelines.RuntimeArtifact.prototype.setUri = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + +/** + * map<string, Value> properties = 4; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.Value>} + */ +proto.ml_pipelines.RuntimeArtifact.prototype.getPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.Value>} */ ( + jspb.Message.getMapField(this, 4, opt_noLazyCreate, + proto.ml_pipelines.Value)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.RuntimeArtifact} returns this + */ +proto.ml_pipelines.RuntimeArtifact.prototype.clearPropertiesMap = function() { + this.getPropertiesMap().clear(); + return this;}; + + +/** + * map<string, Value> custom_properties = 5; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.Value>} + */ +proto.ml_pipelines.RuntimeArtifact.prototype.getCustomPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.Value>} */ ( + jspb.Message.getMapField(this, 5, opt_noLazyCreate, + proto.ml_pipelines.Value)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.RuntimeArtifact} returns this + */ +proto.ml_pipelines.RuntimeArtifact.prototype.clearCustomPropertiesMap = function() { + this.getCustomPropertiesMap().clear(); + return this;}; + + +/** + * optional google.protobuf.Struct metadata = 6; + * @return {?proto.google.protobuf.Struct} + */ +proto.ml_pipelines.RuntimeArtifact.prototype.getMetadata = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 6)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.ml_pipelines.RuntimeArtifact} returns this +*/ +proto.ml_pipelines.RuntimeArtifact.prototype.setMetadata = function(value) { + return jspb.Message.setWrapperField(this, 6, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.RuntimeArtifact} returns this + */ +proto.ml_pipelines.RuntimeArtifact.prototype.clearMetadata = function() { + return this.setMetadata(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.RuntimeArtifact.prototype.hasMetadata = function() { + return jspb.Message.getField(this, 6) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array<number>} + * @const + */ +proto.ml_pipelines.ArtifactList.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ArtifactList.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ArtifactList.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ArtifactList} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ArtifactList.toObject = function(includeInstance, msg) { + var f, obj = { + artifactsList: jspb.Message.toObjectList(msg.getArtifactsList(), + proto.ml_pipelines.RuntimeArtifact.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ArtifactList} + */ +proto.ml_pipelines.ArtifactList.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ArtifactList; + return proto.ml_pipelines.ArtifactList.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ArtifactList} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ArtifactList} + */ +proto.ml_pipelines.ArtifactList.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.RuntimeArtifact; + reader.readMessage(value,proto.ml_pipelines.RuntimeArtifact.deserializeBinaryFromReader); + msg.addArtifacts(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ArtifactList.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ArtifactList.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ArtifactList} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ArtifactList.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.ml_pipelines.RuntimeArtifact.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated RuntimeArtifact artifacts = 1; + * @return {!Array<!proto.ml_pipelines.RuntimeArtifact>} + */ +proto.ml_pipelines.ArtifactList.prototype.getArtifactsList = function() { + return /** @type{!Array<!proto.ml_pipelines.RuntimeArtifact>} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_pipelines.RuntimeArtifact, 1)); +}; + + +/** + * @param {!Array<!proto.ml_pipelines.RuntimeArtifact>} value + * @return {!proto.ml_pipelines.ArtifactList} returns this +*/ +proto.ml_pipelines.ArtifactList.prototype.setArtifactsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_pipelines.RuntimeArtifact=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_pipelines.RuntimeArtifact} + */ +proto.ml_pipelines.ArtifactList.prototype.addArtifacts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_pipelines.RuntimeArtifact, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_pipelines.ArtifactList} returns this + */ +proto.ml_pipelines.ArtifactList.prototype.clearArtifactsList = function() { + return this.setArtifactsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ExecutorInput.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ExecutorInput.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ExecutorInput} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ExecutorInput.toObject = function(includeInstance, msg) { + var f, obj = { + inputs: (f = msg.getInputs()) && proto.ml_pipelines.ExecutorInput.Inputs.toObject(includeInstance, f), + outputs: (f = msg.getOutputs()) && proto.ml_pipelines.ExecutorInput.Outputs.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ExecutorInput} + */ +proto.ml_pipelines.ExecutorInput.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ExecutorInput; + return proto.ml_pipelines.ExecutorInput.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ExecutorInput} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ExecutorInput} + */ +proto.ml_pipelines.ExecutorInput.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_pipelines.ExecutorInput.Inputs; + reader.readMessage(value,proto.ml_pipelines.ExecutorInput.Inputs.deserializeBinaryFromReader); + msg.setInputs(value); + break; + case 2: + var value = new proto.ml_pipelines.ExecutorInput.Outputs; + reader.readMessage(value,proto.ml_pipelines.ExecutorInput.Outputs.deserializeBinaryFromReader); + msg.setOutputs(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ExecutorInput.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ExecutorInput.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ExecutorInput} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ExecutorInput.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getInputs(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_pipelines.ExecutorInput.Inputs.serializeBinaryToWriter + ); + } + f = message.getOutputs(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_pipelines.ExecutorInput.Outputs.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ExecutorInput.Inputs.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ExecutorInput.Inputs.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ExecutorInput.Inputs} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ExecutorInput.Inputs.toObject = function(includeInstance, msg) { + var f, obj = { + parametersMap: (f = msg.getParametersMap()) ? f.toObject(includeInstance, proto.ml_pipelines.Value.toObject) : [], + artifactsMap: (f = msg.getArtifactsMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ArtifactList.toObject) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ExecutorInput.Inputs} + */ +proto.ml_pipelines.ExecutorInput.Inputs.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ExecutorInput.Inputs; + return proto.ml_pipelines.ExecutorInput.Inputs.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ExecutorInput.Inputs} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ExecutorInput.Inputs} + */ +proto.ml_pipelines.ExecutorInput.Inputs.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getParametersMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.Value.deserializeBinaryFromReader, "", new proto.ml_pipelines.Value()); + }); + break; + case 2: + var value = msg.getArtifactsMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ArtifactList.deserializeBinaryFromReader, "", new proto.ml_pipelines.ArtifactList()); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ExecutorInput.Inputs.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ExecutorInput.Inputs.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ExecutorInput.Inputs} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ExecutorInput.Inputs.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getParametersMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.Value.serializeBinaryToWriter); + } + f = message.getArtifactsMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ArtifactList.serializeBinaryToWriter); + } +}; + + +/** + * map<string, Value> parameters = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.Value>} + */ +proto.ml_pipelines.ExecutorInput.Inputs.prototype.getParametersMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.Value>} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_pipelines.Value)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.ExecutorInput.Inputs} returns this + */ +proto.ml_pipelines.ExecutorInput.Inputs.prototype.clearParametersMap = function() { + this.getParametersMap().clear(); + return this;}; + + +/** + * map<string, ArtifactList> artifacts = 2; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ArtifactList>} + */ +proto.ml_pipelines.ExecutorInput.Inputs.prototype.getArtifactsMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ArtifactList>} */ ( + jspb.Message.getMapField(this, 2, opt_noLazyCreate, + proto.ml_pipelines.ArtifactList)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.ExecutorInput.Inputs} returns this + */ +proto.ml_pipelines.ExecutorInput.Inputs.prototype.clearArtifactsMap = function() { + this.getArtifactsMap().clear(); + return this;}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ExecutorInput.OutputParameter.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ExecutorInput.OutputParameter.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ExecutorInput.OutputParameter} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ExecutorInput.OutputParameter.toObject = function(includeInstance, msg) { + var f, obj = { + outputFile: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ExecutorInput.OutputParameter} + */ +proto.ml_pipelines.ExecutorInput.OutputParameter.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ExecutorInput.OutputParameter; + return proto.ml_pipelines.ExecutorInput.OutputParameter.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ExecutorInput.OutputParameter} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ExecutorInput.OutputParameter} + */ +proto.ml_pipelines.ExecutorInput.OutputParameter.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setOutputFile(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ExecutorInput.OutputParameter.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ExecutorInput.OutputParameter.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ExecutorInput.OutputParameter} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ExecutorInput.OutputParameter.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getOutputFile(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string output_file = 1; + * @return {string} + */ +proto.ml_pipelines.ExecutorInput.OutputParameter.prototype.getOutputFile = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ExecutorInput.OutputParameter} returns this + */ +proto.ml_pipelines.ExecutorInput.OutputParameter.prototype.setOutputFile = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ExecutorInput.Outputs.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ExecutorInput.Outputs.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ExecutorInput.Outputs} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ExecutorInput.Outputs.toObject = function(includeInstance, msg) { + var f, obj = { + parametersMap: (f = msg.getParametersMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ExecutorInput.OutputParameter.toObject) : [], + artifactsMap: (f = msg.getArtifactsMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ArtifactList.toObject) : [], + outputFile: jspb.Message.getFieldWithDefault(msg, 3, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ExecutorInput.Outputs} + */ +proto.ml_pipelines.ExecutorInput.Outputs.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ExecutorInput.Outputs; + return proto.ml_pipelines.ExecutorInput.Outputs.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ExecutorInput.Outputs} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ExecutorInput.Outputs} + */ +proto.ml_pipelines.ExecutorInput.Outputs.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getParametersMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ExecutorInput.OutputParameter.deserializeBinaryFromReader, "", new proto.ml_pipelines.ExecutorInput.OutputParameter()); + }); + break; + case 2: + var value = msg.getArtifactsMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ArtifactList.deserializeBinaryFromReader, "", new proto.ml_pipelines.ArtifactList()); + }); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setOutputFile(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ExecutorInput.Outputs.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ExecutorInput.Outputs.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ExecutorInput.Outputs} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ExecutorInput.Outputs.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getParametersMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ExecutorInput.OutputParameter.serializeBinaryToWriter); + } + f = message.getArtifactsMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ArtifactList.serializeBinaryToWriter); + } + f = message.getOutputFile(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * map<string, OutputParameter> parameters = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ExecutorInput.OutputParameter>} + */ +proto.ml_pipelines.ExecutorInput.Outputs.prototype.getParametersMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ExecutorInput.OutputParameter>} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_pipelines.ExecutorInput.OutputParameter)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.ExecutorInput.Outputs} returns this + */ +proto.ml_pipelines.ExecutorInput.Outputs.prototype.clearParametersMap = function() { + this.getParametersMap().clear(); + return this;}; + + +/** + * map<string, ArtifactList> artifacts = 2; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ArtifactList>} + */ +proto.ml_pipelines.ExecutorInput.Outputs.prototype.getArtifactsMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ArtifactList>} */ ( + jspb.Message.getMapField(this, 2, opt_noLazyCreate, + proto.ml_pipelines.ArtifactList)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.ExecutorInput.Outputs} returns this + */ +proto.ml_pipelines.ExecutorInput.Outputs.prototype.clearArtifactsMap = function() { + this.getArtifactsMap().clear(); + return this;}; + + +/** + * optional string output_file = 3; + * @return {string} + */ +proto.ml_pipelines.ExecutorInput.Outputs.prototype.getOutputFile = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.ExecutorInput.Outputs} returns this + */ +proto.ml_pipelines.ExecutorInput.Outputs.prototype.setOutputFile = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + +/** + * optional Inputs inputs = 1; + * @return {?proto.ml_pipelines.ExecutorInput.Inputs} + */ +proto.ml_pipelines.ExecutorInput.prototype.getInputs = function() { + return /** @type{?proto.ml_pipelines.ExecutorInput.Inputs} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ExecutorInput.Inputs, 1)); +}; + + +/** + * @param {?proto.ml_pipelines.ExecutorInput.Inputs|undefined} value + * @return {!proto.ml_pipelines.ExecutorInput} returns this +*/ +proto.ml_pipelines.ExecutorInput.prototype.setInputs = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.ExecutorInput} returns this + */ +proto.ml_pipelines.ExecutorInput.prototype.clearInputs = function() { + return this.setInputs(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ExecutorInput.prototype.hasInputs = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional Outputs outputs = 2; + * @return {?proto.ml_pipelines.ExecutorInput.Outputs} + */ +proto.ml_pipelines.ExecutorInput.prototype.getOutputs = function() { + return /** @type{?proto.ml_pipelines.ExecutorInput.Outputs} */ ( + jspb.Message.getWrapperField(this, proto.ml_pipelines.ExecutorInput.Outputs, 2)); +}; + + +/** + * @param {?proto.ml_pipelines.ExecutorInput.Outputs|undefined} value + * @return {!proto.ml_pipelines.ExecutorInput} returns this +*/ +proto.ml_pipelines.ExecutorInput.prototype.setOutputs = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.ExecutorInput} returns this + */ +proto.ml_pipelines.ExecutorInput.prototype.clearOutputs = function() { + return this.setOutputs(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.ExecutorInput.prototype.hasOutputs = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.ExecutorOutput.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.ExecutorOutput.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.ExecutorOutput} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ExecutorOutput.toObject = function(includeInstance, msg) { + var f, obj = { + parametersMap: (f = msg.getParametersMap()) ? f.toObject(includeInstance, proto.ml_pipelines.Value.toObject) : [], + artifactsMap: (f = msg.getArtifactsMap()) ? f.toObject(includeInstance, proto.ml_pipelines.ArtifactList.toObject) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.ExecutorOutput} + */ +proto.ml_pipelines.ExecutorOutput.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.ExecutorOutput; + return proto.ml_pipelines.ExecutorOutput.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.ExecutorOutput} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.ExecutorOutput} + */ +proto.ml_pipelines.ExecutorOutput.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getParametersMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.Value.deserializeBinaryFromReader, "", new proto.ml_pipelines.Value()); + }); + break; + case 2: + var value = msg.getArtifactsMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_pipelines.ArtifactList.deserializeBinaryFromReader, "", new proto.ml_pipelines.ArtifactList()); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.ExecutorOutput.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.ExecutorOutput.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.ExecutorOutput} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.ExecutorOutput.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getParametersMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.Value.serializeBinaryToWriter); + } + f = message.getArtifactsMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_pipelines.ArtifactList.serializeBinaryToWriter); + } +}; + + +/** + * map<string, Value> parameters = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.Value>} + */ +proto.ml_pipelines.ExecutorOutput.prototype.getParametersMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.Value>} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_pipelines.Value)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.ExecutorOutput} returns this + */ +proto.ml_pipelines.ExecutorOutput.prototype.clearParametersMap = function() { + this.getParametersMap().clear(); + return this;}; + + +/** + * map<string, ArtifactList> artifacts = 2; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map<string,!proto.ml_pipelines.ArtifactList>} + */ +proto.ml_pipelines.ExecutorOutput.prototype.getArtifactsMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map<string,!proto.ml_pipelines.ArtifactList>} */ ( + jspb.Message.getMapField(this, 2, opt_noLazyCreate, + proto.ml_pipelines.ArtifactList)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_pipelines.ExecutorOutput} returns this + */ +proto.ml_pipelines.ExecutorOutput.prototype.clearArtifactsMap = function() { + this.getArtifactsMap().clear(); + return this;}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineTaskFinalStatus.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineTaskFinalStatus.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineTaskFinalStatus} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineTaskFinalStatus.toObject = function(includeInstance, msg) { + var f, obj = { + state: jspb.Message.getFieldWithDefault(msg, 1, ""), + error: (f = msg.getError()) && google_rpc_status_pb.Status.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineTaskFinalStatus} + */ +proto.ml_pipelines.PipelineTaskFinalStatus.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineTaskFinalStatus; + return proto.ml_pipelines.PipelineTaskFinalStatus.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineTaskFinalStatus} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineTaskFinalStatus} + */ +proto.ml_pipelines.PipelineTaskFinalStatus.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setState(value); + break; + case 2: + var value = new google_rpc_status_pb.Status; + reader.readMessage(value,google_rpc_status_pb.Status.deserializeBinaryFromReader); + msg.setError(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineTaskFinalStatus.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineTaskFinalStatus.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineTaskFinalStatus} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineTaskFinalStatus.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getState(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getError(); + if (f != null) { + writer.writeMessage( + 2, + f, + google_rpc_status_pb.Status.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string state = 1; + * @return {string} + */ +proto.ml_pipelines.PipelineTaskFinalStatus.prototype.getState = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_pipelines.PipelineTaskFinalStatus} returns this + */ +proto.ml_pipelines.PipelineTaskFinalStatus.prototype.setState = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional google.rpc.Status error = 2; + * @return {?proto.google.rpc.Status} + */ +proto.ml_pipelines.PipelineTaskFinalStatus.prototype.getError = function() { + return /** @type{?proto.google.rpc.Status} */ ( + jspb.Message.getWrapperField(this, google_rpc_status_pb.Status, 2)); +}; + + +/** + * @param {?proto.google.rpc.Status|undefined} value + * @return {!proto.ml_pipelines.PipelineTaskFinalStatus} returns this +*/ +proto.ml_pipelines.PipelineTaskFinalStatus.prototype.setError = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_pipelines.PipelineTaskFinalStatus} returns this + */ +proto.ml_pipelines.PipelineTaskFinalStatus.prototype.clearError = function() { + return this.setError(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_pipelines.PipelineTaskFinalStatus.prototype.hasError = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_pipelines.PipelineStateEnum.prototype.toObject = function(opt_includeInstance) { + return proto.ml_pipelines.PipelineStateEnum.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_pipelines.PipelineStateEnum} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineStateEnum.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_pipelines.PipelineStateEnum} + */ +proto.ml_pipelines.PipelineStateEnum.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_pipelines.PipelineStateEnum; + return proto.ml_pipelines.PipelineStateEnum.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_pipelines.PipelineStateEnum} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_pipelines.PipelineStateEnum} + */ +proto.ml_pipelines.PipelineStateEnum.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_pipelines.PipelineStateEnum.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_pipelines.PipelineStateEnum.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_pipelines.PipelineStateEnum} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_pipelines.PipelineStateEnum.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + +/** + * @enum {number} + */ +proto.ml_pipelines.PipelineStateEnum.PipelineTaskState = { + TASK_STATE_UNSPECIFIED: 0, + PENDING: 1, + RUNNING_DRIVER: 2, + DRIVER_SUCCEEDED: 3, + RUNNING_EXECUTOR: 4, + SUCCEEDED: 5, + CANCEL_PENDING: 6, + CANCELLING: 7, + CANCELLED: 8, + FAILED: 9, + SKIPPED: 10, + QUEUED: 11, + NOT_TRIGGERED: 12, + UNSCHEDULABLE: 13 +}; + +goog.object.extend(exports, proto.ml_pipelines); diff --git a/frontend/src/icons/experiments.tsx b/frontend/src/icons/experiments.tsx index 23933acd8f..82bd14cc15 100644 --- a/frontend/src/icons/experiments.tsx +++ b/frontend/src/icons/experiments.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/icons/kubeflowLogo.tsx b/frontend/src/icons/kubeflowLogo.tsx index f8fbc1e9d1..a1a3cdc969 100644 --- a/frontend/src/icons/kubeflowLogo.tsx +++ b/frontend/src/icons/kubeflowLogo.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/icons/pipelines.tsx b/frontend/src/icons/pipelines.tsx index 2fabcb53ae..ec4e68ba87 100644 --- a/frontend/src/icons/pipelines.tsx +++ b/frontend/src/icons/pipelines.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/icons/statusCached.tsx b/frontend/src/icons/statusCached.tsx index d848a1abed..230e59af07 100644 --- a/frontend/src/icons/statusCached.tsx +++ b/frontend/src/icons/statusCached.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2020 Google LLC + * Copyright 2020 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/icons/statusRunning.tsx b/frontend/src/icons/statusRunning.tsx index 3c2a9b8b80..bcf9e7d63b 100644 --- a/frontend/src/icons/statusRunning.tsx +++ b/frontend/src/icons/statusRunning.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/icons/statusTerminated.tsx b/frontend/src/icons/statusTerminated.tsx index 33f9e3595d..90ffe435a9 100644 --- a/frontend/src/icons/statusTerminated.tsx +++ b/frontend/src/icons/statusTerminated.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx index 9236a930a2..d7b032bfbd 100644 --- a/frontend/src/index.tsx +++ b/frontend/src/index.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,21 +14,25 @@ * limitations under the License. */ -import { - init as initKfClient, - NamespaceContextProvider, - NamespaceContext, -} from './lib/KubeflowClient'; -import './CSSReset'; +import 'src/build/tailwind.output.css'; +import MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider'; import * as React from 'react'; import * as ReactDOM from 'react-dom'; -import MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider'; -import Router from './components/Router'; -import { cssRule } from 'typestyle'; -import { theme, fonts } from './Css'; +import { QueryClient, QueryClientProvider } from 'react-query'; import { HashRouter } from 'react-router-dom'; -import { KFP_FLAGS, Deployments } from './lib/Flags'; +import { cssRule } from 'typestyle'; +import Router from './components/Router'; +import { fonts, theme } from './Css'; +import './CSSReset'; +import { initFeatures } from './features'; +import { Deployments, KFP_FLAGS } from './lib/Flags'; import { GkeMetadataProvider } from './lib/GkeMetadata'; +import { + init as initKfClient, + NamespaceContext, + NamespaceContextProvider, +} from './lib/KubeflowClient'; +// import { ReactQueryDevtools } from 'react-query/devtools'; // TODO: license headers @@ -46,14 +50,20 @@ cssRule('html, body, #root', { width: '100%', }); +initFeatures(); + +export const queryClient = new QueryClient(); const app = ( - <MuiThemeProvider theme={theme}> - <GkeMetadataProvider> - <HashRouter> - <Router /> - </HashRouter> - </GkeMetadataProvider> - </MuiThemeProvider> + <QueryClientProvider client={queryClient}> + <MuiThemeProvider theme={theme}> + <GkeMetadataProvider> + <HashRouter> + <Router /> + </HashRouter> + </GkeMetadataProvider> + </MuiThemeProvider> + {/* <ReactQueryDevtools initialIsOpen={false} /> */} + </QueryClientProvider> ); ReactDOM.render( KFP_FLAGS.DEPLOYMENT === Deployments.KUBEFLOW ? ( diff --git a/frontend/src/lib/Apis.test.ts b/frontend/src/lib/Apis.test.ts index 3cf21ce5fb..e080c3a91f 100644 --- a/frontend/src/lib/Apis.test.ts +++ b/frontend/src/lib/Apis.test.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -154,42 +154,121 @@ describe('Apis', () => { ); }); - it('buildArtifactUrl', () => { + it('buildArtifactLinkText', () => { expect( - Apis.buildArtifactUrl({ + Apis.buildArtifactLinkText({ bucket: 'testbucket', key: 'testkey', source: StorageService.GCS, }), - ).toEqual('gcs://testbucket/testkey'); + ).toEqual('gs://testbucket/testkey'); }); it('getTensorboardApp', async () => { const spy = fetchSpy( - JSON.stringify({ podAddress: 'http://some/address', tfVersion: '1.14.0' }), + JSON.stringify({ + podAddress: 'http://some/address', + tfVersion: '1.14.0', + image: 'tensorflow/tensorflow:1.14.0', + }), ); const tensorboardInstance = await Apis.getTensorboardApp('gs://log/dir', 'test-ns'); - expect(tensorboardInstance).toEqual({ podAddress: 'http://some/address', tfVersion: '1.14.0' }); + expect(tensorboardInstance).toEqual({ + podAddress: 'http://some/address', + tfVersion: '1.14.0', + image: 'tensorflow/tensorflow:1.14.0', + }); expect(spy).toHaveBeenCalledWith( `apps/tensorboard?logdir=${encodeURIComponent('gs://log/dir')}&namespace=test-ns`, { credentials: 'same-origin' }, ); }); - it('startTensorboardApp', async () => { - const spy = fetchSpy('http://some/address'); - await Apis.startTensorboardApp('gs://log/dir', '1.14.0', 'test-ns'); - expect(spy).toHaveBeenCalledWith( - 'apps/tensorboard?logdir=' + - encodeURIComponent('gs://log/dir') + - '&tfversion=1.14.0' + - '&namespace=test-ns', - { - credentials: 'same-origin', - headers: { 'content-type': 'application/json' }, - method: 'POST', - }, - ); + describe('startTensorboardApp', () => { + const defaultArgs = { + logdir: 'gs://log/dir', + image: 'tensorflow/tensorflow:1.14.0', + namespace: 'test-ns', + }; + it('starts tensorboard app', async () => { + const spy = fetchSpy('http://some/address'); + await Apis.startTensorboardApp(defaultArgs); + expect(spy).toHaveBeenCalledWith( + 'apps/tensorboard?logdir=' + + encodeURIComponent(defaultArgs.logdir) + + '&namespace=' + + defaultArgs.namespace + + '&image=' + + encodeURIComponent(defaultArgs.image), + { + credentials: 'same-origin', + headers: { 'content-type': 'application/json' }, + method: 'POST', + }, + ); + }); + it('encodes podTemplateSpec as JSON in arg', async () => { + const spy = fetchSpy('http://some/address'); + const args = { + ...defaultArgs, + podTemplateSpec: { + spec: { + containers: [ + { + env: [ + { + name: 'AWS_ACCESS_KEY_ID', + valueFrom: { + secretKeyRef: { + name: 'mlpipeline-minio-artifact', + key: 'accesskey', + }, + }, + }, + { + name: 'AWS_SECRET_ACCESS_KEY', + valueFrom: { + secretKeyRef: { + name: 'mlpipeline-minio-artifact', + key: 'secretkey', + }, + }, + }, + { + name: 'AWS_REGION', + value: 'minio', + }, + { + name: 'S3_ENDPOINT', + value: 'http://minio-service:9000', + }, + { + name: 'S3_USE_HTTPS', + value: '0', + }, + { + name: 'S3_VERIFY_SSL', + value: '0', + }, + ], + }, + ], + }, + }, + }; + await Apis.startTensorboardApp(args); + expect(spy).toHaveBeenCalledWith( + 'apps/tensorboard?logdir=' + + encodeURIComponent(args.logdir) + + '&namespace=' + + args.namespace + + '&image=' + + encodeURIComponent(args.image) + + '&podtemplatespec=' + + encodeURIComponent(JSON.stringify(args.podTemplateSpec)), + expect.anything(), + ); + }); }); it('deleteTensorboardApp', async () => { diff --git a/frontend/src/lib/Apis.ts b/frontend/src/lib/Apis.ts index a67df3a3c3..748b3770d5 100644 --- a/frontend/src/lib/Apis.ts +++ b/frontend/src/lib/Apis.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,8 +21,8 @@ import { ApiVisualization, VisualizationServiceApi } from '../apis/visualization import { HTMLViewerConfig } from '../components/viewers/HTMLViewer'; import { PlotType } from '../components/viewers/Viewer'; import * as Utils from './Utils'; -import { StoragePath } from './WorkflowParser'; import { buildQuery } from './Utils'; +import { StoragePath, StorageService } from './WorkflowParser'; const v1beta1Prefix = 'apis/v1beta1'; @@ -251,9 +251,13 @@ export class Apis { * @param param.bucket name of the bucket with the artifact (or host for http/https) * @param param.key key (i.e. path) of the artifact in the bucket */ - public static buildArtifactUrl({ source, bucket, key }: StoragePath) { + public static buildArtifactLinkText({ source, bucket, key }: StoragePath) { // TODO see https://github.com/kubeflow/pipelines/pull/3725 - return `${source}://${bucket}/${key}`; + let platform: string = source; + if (source === StorageService.GCS) { + platform = 'gs'; // GCS link starts with gs:// + } + return `${platform}://${bucket}/${key}`; } /** @@ -262,26 +266,33 @@ export class Apis { public static getTensorboardApp( logdir: string, namespace: string, - ): Promise<{ podAddress: string; tfVersion: string }> { - return this._fetchAndParse<{ podAddress: string; tfVersion: string }>( - `apps/tensorboard?logdir=${encodeURIComponent(logdir)}&namespace=${encodeURIComponent( - namespace, - )}`, + ): Promise<{ podAddress: string; tfVersion: string; image: string }> { + return this._fetchAndParse<{ podAddress: string; tfVersion: string; image: string }>( + `apps/tensorboard${buildQuery({ logdir, namespace })}`, ); } /** - * Starts a deployment and service for Tensorboard given the logdir + * Starts a deployment and service for Tensorboard given the logdir. */ - public static startTensorboardApp( - logdir: string, - tfversion: string, - namespace: string, - ): Promise<string> { + public static startTensorboardApp({ + logdir, + namespace, + image, + podTemplateSpec, + }: { + logdir: string; + namespace: string; + image?: string; + podTemplateSpec?: any; + }): Promise<string> { return this._fetch( - `apps/tensorboard?logdir=${encodeURIComponent(logdir)}&tfversion=${encodeURIComponent( - tfversion, - )}&namespace=${encodeURIComponent(namespace)}`, + `apps/tensorboard${buildQuery({ + logdir, + namespace, + image, + podtemplatespec: podTemplateSpec && JSON.stringify(podTemplateSpec), + })}`, undefined, undefined, { headers: { 'content-type': 'application/json' }, method: 'POST' }, diff --git a/frontend/src/lib/AwsHelper.test.ts b/frontend/src/lib/AwsHelper.test.ts index 6093c99b09..93248cfc0d 100644 --- a/frontend/src/lib/AwsHelper.test.ts +++ b/frontend/src/lib/AwsHelper.test.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018-2019 Google LLC + * Copyright 2018-2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/AwsHelper.ts b/frontend/src/lib/AwsHelper.ts index 3d14744e24..d81177c2da 100644 --- a/frontend/src/lib/AwsHelper.ts +++ b/frontend/src/lib/AwsHelper.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018-2019 Google LLC + * Copyright 2018-2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/Buttons.ts b/frontend/src/lib/Buttons.ts index bed6affa54..df7b5c2671 100644 --- a/frontend/src/lib/Buttons.ts +++ b/frontend/src/lib/Buttons.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -658,12 +658,10 @@ export default class Buttons { } private _createNewRun(isRecurring: boolean, experimentId?: string): void { - const searchString = this._urlParser.build( - Object.assign( - { [QUERY_PARAMS.experimentId]: experimentId || '' }, - isRecurring ? { [QUERY_PARAMS.isRecurring]: '1' } : {}, - ), - ); + const searchString = this._urlParser.build({ + [QUERY_PARAMS.experimentId]: experimentId || '', + ...(isRecurring ? { [QUERY_PARAMS.isRecurring]: '1' } : {}), + }); this._props.history.push(RoutePage.NEW_RUN + searchString); } diff --git a/frontend/src/lib/CompareUtils.test.ts b/frontend/src/lib/CompareUtils.test.ts index ad8acd9129..cb7a4571b9 100644 --- a/frontend/src/lib/CompareUtils.test.ts +++ b/frontend/src/lib/CompareUtils.test.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/CompareUtils.ts b/frontend/src/lib/CompareUtils.ts index fed6e6fd60..b32ad4969d 100644 --- a/frontend/src/lib/CompareUtils.ts +++ b/frontend/src/lib/CompareUtils.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/Constants.ts b/frontend/src/lib/Constants.ts index 70aabe43d8..0dc957f777 100644 --- a/frontend/src/lib/Constants.ts +++ b/frontend/src/lib/Constants.ts @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/Flags.ts b/frontend/src/lib/Flags.ts index 5555f25836..730b535a9f 100644 --- a/frontend/src/lib/Flags.ts +++ b/frontend/src/lib/Flags.ts @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/GkeMetadata.tsx b/frontend/src/lib/GkeMetadata.tsx index b82ec918e3..3d2ccda338 100644 --- a/frontend/src/lib/GkeMetadata.tsx +++ b/frontend/src/lib/GkeMetadata.tsx @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/KubeflowClient.tsx b/frontend/src/lib/KubeflowClient.tsx index 7cf4d9b4ea..8e5573bf86 100644 --- a/frontend/src/lib/KubeflowClient.tsx +++ b/frontend/src/lib/KubeflowClient.tsx @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/LocalStorage.ts b/frontend/src/lib/LocalStorage.ts index b27f662ea2..0b53dd2510 100644 --- a/frontend/src/lib/LocalStorage.ts +++ b/frontend/src/lib/LocalStorage.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/MetricUtils.test.ts b/frontend/src/lib/MetricUtils.test.ts index a915b3398d..18ee82beb0 100644 --- a/frontend/src/lib/MetricUtils.test.ts +++ b/frontend/src/lib/MetricUtils.test.ts @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/MetricUtils.ts b/frontend/src/lib/MetricUtils.ts index 00f80f81bd..692631d757 100644 --- a/frontend/src/lib/MetricUtils.ts +++ b/frontend/src/lib/MetricUtils.ts @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,6 +28,8 @@ function getMetricDisplayString(metric?: ApiRunMetric, decimalPlaces = 3): strin return metric.number_value.toFixed(decimalPlaces); } -export default { +const MetricUtils = { getMetricDisplayString, }; + +export default MetricUtils; diff --git a/frontend/src/lib/MlmdUtils.test.ts b/frontend/src/lib/MlmdUtils.test.ts deleted file mode 100644 index bfa06c2a0f..0000000000 --- a/frontend/src/lib/MlmdUtils.test.ts +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - Api, - Context, - GetContextByTypeAndNameRequest, - GetContextByTypeAndNameResponse, -} from '@kubeflow/frontend'; -import { expectWarnings, testBestPractices } from 'src/TestUtils'; -import { Workflow, WorkflowSpec, WorkflowStatus } from 'third_party/argo-ui/argo_template'; -import { getRunContext } from './MlmdUtils'; - -testBestPractices(); - -const WORKFLOW_NAME = 'run-st448'; -const WORKFLOW_EMPTY: Workflow = { - metadata: { - name: WORKFLOW_NAME, - }, - // there are many unrelated fields here, omit them - spec: {} as WorkflowSpec, - status: {} as WorkflowStatus, -}; - -const V2_CONTEXT = new Context(); -V2_CONTEXT.setName(WORKFLOW_NAME); -V2_CONTEXT.setType('kfp.PipelineRun'); - -const TFX_CONTEXT = new Context(); -TFX_CONTEXT.setName('run.run-st448'); -TFX_CONTEXT.setType('run'); - -const V1_CONTEXT = new Context(); -V1_CONTEXT.setName(WORKFLOW_NAME); -V1_CONTEXT.setType('KfpRun'); - -describe('MlmdUtils', () => { - describe('getRunContext', () => { - it('gets KFP v2 context', async () => { - mockGetContextByTypeAndName([V2_CONTEXT]); - const context = await getRunContext({ - ...WORKFLOW_EMPTY, - metadata: { - ...WORKFLOW_EMPTY.metadata, - annotations: { 'pipelines.kubeflow.org/v2_pipeline': 'true' }, - }, - }); - expect(context).toEqual(V2_CONTEXT); - }); - - it('gets TFX context', async () => { - mockGetContextByTypeAndName([TFX_CONTEXT, V1_CONTEXT]); - const context = await getRunContext(WORKFLOW_EMPTY); - expect(context).toEqual(TFX_CONTEXT); - }); - - it('gets KFP v1 context', async () => { - const verify = expectWarnings(); - mockGetContextByTypeAndName([V1_CONTEXT]); - const context = await getRunContext(WORKFLOW_EMPTY); - expect(context).toEqual(V1_CONTEXT); - verify(); - }); - - it('throws error when not found', async () => { - const verify = expectWarnings(); - mockGetContextByTypeAndName([]); - await expect(getRunContext(WORKFLOW_EMPTY)).rejects.toThrow(); - verify(); - }); - }); -}); - -function mockGetContextByTypeAndName(contexts: Context[]) { - const getContextByTypeAndNameSpy = jest.spyOn( - Api.getInstance().metadataStoreService, - 'getContextByTypeAndName', - ); - getContextByTypeAndNameSpy.mockImplementation((req: GetContextByTypeAndNameRequest) => { - const response = new GetContextByTypeAndNameResponse(); - const found = contexts.find( - context => - context.getType() === req.getTypeName() && context.getName() === req.getContextName(), - ); - response.setContext(found); - return response; - }); -} diff --git a/frontend/src/lib/MlmdUtils.ts b/frontend/src/lib/MlmdUtils.ts deleted file mode 100644 index a61f9480c2..0000000000 --- a/frontend/src/lib/MlmdUtils.ts +++ /dev/null @@ -1,151 +0,0 @@ -/** - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - Api, - Context, - Execution, - ExecutionCustomProperties, - getResourcePropertyViaFallBack, - ExecutionProperties, - getResourceProperty, -} from '@kubeflow/frontend'; -import { - GetContextByTypeAndNameRequest, - GetExecutionsByContextRequest, -} from '@kubeflow/frontend/src/mlmd/generated/ml_metadata/proto/metadata_store_service_pb'; -import { Workflow } from 'third_party/argo-ui/argo_template'; -import { logger } from './Utils'; - -async function getContext({ type, name }: { type: string; name: string }): Promise<Context> { - if (type === '') { - throw new Error('Failed to getContext: type is empty.'); - } - if (name === '') { - throw new Error('Failed to getContext: name is empty.'); - } - const request = new GetContextByTypeAndNameRequest(); - request.setTypeName(type); - request.setContextName(name); - try { - const res = await Api.getInstance().metadataStoreService.getContextByTypeAndName(request); - const context = res.getContext(); - if (context == null) { - throw new Error('Cannot find specified context'); - } - return context; - } catch (err) { - err.message = `Cannot find context with ${JSON.stringify(request.toObject())}: ` + err.message; - throw err; - } -} - -/** - * @throws error when network error, or not found - */ -async function getTfxRunContext(argoWorkflowName: string): Promise<Context> { - // argoPodName has the general form "pipelineName-workflowId-executionId". - // All components of a pipeline within a single run will have the same - // "pipelineName-workflowId" prefix. - const pipelineName = argoWorkflowName - .split('-') - .slice(0, -1) - .join('_'); - const runID = argoWorkflowName; - // An example run context name is parameterized_tfx_oss.parameterized-tfx-oss-4rq5v. - const tfxRunContextName = `${pipelineName}.${runID}`; - return await getContext({ name: tfxRunContextName, type: 'run' }); -} - -/** - * @throws error when network error, or not found - */ -async function getKfpRunContext(argoWorkflowName: string): Promise<Context> { - return await getContext({ name: argoWorkflowName, type: 'KfpRun' }); -} - -async function getKfpV2RunContext(argoWorkflowName: string): Promise<Context> { - return await getContext({ name: argoWorkflowName, type: 'kfp.PipelineRun' }); -} - -export async function getRunContext(workflow: Workflow): Promise<Context> { - const workflowName = workflow?.metadata?.name || ''; - if (workflow?.metadata?.annotations?.['pipelines.kubeflow.org/v2_pipeline'] === 'true') { - return await getKfpV2RunContext(workflowName); - } - try { - return await getTfxRunContext(workflowName); - } catch (err) { - logger.warn(`Cannot find tfx run context (this is expected for non tfx runs)`, err); - return await getKfpRunContext(workflowName); - } -} - -/** - * @throws error when network error - */ -export async function getExecutionsFromContext(context: Context): Promise<Execution[]> { - const request = new GetExecutionsByContextRequest(); - request.setContextId(context.getId()); - try { - const res = await Api.getInstance().metadataStoreService.getExecutionsByContext(request); - const list = res.getExecutionsList(); - if (list == null) { - throw new Error('response.getExecutionsList() is empty'); - } - return list; - } catch (err) { - err.message = - `Cannot find executions by context ${context.getId()} with name ${context.getName()}: ` + - err.message; - throw err; - } -} - -export enum KfpExecutionProperties { - KFP_POD_NAME = 'kfp_pod_name', -} - -const EXECUTION_PROPERTY_REPOS = [ExecutionProperties, ExecutionCustomProperties]; - -export const ExecutionHelpers = { - getWorkspace(execution: Execution): string | number | undefined { - return ( - getResourcePropertyViaFallBack(execution, EXECUTION_PROPERTY_REPOS, ['RUN_ID']) || - getResourceProperty(execution, ExecutionCustomProperties.WORKSPACE, true) || - getResourceProperty(execution, ExecutionProperties.PIPELINE_NAME) || - undefined - ); - }, - getName(execution: Execution): string | number | undefined { - return ( - getResourceProperty(execution, ExecutionProperties.NAME) || - getResourceProperty(execution, ExecutionProperties.COMPONENT_ID) || - getResourceProperty(execution, ExecutionCustomProperties.TASK_ID, true) || - undefined - ); - }, - getState(execution: Execution): string | number | undefined { - return getResourceProperty(execution, ExecutionProperties.STATE) || undefined; - }, - getKfpPod(execution: Execution): string | number | undefined { - return ( - getResourceProperty(execution, KfpExecutionProperties.KFP_POD_NAME) || - getResourceProperty(execution, KfpExecutionProperties.KFP_POD_NAME, true) || - undefined - ); - }, -}; diff --git a/frontend/src/lib/OutputArtifactLoader.test.ts b/frontend/src/lib/OutputArtifactLoader.test.ts index 1c97324383..69d6f7d23c 100644 --- a/frontend/src/lib/OutputArtifactLoader.test.ts +++ b/frontend/src/lib/OutputArtifactLoader.test.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,32 +14,35 @@ * limitations under the License. */ -import { Apis } from '../lib/Apis'; import { ConfusionMatrixConfig } from '../components/viewers/ConfusionMatrix'; import { HTMLViewerConfig } from '../components/viewers/HTMLViewer'; import { MarkdownViewerConfig } from '../components/viewers/MarkdownViewer'; -import { OutputArtifactLoader, TEST_ONLY } from './OutputArtifactLoader'; import { PagedTableConfig } from '../components/viewers/PagedTable'; -import { PlotType } from '../components/viewers/Viewer'; import { ROCCurveConfig } from '../components/viewers/ROCCurve'; -import { StoragePath, StorageService } from './WorkflowParser'; import { TensorboardViewerConfig } from '../components/viewers/Tensorboard'; +import { PlotType } from '../components/viewers/Viewer'; +import { Apis } from '../lib/Apis'; +import { OutputArtifactLoader, TEST_ONLY } from './OutputArtifactLoader'; +import { StoragePath, StorageService } from './WorkflowParser'; -beforeEach(() => { - jest.clearAllMocks(); +beforeEach(async () => { + jest.resetAllMocks(); }); describe('OutputArtifactLoader', () => { const storagePath: StoragePath = { bucket: 'b', key: 'k', source: StorageService.GCS }; - const consoleSpy = jest.spyOn(console, 'error').mockImplementation(() => null); + const consoleSpy = jest.spyOn(console, 'error'); let fileToRead: string; - const readFileSpy = jest - .spyOn(Apis, 'readFile') - .mockImplementation(() => Promise.resolve(fileToRead)); - // Mocked in tests, because we test namespace separately. - const getSourceContent = jest.fn(async (source, storage) => - TEST_ONLY.readSourceContent(source, storage, /* namespace */ undefined), - ); + const readFileSpy = jest.spyOn(Apis, 'readFile'); + let getSourceContent: jest.Mock; + beforeEach(() => { + consoleSpy.mockImplementation(() => null); + readFileSpy.mockImplementation(() => Promise.resolve(fileToRead)); + // Mocked in tests, because we test namespace separately. + getSourceContent = jest.fn(async (source, storage) => + TEST_ONLY.readSourceContent(source, storage, /* namespace */ undefined), + ); + }); describe('loadOutputArtifacts', () => { it('handles bad API call', async () => { diff --git a/frontend/src/lib/OutputArtifactLoader.ts b/frontend/src/lib/OutputArtifactLoader.ts index c41cd562c9..c29a349fd7 100644 --- a/frontend/src/lib/OutputArtifactLoader.ts +++ b/frontend/src/lib/OutputArtifactLoader.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,20 +14,8 @@ * limitations under the License. */ -import { - Api, - Artifact, - ArtifactType, - Event, - Execution, - GetArtifactsByIDRequest, - GetArtifactsByIDResponse, - GetArtifactTypesRequest, - GetArtifactTypesResponse, - GetEventsByExecutionIDsRequest, - GetEventsByExecutionIDsResponse, -} from '@kubeflow/frontend'; import { csvParseRows } from 'd3-dsv'; +import { Artifact, ArtifactType, Execution } from 'src/third_party/mlmd'; import { ApiVisualization, ApiVisualizationType } from '../apis/visualization'; import { ConfusionMatrixConfig } from '../components/viewers/ConfusionMatrix'; import { HTMLViewerConfig } from '../components/viewers/HTMLViewer'; @@ -37,9 +25,13 @@ import { ROCCurveConfig } from '../components/viewers/ROCCurve'; import { TensorboardViewerConfig } from '../components/viewers/Tensorboard'; import { PlotType, ViewerConfig } from '../components/viewers/Viewer'; import { Apis } from '../lib/Apis'; +import { + filterArtifactsByType, + getArtifactTypes, + getOutputArtifactsInExecution, +} from 'src/mlmd/MlmdUtils'; import { errorToMessage, logger } from './Utils'; import WorkflowParser, { StoragePath } from './WorkflowParser'; - export interface PlotMetadata { format?: 'csv'; header?: string[]; @@ -49,6 +41,8 @@ export interface PlotMetadata { source: string; storage?: 'gcs' | 'inline'; target_col?: string; + pod_template_spec?: any; // only available for tensorboard + image?: string; // only available for tensorboard type: PlotType; } @@ -67,13 +61,20 @@ export class OutputArtifactLoader { const metadataFile = await Apis.readFile(outputPath, namespace); if (metadataFile) { try { - plotMetadataList = (JSON.parse(metadataFile) as OutputMetadata).outputs; - if (plotMetadataList === undefined) { - throw new Error('"outputs" field required by not found on metadata file'); - } + plotMetadataList = OutputArtifactLoader.parseOutputMetadataInJson( + metadataFile, + outputPath.key, + ); } catch (e) { - logger.error(`Could not parse metadata file at: ${outputPath.key}. Error: ${e}`); - return []; + // This is a hack which only works on scenario for html/tensorboard, but not markdown. + // Because podTemplateSpec is escaped twice before writing to file. There are '\' before + // each `"` in podTemplateSpec. + // https://github.com/kubeflow/pipelines/issues/5830 + const editMetadataFile = metadataFile.replace(/(\r\n|\n|\r|\\)/gm, ''); + plotMetadataList = OutputArtifactLoader.parseOutputMetadataInJson( + editMetadataFile, + outputPath.key, + ); } } } catch (err) { @@ -110,6 +111,20 @@ export class OutputArtifactLoader { return configs.filter(c => !!c) as ViewerConfig[]; } + private static parseOutputMetadataInJson(fileContent: string, key: string): PlotMetadata[] { + let plotMetadataList: PlotMetadata[] = []; + try { + plotMetadataList = (JSON.parse(fileContent) as OutputMetadata).outputs; + if (plotMetadataList === undefined) { + throw new Error('"outputs" field required by not found on metadata file'); + } + } catch (e) { + logger.error(`Could not parse metadata file at: ${key}. Error: ${e}`); + throw new Error(`Could not parse metadata file at: ${key}. Error: ${e}`); + } + return plotMetadataList; + } + public static async buildConfusionMatrixConfig( metadata: PlotMetadataContent, getSourceContent: SourceContentGetter, @@ -213,6 +228,8 @@ export class OutputArtifactLoader { type: PlotType.TENSORBOARD, url: metadata.source, namespace, + podTemplateSpec: metadata.pod_template_spec, + image: metadata.image, }; } @@ -274,11 +291,23 @@ export class OutputArtifactLoader { artifacts, ); exampleStatisticsArtifactUris.forEach(uri => { - const evalUri = uri + '/eval/stats_tfrecord'; - const trainUri = uri + '/train/stats_tfrecord'; + // TFX Statistics has changed to different paths since TFX 1.0.0. + // https://github.com/tensorflow/tfx/issues/3933 + const evalUri = uri + '/Split-eval'; + const trainUri = uri + '/Split-train'; viewers = viewers.concat( [evalUri, trainUri].map(async specificUri => { - return buildArtifactViewerTfdvStatistics(specificUri, namespace); + const script = [ + 'import tensorflow_data_validation as tfdv', + 'import os', + 'import tensorflow as tf', + `files = tf.io.gfile.listdir('${specificUri}')`, + `filename = os.path.dirname(os.path.join(files[0], ''))`, + `filePath = os.path.join('${specificUri}', filename)`, + 'stats = tfdv.load_stats_binary(filePath)', + 'tfdv.visualize_statistics(stats)', + ]; + return buildArtifactViewer({ script, namespace }); }), ); }); @@ -317,8 +346,13 @@ export class OutputArtifactLoader { return splitNames.map(name => { const script = [ 'import tensorflow_data_validation as tfdv', - `anomalies = tfdv.load_anomalies_text('${artifact.getUri()}/${name}')`, - 'tfdv.display_anomalies(anomalies)', + 'from tensorflow_metadata.proto.v0 import anomalies_pb2', + 'anomalies = anomalies_pb2.Anomalies()', + 'import tensorflow as tf', + `with tf.io.gfile.GFile('${artifact.getUri()}/Split-${name}', mode='rb') as f:`, + ` anomalies_bytes = f.read()`, + ' anomalies.ParseFromString(anomalies_bytes)', + ' tfdv.display_anomalies(anomalies)', ]; return buildArtifactViewer({ script, namespace }); }); @@ -422,66 +456,6 @@ export class OutputArtifactLoader { } } -/** - * @throws error when network error or invalid data - */ -async function getOutputArtifactsInExecution(execution: Execution): Promise<Artifact[]> { - const executionId = execution.getId(); - if (!executionId) { - throw new Error('Execution must have an ID'); - } - - const request = new GetEventsByExecutionIDsRequest(); - request.addExecutionIds(executionId); - let res: GetEventsByExecutionIDsResponse; - try { - res = await Api.getInstance().metadataStoreService.getEventsByExecutionIDs(request); - } catch (err) { - err.message = 'Failed to getExecutionsByExecutionIDs: ' + err.message; - throw err; - } - - const outputArtifactIds = res - .getEventsList() - .filter(event => event.getType() === Event.Type.OUTPUT && event.getArtifactId()) - .map(event => event.getArtifactId()); - - const artifactsRequest = new GetArtifactsByIDRequest(); - artifactsRequest.setArtifactIdsList(outputArtifactIds); - let artifactsRes: GetArtifactsByIDResponse; - try { - artifactsRes = await Api.getInstance().metadataStoreService.getArtifactsByID(artifactsRequest); - } catch (artifactsErr) { - artifactsErr.message = 'Failed to getArtifactsByID: ' + artifactsErr.message; - throw artifactsErr; - } - - return artifactsRes.getArtifactsList(); -} - -async function getArtifactTypes(): Promise<ArtifactType[]> { - const request = new GetArtifactTypesRequest(); - let res: GetArtifactTypesResponse; - try { - res = await Api.getInstance().metadataStoreService.getArtifactTypes(request); - } catch (err) { - err.message = 'Failed to getArtifactTypes: ' + err.message; - throw err; - } - return res.getArtifactTypesList(); -} - -function filterArtifactsByType( - artifactTypeName: string, - artifactTypes: ArtifactType[], - artifacts: Artifact[], -): Artifact[] { - const artifactTypeIds = artifactTypes - .filter(artifactType => artifactType.getName() === artifactTypeName) - .map(artifactType => artifactType.getId()); - return artifacts.filter(artifact => artifactTypeIds.includes(artifact.getTypeId())); -} - function filterArtifactUrisByType( artifactTypeName: string, artifactTypes: ArtifactType[], @@ -515,23 +489,24 @@ async function buildArtifactViewer({ }; } -async function buildArtifactViewerTfdvStatistics( - url: string, - namespace: string, -): Promise<HTMLViewerConfig> { - const visualizationData: ApiVisualization = { - source: url, - type: ApiVisualizationType.TFDV, - }; - const visualization = await Apis.buildPythonVisualizationConfig(visualizationData, namespace); - if (!visualization.htmlContent) { - throw new Error('Failed to build artifact viewer, no value in visualization.htmlContent'); - } - return { - htmlContent: visualization.htmlContent, - type: PlotType.WEB_APP, - }; -} +// Deprecated approach because we switched to buildArtifactViewer for statistics. +// async function buildArtifactViewerTfdvStatistics( +// url: string, +// namespace: string, +// ): Promise<HTMLViewerConfig> { +// const visualizationData: ApiVisualization = { +// source: url, +// type: ApiVisualizationType.TFDV, +// }; +// const visualization = await Apis.buildPythonVisualizationConfig(visualizationData, namespace); +// if (!visualization.htmlContent) { +// throw new Error('Failed to build artifact viewer, no value in visualization.htmlContent'); +// } +// return { +// htmlContent: visualization.htmlContent, +// type: PlotType.WEB_APP, +// }; +// } async function readSourceContent( source: PlotMetadata['source'], diff --git a/frontend/src/lib/ParserUtils.ts b/frontend/src/lib/ParserUtils.ts index 05100b990e..9e18ae64ea 100644 --- a/frontend/src/lib/ParserUtils.ts +++ b/frontend/src/lib/ParserUtils.ts @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/RunUtils.ts b/frontend/src/lib/RunUtils.ts index ffe47b10f9..7a72ea48fa 100644 --- a/frontend/src/lib/RunUtils.ts +++ b/frontend/src/lib/RunUtils.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,6 @@ * limitations under the License. */ -import { orderBy } from 'lodash'; import { ApiParameter, ApiPipelineVersion } from '../apis/pipeline'; import { Workflow } from '../../third_party/argo-ui/argo_template'; import { ApiJob } from '../apis/job'; @@ -166,8 +165,7 @@ function runsToMetricMetadataMap(runs: ApiRun[]): Map<string, MetricMetadata> { } function extractMetricMetadata(runs: ApiRun[]): MetricMetadata[] { - const metrics = Array.from(runsToMetricMetadataMap(runs).values()); - return orderBy(metrics, ['count', 'name'], ['desc', 'asc']); + return Array.from(runsToMetricMetadataMap(runs).values()); } function getRecurringRunId(run?: ApiRun): string { @@ -197,7 +195,7 @@ function getRecurringRunName(run?: ApiRun): string { } // TODO: This file needs tests -export default { +const RunUtils = { extractMetricMetadata, getAllExperimentReferences, getFirstExperimentReference, @@ -215,3 +213,4 @@ export default { getWorkflowManifest, runsToMetricMetadataMap, }; +export default RunUtils; diff --git a/frontend/src/lib/StaticGraphParser.test.ts b/frontend/src/lib/StaticGraphParser.test.ts index 1700203ca0..e1b30c12ef 100644 --- a/frontend/src/lib/StaticGraphParser.test.ts +++ b/frontend/src/lib/StaticGraphParser.test.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018-2019 Google LLC + * Copyright 2018-2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/StaticGraphParser.ts b/frontend/src/lib/StaticGraphParser.ts index d32ef8d4cc..7399a9f6e5 100644 --- a/frontend/src/lib/StaticGraphParser.ts +++ b/frontend/src/lib/StaticGraphParser.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018-2019 Google LLC + * Copyright 2018-2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,7 +23,7 @@ import { graphlib } from 'dagre'; export type nodeType = 'container' | 'resource' | 'dag' | 'unknown'; export interface KeyValue<T> extends Array<any> { - 0?: string; + 0?: string | JSX.Element; 1?: T; } diff --git a/frontend/src/lib/StatusUtils.test.tsx b/frontend/src/lib/StatusUtils.test.tsx index f6a9d78617..8291f4968c 100644 --- a/frontend/src/lib/StatusUtils.test.tsx +++ b/frontend/src/lib/StatusUtils.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/StatusUtils.ts b/frontend/src/lib/StatusUtils.ts index 609a6f1683..71921fef26 100644 --- a/frontend/src/lib/StatusUtils.ts +++ b/frontend/src/lib/StatusUtils.ts @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/TriggerUtils.test.ts b/frontend/src/lib/TriggerUtils.test.ts index c6223099bd..6c0f8d8afc 100644 --- a/frontend/src/lib/TriggerUtils.test.ts +++ b/frontend/src/lib/TriggerUtils.test.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/TriggerUtils.ts b/frontend/src/lib/TriggerUtils.ts index fd38c0d7e4..10a6839b08 100644 --- a/frontend/src/lib/TriggerUtils.ts +++ b/frontend/src/lib/TriggerUtils.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/URLParser.test.ts b/frontend/src/lib/URLParser.test.ts index 47d045d0d7..292eb05151 100644 --- a/frontend/src/lib/URLParser.test.ts +++ b/frontend/src/lib/URLParser.test.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/URLParser.ts b/frontend/src/lib/URLParser.ts index 283a9ed047..229cbce911 100644 --- a/frontend/src/lib/URLParser.ts +++ b/frontend/src/lib/URLParser.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/Utils.test.ts b/frontend/src/lib/Utils.test.ts index 0d966f0411..e6b1f1b575 100644 --- a/frontend/src/lib/Utils.test.ts +++ b/frontend/src/lib/Utils.test.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/lib/Utils.tsx b/frontend/src/lib/Utils.tsx index 51ec2ed1c1..82c305576a 100644 --- a/frontend/src/lib/Utils.tsx +++ b/frontend/src/lib/Utils.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -60,6 +60,14 @@ export function formatDateString(date: Date | string | undefined): string { } } +/** Title cases a string by capitalizing the first letter of each word. */ +export function titleCase(str: string): string { + return str + .split(/[\s_-]/) + .map(w => `${w.charAt(0).toUpperCase()}${w.slice(1)}`) + .join(' '); +} + // TODO: add tests export async function errorToMessage(error: any): Promise<string> { if (error instanceof Error) { diff --git a/frontend/src/lib/WorkflowParser.test.ts b/frontend/src/lib/WorkflowParser.test.ts index 8a6ab08567..7296c8197f 100644 --- a/frontend/src/lib/WorkflowParser.test.ts +++ b/frontend/src/lib/WorkflowParser.test.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018-2019 Google LLC + * Copyright 2018-2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,6 +19,9 @@ import { NodePhase } from '../lib/StatusUtils'; import { Constants } from './Constants'; import WorkflowParser, { StorageService } from './WorkflowParser'; import { Workflow } from 'third_party/argo-ui/argo_template'; +import { Execution } from 'src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_pb'; +import { KfpExecutionProperties } from 'src/mlmd/MlmdUtils'; +import { stringValue } from 'src/mlmd/TestUtils'; describe('WorkflowParser', () => { describe('createRuntimeGraph', () => { @@ -118,6 +121,69 @@ describe('WorkflowParser', () => { expect(g.edges()).toEqual([{ v: 'node1', w: 'node2' }]); }); + it('creates graph with cached icon read from MLMD execution', () => { + const workflow = { + metadata: { + name: 'virtualRoot', + annotations: { ['pipelines.kubeflow.org/v2_pipeline']: 'true' }, + }, + status: { + nodes: { + node1: { + displayName: 'node1', + id: 'node1', + name: 'node1', + phase: 'Succeeded', + type: 'Pod', + }, + virtualRoot: { + displayName: 'virtualRoot', + id: 'virtualRoot', + name: 'virtualRoot', + outboundNodes: ['node1'], + phase: 'Succeeded', + type: 'Steps', + }, + }, + }, + }; + const execution = new Execution().setLastKnownState(Execution.State.CACHED); + execution.getCustomPropertiesMap().set(KfpExecutionProperties.POD_NAME, stringValue('node1')); + + const g = WorkflowParser.createRuntimeGraph(workflow as any, [execution]); + expect(g.nodes()).toEqual(['node1']); + expect(g.node('node1')['icon']).toMatchInlineSnapshot(` + <WithStyles(Tooltip) + title={ + <div> + <div> + Execution was skipped and outputs were taken from cache + </div> + </div> + } + > + <span + style={ + Object { + "height": 18, + } + } + > + <StatusCached + data-testid="node-status-sign" + style={ + Object { + "color": "#34a853", + "height": 18, + "width": 18, + } + } + /> + </span> + </WithStyles(Tooltip)> + `); + }); + it('creates a graph with placeholder nodes for steps that are not finished', () => { const workflow = { metadata: { name: 'testWorkflow' }, @@ -642,13 +708,17 @@ describe('WorkflowParser', () => { describe('getNodeInputOutputArtifacts', () => { const emptyArtifacts = { inputArtifacts: [], outputArtifacts: [] }; - const s3 = { + const s3Bucket = { accessKeySecret: { key: 'accesskey', optional: false, name: 'minio' }, bucket: 'foo', endpoint: 'minio.kubeflow', - key: 'bar', secretKeySecret: { key: 'secretkey', optional: false, name: 'minio' }, }; + const key = 'bar'; + const s3 = { + key: key, + s3Bucket: s3Bucket, + }; it('handles undefined workflow', () => { expect(WorkflowParser.getNodeInputOutputArtifacts(undefined as any, '')).toEqual( @@ -698,13 +768,18 @@ describe('WorkflowParser', () => { it('handles a node with one input artifact', () => { const workflow = { status: { + artifactRepositoryRef: { + artifactRepository: { + s3: s3Bucket, + }, + }, nodes: { node1: { inputs: { artifacts: [ { name: 'input art1', - s3, + s3: { key }, }, ], }, @@ -721,6 +796,11 @@ describe('WorkflowParser', () => { it('handles a node with one input artifact that has no s3 artifact config', () => { const workflow = { status: { + artifactRepositoryRef: { + artifactRepository: { + s3: s3Bucket, + }, + }, nodes: { node1: { inputs: { @@ -743,13 +823,18 @@ describe('WorkflowParser', () => { it('handles a node with one input artifact that is not the first node', () => { const workflow = { status: { + artifactRepositoryRef: { + artifactRepository: { + s3: s3Bucket, + }, + }, nodes: { node1: { inputs: { artifacts: [ { name: 'input art1', - s3: { ...s3, key: 'in1' }, + s3: { key: 'in1' }, }, ], }, @@ -759,7 +844,7 @@ describe('WorkflowParser', () => { artifacts: [ { name: 'node2 input art1', - s3, + s3: { key: key }, }, ], }, @@ -776,13 +861,18 @@ describe('WorkflowParser', () => { it('handles a node with one output artifact', () => { const workflow = { status: { + artifactRepositoryRef: { + artifactRepository: { + s3: s3Bucket, + }, + }, nodes: { node1: { outputs: { artifacts: [ { name: 'output art1', - s3, + s3: { key: key }, }, ], }, @@ -799,6 +889,11 @@ describe('WorkflowParser', () => { it('handles trimming output artifact name', () => { const workflow = { status: { + artifactRepositoryRef: { + artifactRepository: { + s3: s3Bucket, + }, + }, nodes: { node1: { templateName: 'my-component', @@ -806,7 +901,7 @@ describe('WorkflowParser', () => { artifacts: [ { name: 'my-component-output-art1', - s3, + s3: { key: key }, }, ], }, @@ -823,13 +918,18 @@ describe('WorkflowParser', () => { it('handles a node with one input and one output artifacts', () => { const workflow = { status: { + artifactRepositoryRef: { + artifactRepository: { + s3: s3Bucket, + }, + }, nodes: { node1: { inputs: { artifacts: [ { name: 'input art1', - s3: { ...s3, key: 'in1' }, + s3: { key: 'in1' }, }, ], }, @@ -837,7 +937,7 @@ describe('WorkflowParser', () => { artifacts: [ { name: 'output art1', - s3: { ...s3, key: 'out1' }, + s3: { key: 'out1' }, }, ], }, @@ -854,21 +954,26 @@ describe('WorkflowParser', () => { it('handles a node with multiple input and output artifacts', () => { const workflow = { status: { + artifactRepositoryRef: { + artifactRepository: { + s3: s3Bucket, + }, + }, nodes: { node1: { inputs: { artifacts: [ { name: 'input art1', - s3: { ...s3, key: 'in1' }, + s3: { key: 'in1' }, }, { name: 'input art2', - s3: { ...s3, key: 'in2' }, + s3: { key: 'in2' }, }, { name: 'input art3', - s3: { ...s3, key: 'in3' }, + s3: { key: 'in3' }, }, ], }, @@ -876,11 +981,11 @@ describe('WorkflowParser', () => { artifacts: [ { name: 'output art1', - s3: { ...s3, key: 'out1' }, + s3: { key: 'out1' }, }, { name: 'output art2', - s3: { ...s3, key: 'out2' }, + s3: { key: 'out2' }, }, ], }, @@ -954,7 +1059,9 @@ describe('WorkflowParser', () => { artifacts: [ { name: 'mlpipeline-ui-metadata', - s3: {}, + s3: { + s3Bucket: {}, + }, }, ], }, @@ -976,7 +1083,7 @@ describe('WorkflowParser', () => { { name: 'mlpipeline-ui-metadata', s3: { - bucket: 'test bucket', + s3Bucket: { bucket: 'test bucket' }, key: 'test key', }, }, @@ -1000,8 +1107,10 @@ describe('WorkflowParser', () => { { name: 'mlpipeline-ui-metadata', s3: { - endpoint: 's3.amazonaws.com', - bucket: 'test bucket', + s3Bucket: { + endpoint: 's3.amazonaws.com', + bucket: 'test bucket', + }, key: 'test key', }, }, @@ -1042,7 +1151,9 @@ describe('WorkflowParser', () => { { name: 'mlpipeline-ui-metadata', s3: { - bucket: 'test bucket', + s3Bucket: { + bucket: 'test bucket', + }, key: 'test key', }, }, @@ -1055,7 +1166,9 @@ describe('WorkflowParser', () => { { name: 'mlpipeline-ui-metadata', s3: { - bucket: 'test bucket2', + s3Bucket: { + bucket: 'test bucket2', + }, key: 'test key2', }, }, diff --git a/frontend/src/lib/WorkflowParser.ts b/frontend/src/lib/WorkflowParser.ts index 706e6ceb9f..ee1535680e 100644 --- a/frontend/src/lib/WorkflowParser.ts +++ b/frontend/src/lib/WorkflowParser.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018-2019 Google LLC + * Copyright 2018-2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +26,9 @@ import { Constants } from './Constants'; import { parseTaskDisplayName } from './ParserUtils'; import { KeyValue } from './StaticGraphParser'; import { NodePhase, statusToBgColor, statusToPhase } from './StatusUtils'; +import { Execution } from 'src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_pb'; +import { isV2Pipeline } from './v2/WorkflowUtils'; +import { ExecutionHelpers } from 'src/mlmd/MlmdUtils'; export enum StorageService { GCS = 'gcs', @@ -43,7 +46,11 @@ export interface StoragePath { } export default class WorkflowParser { - public static createRuntimeGraph(workflow: any): dagre.graphlib.Graph { + public static createRuntimeGraph( + workflow: any, + executions: Execution[] | undefined, + ): dagre.graphlib.Graph { + const nodeStateMap = buildNodeToExecutionStateMap(executions); const graph = new dagre.graphlib.Graph(); graph.setGraph({}); graph.setDefaultEdgeLabel(() => ({})); @@ -196,10 +203,15 @@ export default class WorkflowParser { const statusColoring = exitHandlers.includes(task['name']) ? '#fef7f0' : statusToBgColor(phase, ''); + let mlmdState: Execution.State | undefined; + if (isV2Pipeline(workflow)) { + mlmdState = nodeStateMap.get(taskId); + } + const taskStatusJson = statusMap.get(task['name']) || {status: {startTime:"", completionTime: ""}} // Add a node for the Task graph.setNode(taskId, { height: Constants.NODE_HEIGHT, - icon: statusToIcon(status), + icon: statusToIcon(status,taskStatusJson["status"]["startTime"], taskStatusJson["status"]["completionTime"], "", mlmdState), label: parseTaskDisplayName(task['taskSpec'] || task['taskRef']) || task['name'], statusColoring: statusColoring, width: Constants.NODE_WIDTH, @@ -691,3 +703,16 @@ export default class WorkflowParser { } } } + +function buildNodeToExecutionStateMap( + executions: Execution[] | undefined, +): Map<string, Execution.State> { + const m = new Map<string, Execution.State>(); + executions?.forEach(execution => { + const podname = ExecutionHelpers.getKfpPod(execution); + if (typeof podname === 'string') { + m.set(podname, execution.getLastKnownState()); + } + }); + return m; +} diff --git a/frontend/src/lib/v2/StaticFlow.test.ts b/frontend/src/lib/v2/StaticFlow.test.ts new file mode 100644 index 0000000000..01be8d0fed --- /dev/null +++ b/frontend/src/lib/v2/StaticFlow.test.ts @@ -0,0 +1,50 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import * as TWO_STEP_PIPELINE from 'src/data/test/mock_lightweight_python_functions_v2_pipeline.json'; +import { PipelineSpec } from 'src/generated/pipeline_spec'; +import { ml_pipelines } from 'src/generated/pipeline_spec/pbjs_ml_pipelines'; +import { testBestPractices } from 'src/TestUtils'; +import { convertFlowElements } from './StaticFlow'; + +testBestPractices(); +describe('StaticFlow', () => { + it('converts simple pipeline with element ids to graph', () => { + const jsonObject = TWO_STEP_PIPELINE; + + const message = ml_pipelines.PipelineSpec.fromObject(jsonObject['pipelineSpec']); + const buffer = ml_pipelines.PipelineSpec.encode(message).finish(); + const pipelineSpec = PipelineSpec.deserializeBinary(buffer); + + const graph = convertFlowElements(pipelineSpec); + // If the static flow logic gets update, inspect result with the console log result below. + console.log(graph); + for (let element of graph) { + const index = [ + 'task.preprocess', + 'task.train', + 'artifact.preprocess.output_dataset_one', + 'artifact.preprocess.output_dataset_two', + 'artifact.train.model', + 'outedge.preprocess.output_dataset_two', + 'inedge.output_dataset_two.train', + 'outedge.preprocess.output_dataset_one', + 'inedge.output_dataset_one.train', + 'outedge.train.model', + 'paramedge.preprocess.train', + ].findIndex(x => x === element.id); + expect(index > -1).toBeTruthy(); + } + }); +}); diff --git a/frontend/src/lib/v2/StaticFlow.ts b/frontend/src/lib/v2/StaticFlow.ts new file mode 100644 index 0000000000..1e6b401ed6 --- /dev/null +++ b/frontend/src/lib/v2/StaticFlow.ts @@ -0,0 +1,375 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import dagre from 'dagre'; +import * as jspb from 'google-protobuf'; +import { + ArrowHeadType, + Edge, + Elements, + FlowElement, + isNode, + Node, + Position, +} from 'react-flow-renderer'; +import ExecutionNode from 'src/components/graph/ExecutionNode'; +import { ComponentSpec, PipelineSpec } from 'src/generated/pipeline_spec'; +import { PipelineTaskSpec } from 'src/generated/pipeline_spec/pipeline_spec_pb'; + +const nodeWidth = 140; +const nodeHeight = 100; + +export enum NodeTypeNames { + EXECUTION = 'EXECUTION', +} + +export const NODE_TYPES = { + [NodeTypeNames.EXECUTION]: ExecutionNode, +}; + +export enum TaskType { + EXECUTOR, + DAG, +} + +interface ComponentSpecPair { + componentRefName: string; + componentSpec: ComponentSpec; +} + +export type PipelineFlowElement = FlowElement<any>; + +/** + * Convert static IR to Reactflow compatible graph description. + * @param spec KFP v2 Pipeline definition + * @returns Graph visualization as Reactflow elements (nodes and edges) + */ +export function convertFlowElements(spec: PipelineSpec): Elements { + // Find all tasks --> nodes + // Find all depdencies --> edges + const root = spec.getRoot(); + if (!root) { + throw new Error('root not found in pipeline spec.'); + } + + return buildDag(spec, root); +} + +/** + * Build single layer graph of a pipeline definition in Reactflow. + * @param pipelineSpec Full pipeline definition + * @param componentSpec Designated layer of a DAG/sub-DAG as part of pipelineSpec + * @returns Graph visualization as Reactflow elements (nodes and edges) + */ +function buildDag(pipelineSpec: PipelineSpec, componentSpec: ComponentSpec): Elements { + const dag = componentSpec.getDag(); + if (!dag) { + throw new Error('dag not found in component spec.'); + } + + const componentsMap = pipelineSpec.getComponentsMap(); + let flowGraph: FlowElement[] = []; + + const tasksMap = dag.getTasksMap(); + console.log('tasksMap count: ' + tasksMap.getLength()); + + addTaskNodes(tasksMap, componentsMap, flowGraph); + addArtifactNodes(tasksMap, componentsMap, flowGraph); + + addTaskToArtifactEdges(tasksMap, componentsMap, flowGraph); + addArtifactToTaskEdges(tasksMap, componentsMap, flowGraph); + addTaskToTaskEdges(tasksMap, flowGraph); + + return buildGraphLayout(flowGraph); +} + +function addTaskNodes( + tasksMap: jspb.Map<string, PipelineTaskSpec>, + componentsMap: jspb.Map<string, ComponentSpec>, + flowGraph: PipelineFlowElement[], +) { + // Add tasks as nodes to the Reactflow graph. + tasksMap.forEach((taskSpec, taskKey) => { + const componentPair = getComponent(taskKey, taskSpec, componentsMap); + if (componentPair === undefined) { + return; + } + const { componentRefName, componentSpec } = componentPair; + + // Component can be either an executor or subDAG, + // If this is executor, add the node directly. + // If subDAG, add a node which can represent expandable graph. + const name = taskSpec?.getTaskInfo()?.getName(); + if (componentSpec.getExecutorLabel().length > 0) { + // executor label exists means this is a single execution node. + const node: Node = { + id: getTaskNodeKey(taskKey), // Assume that key of `tasks` in `dag` is unique. + data: { label: name, taskType: TaskType.EXECUTOR }, + position: { x: 100, y: 200 }, + type: NodeTypeNames.EXECUTION, + }; + flowGraph.push(node); + } else if (componentSpec.hasDag()) { + // dag exists means this is a sub-DAG instance. + const node: Node = { + id: getTaskNodeKey(taskKey), + data: { label: 'DAG: ' + name, taskType: TaskType.DAG }, + position: { x: 100, y: 200 }, + // TODO(zijianjoy): This node styling is temporarily. + style: {}, + }; + flowGraph.push(node); + } else { + console.warn('Component ' + componentRefName + ' has neither `executorLabel` nor `dag`'); + } + }); +} + +function addArtifactNodes( + tasksMap: jspb.Map<string, PipelineTaskSpec>, + componentsMap: jspb.Map<string, ComponentSpec>, + flowGraph: PipelineFlowElement[], +) { + tasksMap.forEach((taskSpec, taskKey) => { + const componentPair = getComponent(taskKey, taskSpec, componentsMap); + if (componentPair === undefined) { + return; + } + const { componentSpec } = componentPair; + + // Find all artifacts --> nodes with custom style + // Input: components -> key/value -> inputDefinitions -> artifacts -> name/key + // Output: components -> key/value -> outputDefinitions -> artifacts -> name/key + // Calculate Output in this function. + const outputDefinitions = componentSpec.getOutputDefinitions(); + if (!outputDefinitions) return; + const artifacts = outputDefinitions.getArtifactsMap(); + artifacts.forEach((artifactSpec, artifactKey) => { + const node: Node = { + id: getArtifactNodeKey(taskKey, artifactKey), + data: { label: artifactSpec.getArtifactType()?.getSchemaTitle() + ': ' + artifactKey }, + position: { x: 300, y: 200 }, + // TODO(zijianjoy): This node styling is temporarily. + style: { + backgroundColor: '#fff59d', + borderColor: 'transparent', + }, + }; + flowGraph.push(node); + }); + }); +} + +function addTaskToArtifactEdges( + tasksMap: jspb.Map<string, PipelineTaskSpec>, + componentsMap: jspb.Map<string, ComponentSpec>, + flowGraph: PipelineFlowElement[], +) { + // Find output and input artifacts --> edges + // Task to Artifact: components -> key/value -> outputDefinitions -> artifacts -> key + tasksMap.forEach((taskSpec, taskKey) => { + const componentPair = getComponent(taskKey, taskSpec, componentsMap); + if (componentPair === undefined) { + return; + } + const { componentSpec } = componentPair; + const outputDefinitions = componentSpec.getOutputDefinitions(); + if (!outputDefinitions) return; + const artifacts = outputDefinitions.getArtifactsMap(); + artifacts.forEach((artifactSpec, artifactKey) => { + const edge: Edge = { + id: getTaskToArtifactEdgeKey(taskKey, artifactKey), + source: getTaskNodeKey(taskKey), + target: getArtifactNodeKey(taskKey, artifactKey), + arrowHeadType: ArrowHeadType.ArrowClosed, + }; + flowGraph.push(edge); + }); + }); +} + +function addArtifactToTaskEdges( + tasksMap: jspb.Map<string, PipelineTaskSpec>, + componentsMap: jspb.Map<string, ComponentSpec>, + flowGraph: PipelineFlowElement[], +) { + // Artifact to Task: root -> dag -> tasks -> key/value -> inputs -> artifacts -> key/value + // -> taskOutputArtifact -> outputArtifactKey+producerTask + tasksMap.forEach((taskSpec, inputTaskKey) => { + const inputs = taskSpec.getInputs(); + if (!inputs) { + return; + } + const artifacts = inputs.getArtifactsMap(); + artifacts.forEach((artifactSpec, artifactKey) => { + const taskOutputArtifact = artifactSpec.getTaskOutputArtifact(); + if (!taskOutputArtifact) { + return; + } + const outputArtifactKey = taskOutputArtifact.getOutputArtifactKey(); + const producerTask = taskOutputArtifact.getProducerTask(); + const edge: Edge = { + id: getArtifactToTaskEdgeKey(outputArtifactKey, inputTaskKey), + source: getArtifactNodeKey(producerTask, outputArtifactKey), + target: getTaskNodeKey(inputTaskKey), + arrowHeadType: ArrowHeadType.ArrowClosed, + }; + flowGraph.push(edge); + }); + }); +} + +function addTaskToTaskEdges( + tasksMap: jspb.Map<string, PipelineTaskSpec>, + flowGraph: PipelineFlowElement[], +) { + const edgeKeys = new Map<String, Edge>(); + // Input Parameters: inputs => parameters => taskOutputParameter => producerTask + tasksMap.forEach((taskSpec, inputTaskKey) => { + const inputs = taskSpec.getInputs(); + if (!inputs) { + return; + } + const parameters = inputs.getParametersMap(); + parameters.forEach((paramSpec, paramName) => { + const taskOutputParameter = paramSpec.getTaskOutputParameter(); + if (taskOutputParameter) { + const producerTask = taskOutputParameter.getProducerTask(); + const edgeId = getTaskToTaskEdgeKey(producerTask, inputTaskKey); + if (edgeKeys.has(edgeId)) { + return; + } + + const edge: Edge = { + // id is combination of producerTask+inputTask + id: edgeId, + source: getTaskNodeKey(producerTask), + target: getTaskNodeKey(inputTaskKey), + // TODO(zijianjoy): This node styling is temporarily. + arrowHeadType: ArrowHeadType.ArrowClosed, + }; + flowGraph.push(edge); + edgeKeys.set(edgeId, edge); + } + }); + }); + + // DependentTasks: task => dependentTasks list + tasksMap.forEach((taskSpec, inputTaskKey) => { + const dependentTasks = taskSpec.getDependentTasksList(); + if (!dependentTasks) { + return; + } + dependentTasks.forEach(upStreamTaskName => { + const edgeId = getTaskToTaskEdgeKey(upStreamTaskName, inputTaskKey); + if (edgeKeys.has(edgeId)) { + return; + } + + const edge: Edge = { + // id is combination of producerTask+inputTask + id: edgeId, + source: getTaskNodeKey(upStreamTaskName), + target: getTaskNodeKey(inputTaskKey), + // TODO(zijianjoy): This node styling is temporarily. + arrowHeadType: ArrowHeadType.ArrowClosed, + }; + flowGraph.push(edge); + edgeKeys.set(edgeId, edge); + }); + }); +} + +function buildGraphLayout(flowGraph: PipelineFlowElement[]) { + const dagreGraph = new dagre.graphlib.Graph(); + dagreGraph.setDefaultEdgeLabel(() => ({})); + dagreGraph.setGraph({ rankdir: 'TB' }); + + flowGraph.forEach(el => { + if (isNode(el)) { + dagreGraph.setNode(el.id, { width: nodeWidth, height: nodeHeight }); + } else { + dagreGraph.setEdge(el.source, el.target); + } + }); + + dagre.layout(dagreGraph); + + return flowGraph.map(el => { + if (isNode(el)) { + const nodeWithPosition = dagreGraph.node(el.id); + el.sourcePosition = Position.Bottom; + el.targetPosition = Position.Top; + + // unfortunately we need this little hack to pass a slightly different position + // to notify react flow about the change. Moreover we are shifting the dagre node position + // (anchor=center center) to the top left so it matches the react flow node anchor point (top left). + el.position = { + x: nodeWithPosition.x - nodeWidth / 2 + Math.random() / 1000, + y: nodeWithPosition.y - nodeHeight / 2, + }; + } + return el; + }); +} + +function getComponent( + taskKey: string, + taskSpec: PipelineTaskSpec, + componentsMap: jspb.Map<string, ComponentSpec>, +): ComponentSpecPair | undefined { + const componentRef = taskSpec.getComponentRef(); + if (componentRef === undefined) { + console.warn('ComponentRef not found for task: ' + taskKey); + return undefined; + } + const componentRefName = componentRef.getName(); + if (!componentsMap.has(componentRefName)) { + console.warn( + `Cannot find componentRef name ${componentRefName} from pipeline's components Map`, + ); + return undefined; + } + const componentSpec = componentsMap.get(componentRefName); + if (componentSpec === undefined) { + console.warn('Component undefined for componentRef name: ' + componentRefName); + return undefined; + } + return { componentRefName, componentSpec }; +} + +function getTaskNodeKey(taskKey: string) { + return 'task.' + taskKey; +} + +function getArtifactNodeKey(taskKey: string, artifactKey: string): string { + // id is in pattern artifact.producerTaskKey.outputArtifactKey + // Because task name and artifact name cannot contain dot in python. + return 'artifact.' + taskKey + '.' + artifactKey; +} + +function getTaskToArtifactEdgeKey(taskKey: string, artifactKey: string): string { + // id is in pattern outedge.producerTaskKey.outputArtifactKey + return 'outedge.' + taskKey + '.' + artifactKey; +} + +function getArtifactToTaskEdgeKey(outputArtifactKey: string, inputTaskKey: string): string { + // id is in pattern of inedge.artifactKey.inputTaskKey + return 'inedge.' + outputArtifactKey + '.' + inputTaskKey; +} + +function getTaskToTaskEdgeKey(producerTask: string, inputTaskKey: string) { + // id is in pattern of paramedge.producerTaskKey.inputTaskKey + return 'paramedge.' + producerTask + '.' + inputTaskKey; +} diff --git a/frontend/src/lib/v2/WorkflowUtils.test.ts b/frontend/src/lib/v2/WorkflowUtils.test.ts new file mode 100644 index 0000000000..b28325514d --- /dev/null +++ b/frontend/src/lib/v2/WorkflowUtils.test.ts @@ -0,0 +1,44 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { testBestPractices } from 'src/TestUtils'; +import { Workflow, WorkflowSpec, WorkflowStatus } from 'third_party/argo-ui/argo_template'; +import { isV2Pipeline } from './WorkflowUtils'; + +testBestPractices(); +describe('WorkflowUtils', () => { + const WORKFLOW_EMPTY: Workflow = { + metadata: { + name: 'workflow', + }, + // there are many unrelated fields here, omit them + spec: {} as WorkflowSpec, + status: {} as WorkflowStatus, + }; + + it('detects v2/v2 compatible pipeline', () => { + const workflow = { + ...WORKFLOW_EMPTY, + metadata: { + ...WORKFLOW_EMPTY.metadata, + annotations: { 'pipelines.kubeflow.org/v2_pipeline': 'true' }, + }, + }; + expect(isV2Pipeline(workflow)).toBeTruthy(); + }); + + it('detects v1 pipeline', () => { + expect(isV2Pipeline(WORKFLOW_EMPTY)).toBeFalsy(); + }); +}); diff --git a/frontend/src/lib/v2/WorkflowUtils.ts b/frontend/src/lib/v2/WorkflowUtils.ts new file mode 100644 index 0000000000..2551875b8f --- /dev/null +++ b/frontend/src/lib/v2/WorkflowUtils.ts @@ -0,0 +1,39 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { PipelineSpec } from 'src/generated/pipeline_spec'; +import { ml_pipelines } from 'src/generated/pipeline_spec/pbjs_ml_pipelines'; +import { Workflow } from 'third_party/argo-ui/argo_template'; + +export function isV2Pipeline(workflow: Workflow): boolean { + return workflow?.metadata?.annotations?.['pipelines.kubeflow.org/v2_pipeline'] === 'true'; +} + +export function isArgoWorkflowTemplate(template: Workflow): boolean { + if (template?.kind === 'Workflow' && template?.apiVersion?.startsWith('argoproj.io/')) { + return true; + } + return false; +} + +// Assuming template is the JSON format of PipelineJob in api/v2alpha1/pipeline_spec.proto +// TODO(zijianjoy): We need to change `template` format to PipelineSpec once SDK support is in. +export function convertJsonToV2PipelineSpec(template: string): PipelineSpec { + const pipelineJob = JSON.parse(template); + + const message = ml_pipelines.PipelineSpec.fromObject(pipelineJob['pipelineSpec']); + const buffer = ml_pipelines.PipelineSpec.encode(message).finish(); + const pipelineSpec = PipelineSpec.deserializeBinary(buffer); + return pipelineSpec; +} diff --git a/frontend/src/mlmd/Api.test.ts b/frontend/src/mlmd/Api.test.ts new file mode 100644 index 0000000000..825b4796df --- /dev/null +++ b/frontend/src/mlmd/Api.test.ts @@ -0,0 +1,27 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Api } from './Api'; +import { MetadataStoreServicePromiseClient } from 'src/third_party/mlmd'; + +describe('Api', () => { + it('Returns a singleton instance', () => { + const api = Api.getInstance(); + expect(api).toBeInstanceOf(Api); + expect(api.metadataStoreService).toBeInstanceOf(MetadataStoreServicePromiseClient); + expect(api).toBe(Api.getInstance()); + }); +}); diff --git a/frontend/src/mlmd/Api.ts b/frontend/src/mlmd/Api.ts new file mode 100644 index 0000000000..834c9d9242 --- /dev/null +++ b/frontend/src/mlmd/Api.ts @@ -0,0 +1,85 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { MetadataStoreServicePromiseClient } from 'src/third_party/mlmd'; + +/** Known Artifact properties */ +export enum ArtifactProperties { + ALL_META = '__ALL_META__', + CREATE_TIME = 'create_time', + DESCRIPTION = 'description', + NAME = 'name', + PIPELINE_NAME = 'pipeline_name', + VERSION = 'version', +} + +/** Known Artifact custom properties */ +export enum ArtifactCustomProperties { + WORKSPACE = '__kf_workspace__', + RUN = '__kf_run__', + NAME = 'name', + PIPELINE_NAME = 'pipeline_name', // TODO: Remove when switching to contexts + RUN_ID = 'run_id', // TODO: Remove when switching to contexts +} + +/** Known Execution properties */ +export enum ExecutionProperties { + NAME = 'name', // currently not available in api, use component_id instead + COMPONENT_ID = 'component_id', + PIPELINE_NAME = 'pipeline_name', + RUN_ID = 'run_id', + STATE = 'state', +} + +/** Known Execution custom properties */ +export enum ExecutionCustomProperties { + NAME = 'name', + WORKSPACE = '__kf_workspace__', + RUN = '__kf_run__', + RUN_ID = 'run_id', // TODO: Remove when switching to contexts + TASK_ID = 'task_id', +} + +/** Format for a List request */ +export interface ListRequest { + filter?: string; + orderAscending?: boolean; + pageSize?: number; + pageToken?: string; + sortBy?: string; +} + +/** + * Class to wrap backend APIs. + */ +export class Api { + private static instance: Api; + private metadataServicePromiseClient = new MetadataStoreServicePromiseClient('', null, null); + + /** + * Factory function to return an Api instance. + */ + public static getInstance(): Api { + if (!Api.instance) { + Api.instance = new Api(); + } + return Api.instance; + } + + get metadataStoreService() { + return this.metadataServicePromiseClient; + } +} diff --git a/frontend/src/mlmd/ControlledEdgeCanvas.tsx b/frontend/src/mlmd/ControlledEdgeCanvas.tsx new file mode 100644 index 0000000000..ceb1623ebd --- /dev/null +++ b/frontend/src/mlmd/ControlledEdgeCanvas.tsx @@ -0,0 +1,105 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as React from 'react'; +import { classes } from 'typestyle'; +import { edgeCanvasCss } from './EdgeCanvas'; +import { EdgeLine } from './EdgeLine'; +import { + CARD_ROW_HEIGHT, + CARD_CONTAINER_BORDERS, + CARD_SPACER_HEIGHT, + CARD_TITLE_HEIGHT, +} from './LineageCss'; + +export const CARD_OFFSET = CARD_SPACER_HEIGHT + CARD_TITLE_HEIGHT + CARD_CONTAINER_BORDERS; + +interface ControlledEdgeCanvasProps { + // The edge is drawn over the card column and offset by the card width + cardWidth: number; + edgeWidth: number; + + // If true edges are drawn from right to left. + reverseEdges: boolean; + + // A list of output artifactIds + artifactIds: number[]; + + // Offset for the artifact edge lines in pixels. + offset: number; + + // Top of the destination execution card relative to the top of the lineage card column. + top: number; + + // Map from artifact id to card index. + artifactToCardMap: Map<number, number>; + + outputExecutionToOutputArtifactMap: Map<number, number[]>; +} + +/** + * A version of <EdgeCanvas/> that draws the lines connecting the edges of a list of vertically + * stacked output artifact cards <LineageCardColumn /> to the many output execution <LineageCard /> + * elements in an adjacent <LineageCardColumn />. + */ +export class ControlledEdgeCanvas extends React.Component<ControlledEdgeCanvasProps> { + public render(): JSX.Element | null { + const { reverseEdges, edgeWidth } = this.props; + + let viewHeight = 1; + + const lastNode = reverseEdges ? 'y1' : 'y4'; + const lastNodePositions = { y1: 0, y4: 0 }; + if (this.props.offset) { + lastNodePositions[lastNode] += this.props.offset; + viewHeight += this.props.offset; + } + + const edgeLines: JSX.Element[] = []; + this.props.artifactIds.forEach((artifactId, index) => { + if (index !== 0) { + let offset = CARD_OFFSET; + + if ( + this.props.artifactToCardMap.get(artifactId) !== + this.props.artifactToCardMap.get(artifactId - 1) + ) { + offset += CARD_ROW_HEIGHT; + } + + viewHeight += offset; + lastNodePositions[lastNode] += offset; + } + + edgeLines.push( + <EdgeLine + height={viewHeight} + width={edgeWidth} + y1={lastNodePositions.y1} + y4={lastNodePositions.y4} + />, + ); + }); + + const css = edgeCanvasCss( + /* left= */ this.props.cardWidth, + /* top= */ this.props.top + CARD_TITLE_HEIGHT + CARD_ROW_HEIGHT / 2, + /* width= */ edgeWidth, + ); + const edgeCanvasClasses = classes(css.edgeCanvas, reverseEdges && 'edgeCanvasReverse'); + return <div className={edgeCanvasClasses}>{edgeLines}</div>; + } +} diff --git a/frontend/src/mlmd/Css.test.tsx b/frontend/src/mlmd/Css.test.tsx new file mode 100644 index 0000000000..43a5c8ceb1 --- /dev/null +++ b/frontend/src/mlmd/Css.test.tsx @@ -0,0 +1,69 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright 2018 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +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/frontend/src/mlmd/Css.tsx b/frontend/src/mlmd/Css.tsx new file mode 100644 index 0000000000..650c723acf --- /dev/null +++ b/frontend/src/mlmd/Css.tsx @@ -0,0 +1,424 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright 2018 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import createMuiTheme from '@material-ui/core/styles/createMuiTheme'; +import { NestedCSSProperties } from 'typestyle/lib/types'; +import { style, stylesheet, cssRaw } from 'typestyle'; + +cssRaw(` + .LineageExplorer { + --blue-50: #e8f0fe; + --blue-100: #d2e3fc; + --blue-200: #aecbfa; + --blue-300: #8ab4f8; + --blue-400: #669df6; + --blue-500: #1098f7; + --blue-600: #1098f7; + --blue-700: #1967d2; + --blue-800: #185abc; + --blue-900: #174ea6; + --red-50: #fce8e6; + --red-700: #c5221f; + --yellow-600: #f9ab00; + --green-500: #34a853; + --green-600: #1e8e3e; + --grey-50: #f8f9fa; + --grey-100: #f1f3f4; + --grey-200: #e8eaed; + --grey-300: #dadce0; + --grey-400: #bdc1c6; + --grey-500: #9aa0a6; + --grey-600: #80868b; + --grey-700: #5f6368; + --grey-800: #3c4043; + --grey-900: #202124; + --orange-500: #fa7b17; + --orange-700: #d56e0c; + --orange-900: #b06000; + --pink-500: #f538a0; + --pink-700: #c92786; + --purple-500: #a142f4; + --card-radius: 6px; + } + ::-webkit-scrollbar { + -webkit-appearance: none; + width: 7px; + height: 7px; + } + ::-webkit-scrollbar-thumb { + border-radius: 4px; + background-color: rgba(0,0,0,.5); + box-shadow: 0 0 1px rgba(255,255,255,.5); + } +`); + +cssRaw(` + +@font-face { + font-family: 'PublicSans-Regular'; + src: local('PublicSans-Regular'), local('PublicSans-Regular'), url(https://cdn.jsdelivr.net/npm/public-sans@0.1.6-0/fonts/webfonts/PublicSans-Regular.woff) format('woff'); +} + +@font-face { + font-family: 'PublicSans-Medium'; + src: local('PublicSans-Medium'), local('PublicSans-Medium'), url(https://cdn.jsdelivr.net/npm/public-sans@0.1.6-0/fonts/webfonts/PublicSans-Medium.woff) format('woff'); +} + +@font-face { + font-family: 'PublicSans-SemiBold'; + src: local('PublicSans-SemiBold'), local('PublicSans-SemiBold'), url(https://cdn.jsdelivr.net/npm/public-sans@0.1.6-0/fonts/webfonts/PublicSans-SemiBold.woff) format('woff'); +} + +@font-face { + font-family: 'PublicSans-Bold'; + src: local('PublicSans-Bold'), local('PublicSans-Bold'), url(https://cdn.jsdelivr.net/npm/public-sans@0.1.6-0/fonts/webfonts/PublicSans-Bold.woff) format('woff'); +} + +`); + +export const color = { + activeBg: '#eaf1fd', + alert: '#f9ab00', // Google yellow 600 + background: '#fff', + blue: '#4285f4', // Google blue 500 + disabledBg: '#ddd', + divider: '#e0e0e0', + errorBg: '#fbe9e7', + errorText: '#d50000', + foreground: '#000', + graphBg: '#f2f2f2', + grey: '#5f6368', // Google grey 500 + inactive: '#5f6368', + lightGrey: '#eee', // Google grey 200 + lowContrast: '#80868b', // Google grey 600 + secondaryText: 'rgba(0, 0, 0, .88)', + separator: '#e8e8e8', + strong: '#202124', // Google grey 900 + success: '#34a853', + successWeak: '#e6f4ea', // Google green 50 + terminated: '#80868b', + theme: '#1a73e8', + themeDarker: '#0b59dc', + warningBg: '#f9f9e1', + warningText: '#ee8100', + weak: '#9aa0a6', +}; + +export const dimension = { + auto: 'auto', + base: 40, + jumbo: 64, + large: 48, + small: 36, + tiny: 24, + xlarge: 56, + xsmall: 32, +}; + +// 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 fontsize = { + small: 12, + base: 14, + medium: 16, + large: 18, + title: 18, +}; +// tslint:enable:object-literal-sort-keys + +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', +}; + +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% - 24px)', + position: 'absolute', + top: 'calc(50% - 24px)', + }, + busyOverlay: { + backgroundColor: '#ffffffaa', + bottom: 0, + left: 0, + position: 'absolute', + right: 0, + top: 0, + zIndex: zIndex.BUSY_OVERLAY, + }, + 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', + }, + fit: { + bottom: 0, + height: '100%', + left: 0, + position: 'absolute', + right: 0, + top: 0, + width: '100%', + }, + 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, + }, + header2: { + fontSize: fontsize.medium, + fontWeight: 'bold', + paddingBottom: 16, + paddingTop: 20, + }, + 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/frontend/src/mlmd/EdgeCanvas.tsx b/frontend/src/mlmd/EdgeCanvas.tsx new file mode 100644 index 0000000000..93cb478a65 --- /dev/null +++ b/frontend/src/mlmd/EdgeCanvas.tsx @@ -0,0 +1,117 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as React from 'react'; +import { classes, stylesheet } from 'typestyle'; +import { + CARD_ROW_HEIGHT, + CARD_CONTAINER_BORDERS, + CARD_SPACER_HEIGHT, + CARD_TITLE_HEIGHT, + px, +} from './LineageCss'; +import { CardDetails } from './LineageCardColumn'; +import { EdgeLine } from './EdgeLine'; + +export const CARD_OFFSET = CARD_SPACER_HEIGHT + CARD_TITLE_HEIGHT + CARD_CONTAINER_BORDERS; + +export const edgeCanvasCss = (left: number, top: number, width: number) => { + return stylesheet({ + edgeCanvas: { + border: 0, + display: 'block', + left, + transition: 'transform .25s', + overflow: 'visible', + position: 'absolute', + top: px(top), + width, + zIndex: -1, + + $nest: { + '&.edgeCanvasReverse': { + left: 0, + transform: 'translateX(-100%)', + }, + svg: { + display: 'block', + overflow: 'visible', + position: 'absolute', + }, + }, + }, + }); +}; + +export interface EdgeCanvasProps { + cards: CardDetails[]; + + // The edge is drawn over the card column and offset by the card width + cardWidth: number; + edgeWidth: number; + + // If true edges are drawn from right to left. + reverseEdges: boolean; +} + +/** + * Canvas that draws the lines connecting the edges of a list of vertically stacked cards in one + * <LineageCardColumn /> to the topmost <LineageCard /> in an adjacent <LineageCardColumn />. + * + * The adjacent column is assumed to be to right of the connecting cards unless `reverseEdges` + * is set to true. + */ +export class EdgeCanvas extends React.Component<EdgeCanvasProps> { + public render(): JSX.Element | null { + const { cards, reverseEdges, edgeWidth } = this.props; + + let viewHeight = 1; + + const lastNode = reverseEdges ? 'y1' : 'y4'; + const lastNodePositions = { y1: 0, y4: 0 }; + + const edgeLines: JSX.Element[] = []; + cards.forEach((card, i) => { + card.elements.forEach((element, j) => { + if (!element.next) { + return; + } + + edgeLines.push( + <EdgeLine + height={viewHeight} + width={edgeWidth} + y1={lastNodePositions.y1} + y4={lastNodePositions.y4} + />, + ); + + viewHeight += CARD_ROW_HEIGHT; + lastNodePositions[lastNode] += CARD_ROW_HEIGHT; + }); + viewHeight += CARD_OFFSET; + lastNodePositions[lastNode] += CARD_OFFSET; + }); + + const css = edgeCanvasCss( + /* left= */ this.props.cardWidth, + /* top= */ CARD_TITLE_HEIGHT + CARD_ROW_HEIGHT / 2, + /* width= */ edgeWidth, + ); + const edgeCanvasClasses = classes(css.edgeCanvas, reverseEdges && 'edgeCanvasReverse'); + return <div className={edgeCanvasClasses}>{edgeLines}</div>; + } +} diff --git a/frontend/src/mlmd/EdgeLine.tsx b/frontend/src/mlmd/EdgeLine.tsx new file mode 100644 index 0000000000..72c16c364b --- /dev/null +++ b/frontend/src/mlmd/EdgeLine.tsx @@ -0,0 +1,56 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as React from 'react'; +// @ts-ignore +import LineChart from 'react-svg-line-chart'; + +// How many pixels away from the point the curve should start at. +const HORIZONTAL_CONTROL_POINT_OFFSET = 30; + +interface EdgeLineProps { + height: number; + width: number; + y1: number; + y4: number; +} + +export const EdgeLine: React.FC<EdgeLineProps> = props => { + const { height, width, y1, y4 } = props; + + return ( + <LineChart + data={[ + { x: 0, y: y1 }, + { x: HORIZONTAL_CONTROL_POINT_OFFSET, y: y1 }, + { x: width - HORIZONTAL_CONTROL_POINT_OFFSET, y: y4 }, + { x: width, y: y4 }, + ]} + areaVisible={false} + axisVisible={false} + gridVisible={false} + labelsVisible={false} + pathColor={'#BDC1C6'} + pathVisible={true} + pathWidth={1} + pathOpacity={1} + pointsVisible={false} + viewBoxHeight={height} + viewBoxWidth={width} + pathSmoothing={0} + /> + ); +}; diff --git a/frontend/src/mlmd/LineChart.d.ts b/frontend/src/mlmd/LineChart.d.ts new file mode 100644 index 0000000000..67819dc8bc --- /dev/null +++ b/frontend/src/mlmd/LineChart.d.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +declare module 'react-svg-line-chart'; diff --git a/frontend/src/mlmd/LineageActionBar.test.tsx b/frontend/src/mlmd/LineageActionBar.test.tsx new file mode 100644 index 0000000000..facff47ac1 --- /dev/null +++ b/frontend/src/mlmd/LineageActionBar.test.tsx @@ -0,0 +1,113 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as React from 'react'; +import { mount, ReactWrapper, shallow, ShallowWrapper } from 'enzyme'; +import { LineageActionBar, LineageActionBarProps, LineageActionBarState } from './LineageActionBar'; +import { buildTestModel, testModel } from './TestUtils'; +import { Artifact } from 'src/third_party/mlmd'; + +describe('LineageActionBar', () => { + let tree: ShallowWrapper; + const setLineageViewTarget = jest.fn(); + + const mountActionBar = (): ReactWrapper< + LineageActionBarProps, + LineageActionBarState, + LineageActionBar + > => + mount( + <LineageActionBar initialTarget={testModel} setLineageViewTarget={setLineageViewTarget} />, + ); + + afterEach(() => { + tree.unmount(); + setLineageViewTarget.mockReset(); + }); + + it('Renders correctly for a given initial target', () => { + tree = shallow(<LineageActionBar initialTarget={testModel} setLineageViewTarget={jest.fn()} />); + expect(tree).toMatchSnapshot(); + }); + + it('Does not update the LineageView target when the current breadcrumb is clicked', () => { + const tree = mountActionBar(); + + // There is one disabled button for the initially selected target. + expect(tree.state('history').length).toBe(1); + + expect(setLineageViewTarget.mock.calls.length).toBe(0); + tree + .find('button') + .first() + .simulate('click'); + expect(setLineageViewTarget.mock.calls.length).toBe(0); + expect(tree.state('history').length).toBe(1); + }); + + it('Updates the LineageView target model when an inactive breadcrumb is clicked', () => { + const tree = mountActionBar(); + + // Add a second artifact to the history state to make the first breadcrumb enabled. + tree.setState({ + history: [testModel, buildTestModel()], + }); + expect(tree.state('history').length).toBe(2); + tree.update(); + + expect(setLineageViewTarget.mock.calls.length).toBe(0); + tree + .find('button') + .first() + .simulate('click'); + + expect(setLineageViewTarget.mock.calls.length).toBe(1); + expect(tree).toMatchSnapshot(); + }); + + it('Adds the artifact to the history state and DOM when pushHistory() is called', () => { + const tree = mountActionBar(); + expect(tree.state('history').length).toBe(1); + tree.instance().pushHistory(new Artifact()); + expect(tree.state('history').length).toBe(2); + tree.update(); + + expect(tree).toMatchSnapshot(); + }); + + it('Sets history to the initial prop when the reset button is clicked', () => { + const tree = mountActionBar(); + + expect(tree.state('history').length).toBe(1); + tree.instance().pushHistory(buildTestModel()); + tree.instance().pushHistory(buildTestModel()); + expect(tree.state('history').length).toBe(3); + + // Flush state to the DOM + tree.update(); + const buttonWrappers = tree.find('button'); + expect(buttonWrappers.length).toBe(4); + + // The reset button is the last button on the action bar. + tree + .find('button') + .last() + .simulate('click'); + + expect(tree.state('history').length).toBe(1); + expect(tree).toMatchSnapshot(); + }); +}); diff --git a/frontend/src/mlmd/LineageActionBar.tsx b/frontend/src/mlmd/LineageActionBar.tsx new file mode 100644 index 0000000000..7bf731fd32 --- /dev/null +++ b/frontend/src/mlmd/LineageActionBar.tsx @@ -0,0 +1,202 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as React from 'react'; +import grey from '@material-ui/core/colors/grey'; +import Button from '@material-ui/core/Button'; +import ArrowRightAltIcon from '@material-ui/icons/ArrowRightAlt'; +import ReplayIcon from '@material-ui/icons/Replay'; +import { classes, stylesheet } from 'typestyle'; +import { color, commonCss, fonts, padding } from './Css'; +import { CSSProperties } from 'typestyle/lib/types'; +import { getResourcePropertyViaFallBack } from './Utils'; +import { Artifact } from 'src/third_party/mlmd'; +import { ArtifactProperties, ArtifactCustomProperties } from './Api'; +import { ArtifactHelpers } from './MlmdUtils'; + +const baseLinkButton: CSSProperties = { + backgroundColor: 'transparent', + border: 'none', + cursor: 'pointer', + display: 'inline', + margin: 0, + padding: 0, +}; + +const baseBreadcrumb = { + ...baseLinkButton, + fontFamily: fonts.secondary, + fontWeight: 500, +}; + +const actionBarCss = stylesheet({ + actionButton: { + color: color.strong, + }, + workspace: { + ...baseBreadcrumb, + fontStyle: 'italic', + }, + workspaceSep: { + display: 'block', + color: '#3c3c3c', + $nest: { + '&::before': { + content: '""', + color: '#9f9f9f', + margin: '0 .75em', + border: '1px solid', + background: 'currentColor', + }, + }, + }, + breadcrumbContainer: { + alignItems: 'center', + display: 'flex', + flexShrink: 1, + overflow: 'hidden', + }, + breadcrumbInactive: { + color: color.grey, + ...baseBreadcrumb, + $nest: { + '&:hover': { + textDecoration: 'underline', + }, + }, + }, + breadcrumbActive: { + color: color.strong, + ...baseBreadcrumb, + $nest: { + '&:hover': { + cursor: 'default', + }, + }, + }, + breadcrumbSeparator: { + color: grey[400], + }, + container: { + borderBottom: '1px solid ' + color.separator, + height: '48px', + justifyContent: 'space-between', + }, +}); + +export interface LineageActionBarProps { + initialTarget?: Artifact; + setLineageViewTarget(artifact: Artifact): void; +} + +export interface LineageActionBarState { + history: Artifact[]; +} + +const BreadcrumbSeparator: React.FC = () => ( + <div className={classes(commonCss.flex)}> + <ArrowRightAltIcon className={classes(actionBarCss.breadcrumbSeparator, padding(10, 'lr'))} /> + </div> +); + +/** Shows the current navigation history and actions available to the Lineage Explorer. */ +export class LineageActionBar extends React.Component< + LineageActionBarProps, + LineageActionBarState +> { + constructor(props: LineageActionBarProps) { + super(props); + this.reset = this.reset.bind(this); + this.pushHistory = this.pushHistory.bind(this); + this.state = { + history: [], + }; + if (this.props.initialTarget) { + this.state.history.push(this.props.initialTarget); + } + } + + public pushHistory(artifact: Artifact) { + this.setState({ + history: [...this.state.history, artifact], + }); + } + + public render() { + const breadcrumbs: JSX.Element[] = [ + <span className={classes(actionBarCss.workspace)} key='workspace'> + {getResourcePropertyViaFallBack( + this.state.history[0], + [ArtifactProperties, ArtifactCustomProperties], + ['PIPELINE_NAME', 'WORKSPACE'], + )} + </span>, + <aside key='workspace-sep' className={actionBarCss.workspaceSep} />, + ]; + this.state.history.forEach((artifact: Artifact, index) => { + const isActive = index === this.state.history.length - 1; + const onBreadcrumbClicked = () => { + this.sliceHistory(index); + }; + breadcrumbs.push( + <button + key={`breadcrumb-${index}`} + className={classes( + isActive ? actionBarCss.breadcrumbActive : actionBarCss.breadcrumbInactive, + )} + disabled={isActive} + onClick={onBreadcrumbClicked} + > + {ArtifactHelpers.getName(artifact)} + </button>, + ); + if (!isActive) { + breadcrumbs.push(<BreadcrumbSeparator key={`separator-${index}`} />); + } + }); + + return ( + <div className={classes(actionBarCss.container, padding(25, 'lr'), commonCss.flex)}> + <div className={classes(actionBarCss.breadcrumbContainer)}>{breadcrumbs}</div> + <div> + <Button + className={classes(actionBarCss.actionButton)} + disabled={false} + onClick={this.reset} + > + <ReplayIcon /> Reset + </Button> + </div> + </div> + ); + } + + private sliceHistory(index: number): void { + const history = this.state.history.slice(0, index + 1); + const targetArtifact = history[index]; + const onHistoryChanged = this.props.setLineageViewTarget.bind(this, targetArtifact); + this.setState( + { + history, + }, + onHistoryChanged, + ); + } + + private reset() { + this.sliceHistory(0); + } +} diff --git a/frontend/src/mlmd/LineageApi.ts b/frontend/src/mlmd/LineageApi.ts new file mode 100644 index 0000000000..badc0bde9e --- /dev/null +++ b/frontend/src/mlmd/LineageApi.ts @@ -0,0 +1,111 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { formatDateString } from 'src/lib/Utils'; +import { + ArtifactType, + Event, + ExecutionType, + GetEventsByArtifactIDsRequest, + GetExecutionTypesRequest, + GetArtifactTypesRequest, + MetadataStoreServicePromiseClient, +} from 'src/third_party/mlmd'; + +const EventType = Event.Type; + +export type ArtifactTypeMap = Map<number, ArtifactType>; +export type ExecutionTypeMap = Map<number, ExecutionType>; + +export async function getArtifactTypes( + metadataStoreService: MetadataStoreServicePromiseClient, + errorCallback?: (message: string) => void, +): Promise<ArtifactTypeMap> { + const response = await metadataStoreService.getArtifactTypes(new GetArtifactTypesRequest()); + + if (!response) { + if (errorCallback) { + errorCallback('Unable to retrieve Artifact Types, some features may not work.'); + } + return new Map(); + } + + const artifactTypesMap = new Map<number, ArtifactType>(); + + (response!.getArtifactTypesList() || []).forEach((artifactType: ArtifactType) => { + artifactTypesMap.set(artifactType.getId()!, artifactType); + }); + + return artifactTypesMap; +} + +export async function getExecutionTypes( + metadataStoreService: MetadataStoreServicePromiseClient, + errorCallback?: (message: string) => void, +): Promise<ExecutionTypeMap> { + const response = await metadataStoreService.getExecutionTypes(new GetExecutionTypesRequest()); + + if (!response) { + if (errorCallback) { + errorCallback('Unable to retrieve Execution Types, some features may not work.'); + } + return new Map(); + } + + const executionTypesMap = new Map<number, ExecutionType>(); + + (response!.getExecutionTypesList() || []).forEach((executionType: ExecutionType) => { + executionTypesMap.set(executionType.getId()!, executionType); + }); + + return executionTypesMap; +} + +export async function getArtifactCreationTime( + artifactId: number, + metadataStoreService: MetadataStoreServicePromiseClient, + errorCallback?: (message: string) => void, +): Promise<string> { + if (!artifactId) { + throw new Error('artifactId is empty'); + } + + const eventsRequest = new GetEventsByArtifactIDsRequest(); + eventsRequest.setArtifactIdsList([artifactId]); + const response = await metadataStoreService.getEventsByArtifactIDs(eventsRequest); + + if (!response) { + if (errorCallback) { + errorCallback(`Unable to retrieve Events for artifactId: ${artifactId}`); + } + return ''; + } + + const data = response.getEventsList().map(event => ({ + time: event.getMillisecondsSinceEpoch(), + type: event.getType() || EventType.UNKNOWN, + })); + // The last output event is the event that produced current artifact. + const lastOutputEvent = data + .reverse() + .find(event => event.type === EventType.DECLARED_OUTPUT || event.type === EventType.OUTPUT); + if (lastOutputEvent && lastOutputEvent.time) { + return formatDateString(new Date(lastOutputEvent.time)); + } else { + // No valid time found, just return empty + return ''; + } +} diff --git a/frontend/src/mlmd/LineageCard.tsx b/frontend/src/mlmd/LineageCard.tsx new file mode 100644 index 0000000000..aaca28b327 --- /dev/null +++ b/frontend/src/mlmd/LineageCard.tsx @@ -0,0 +1,141 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { blue, grey } from '@material-ui/core/colors'; +import * as React from 'react'; +import { classes, stylesheet } from 'typestyle'; +import { CSSProperties } from 'typestyle/lib/types'; +import { LineageCardRow } from './LineageCardRow'; +import { LineageRow, LineageCardType } from './LineageTypes'; +import { + CARD_RADIUS, + CARD_SPACER_HEIGHT, + CARD_TITLE_BASE_HEIGHT, + CARD_TITLE_BORDER_BOTTOM_HEIGHT, + px, +} from './LineageCss'; +import { Artifact } from 'src/third_party/mlmd'; + +const cardTitleBase: CSSProperties = { + borderTopLeftRadius: '4px', + borderTopRightRadius: '4px', + height: px(CARD_TITLE_BASE_HEIGHT), +}; + +interface LineageCardProps { + title: string; + type: LineageCardType; + rows: LineageRow[]; + addSpacer: boolean; + isTarget?: boolean; + setLineageViewTarget?(artifact: Artifact): void; +} + +export class LineageCard extends React.Component<LineageCardProps> { + public render(): JSX.Element { + const { title, type, rows, addSpacer, isTarget, setLineageViewTarget } = this.props; + const isExecution = type === 'execution'; + + const css = stylesheet({ + addSpacer: { + marginTop: px(CARD_SPACER_HEIGHT), + }, + cardContainer: { + background: 'white', + border: `1px solid ${grey[300]}`, + borderRadius: px(CARD_RADIUS), + $nest: { + h3: { + color: blue[600], + fontFamily: 'PublicSans-Medium', + fontSize: '9px', + letterSpacing: '0.8px', + lineHeight: '42px', + paddingLeft: '15px', + textAlign: 'left', + textTransform: 'uppercase', + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', + }, + }, + }, + cardTitle: { + ...cardTitleBase, + borderBottom: `${px(CARD_TITLE_BORDER_BOTTOM_HEIGHT)} solid ${grey[200]}`, + }, + execution: { + background: '#2C4A6D', + border: '1px solid #CCE4FF', + $nest: { + h3: { + color: '#5DC2B8', + }, + '.cardRow': { + borderBottom: '1px solid var(--grey-700)', + }, + '.cardRow .rowTitle': { + color: 'white', + }, + '.cardRow .rowDesc': { + color: 'var(--grey-500)', + }, + ".cardRow [class^='edge']": { + background: '#5DC2B8', + }, + }, + }, + executionCardTitle: { + ...cardTitleBase, + borderBottom: `${px(CARD_TITLE_BORDER_BOTTOM_HEIGHT)} solid transparent`, + }, + target: { + border: `2px solid ${blue[500]}`, + }, + }); + + const listCardRows = () => + rows.map((r, i) => ( + <LineageCardRow + key={i} + typedResource={r.typedResource} + resourceDetailsRoute={r.resourceDetailsPageRoute} + leftAffordance={!!r.prev} + rightAffordance={!!r.next} + isLastRow={i === rows.length - 1} + isTarget={isTarget} + hideRadio={isExecution} + setLineageViewTarget={setLineageViewTarget} + /> + )); + + const cardContainerClasses = classes( + css.cardContainer, + css[type], // css.execution + addSpacer ? css.addSpacer : '', + isTarget ? css.target : '', + ); + + return ( + <div className={cardContainerClasses}> + <div className={classes(isExecution ? css.executionCardTitle : css.cardTitle)}> + <h3 title={title}>{title}</h3> + </div> + <div className='cardBody'>{listCardRows()}</div> + </div> + ); + } +} diff --git a/frontend/src/mlmd/LineageCardColumn.tsx b/frontend/src/mlmd/LineageCardColumn.tsx new file mode 100644 index 0000000000..bd90b354af --- /dev/null +++ b/frontend/src/mlmd/LineageCardColumn.tsx @@ -0,0 +1,225 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import grey from '@material-ui/core/colors/grey'; +import React from 'react'; +import { classes, stylesheet } from 'typestyle'; +import { LineageCard } from './LineageCard'; +import { LineageCardType, LineageRow } from './LineageTypes'; +import { CARD_OFFSET, EdgeCanvas } from './EdgeCanvas'; +import { Artifact } from 'src/third_party/mlmd'; +import { ControlledEdgeCanvas } from './ControlledEdgeCanvas'; +import { CARD_ROW_HEIGHT } from './LineageCss'; + +export interface CardDetails { + title: string; + elements: LineageRow[]; +} + +export interface LineageCardColumnProps { + type: LineageCardType; + title: string; + cards: CardDetails[]; + connectedCards?: CardDetails[]; + columnWidth: number; + columnPadding: number; + reverseBindings?: boolean; + skipEdgeCanvas?: boolean; + outputExecutionToOutputArtifactMap?: Map<number, number[]>; + setLineageViewTarget?(artifact: Artifact): void; +} + +const NEXT_ITEM_SAME_CARD_OFFSET = CARD_ROW_HEIGHT; +const NEXT_ITEM_NEXT_CARD_OFFSET = CARD_ROW_HEIGHT + CARD_OFFSET; + +export class LineageCardColumn extends React.Component<LineageCardColumnProps> { + public render(): JSX.Element | null { + const { columnPadding, type, title } = this.props; + + const css = stylesheet({ + mainColumn: { + display: 'inline-block', + justifyContent: 'center', + minHeight: '100%', + padding: `0 ${columnPadding}px`, + width: this.props.columnWidth, + boxSizing: 'border-box', + $nest: { + h2: { + color: grey[600], + fontFamily: 'PublicSans-Regular', + fontSize: '12px', + letterSpacing: '0.5px', + lineHeight: '40px', + textAlign: 'left', + textTransform: 'capitalize', + }, + }, + }, + columnBody: { + position: 'relative', + width: '100%', + }, + columnHeader: { + height: '40px', + margin: '10px 0px', + textAlign: 'left', + width: '100%', + }, + }); + + return ( + <div className={classes(css.mainColumn, type)}> + <div className={classes(css.columnHeader)}> + <h2>{title}</h2> + </div> + <div className={classes(css.columnBody)}>{this.drawColumnContent()}</div> + </div> + ); + } + private jsxFromCardDetails(det: CardDetails, i: number): JSX.Element { + const isNotFirstEl = i > 0; + return ( + <LineageCard + key={i} + title={det.title} + type={this.props.type} + addSpacer={isNotFirstEl} + rows={det.elements} + isTarget={/Target/i.test(this.props.title)} + setLineageViewTarget={this.props.setLineageViewTarget} + /> + ); + } + + private drawColumnContent(): JSX.Element { + const { cards, columnPadding, columnWidth, skipEdgeCanvas } = this.props; + const edgeWidth = columnPadding * 2; + const cardWidth = columnWidth - edgeWidth; + + let edgeCanvases: JSX.Element[] = []; + + if (this.props.outputExecutionToOutputArtifactMap && this.props.connectedCards) { + edgeCanvases = this.buildOutputExecutionToOutputArtifactEdgeCanvases( + this.props.outputExecutionToOutputArtifactMap, + cards, + this.props.connectedCards, + edgeWidth, + cardWidth, + ); + } else { + edgeCanvases.push( + <EdgeCanvas + cardWidth={cardWidth} + edgeWidth={edgeWidth} + cards={cards} + reverseEdges={!!this.props.reverseBindings} + />, + ); + } + + return ( + <React.Fragment> + {skipEdgeCanvas ? null : edgeCanvases} + {cards.map(this.jsxFromCardDetails.bind(this))} + </React.Fragment> + ); + } + + private buildOutputExecutionToOutputArtifactEdgeCanvases( + outputExecutionToOutputArtifactMap: Map<number, number[]>, + artifactCards: CardDetails[], + executionCards: CardDetails[], + edgeWidth: number, + cardWidth: number, + ): JSX.Element[] { + const edgeCanvases: JSX.Element[] = []; + + const artifactIdToCardMap = new Map<number, number>(); + artifactCards.forEach((card, index) => { + card.elements.forEach(row => { + artifactIdToCardMap.set(row.typedResource.resource.getId(), index); + }); + }); + + const executionIdToCardMap = new Map<number, number>(); + executionCards.forEach((card, index) => { + card.elements.forEach(row => { + executionIdToCardMap.set(row.typedResource.resource.getId(), index); + }); + }); + + // Offset of the top of the card relative to the top of the column + let artifactOffset = 0; + let executionOffset = 0; + + let artifactCardIndex: number | undefined; + + let executionIndex = 0; + let executionCardIndex: number | undefined; + let previousExecutionCardIndex: number | undefined; + + outputExecutionToOutputArtifactMap.forEach((artifactIds, executionId) => { + if (executionIndex > 0) { + executionCardIndex = executionIdToCardMap.get(executionId); + if (previousExecutionCardIndex === executionCardIndex) { + // Next execution is on the same card + executionOffset += NEXT_ITEM_SAME_CARD_OFFSET; + } else { + // Next execution is on the next card + executionOffset += NEXT_ITEM_NEXT_CARD_OFFSET; + } + } + + edgeCanvases.push( + <ControlledEdgeCanvas + cardWidth={cardWidth} + edgeWidth={edgeWidth} + reverseEdges={!!this.props.reverseBindings} + artifactIds={artifactIds} + artifactToCardMap={artifactIdToCardMap} + offset={artifactOffset - executionOffset} + outputExecutionToOutputArtifactMap={outputExecutionToOutputArtifactMap} + top={executionOffset} + />, + ); + + // Advance starting artifact offset. + artifactIds.forEach(artifactId => { + if (artifactCardIndex === null) { + artifactCardIndex = artifactIdToCardMap.get(artifactId) as number; + return; + } + + const newArtifactIndex = artifactIdToCardMap.get(artifactId); + if (artifactCardIndex === newArtifactIndex) { + // Next artifact row is on the same card + artifactOffset += NEXT_ITEM_SAME_CARD_OFFSET; + } else { + // Next artifact row is on the next card + artifactOffset += NEXT_ITEM_NEXT_CARD_OFFSET; + } + artifactCardIndex = newArtifactIndex; + }); + + previousExecutionCardIndex = executionIdToCardMap.get(executionId); + + executionIndex++; + }); + + return edgeCanvases; + } +} diff --git a/frontend/src/mlmd/LineageCardRow.tsx b/frontend/src/mlmd/LineageCardRow.tsx new file mode 100644 index 0000000000..a050db46a8 --- /dev/null +++ b/frontend/src/mlmd/LineageCardRow.tsx @@ -0,0 +1,294 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as React from 'react'; +import { Link } from 'react-router-dom'; +import { classes, cssRaw } from 'typestyle'; +import { LineageTypedResource } from './LineageTypes'; +import { getResourceDescription, getResourceName } from './Utils'; +import { Artifact } from 'src/third_party/mlmd'; + +cssRaw(` +.cardRow { + align-items: center; + border-bottom: 1px solid var(--grey-200); + display: flex; + height: 54px; + padding: 6px 0px; + position: relative; +} + +.cardRow .noRadio { + height: 16px; + width: 16px; +} + +.cardRow.clickTarget { + cursor: pointer; +} + +.cardRow .form-radio-container { + position: relative; +} + +.cardRow .form-radio { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + display: inline-block; + position: relative; + background-color: #fff; + border: 1px solid var(--grey-400); + color: var(--blue-500); + top: 0px; + height: 18px; + width: 18px; + border-radius: 50px; + cursor: pointer; + outline: none; +} + +.cardRow .form-radio:checked { + border: 2px solid var(--blue-500); +} + +.cardRow .form-radio:checked::before { + position: absolute; + border-radius: 50%; + top: 50%; + left: 50%; + content: ''; + transform: translate(-50%, -50%); + padding: 5px; + display: block; + background: currentColor; +} + +.cardRow .form-radio:hover { + background-color: var(--grey-100); +} + +.cardRow .form-radio:checked { + background-color: #fff; +} + +.cardRow .form-radio.hover-hint { + color: var(--grey-400); + left: 0; + opacity: 0; + position: absolute; +} + +.cardRow.clickTarget:hover .form-radio.hover-hint { + opacity: 1; +} + +.cardRow.clickTarget .form-radio.hover-hint:checked::before { + background: currentColor; +} + +.cardRow.clickTarget .form-radio.hover-hint:checked { + border: 2px solid var(--grey-400); +} + +.cardRow div { + display: inline-block; + vertical-align: middle; +} + +.cardRow div input { + margin: 10px 10px 0 20px; +} + +.cardRow .rowTitle { + font-size: 12px; + font-family: "PublicSans-SemiBold"; + color: var(--grey-900); + letter-spacing: 0.2px; + line-height: 24px; + text-decoration: none; + text-overflow: ellipsis; + display: inline-block; + white-space: nowrap; + overflow: hidden; +} + +.cardRow .rowTitle:hover { + text-decoration: underline; + color: var(--blue-600); + cursor: pointer; +} + +.cardRow .rowDesc { + font-size: 11px; + color: var(--grey-600); + letter-spacing: 0.3px; + line-height: 12px; +} +.cardRow footer { + overflow: hidden; +} +.cardRow [class^='edge'] { + width: 8px; + height: 8px; + background-color: var(--grey-700); + border-radius: 2px; + position: absolute; + top: 50%; + transform: translateY(-50%) translateX(-50%); +} +.cardRow .edgeRight { + left: 100%; +} + +.cardRow .edgeLeft { + left: 0; +} + +.cardRow.lastRow { + border-bottom: 0px; +} + +`); + +const CLICK_TARGET_CSS_NAME = 'clickTarget'; + +interface LineageCardRowProps { + leftAffordance: boolean; + rightAffordance: boolean; + hideRadio: boolean; + isLastRow: boolean; + isTarget?: boolean; + typedResource: LineageTypedResource; + resourceDetailsRoute: string; + setLineageViewTarget?(artifact: Artifact): void; +} + +export class LineageCardRow extends React.Component<LineageCardRowProps> { + private rowContainerRef: React.RefObject<HTMLDivElement> = React.createRef(); + + constructor(props: LineageCardRowProps) { + super(props); + this.handleClick = this.handleClick.bind(this); + } + + public checkEdgeAffordances(): JSX.Element[] { + const affItems = []; + this.props.leftAffordance && affItems.push(<div className='edgeLeft' key={'edgeLeft'} />); + this.props.rightAffordance && affItems.push(<div className='edgeRight' key={'edgeRight'} />); + return affItems; + } + + public render(): JSX.Element { + const { isLastRow } = this.props; + const cardRowClasses = classes( + 'cardRow', + isLastRow && 'lastRow', + this.canTarget() && 'clickTarget', + ); + + return ( + <div className={cardRowClasses} ref={this.rowContainerRef} onClick={this.handleClick}> + {this.checkRadio()} + <footer> + <Link + className={'rowTitle'} + to={this.props.resourceDetailsRoute} + onMouseEnter={this.handleMouseEnter} + onMouseLeave={this.handleMouseLeave} + > + {getResourceName(this.props.typedResource)} + </Link> + <p className='rowDesc'>{getResourceDescription(this.props.typedResource)}</p> + </footer> + {this.checkEdgeAffordances()} + </div> + ); + } + + private checkRadio(): JSX.Element { + if (this.props.hideRadio) { + return <div className='noRadio' />; + } + + return ( + <div className={'form-radio-container'}> + <input + type='radio' + className='form-radio' + name='' + value='' + onClick={this.handleClick} + checked={this.props.isTarget} + readOnly={true} + /> + <input + type='radio' + className='form-radio hover-hint' + name='' + value='' + onClick={this.handleClick} + checked={true} + readOnly={true} + /> + </div> + ); + } + + private handleClick() { + if (!this.props.setLineageViewTarget || !(this.props.typedResource.type === 'artifact')) return; + this.props.setLineageViewTarget(this.props.typedResource.resource as Artifact); + } + + private handleMouseEnter = (e: React.MouseEvent<HTMLAnchorElement>) => { + if (!e || !e.target || !this.canTarget()) return; + + const element = e.target as HTMLAnchorElement; + if (element.className.match(/\browTitle\b/)) { + this.showRadioHint(false); + } + }; + + private handleMouseLeave = (e: React.MouseEvent<HTMLAnchorElement>) => { + if (!e || !e.target || !this.canTarget()) return; + + const element = e.target as HTMLAnchorElement; + if (element.className.match(/\browTitle\b/)) { + this.showRadioHint(true); + } + }; + + private showRadioHint = (show: boolean) => { + if (this.props.isTarget || !this.rowContainerRef.current) return; + + const rowContainer = this.rowContainerRef.current; + + if (show) { + if (!rowContainer.classList.contains(CLICK_TARGET_CSS_NAME)) { + rowContainer.classList.add(CLICK_TARGET_CSS_NAME); + } + } else { + if (rowContainer.classList.contains(CLICK_TARGET_CSS_NAME)) { + rowContainer.classList.remove(CLICK_TARGET_CSS_NAME); + } + } + }; + + private canTarget = () => { + const { isTarget, typedResource } = this.props; + return !isTarget && typedResource.type === 'artifact'; + }; +} diff --git a/frontend/src/mlmd/LineageCss.ts b/frontend/src/mlmd/LineageCss.ts new file mode 100644 index 0000000000..c43f256b49 --- /dev/null +++ b/frontend/src/mlmd/LineageCss.ts @@ -0,0 +1,25 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export const px = (number: number): string => `${number}px`; + +export const CARD_RADIUS = 6; +export const CARD_CONTAINER_BORDERS = 2; +export const CARD_TITLE_BASE_HEIGHT = 40; +export const CARD_TITLE_BORDER_BOTTOM_HEIGHT = 1; +export const CARD_TITLE_HEIGHT = CARD_TITLE_BASE_HEIGHT + CARD_TITLE_BORDER_BOTTOM_HEIGHT; +export const CARD_SPACER_HEIGHT = 24; +export const CARD_ROW_HEIGHT = 67; diff --git a/frontend/src/mlmd/LineageTypes.ts b/frontend/src/mlmd/LineageTypes.ts new file mode 100644 index 0000000000..e5de3c9ef9 --- /dev/null +++ b/frontend/src/mlmd/LineageTypes.ts @@ -0,0 +1,35 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * This file provides common types used by the Lineage Explorer components + */ +import { Artifact, Execution } from 'src/third_party/mlmd'; + +export type LineageCardType = 'artifact' | 'execution'; +export interface LineageRow { + prev?: boolean; + next?: boolean; + typedResource: LineageTypedResource; + resourceDetailsPageRoute: string; +} + +export type LineageResource = Artifact | Execution; +export type LineageTypedResource = + | { type: 'artifact'; resource: Artifact } + | { type: 'execution'; resource: Execution }; + +export const DEFAULT_LINEAGE_CARD_TYPE = 'artifact' as LineageCardType; diff --git a/frontend/src/mlmd/LineageView.tsx b/frontend/src/mlmd/LineageView.tsx new file mode 100644 index 0000000000..f111cde4e0 --- /dev/null +++ b/frontend/src/mlmd/LineageView.tsx @@ -0,0 +1,447 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// tslint:disable: object-literal-sort-keys + +import groupBy from 'lodash.groupby'; +import * as React from 'react'; +import { classes, stylesheet } from 'typestyle'; +import { commonCss, zIndex } from './Css'; +import { LineageCardColumn, CardDetails } from './LineageCardColumn'; +import { LineageActionBar } from './LineageActionBar'; +import { + Artifact, + ArtifactType, + Event, + Execution, + ExecutionType, + GetArtifactsByIDRequest, + GetEventsByArtifactIDsRequest, + GetEventsByExecutionIDsRequest, + GetExecutionsByIDRequest, + MetadataStoreServicePromiseClient, +} from 'src/third_party/mlmd'; +import { RefObject } from 'react'; +import { getArtifactTypes, getExecutionTypes } from './LineageApi'; +import { getTypeName } from './Utils'; +import { Api } from './Api'; +import { LineageResource } from './LineageTypes'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import { ArtifactHelpers } from './MlmdUtils'; + +const isInputEvent = (event: Event) => + [Event.Type.INPUT.valueOf(), Event.Type.DECLARED_INPUT.valueOf()].includes(event.getType()); +const isOutputEvent = (event: Event) => + [Event.Type.OUTPUT.valueOf(), Event.Type.DECLARED_OUTPUT.valueOf()].includes(event.getType()); + +/** Default size used when columnPadding prop is unset. */ +const DEFAULT_COLUMN_PADDING = 40; + +export interface LineageViewProps { + target: Artifact; + cardWidth?: number; + columnPadding?: number; + buildResourceDetailsPageRoute(resource: LineageResource, typeName: string): string; +} + +interface LineageViewState { + loading: boolean; + // Dynamic value set to 1/5th of the view width. + columnWidth: number; + columnNames: string[]; + columnTypes: string[]; + artifactTypes?: Map<number, ArtifactType>; + executionTypes?: Map<number, ExecutionType>; + inputArtifacts: Artifact[]; + inputExecutions: Execution[]; + target: Artifact; + outputExecutions: Execution[]; + outputArtifacts: Artifact[]; + + // A Map from output execution id to the list of output artifact ids it should be connected to. + // Used to construct the reverse bindings from the Output Artifacts column to the Output + // Executions column. This column is unique because the artifacts point to different + // executions instead of just one. + outputExecutionToOutputArtifactMap: Map<number, number[]>; +} + +const LINEAGE_VIEW_CSS = stylesheet({ + LineageExplorer: { + $nest: { + '&&': { flexFlow: 'row' }, + }, + position: 'relative', + background: '#F8F8F9', + zIndex: 0, + }, +}); + +export class LineageView extends React.Component<LineageViewProps, LineageViewState> { + private readonly actionBarRef: React.Ref<LineageActionBar>; + private readonly containerRef: React.RefObject<HTMLDivElement> = React.createRef(); + private readonly metadataStoreService: MetadataStoreServicePromiseClient; + private artifactTypes: Map<number, ArtifactType>; + private executionTypes: Map<number, ExecutionType>; + + constructor(props: any) { + super(props); + this.metadataStoreService = Api.getInstance().metadataStoreService; + this.actionBarRef = React.createRef<LineageActionBar>(); + this.state = { + loading: true, + columnWidth: 0, + columnNames: ['Input Artifact', '', 'Target', '', 'Output Artifact'], + columnTypes: ['ipa', 'ipx', 'target', 'opx', 'opa'], + inputArtifacts: [], + inputExecutions: [], + outputArtifacts: [], + outputExecutionToOutputArtifactMap: new Map<number, number[]>(), + outputExecutions: [], + target: props.target, + }; + this.loadData = this.loadData.bind(this); + this.setTargetFromActionBar = this.setTargetFromActionBar.bind(this); + this.setTargetFromLineageCard = this.setTargetFromLineageCard.bind(this); + this.setColumnWidth = this.setColumnWidth.bind(this); + this.loadData(this.props.target.getId()); + } + + public componentDidMount(): void { + this.setColumnWidth(); + window.addEventListener('resize', this.setColumnWidth); + } + + public componentWillUnmount(): void { + window.removeEventListener('resize', this.setColumnWidth); + } + + public render(): JSX.Element | null { + if (!this.artifactTypes || !this.state.columnWidth) { + return ( + // Return an empty page to allow componentDidMount() to measure the flex container. + <div className={classes(commonCss.page)} ref={this.containerRef} /> + ); + } + + const { columnNames } = this.state; + const columnPadding = this.props.columnPadding || DEFAULT_COLUMN_PADDING; + return ( + <div className={classes(commonCss.page)} ref={this.containerRef}> + <LineageActionBar + ref={this.actionBarRef} + initialTarget={this.props.target} + setLineageViewTarget={this.setTargetFromActionBar} + /> + <div + className={classes(commonCss.page, LINEAGE_VIEW_CSS.LineageExplorer, 'LineageExplorer')} + > + {this.state.loading && ( + <> + <div className={commonCss.busyOverlay} /> + <CircularProgress + size={48} + className={commonCss.absoluteCenter} + style={{ zIndex: zIndex.BUSY_OVERLAY }} + /> + </> + )} + <LineageCardColumn + type='artifact' + cards={this.buildArtifactCards(this.state.inputArtifacts)} + title={`${columnNames[0]}`} + columnWidth={this.state.columnWidth} + columnPadding={columnPadding} + setLineageViewTarget={this.setTargetFromLineageCard} + /> + <LineageCardColumn + type='execution' + cards={this.buildExecutionCards(this.state.inputExecutions)} + columnPadding={columnPadding} + title={`${columnNames[1]}`} + columnWidth={this.state.columnWidth} + /> + <LineageCardColumn + type='artifact' + cards={this.buildArtifactCards([this.state.target], /* isTarget= */ true)} + columnPadding={columnPadding} + skipEdgeCanvas={true /* Canvas will be drawn by the next canvas's reverse edges. */} + title={`${columnNames[2]}`} + columnWidth={this.state.columnWidth} + /> + <LineageCardColumn + type='execution' + cards={this.buildExecutionCards(this.state.outputExecutions)} + columnPadding={columnPadding} + reverseBindings={true} + title={`${columnNames[3]}`} + columnWidth={this.state.columnWidth} + /> + <LineageCardColumn + type='artifact' + cards={this.buildArtifactCards(this.state.outputArtifacts)} + connectedCards={this.buildExecutionCards(this.state.outputExecutions)} + columnPadding={columnPadding} + columnWidth={this.state.columnWidth} + outputExecutionToOutputArtifactMap={this.state.outputExecutionToOutputArtifactMap} + reverseBindings={true} + setLineageViewTarget={this.setTargetFromLineageCard} + title={`${columnNames[4]}`} + /> + </div> + </div> + ); + } + + private buildArtifactCards(artifacts: Artifact[], isTarget: boolean = false): CardDetails[] { + const orderedCardsByType: CardDetails[] = []; + + let currentType: number; + let currentTypeName: string; + let currentCard: CardDetails; + + artifacts.forEach(artifact => { + if (!currentType || artifact.getTypeId() !== currentType) { + // Create a new card + currentType = artifact.getTypeId(); + currentTypeName = getTypeName(Number(currentType), this.artifactTypes); + currentCard = { + title: currentTypeName, + elements: [], + }; + orderedCardsByType.push(currentCard); + } + + currentCard.elements.push({ + typedResource: { type: 'artifact', resource: artifact }, + resourceDetailsPageRoute: this.props.buildResourceDetailsPageRoute( + artifact, + currentTypeName, + ), + prev: !isTarget || this.state.inputExecutions.length > 0, + next: !isTarget || this.state.outputExecutions.length > 0, + }); + }); + + return orderedCardsByType; + } + + private buildExecutionCards(executions: Execution[]): CardDetails[] { + const executionsByTypeId = groupBy(executions, e => e.getTypeId()); + + return Object.keys(executionsByTypeId).map(typeId => { + const executionTypeName = getTypeName(Number(typeId), this.executionTypes); + const executionsForType = executionsByTypeId[typeId]; + return { + title: executionTypeName, + elements: executionsForType.map(execution => ({ + typedResource: { + type: 'execution', + resource: execution, + }, + resourceDetailsPageRoute: this.props.buildResourceDetailsPageRoute( + execution, + executionTypeName, + ), + prev: true, + next: true, + })), + }; + }); + } + + private async loadData(targetId: number): Promise<string> { + this.setState({ + loading: true, + }); + const [targetArtifactEvents, executionTypes, artifactTypes] = await Promise.all([ + this.getArtifactEvents([targetId]), + getExecutionTypes(this.metadataStoreService), + getArtifactTypes(this.metadataStoreService), + ]); + + Object.assign(this, { artifactTypes, executionTypes }); + + const outputExecutionIds: number[] = []; + const inputExecutionIds: number[] = []; + + for (const event of targetArtifactEvents) { + const executionId = event.getExecutionId(); + + if (isOutputEvent(event)) { + // The input executions column will show executions where the target + // was an output of the execution. + inputExecutionIds.push(executionId); + } else if (isInputEvent(event)) { + // The output executions column will show executions where the target + // was an input for the execution. + outputExecutionIds.push(executionId); + } + } + + const [outputExecutions, inputExecutions] = await Promise.all([ + this.getExecutions(outputExecutionIds), + this.getExecutions(inputExecutionIds), + ]); + + const [inputExecutionEvents, outputExecutionEvents] = await Promise.all([ + this.getExecutionEvents(inputExecutionIds), + this.getExecutionEvents(outputExecutionIds), + ]); + + // Build the list of input artifacts for the input execution + const inputExecutionInputArtifactIds: number[] = []; + inputExecutionEvents.forEach(event => { + if (!isInputEvent(event)) { + return; + } + + inputExecutionInputArtifactIds.push(event.getArtifactId()); + }); + + // This map ensures that output artifacts are fetched in an order that is sorted by the + // connected output execution. + const outputExecutionToOutputArtifactMap: Map<number, number[]> = new Map(); + + const outputExecutionOutputArtifactIds: number[] = []; + + outputExecutionEvents.forEach(event => { + if (!isOutputEvent(event)) { + return; + } + + const executionId = event.getExecutionId(); + if (!outputExecutionToOutputArtifactMap.get(executionId)) { + outputExecutionToOutputArtifactMap.set(executionId, []); + } + + const artifactId = event.getArtifactId(); + outputExecutionOutputArtifactIds.push(artifactId); + + const artifacts = outputExecutionToOutputArtifactMap.get(executionId); + if (artifacts) { + artifacts.push(artifactId); + } + }); + + const [inputArtifacts, outputArtifacts] = await Promise.all([ + this.getArtifacts(inputExecutionInputArtifactIds), + this.getArtifacts(outputExecutionOutputArtifactIds), + ]); + + this.setState({ + loading: false, + inputArtifacts, + inputExecutions, + outputArtifacts, + outputExecutionToOutputArtifactMap, + outputExecutions, + }); + return ''; + } + + // Updates the view and action bar when the target is set from a lineage card. + private setTargetFromLineageCard(target: Artifact): void { + const actionBarRefObject = this.actionBarRef as RefObject<LineageActionBar>; + if (!actionBarRefObject.current) { + return; + } + + actionBarRefObject.current.pushHistory(target); + this.target = target; + } + + // Updates the view when the target is changed from the action bar. + private setTargetFromActionBar(target: Artifact): void { + this.target = target; + } + + private set target(target: Artifact) { + this.loadData(target.getId()).then( + () => { + // Target column should be updated in the same frame as other loaded data. + this.setState({ + target, + }); + }, + error => { + console.error( + `Failed to load related data for artifact: ${ArtifactHelpers.getName(target)}. Details:`, + error, + ); + this.setState({ + loading: false, + }); + }, + ); + } + + private async getExecutions(executionIds: number[]): Promise<Execution[]> { + const request = new GetExecutionsByIDRequest(); + request.setExecutionIdsList(executionIds); + + const response = await this.metadataStoreService.getExecutionsByID(request); + return response.getExecutionsList(); + } + + private async getExecutionEvents(executionIds: number[]): Promise<Event[]> { + const request = new GetEventsByExecutionIDsRequest(); + request.setExecutionIdsList(executionIds); + + const response = await this.metadataStoreService.getEventsByExecutionIDs(request); + return response.getEventsList(); + } + + private async getArtifacts(artifactIds: number[]): Promise<Artifact[]> { + const request = new GetArtifactsByIDRequest(); + request.setArtifactIdsList(artifactIds); + + const response = await this.metadataStoreService.getArtifactsByID(request); + return response.getArtifactsList(); + } + + private async getArtifactEvents(artifactIds: number[]): Promise<Event[]> { + const request = new GetEventsByArtifactIDsRequest(); + request.setArtifactIdsList(artifactIds); + + const response = await this.metadataStoreService.getEventsByArtifactIDs(request); + return response.getEventsList(); + } + + private setColumnWidth(): void { + if (!this.containerRef || !this.containerRef.current) { + return; + } + + this.setState({ + columnWidth: this.containerRef.current.clientWidth / 5, + }); + } +} diff --git a/frontend/src/mlmd/MlmdUtils.test.ts b/frontend/src/mlmd/MlmdUtils.test.ts new file mode 100644 index 0000000000..f940b7ca51 --- /dev/null +++ b/frontend/src/mlmd/MlmdUtils.test.ts @@ -0,0 +1,151 @@ +/** + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Api } from 'src/mlmd/library'; +import { filterLinkedArtifactsByType, getArtifactName, getRunContext } from 'src/mlmd/MlmdUtils'; +import { expectWarnings, testBestPractices } from 'src/TestUtils'; +import { + Artifact, + ArtifactType, + Context, + Event, + GetContextByTypeAndNameRequest, + GetContextByTypeAndNameResponse, +} from 'src/third_party/mlmd'; +import { Workflow, WorkflowSpec, WorkflowStatus } from 'third_party/argo-ui/argo_template'; + +testBestPractices(); + +const WORKFLOW_NAME = 'run-st448'; +const RUN_ID = 'abcdefghijk'; +const WORKFLOW_EMPTY: Workflow = { + metadata: { + name: WORKFLOW_NAME, + }, + // there are many unrelated fields here, omit them + spec: {} as WorkflowSpec, + status: {} as WorkflowStatus, +}; + +const V2_CONTEXT = new Context(); +V2_CONTEXT.setName(RUN_ID); +V2_CONTEXT.setType('system.PipelineRun'); + +const TFX_CONTEXT = new Context(); +TFX_CONTEXT.setName('run-st448'); +TFX_CONTEXT.setType('pipeline_run'); + +const V1_CONTEXT = new Context(); +V1_CONTEXT.setName(WORKFLOW_NAME); +V1_CONTEXT.setType('KfpRun'); + +describe('MlmdUtils', () => { + describe('getRunContext', () => { + it('gets KFP v2 context', async () => { + mockGetContextByTypeAndName([V2_CONTEXT]); + const context = await getRunContext( + { + ...WORKFLOW_EMPTY, + metadata: { + ...WORKFLOW_EMPTY.metadata, + annotations: { 'pipelines.kubeflow.org/v2_pipeline': 'true' }, + }, + }, + RUN_ID, + ); + expect(context).toEqual(V2_CONTEXT); + }); + + it('gets TFX context', async () => { + mockGetContextByTypeAndName([TFX_CONTEXT, V1_CONTEXT]); + const context = await getRunContext(WORKFLOW_EMPTY, RUN_ID); + expect(context).toEqual(TFX_CONTEXT); + }); + + it('gets KFP v1 context', async () => { + const verify = expectWarnings(); + mockGetContextByTypeAndName([V1_CONTEXT]); + const context = await getRunContext(WORKFLOW_EMPTY, RUN_ID); + expect(context).toEqual(V1_CONTEXT); + verify(); + }); + + it('throws error when not found', async () => { + const verify = expectWarnings(); + mockGetContextByTypeAndName([]); + await expect(getRunContext(WORKFLOW_EMPTY, RUN_ID)).rejects.toThrow(); + verify(); + }); + }); + + describe('getArtifactName', () => { + it('get the first key of steps list', () => { + const path = new Event.Path(); + path.getStepsList().push(new Event.Path.Step().setKey('key1')); + path.getStepsList().push(new Event.Path.Step().setKey('key2')); + const event = new Event(); + event.setPath(path); + const linkedArtifact = { event: event, artifact: new Artifact() }; + expect(getArtifactName(linkedArtifact)).toEqual('key1'); + }); + }); + + describe('filterLinkedArtifactsByType', () => { + it('filter input artifacts', () => { + const artifactTypeName = 'INPUT'; + const artifactTypes = [ + new ArtifactType().setId(1).setName('INPUT'), + new ArtifactType().setId(2).setName('OUTPUT'), + ]; + const inputArtifact = { artifact: new Artifact().setTypeId(1), event: new Event() }; + const outputArtifact = { artifact: new Artifact().setTypeId(2), event: new Event() }; + const artifacts = [inputArtifact, outputArtifact]; + expect(filterLinkedArtifactsByType(artifactTypeName, artifactTypes, artifacts)).toEqual([ + inputArtifact, + ]); + }); + + it('filter output artifacts', () => { + const artifactTypeName = 'OUTPUT'; + const artifactTypes = [ + new ArtifactType().setId(1).setName('INPUT'), + new ArtifactType().setId(2).setName('OUTPUT'), + ]; + const inputArtifact = { artifact: new Artifact().setTypeId(1), event: new Event() }; + const outputArtifact = { artifact: new Artifact().setTypeId(2), event: new Event() }; + const artifacts = [inputArtifact, outputArtifact]; + expect(filterLinkedArtifactsByType(artifactTypeName, artifactTypes, artifacts)).toEqual([ + outputArtifact, + ]); + }); + }); +}); + +function mockGetContextByTypeAndName(contexts: Context[]) { + const getContextByTypeAndNameSpy = jest.spyOn( + Api.getInstance().metadataStoreService, + 'getContextByTypeAndName', + ); + getContextByTypeAndNameSpy.mockImplementation((req: GetContextByTypeAndNameRequest) => { + const response = new GetContextByTypeAndNameResponse(); + const found = contexts.find( + context => + context.getType() === req.getTypeName() && context.getName() === req.getContextName(), + ); + response.setContext(found); + return response; + }); +} diff --git a/frontend/src/mlmd/MlmdUtils.ts b/frontend/src/mlmd/MlmdUtils.ts new file mode 100644 index 0000000000..af76462579 --- /dev/null +++ b/frontend/src/mlmd/MlmdUtils.ts @@ -0,0 +1,317 @@ +/** + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Struct } from 'google-protobuf/google/protobuf/struct_pb'; +import { logger } from 'src/lib/Utils'; +import { isV2Pipeline } from 'src/lib/v2/WorkflowUtils'; +import { + Api, + ArtifactCustomProperties, + ArtifactProperties, + ExecutionCustomProperties, + ExecutionProperties, + getResourceProperty, + getResourcePropertyViaFallBack, +} from 'src/mlmd/library'; +import { + Artifact, + ArtifactType, + Context, + Event, + Execution, + GetArtifactsByIDRequest, + GetArtifactsByIDResponse, + GetArtifactTypesRequest, + GetArtifactTypesResponse, + GetContextByTypeAndNameRequest, + GetEventsByExecutionIDsRequest, + GetEventsByExecutionIDsResponse, + GetExecutionsByContextRequest, +} from 'src/third_party/mlmd'; +import { Workflow } from 'third_party/argo-ui/argo_template'; + +async function getContext({ type, name }: { type: string; name: string }): Promise<Context> { + if (type === '') { + throw new Error('Failed to getContext: type is empty.'); + } + if (name === '') { + throw new Error('Failed to getContext: name is empty.'); + } + const request = new GetContextByTypeAndNameRequest(); + request.setTypeName(type); + request.setContextName(name); + try { + const res = await Api.getInstance().metadataStoreService.getContextByTypeAndName(request); + const context = res.getContext(); + if (context == null) { + throw new Error('Cannot find specified context'); + } + return context; + } catch (err) { + err.message = `Cannot find context with ${JSON.stringify(request.toObject())}: ` + err.message; + throw err; + } +} + +/** + * @throws error when network error, or not found + */ +async function getTfxRunContext(argoWorkflowName: string): Promise<Context> { + // Context: https://github.com/kubeflow/pipelines/issues/6138 + // Require TFX version to be >= 1.2.0. + return await getContext({ name: argoWorkflowName, type: 'pipeline_run' }); +} + +/** + * @throws error when network error, or not found + */ +async function getKfpRunContext(argoWorkflowName: string): Promise<Context> { + return await getContext({ name: argoWorkflowName, type: 'KfpRun' }); +} + +async function getKfpV2RunContext(runID: string): Promise<Context> { + return await getContext({ name: runID, type: 'system.PipelineRun' }); +} + +export async function getRunContext(workflow: Workflow, runID: string): Promise<Context> { + console.log(workflow, runID); + const workflowName = workflow?.metadata?.name || ''; + if (isV2Pipeline(workflow)) { + return await getKfpV2RunContext(runID); + } + try { + return await getTfxRunContext(workflowName); + } catch (err) { + logger.warn(`Cannot find tfx run context (this is expected for non tfx runs)`, err); + return await getKfpRunContext(workflowName); + } +} + +/** + * @throws error when network error + */ +export async function getExecutionsFromContext(context: Context): Promise<Execution[]> { + const request = new GetExecutionsByContextRequest(); + request.setContextId(context.getId()); + try { + const res = await Api.getInstance().metadataStoreService.getExecutionsByContext(request); + const list = res.getExecutionsList(); + if (list == null) { + throw new Error('response.getExecutionsList() is empty'); + } + return list; + } catch (err) { + err.message = + `Cannot find executions by context ${context.getId()} with name ${context.getName()}: ` + + err.message; + throw err; + } +} + +export enum KfpExecutionProperties { + // kfp_pod_name is kept for backward compatibility. + // KFP v1 and TFX logs kfp_pod_name property, but KFP v2 logs pod_name. + KFP_POD_NAME = 'kfp_pod_name', + POD_NAME = 'pod_name', + DISPLAY_NAME = 'display_name', + TASK_NAME = 'task_name', +} + +const EXECUTION_PROPERTY_REPOS = [ExecutionProperties, ExecutionCustomProperties]; + +export const ExecutionHelpers = { + getWorkspace(execution: Execution): string | number | undefined { + return ( + getResourcePropertyViaFallBack(execution, EXECUTION_PROPERTY_REPOS, ['RUN_ID']) || + getStringProperty(execution, ExecutionCustomProperties.WORKSPACE, true) || + getStringProperty(execution, ExecutionProperties.PIPELINE_NAME) || + undefined + ); + }, + getName(execution: Execution): string { + return `${getStringProperty(execution, KfpExecutionProperties.DISPLAY_NAME, true) || + getStringProperty(execution, KfpExecutionProperties.TASK_NAME, true) || + getStringProperty(execution, ExecutionProperties.NAME) || + getStringProperty(execution, ExecutionProperties.COMPONENT_ID) || + getStringProperty(execution, ExecutionCustomProperties.TASK_ID, true) || + // TFX 1.2.0 executions do not have any of the above, adding pod name as a fallback name + getStringProperty(execution, KfpExecutionProperties.KFP_POD_NAME, true) || + '(No name)'}`; + }, + getState(execution: Execution): string | number | undefined { + return getStringProperty(execution, ExecutionProperties.STATE) || undefined; + }, + getKfpPod(execution: Execution): string | undefined { + return ( + getStringProperty(execution, KfpExecutionProperties.POD_NAME, true) || + getStringProperty(execution, KfpExecutionProperties.KFP_POD_NAME) || + getStringProperty(execution, KfpExecutionProperties.KFP_POD_NAME, true) || + undefined + ); + }, +}; + +export enum KfpArtifactProperties { + DISPLAY_NAME = 'display_name', +} + +export const ArtifactHelpers = { + getName(a: Artifact): string { + const name = + getResourceProperty(a, KfpArtifactProperties.DISPLAY_NAME, true) || + getResourceProperty(a, ArtifactProperties.NAME) || + getResourceProperty(a, ArtifactCustomProperties.NAME, true) || + '(No name)'; + return `${name}`; + }, +}; + +function getStringProperty( + resource: Artifact | Execution, + propertyName: string, + fromCustomProperties = false, +): string | undefined { + const value = getResourceProperty(resource, propertyName, fromCustomProperties); + return getStringValue(value); +} + +function getStringValue(value?: string | number | Struct | null): string | undefined { + if (typeof value != 'string') { + return undefined; + } + return value; +} + +async function getEventByExecution(execution: Execution): Promise<Event[]> { + const executionId = execution.getId(); + if (!executionId) { + throw new Error('Execution must have an ID'); + } + + const request = new GetEventsByExecutionIDsRequest().addExecutionIds(executionId); + let response: GetEventsByExecutionIDsResponse; + try { + response = await Api.getInstance().metadataStoreService.getEventsByExecutionIDs(request); + } catch (err) { + err.message = 'Failed to getEventsByExecutionIDs: ' + err.message; + throw err; + } + return response.getEventsList(); +} + +// An artifact which has associated event. +// You can retrieve artifact name from event.path.steps[0].key +export interface LinkedArtifact { + event: Event; + artifact: Artifact; +} + +export async function getLinkedArtifactsByEvents(events: Event[]): Promise<LinkedArtifact[]> { + const artifactIds = events + .filter(event => event.getArtifactId()) + .map(event => event.getArtifactId()); + + const artifactsRequest = new GetArtifactsByIDRequest().setArtifactIdsList(artifactIds); + let artifactsRes: GetArtifactsByIDResponse; + try { + artifactsRes = await Api.getInstance().metadataStoreService.getArtifactsByID(artifactsRequest); + } catch (artifactsErr) { + artifactsErr.message = 'Failed to getArtifactsByID: ' + artifactsErr.message; + throw artifactsErr; + } + + const artifactMap = new Map(); + for (const [, artifactEntry] of Object.entries(artifactsRes.getArtifactsList())) { + artifactMap.set(artifactEntry.getId(), artifactEntry); + } + + return events.map(event => { + const artifact = artifactMap.get(event.getArtifactId()); + return { event: event, artifact: artifact }; + }); +} + +export async function getLinkedArtifactsByExecution( + execution: Execution, +): Promise<LinkedArtifact[]> { + const event = await getEventByExecution(execution); + return getLinkedArtifactsByEvents(event); +} + +export function filterEventWithInputArtifact(linkedArtifact: LinkedArtifact[]) { + return linkedArtifact.filter(obj => obj.event.getType() === Event.Type.INPUT); +} + +export function filterEventWithOutputArtifact(linkedArtifact: LinkedArtifact[]) { + return linkedArtifact.filter(obj => obj.event.getType() === Event.Type.OUTPUT); +} + +/** + * @throws error when network error or invalid data + */ +export async function getOutputArtifactsInExecution(execution: Execution): Promise<Artifact[]> { + const linkedArtifacts = await getLinkedArtifactsByExecution(execution); + return filterEventWithOutputArtifact(linkedArtifacts).map( + linkedArtifact => linkedArtifact.artifact, + ); +} +export async function getOutputLinkedArtifactsInExecution( + execution: Execution, +): Promise<LinkedArtifact[]> { + const linkedArtifacts = await getLinkedArtifactsByExecution(execution); + return filterEventWithOutputArtifact(linkedArtifacts); +} + +export async function getArtifactTypes(): Promise<ArtifactType[]> { + const request = new GetArtifactTypesRequest(); + let res: GetArtifactTypesResponse; + try { + res = await Api.getInstance().metadataStoreService.getArtifactTypes(request); + } catch (err) { + err.message = 'Failed to getArtifactTypes: ' + err.message; + throw err; + } + return res.getArtifactTypesList(); +} + +export function filterArtifactsByType( + artifactTypeName: string, + artifactTypes: ArtifactType[], + artifacts: Artifact[], +): Artifact[] { + const artifactTypeIds = artifactTypes + .filter(artifactType => artifactType.getName() === artifactTypeName) + .map(artifactType => artifactType.getId()); + return artifacts.filter(artifact => artifactTypeIds.includes(artifact.getTypeId())); +} + +export function filterLinkedArtifactsByType( + artifactTypeName: string, + artifactTypes: ArtifactType[], + artifacts: LinkedArtifact[], +): LinkedArtifact[] { + const artifactTypeIds = artifactTypes + .filter(artifactType => artifactType.getName() === artifactTypeName) + .map(artifactType => artifactType.getId()); + return artifacts.filter(x => artifactTypeIds.includes(x.artifact.getTypeId())); +} + +export function getArtifactName(linkedArtifact: LinkedArtifact): string | undefined { + return linkedArtifact.event + .getPath() + ?.getStepsList()[0] + .getKey(); +} diff --git a/frontend/src/mlmd/TestUtils.ts b/frontend/src/mlmd/TestUtils.ts new file mode 100644 index 0000000000..071c7a2061 --- /dev/null +++ b/frontend/src/mlmd/TestUtils.ts @@ -0,0 +1,67 @@ +/* + * Copyright 2018,2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Artifact, Value } from 'src/third_party/mlmd'; +import { ArtifactCustomProperties, ArtifactProperties } from './Api'; + +export const doubleValue = (number: number) => { + const value = new Value(); + value.setDoubleValue(number); + return value; +}; + +export const intValue = (number: number) => { + const value = new Value(); + value.setIntValue(number); + return value; +}; + +export const stringValue = (string: String) => { + const value = new Value(); + value.setStringValue(String(string)); + return value; +}; + +export const buildTestModel = () => { + const model = new Artifact(); + model.setId(1); + model.setTypeId(1); + model.setUri('gs://my-bucket/mnist'); + model.getPropertiesMap().set(ArtifactProperties.NAME, stringValue('test model')); + model.getPropertiesMap().set(ArtifactProperties.DESCRIPTION, stringValue('A really great model')); + model.getPropertiesMap().set(ArtifactProperties.VERSION, stringValue('v1')); + model + .getPropertiesMap() + .set(ArtifactProperties.CREATE_TIME, stringValue('2019-06-12T01:21:48.259263Z')); + model + .getPropertiesMap() + .set( + ArtifactProperties.ALL_META, + stringValue( + '{"hyperparameters": {"early_stop": true, ' + + '"layers": [10, 3, 1], "learning_rate": 0.5}, ' + + '"model_type": "neural network", ' + + '"training_framework": {"name": "tensorflow", "version": "v1.0"}}', + ), + ); + model + .getCustomPropertiesMap() + .set(ArtifactCustomProperties.WORKSPACE, stringValue('workspace-1')); + model.getCustomPropertiesMap().set(ArtifactCustomProperties.RUN, stringValue('1')); + return model; +}; + +export const testModel = buildTestModel(); diff --git a/frontend/src/mlmd/Utils.test.ts b/frontend/src/mlmd/Utils.test.ts new file mode 100644 index 0000000000..131f96aabd --- /dev/null +++ b/frontend/src/mlmd/Utils.test.ts @@ -0,0 +1,85 @@ +/* + * Copyright 2018,2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { doubleValue, intValue, stringValue } from './TestUtils'; +import { Artifact, Value } from 'src/third_party/mlmd'; +import { getMetadataValue, getResourceProperty } from './Utils'; + +describe('Utils', () => { + describe('getResourceProperty', () => { + it('returns null if resource has no properties', () => { + expect(getResourceProperty(new Artifact(), 'testPropName')).toBeNull(); + }); + + it('returns null if resource has no custom properties', () => { + expect(getResourceProperty(new Artifact(), 'testCustomPropName', true)).toBeNull(); + }); + + it('returns null if resource has no property with the provided name', () => { + const resource = new Artifact(); + resource.getPropertiesMap().set('somePropName', doubleValue(123)); + expect(getResourceProperty(resource, 'testPropName')).toBeNull(); + }); + + it('returns if resource has no property with specified name if fromCustomProperties is false', () => { + const resource = new Artifact(); + resource.getCustomPropertiesMap().set('testCustomPropName', doubleValue(123)); + expect( + getResourceProperty(resource, 'testCustomPropName', /* fromCustomProperties= */ false), + ).toBeNull(); + }); + + it('returns if resource has no custom property with specified name if fromCustomProperties is true', () => { + const resource = new Artifact(); + resource.getPropertiesMap().set('testPropName', doubleValue(123)); + expect( + getResourceProperty(resource, 'testPropName', /* fromCustomProperties= */ true), + ).toBeNull(); + }); + + it('returns the value of the property with the provided name', () => { + const resource = new Artifact(); + resource.getPropertiesMap().set('testPropName', doubleValue(123)); + expect(getResourceProperty(resource, 'testPropName')).toEqual(123); + }); + + it('returns the value of the custom property with the provided name', () => { + const resource = new Artifact(); + resource.getCustomPropertiesMap().set('testCustomPropName', stringValue('abc')); + expect( + getResourceProperty(resource, 'testCustomPropName', /* fromCustomProperties= */ true), + ).toEqual('abc'); + }); + }); + + describe('getMetadataValue', () => { + it('returns a value of type double', () => { + expect(getMetadataValue(doubleValue(123))).toEqual(123); + }); + + it('returns a value of type int', () => { + expect(getMetadataValue(intValue(123))).toEqual(123); + }); + + it('returns a value of type string', () => { + expect(getMetadataValue(stringValue('abc'))).toEqual('abc'); + }); + + it('returns an empty string if Value has no value', () => { + expect(getMetadataValue(new Value())).toEqual(''); + }); + }); +}); diff --git a/frontend/src/mlmd/Utils.tsx b/frontend/src/mlmd/Utils.tsx new file mode 100644 index 0000000000..43e4f2704c --- /dev/null +++ b/frontend/src/mlmd/Utils.tsx @@ -0,0 +1,113 @@ +/* + * Copyright 2019,2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + ArtifactCustomProperties, + ArtifactProperties, + ExecutionCustomProperties, + ExecutionProperties, +} from './Api'; +import { ArtifactTypeMap } from './LineageApi'; +import { Artifact, Execution, Value } from 'src/third_party/mlmd'; +import { LineageTypedResource } from './LineageTypes'; +import { Struct } from 'google-protobuf/google/protobuf/struct_pb'; +import { ArtifactHelpers, ExecutionHelpers } from './MlmdUtils'; + +const ARTIFACT_FIELD_REPOS = [ArtifactProperties, ArtifactCustomProperties]; +const EXECUTION_FIELD_REPOS = [ExecutionProperties, ExecutionCustomProperties]; + +type RepoType = + | typeof ArtifactCustomProperties + | typeof ArtifactProperties + | typeof ExecutionCustomProperties + | typeof ExecutionProperties; + +export function getResourceProperty( + resource: Artifact | Execution, + propertyName: string, + fromCustomProperties = false, +): string | number | Struct | null { + const props = fromCustomProperties + ? resource.getCustomPropertiesMap() + : resource.getPropertiesMap(); + + return (props && props.get(propertyName) && getMetadataValue(props.get(propertyName))) || null; +} + +export function getResourcePropertyViaFallBack( + res: Artifact | Execution, + fieldRepos: RepoType[], + fields: string[], +): string { + const prop = + fields.reduce( + (value: string, field: string) => + value || + fieldRepos.reduce( + (v: string, repo: RepoType, isCustomProp) => + v || // eslint-disable-next-line no-sequences + ((field in repo && getResourceProperty(res, repo[field], !!isCustomProp)) as string), + '', + ), + '', + ) || ''; + return prop as string; +} + +export function getResourceName(typedResource: LineageTypedResource): string { + return typedResource.type === 'artifact' + ? ArtifactHelpers.getName(typedResource.resource) + : ExecutionHelpers.getName(typedResource.resource); +} + +/** + * Promisified sleep operation + * @param t Time to sleep for in ms + */ +export const sleep = (t: number): Promise<void> => new Promise(res => setTimeout(res, t)); + +export function getResourceDescription(typedResource: LineageTypedResource): string { + return getResourcePropertyViaFallBack( + typedResource.resource, + typedResource.type === 'artifact' ? ARTIFACT_FIELD_REPOS : EXECUTION_FIELD_REPOS, + ['RUN_ID', 'RUN', 'PIPELINE_NAME', 'WORKSPACE'], + ); +} + +export function getTypeName(typeId: number, artifactTypes: ArtifactTypeMap): string { + return artifactTypes && artifactTypes.get(typeId!) + ? artifactTypes.get(typeId!)!.getName() + : String(typeId); +} + +export function getMetadataValue(value?: Value): string | number | Struct | undefined { + if (!value) { + return ''; + } + + switch (value.getValueCase()) { + case Value.ValueCase.DOUBLE_VALUE: + return value.getDoubleValue(); + case Value.ValueCase.INT_VALUE: + return value.getIntValue(); + case Value.ValueCase.STRING_VALUE: + return value.getStringValue(); + case Value.ValueCase.STRUCT_VALUE: + return value.getStructValue(); + case Value.ValueCase.VALUE_NOT_SET: + return ''; + } +} diff --git a/frontend/src/mlmd/__snapshots__/LineageActionBar.test.tsx.snap b/frontend/src/mlmd/__snapshots__/LineageActionBar.test.tsx.snap new file mode 100644 index 0000000000..83ae4e4af8 --- /dev/null +++ b/frontend/src/mlmd/__snapshots__/LineageActionBar.test.tsx.snap @@ -0,0 +1,1268 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`LineageActionBar Adds the artifact to the history state and DOM when pushHistory() is called 1`] = ` +<LineageActionBar + initialTarget={ + Object { + "array": Array [ + 1, + 1, + "gs://my-bucket/mnist", + Array [], + Array [], + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": Object { + "4": Object { + "arrClean": false, + "arr_": Array [], + "map_": Object { + "__ALL_META__": Object { + "key": "__ALL_META__", + "value": Array [ + undefined, + undefined, + "{\\"hyperparameters\\": {\\"early_stop\\": true, \\"layers\\": [10, 3, 1], \\"learning_rate\\": 0.5}, \\"model_type\\": \\"neural network\\", \\"training_framework\\": {\\"name\\": \\"tensorflow\\", \\"version\\": \\"v1.0\\"}}", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "{\\"hyperparameters\\": {\\"early_stop\\": true, \\"layers\\": [10, 3, 1], \\"learning_rate\\": 0.5}, \\"model_type\\": \\"neural network\\", \\"training_framework\\": {\\"name\\": \\"tensorflow\\", \\"version\\": \\"v1.0\\"}}", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "create_time": Object { + "key": "create_time", + "value": Array [ + undefined, + undefined, + "2019-06-12T01:21:48.259263Z", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "2019-06-12T01:21:48.259263Z", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "description": Object { + "key": "description", + "value": Array [ + undefined, + undefined, + "A really great model", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "A really great model", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "name": Object { + "key": "name", + "value": Array [ + undefined, + undefined, + "test model", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "test model", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "version": Object { + "key": "version", + "value": Array [ + undefined, + undefined, + "v1", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "v1", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + }, + "valueCtor_": [Function], + }, + "5": Object { + "arrClean": false, + "arr_": Array [], + "map_": Object { + "__kf_run__": Object { + "key": "__kf_run__", + "value": Array [ + undefined, + undefined, + "1", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "1", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "__kf_workspace__": Object { + "key": "__kf_workspace__", + "value": Array [ + undefined, + undefined, + "workspace-1", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "workspace-1", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + }, + "valueCtor_": [Function], + }, + }, + } + } + setLineageViewTarget={[MockFunction]} +> + <div + className="container flex" + > + <div + className="breadcrumbContainer" + > + <span + className="workspace" + key="workspace" + > + workspace-1 + </span> + <aside + className="workspaceSep" + key="workspace-sep" + /> + <button + className="breadcrumbInactive" + disabled={false} + key="breadcrumb-0" + onClick={[Function]} + > + test model + </button> + <BreadcrumbSeparator + key="separator-0" + > + <div + className="flex" + > + <pure(ArrowRightAltIcon) + className="breadcrumbSeparator" + > + <ArrowRightAltIcon + className="breadcrumbSeparator" + > + <WithStyles(SvgIcon) + className="breadcrumbSeparator" + > + <SvgIcon + className="breadcrumbSeparator" + classes={ + Object { + "colorAction": "MuiSvgIcon-colorAction-33", + "colorDisabled": "MuiSvgIcon-colorDisabled-35", + "colorError": "MuiSvgIcon-colorError-34", + "colorPrimary": "MuiSvgIcon-colorPrimary-31", + "colorSecondary": "MuiSvgIcon-colorSecondary-32", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-36", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-38", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-37", + "root": "MuiSvgIcon-root-30", + } + } + color="inherit" + component="svg" + fontSize="default" + viewBox="0 0 24 24" + > + <svg + aria-hidden="true" + className="MuiSvgIcon-root-30 breadcrumbSeparator" + focusable="false" + role="presentation" + viewBox="0 0 24 24" + > + <path + d="M0 0h24v24H0z" + fill="none" + /> + <path + d="M16.01 11H4v2h12.01v3L20 12l-3.99-4z" + /> + </svg> + </SvgIcon> + </WithStyles(SvgIcon)> + </ArrowRightAltIcon> + </pure(ArrowRightAltIcon)> + </div> + </BreadcrumbSeparator> + <button + className="breadcrumbActive" + disabled={true} + key="breadcrumb-1" + onClick={[Function]} + > + (No name) + </button> + </div> + <div> + <WithStyles(Button) + className="actionButton" + disabled={false} + onClick={[Function]} + > + <Button + className="actionButton" + classes={ + Object { + "colorInherit": "MuiButton-colorInherit-22", + "contained": "MuiButton-contained-12", + "containedPrimary": "MuiButton-containedPrimary-13", + "containedSecondary": "MuiButton-containedSecondary-14", + "disabled": "MuiButton-disabled-21", + "extendedFab": "MuiButton-extendedFab-19", + "fab": "MuiButton-fab-18", + "flat": "MuiButton-flat-6", + "flatPrimary": "MuiButton-flatPrimary-7", + "flatSecondary": "MuiButton-flatSecondary-8", + "focusVisible": "MuiButton-focusVisible-20", + "fullWidth": "MuiButton-fullWidth-26", + "label": "MuiButton-label-2", + "mini": "MuiButton-mini-23", + "outlined": "MuiButton-outlined-9", + "outlinedPrimary": "MuiButton-outlinedPrimary-10", + "outlinedSecondary": "MuiButton-outlinedSecondary-11", + "raised": "MuiButton-raised-15", + "raisedPrimary": "MuiButton-raisedPrimary-16", + "raisedSecondary": "MuiButton-raisedSecondary-17", + "root": "MuiButton-root-1", + "sizeLarge": "MuiButton-sizeLarge-25", + "sizeSmall": "MuiButton-sizeSmall-24", + "text": "MuiButton-text-3", + "textPrimary": "MuiButton-textPrimary-4", + "textSecondary": "MuiButton-textSecondary-5", + } + } + color="default" + component="button" + disableFocusRipple={false} + disabled={false} + fullWidth={false} + mini={false} + onClick={[Function]} + size="medium" + type="button" + variant="text" + > + <WithStyles(ButtonBase) + className="MuiButton-root-1 MuiButton-text-3 MuiButton-flat-6 actionButton" + component="button" + disabled={false} + focusRipple={true} + focusVisibleClassName="MuiButton-focusVisible-20" + onClick={[Function]} + type="button" + > + <ButtonBase + centerRipple={false} + className="MuiButton-root-1 MuiButton-text-3 MuiButton-flat-6 actionButton" + classes={ + Object { + "disabled": "MuiButtonBase-disabled-28", + "focusVisible": "MuiButtonBase-focusVisible-29", + "root": "MuiButtonBase-root-27", + } + } + component="button" + disableRipple={false} + disableTouchRipple={false} + disabled={false} + focusRipple={true} + focusVisibleClassName="MuiButton-focusVisible-20" + onClick={[Function]} + tabIndex="0" + type="button" + > + <button + className="MuiButtonBase-root-27 MuiButton-root-1 MuiButton-text-3 MuiButton-flat-6 actionButton" + disabled={false} + onBlur={[Function]} + onClick={[Function]} + onContextMenu={[Function]} + onFocus={[Function]} + onKeyDown={[Function]} + onKeyUp={[Function]} + onMouseDown={[Function]} + onMouseLeave={[Function]} + onMouseUp={[Function]} + onTouchEnd={[Function]} + onTouchMove={[Function]} + onTouchStart={[Function]} + tabIndex="0" + type="button" + > + <span + className="MuiButton-label-2" + > + <pure(ReplayIcon)> + <ReplayIcon> + <WithStyles(SvgIcon)> + <SvgIcon + classes={ + Object { + "colorAction": "MuiSvgIcon-colorAction-33", + "colorDisabled": "MuiSvgIcon-colorDisabled-35", + "colorError": "MuiSvgIcon-colorError-34", + "colorPrimary": "MuiSvgIcon-colorPrimary-31", + "colorSecondary": "MuiSvgIcon-colorSecondary-32", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-36", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-38", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-37", + "root": "MuiSvgIcon-root-30", + } + } + color="inherit" + component="svg" + fontSize="default" + viewBox="0 0 24 24" + > + <svg + aria-hidden="true" + className="MuiSvgIcon-root-30" + focusable="false" + role="presentation" + viewBox="0 0 24 24" + > + <path + d="M0 0h24v24H0z" + fill="none" + /> + <path + d="M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z" + /> + </svg> + </SvgIcon> + </WithStyles(SvgIcon)> + </ReplayIcon> + </pure(ReplayIcon)> + Reset + </span> + <NoSsr + defer={false} + fallback={null} + > + <WithStyles(TouchRipple) + center={false} + innerRef={[Function]} + > + <TouchRipple + center={false} + classes={ + Object { + "child": "MuiTouchRipple-child-43", + "childLeaving": "MuiTouchRipple-childLeaving-44", + "childPulsate": "MuiTouchRipple-childPulsate-45", + "ripple": "MuiTouchRipple-ripple-40", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-42", + "rippleVisible": "MuiTouchRipple-rippleVisible-41", + "root": "MuiTouchRipple-root-39", + } + } + > + <TransitionGroup + childFactory={[Function]} + className="MuiTouchRipple-root-39" + component="span" + enter={true} + exit={true} + > + <span + className="MuiTouchRipple-root-39" + /> + </TransitionGroup> + </TouchRipple> + </WithStyles(TouchRipple)> + </NoSsr> + </button> + </ButtonBase> + </WithStyles(ButtonBase)> + </Button> + </WithStyles(Button)> + </div> + </div> +</LineageActionBar> +`; + +exports[`LineageActionBar Renders correctly for a given initial target 1`] = ` +<div + className="container flex" +> + <div + className="breadcrumbContainer" + > + <span + className="workspace" + key="workspace" + > + workspace-1 + </span> + <aside + className="workspaceSep" + key="workspace-sep" + /> + <button + className="breadcrumbActive" + disabled={true} + key="breadcrumb-0" + onClick={[Function]} + > + test model + </button> + </div> + <div> + <WithStyles(Button) + className="actionButton" + disabled={false} + onClick={[Function]} + > + <pure(ReplayIcon) /> + Reset + </WithStyles(Button)> + </div> +</div> +`; + +exports[`LineageActionBar Sets history to the initial prop when the reset button is clicked 1`] = ` +<LineageActionBar + initialTarget={ + Object { + "array": Array [ + 1, + 1, + "gs://my-bucket/mnist", + Array [], + Array [], + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": Object { + "4": Object { + "arrClean": false, + "arr_": Array [], + "map_": Object { + "__ALL_META__": Object { + "key": "__ALL_META__", + "value": Array [ + undefined, + undefined, + "{\\"hyperparameters\\": {\\"early_stop\\": true, \\"layers\\": [10, 3, 1], \\"learning_rate\\": 0.5}, \\"model_type\\": \\"neural network\\", \\"training_framework\\": {\\"name\\": \\"tensorflow\\", \\"version\\": \\"v1.0\\"}}", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "{\\"hyperparameters\\": {\\"early_stop\\": true, \\"layers\\": [10, 3, 1], \\"learning_rate\\": 0.5}, \\"model_type\\": \\"neural network\\", \\"training_framework\\": {\\"name\\": \\"tensorflow\\", \\"version\\": \\"v1.0\\"}}", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "create_time": Object { + "key": "create_time", + "value": Array [ + undefined, + undefined, + "2019-06-12T01:21:48.259263Z", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "2019-06-12T01:21:48.259263Z", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "description": Object { + "key": "description", + "value": Array [ + undefined, + undefined, + "A really great model", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "A really great model", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "name": Object { + "key": "name", + "value": Array [ + undefined, + undefined, + "test model", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "test model", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "version": Object { + "key": "version", + "value": Array [ + undefined, + undefined, + "v1", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "v1", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + }, + "valueCtor_": [Function], + }, + "5": Object { + "arrClean": false, + "arr_": Array [], + "map_": Object { + "__kf_run__": Object { + "key": "__kf_run__", + "value": Array [ + undefined, + undefined, + "1", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "1", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "__kf_workspace__": Object { + "key": "__kf_workspace__", + "value": Array [ + undefined, + undefined, + "workspace-1", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "workspace-1", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + }, + "valueCtor_": [Function], + }, + }, + } + } + setLineageViewTarget={[MockFunction]} +> + <div + className="container flex" + > + <div + className="breadcrumbContainer" + > + <span + className="workspace" + key="workspace" + > + workspace-1 + </span> + <aside + className="workspaceSep" + key="workspace-sep" + /> + <button + className="breadcrumbActive" + disabled={true} + key="breadcrumb-0" + onClick={[Function]} + > + test model + </button> + </div> + <div> + <WithStyles(Button) + className="actionButton" + disabled={false} + onClick={[Function]} + > + <Button + className="actionButton" + classes={ + Object { + "colorInherit": "MuiButton-colorInherit-22", + "contained": "MuiButton-contained-12", + "containedPrimary": "MuiButton-containedPrimary-13", + "containedSecondary": "MuiButton-containedSecondary-14", + "disabled": "MuiButton-disabled-21", + "extendedFab": "MuiButton-extendedFab-19", + "fab": "MuiButton-fab-18", + "flat": "MuiButton-flat-6", + "flatPrimary": "MuiButton-flatPrimary-7", + "flatSecondary": "MuiButton-flatSecondary-8", + "focusVisible": "MuiButton-focusVisible-20", + "fullWidth": "MuiButton-fullWidth-26", + "label": "MuiButton-label-2", + "mini": "MuiButton-mini-23", + "outlined": "MuiButton-outlined-9", + "outlinedPrimary": "MuiButton-outlinedPrimary-10", + "outlinedSecondary": "MuiButton-outlinedSecondary-11", + "raised": "MuiButton-raised-15", + "raisedPrimary": "MuiButton-raisedPrimary-16", + "raisedSecondary": "MuiButton-raisedSecondary-17", + "root": "MuiButton-root-1", + "sizeLarge": "MuiButton-sizeLarge-25", + "sizeSmall": "MuiButton-sizeSmall-24", + "text": "MuiButton-text-3", + "textPrimary": "MuiButton-textPrimary-4", + "textSecondary": "MuiButton-textSecondary-5", + } + } + color="default" + component="button" + disableFocusRipple={false} + disabled={false} + fullWidth={false} + mini={false} + onClick={[Function]} + size="medium" + type="button" + variant="text" + > + <WithStyles(ButtonBase) + className="MuiButton-root-1 MuiButton-text-3 MuiButton-flat-6 actionButton" + component="button" + disabled={false} + focusRipple={true} + focusVisibleClassName="MuiButton-focusVisible-20" + onClick={[Function]} + type="button" + > + <ButtonBase + centerRipple={false} + className="MuiButton-root-1 MuiButton-text-3 MuiButton-flat-6 actionButton" + classes={ + Object { + "disabled": "MuiButtonBase-disabled-28", + "focusVisible": "MuiButtonBase-focusVisible-29", + "root": "MuiButtonBase-root-27", + } + } + component="button" + disableRipple={false} + disableTouchRipple={false} + disabled={false} + focusRipple={true} + focusVisibleClassName="MuiButton-focusVisible-20" + onClick={[Function]} + tabIndex="0" + type="button" + > + <button + className="MuiButtonBase-root-27 MuiButton-root-1 MuiButton-text-3 MuiButton-flat-6 actionButton" + disabled={false} + onBlur={[Function]} + onClick={[Function]} + onContextMenu={[Function]} + onFocus={[Function]} + onKeyDown={[Function]} + onKeyUp={[Function]} + onMouseDown={[Function]} + onMouseLeave={[Function]} + onMouseUp={[Function]} + onTouchEnd={[Function]} + onTouchMove={[Function]} + onTouchStart={[Function]} + tabIndex="0" + type="button" + > + <span + className="MuiButton-label-2" + > + <pure(ReplayIcon)> + <ReplayIcon> + <WithStyles(SvgIcon)> + <SvgIcon + classes={ + Object { + "colorAction": "MuiSvgIcon-colorAction-33", + "colorDisabled": "MuiSvgIcon-colorDisabled-35", + "colorError": "MuiSvgIcon-colorError-34", + "colorPrimary": "MuiSvgIcon-colorPrimary-31", + "colorSecondary": "MuiSvgIcon-colorSecondary-32", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-36", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-38", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-37", + "root": "MuiSvgIcon-root-30", + } + } + color="inherit" + component="svg" + fontSize="default" + viewBox="0 0 24 24" + > + <svg + aria-hidden="true" + className="MuiSvgIcon-root-30" + focusable="false" + role="presentation" + viewBox="0 0 24 24" + > + <path + d="M0 0h24v24H0z" + fill="none" + /> + <path + d="M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z" + /> + </svg> + </SvgIcon> + </WithStyles(SvgIcon)> + </ReplayIcon> + </pure(ReplayIcon)> + Reset + </span> + <NoSsr + defer={false} + fallback={null} + > + <WithStyles(TouchRipple) + center={false} + innerRef={[Function]} + > + <TouchRipple + center={false} + classes={ + Object { + "child": "MuiTouchRipple-child-43", + "childLeaving": "MuiTouchRipple-childLeaving-44", + "childPulsate": "MuiTouchRipple-childPulsate-45", + "ripple": "MuiTouchRipple-ripple-40", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-42", + "rippleVisible": "MuiTouchRipple-rippleVisible-41", + "root": "MuiTouchRipple-root-39", + } + } + > + <TransitionGroup + childFactory={[Function]} + className="MuiTouchRipple-root-39" + component="span" + enter={true} + exit={true} + > + <span + className="MuiTouchRipple-root-39" + /> + </TransitionGroup> + </TouchRipple> + </WithStyles(TouchRipple)> + </NoSsr> + </button> + </ButtonBase> + </WithStyles(ButtonBase)> + </Button> + </WithStyles(Button)> + </div> + </div> +</LineageActionBar> +`; + +exports[`LineageActionBar Updates the LineageView target model when an inactive breadcrumb is clicked 1`] = ` +<LineageActionBar + initialTarget={ + Object { + "array": Array [ + 1, + 1, + "gs://my-bucket/mnist", + Array [], + Array [], + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": Object { + "4": Object { + "arrClean": false, + "arr_": Array [], + "map_": Object { + "__ALL_META__": Object { + "key": "__ALL_META__", + "value": Array [ + undefined, + undefined, + "{\\"hyperparameters\\": {\\"early_stop\\": true, \\"layers\\": [10, 3, 1], \\"learning_rate\\": 0.5}, \\"model_type\\": \\"neural network\\", \\"training_framework\\": {\\"name\\": \\"tensorflow\\", \\"version\\": \\"v1.0\\"}}", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "{\\"hyperparameters\\": {\\"early_stop\\": true, \\"layers\\": [10, 3, 1], \\"learning_rate\\": 0.5}, \\"model_type\\": \\"neural network\\", \\"training_framework\\": {\\"name\\": \\"tensorflow\\", \\"version\\": \\"v1.0\\"}}", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "create_time": Object { + "key": "create_time", + "value": Array [ + undefined, + undefined, + "2019-06-12T01:21:48.259263Z", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "2019-06-12T01:21:48.259263Z", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "description": Object { + "key": "description", + "value": Array [ + undefined, + undefined, + "A really great model", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "A really great model", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "name": Object { + "key": "name", + "value": Array [ + undefined, + undefined, + "test model", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "test model", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "version": Object { + "key": "version", + "value": Array [ + undefined, + undefined, + "v1", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "v1", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + }, + "valueCtor_": [Function], + }, + "5": Object { + "arrClean": false, + "arr_": Array [], + "map_": Object { + "__kf_run__": Object { + "key": "__kf_run__", + "value": Array [ + undefined, + undefined, + "1", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "1", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + "__kf_workspace__": Object { + "key": "__kf_workspace__", + "value": Array [ + undefined, + undefined, + "workspace-1", + ], + "valueWrapper": Object { + "array": Array [ + undefined, + undefined, + "workspace-1", + ], + "arrayIndexOffset_": -1, + "convertedPrimitiveFields_": Object {}, + "messageId_": undefined, + "pivot_": 1.7976931348623157e+308, + "wrappers_": null, + }, + }, + }, + "valueCtor_": [Function], + }, + }, + } + } + setLineageViewTarget={[MockFunction]} +> + <div + className="container flex" + > + <div + className="breadcrumbContainer" + > + <span + className="workspace" + key="workspace" + > + workspace-1 + </span> + <aside + className="workspaceSep" + key="workspace-sep" + /> + <button + className="breadcrumbActive" + disabled={true} + key="breadcrumb-0" + onClick={[Function]} + > + test model + </button> + </div> + <div> + <WithStyles(Button) + className="actionButton" + disabled={false} + onClick={[Function]} + > + <Button + className="actionButton" + classes={ + Object { + "colorInherit": "MuiButton-colorInherit-22", + "contained": "MuiButton-contained-12", + "containedPrimary": "MuiButton-containedPrimary-13", + "containedSecondary": "MuiButton-containedSecondary-14", + "disabled": "MuiButton-disabled-21", + "extendedFab": "MuiButton-extendedFab-19", + "fab": "MuiButton-fab-18", + "flat": "MuiButton-flat-6", + "flatPrimary": "MuiButton-flatPrimary-7", + "flatSecondary": "MuiButton-flatSecondary-8", + "focusVisible": "MuiButton-focusVisible-20", + "fullWidth": "MuiButton-fullWidth-26", + "label": "MuiButton-label-2", + "mini": "MuiButton-mini-23", + "outlined": "MuiButton-outlined-9", + "outlinedPrimary": "MuiButton-outlinedPrimary-10", + "outlinedSecondary": "MuiButton-outlinedSecondary-11", + "raised": "MuiButton-raised-15", + "raisedPrimary": "MuiButton-raisedPrimary-16", + "raisedSecondary": "MuiButton-raisedSecondary-17", + "root": "MuiButton-root-1", + "sizeLarge": "MuiButton-sizeLarge-25", + "sizeSmall": "MuiButton-sizeSmall-24", + "text": "MuiButton-text-3", + "textPrimary": "MuiButton-textPrimary-4", + "textSecondary": "MuiButton-textSecondary-5", + } + } + color="default" + component="button" + disableFocusRipple={false} + disabled={false} + fullWidth={false} + mini={false} + onClick={[Function]} + size="medium" + type="button" + variant="text" + > + <WithStyles(ButtonBase) + className="MuiButton-root-1 MuiButton-text-3 MuiButton-flat-6 actionButton" + component="button" + disabled={false} + focusRipple={true} + focusVisibleClassName="MuiButton-focusVisible-20" + onClick={[Function]} + type="button" + > + <ButtonBase + centerRipple={false} + className="MuiButton-root-1 MuiButton-text-3 MuiButton-flat-6 actionButton" + classes={ + Object { + "disabled": "MuiButtonBase-disabled-28", + "focusVisible": "MuiButtonBase-focusVisible-29", + "root": "MuiButtonBase-root-27", + } + } + component="button" + disableRipple={false} + disableTouchRipple={false} + disabled={false} + focusRipple={true} + focusVisibleClassName="MuiButton-focusVisible-20" + onClick={[Function]} + tabIndex="0" + type="button" + > + <button + className="MuiButtonBase-root-27 MuiButton-root-1 MuiButton-text-3 MuiButton-flat-6 actionButton" + disabled={false} + onBlur={[Function]} + onClick={[Function]} + onContextMenu={[Function]} + onFocus={[Function]} + onKeyDown={[Function]} + onKeyUp={[Function]} + onMouseDown={[Function]} + onMouseLeave={[Function]} + onMouseUp={[Function]} + onTouchEnd={[Function]} + onTouchMove={[Function]} + onTouchStart={[Function]} + tabIndex="0" + type="button" + > + <span + className="MuiButton-label-2" + > + <pure(ReplayIcon)> + <ReplayIcon> + <WithStyles(SvgIcon)> + <SvgIcon + classes={ + Object { + "colorAction": "MuiSvgIcon-colorAction-33", + "colorDisabled": "MuiSvgIcon-colorDisabled-35", + "colorError": "MuiSvgIcon-colorError-34", + "colorPrimary": "MuiSvgIcon-colorPrimary-31", + "colorSecondary": "MuiSvgIcon-colorSecondary-32", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-36", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-38", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-37", + "root": "MuiSvgIcon-root-30", + } + } + color="inherit" + component="svg" + fontSize="default" + viewBox="0 0 24 24" + > + <svg + aria-hidden="true" + className="MuiSvgIcon-root-30" + focusable="false" + role="presentation" + viewBox="0 0 24 24" + > + <path + d="M0 0h24v24H0z" + fill="none" + /> + <path + d="M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z" + /> + </svg> + </SvgIcon> + </WithStyles(SvgIcon)> + </ReplayIcon> + </pure(ReplayIcon)> + Reset + </span> + <NoSsr + defer={false} + fallback={null} + > + <WithStyles(TouchRipple) + center={false} + innerRef={[Function]} + > + <TouchRipple + center={false} + classes={ + Object { + "child": "MuiTouchRipple-child-43", + "childLeaving": "MuiTouchRipple-childLeaving-44", + "childPulsate": "MuiTouchRipple-childPulsate-45", + "ripple": "MuiTouchRipple-ripple-40", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-42", + "rippleVisible": "MuiTouchRipple-rippleVisible-41", + "root": "MuiTouchRipple-root-39", + } + } + > + <TransitionGroup + childFactory={[Function]} + className="MuiTouchRipple-root-39" + component="span" + enter={true} + exit={true} + > + <span + className="MuiTouchRipple-root-39" + /> + </TransitionGroup> + </TouchRipple> + </WithStyles(TouchRipple)> + </NoSsr> + </button> + </ButtonBase> + </WithStyles(ButtonBase)> + </Button> + </WithStyles(Button)> + </div> + </div> +</LineageActionBar> +`; diff --git a/frontend/src/mlmd/library.ts b/frontend/src/mlmd/library.ts new file mode 100644 index 0000000000..5439c528ca --- /dev/null +++ b/frontend/src/mlmd/library.ts @@ -0,0 +1,35 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { LineageResource as LineageResourceType } from './LineageTypes'; + +export type LineageResource = LineageResourceType; + +export { + Api, + ArtifactCustomProperties, + ArtifactProperties, + ExecutionProperties, + ExecutionCustomProperties, +} from './Api'; +export { getArtifactTypes, getArtifactCreationTime } from './LineageApi'; +export { LineageView } from './LineageView'; +export { + getMetadataValue, + getResourceProperty, + getResourcePropertyViaFallBack, + getTypeName, +} from './Utils'; diff --git a/frontend/src/pages/404.test.tsx b/frontend/src/pages/404.test.tsx index 02362fd019..192fb3a306 100644 --- a/frontend/src/pages/404.test.tsx +++ b/frontend/src/pages/404.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/404.tsx b/frontend/src/pages/404.tsx index 7e43529e51..afd796584a 100644 --- a/frontend/src/pages/404.tsx +++ b/frontend/src/pages/404.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/AllExperimentsAndArchive.test.tsx b/frontend/src/pages/AllExperimentsAndArchive.test.tsx index 4ae7c44c1c..765935ae45 100644 --- a/frontend/src/pages/AllExperimentsAndArchive.test.tsx +++ b/frontend/src/pages/AllExperimentsAndArchive.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/AllExperimentsAndArchive.tsx b/frontend/src/pages/AllExperimentsAndArchive.tsx index 4648fc976e..6dd8bd0e15 100644 --- a/frontend/src/pages/AllExperimentsAndArchive.tsx +++ b/frontend/src/pages/AllExperimentsAndArchive.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/AllRecurringRunsList.test.tsx b/frontend/src/pages/AllRecurringRunsList.test.tsx index fb6a0880e4..13fe49f311 100644 --- a/frontend/src/pages/AllRecurringRunsList.test.tsx +++ b/frontend/src/pages/AllRecurringRunsList.test.tsx @@ -14,14 +14,12 @@ * limitations under the License. */ +import { shallow, ShallowWrapper } from 'enzyme'; import * as React from 'react'; -import { AllRecurringRunsList } from './AllRecurringRunsList'; -import { PageProps } from './Page'; import { RoutePage } from '../components/Router'; -import { shallow, ShallowWrapper } from 'enzyme'; import { ButtonKeys } from '../lib/Buttons'; -import TestUtils from '../TestUtils'; -import { fireEvent, render } from '@testing-library/react'; +import { AllRecurringRunsList } from './AllRecurringRunsList'; +import { PageProps } from './Page'; describe('AllRecurringRunsList', () => { const updateBannerSpy = jest.fn(); @@ -42,8 +40,9 @@ describe('AllRecurringRunsList', () => { updateSnackbar: jest.fn(), updateToolbar: updateToolbarSpy, }; + _toolbarProps = new AllRecurringRunsList(props).getInitialToolbarState(); return Object.assign(props, { - toolbarProps: new AllRecurringRunsList(props).getInitialToolbarState(), + toolbarProps: _toolbarProps, }); } diff --git a/frontend/src/pages/AllRunsAndArchive.test.tsx b/frontend/src/pages/AllRunsAndArchive.test.tsx index 89c8ab8919..e1d36ae7ef 100644 --- a/frontend/src/pages/AllRunsAndArchive.test.tsx +++ b/frontend/src/pages/AllRunsAndArchive.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/AllRunsAndArchive.tsx b/frontend/src/pages/AllRunsAndArchive.tsx index f12a443e91..5979f10d04 100644 --- a/frontend/src/pages/AllRunsAndArchive.tsx +++ b/frontend/src/pages/AllRunsAndArchive.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2020 Google LLC + * Copyright 2020 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/AllRunsList.test.tsx b/frontend/src/pages/AllRunsList.test.tsx index c5f3d8d64f..d95c79cf95 100644 --- a/frontend/src/pages/AllRunsList.test.tsx +++ b/frontend/src/pages/AllRunsList.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,13 +14,13 @@ * limitations under the License. */ +import { shallow, ShallowWrapper } from 'enzyme'; import * as React from 'react'; -import { AllRunsList } from './AllRunsList'; -import { PageProps } from './Page'; +import { ApiRunStorageState } from '../apis/run'; import { RoutePage } from '../components/Router'; -import { RunStorageState } from '../apis/run'; -import { shallow, ShallowWrapper } from 'enzyme'; import { ButtonKeys } from '../lib/Buttons'; +import { AllRunsList } from './AllRunsList'; +import { PageProps } from './Page'; describe('AllRunsList', () => { const updateBannerSpy = jest.fn(); @@ -45,6 +45,8 @@ describe('AllRunsList', () => { tree = shallow(<AllRunsList {...props} {...propsPatch} />); // Necessary since the component calls updateToolbar with the toolbar props, // then expects to get them back in props + const instance = tree.instance() as AllRunsList; + _toolbarProps = instance.getInitialToolbarState(); tree.setProps({ toolbarProps: _toolbarProps }); updateToolbarSpy.mockClear(); } @@ -128,6 +130,6 @@ describe('AllRunsList', () => { it('shows a list of available runs', () => { shallowMountComponent(); - expect(tree.find('RunList').prop('storageState')).toBe(RunStorageState.AVAILABLE.toString()); + expect(tree.find('RunList').prop('storageState')).toBe(ApiRunStorageState.AVAILABLE.toString()); }); }); diff --git a/frontend/src/pages/AllRunsList.tsx b/frontend/src/pages/AllRunsList.tsx index 0f9c821932..0eb6b63468 100644 --- a/frontend/src/pages/AllRunsList.tsx +++ b/frontend/src/pages/AllRunsList.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ import * as React from 'react'; import Buttons, { ButtonKeys } from '../lib/Buttons'; import RunList from './RunList'; import { Page, PageProps } from './Page'; -import { RunStorageState } from '../apis/run'; +import { ApiRunStorageState } from '../apis/run'; import { ToolbarProps } from '../components/Toolbar'; import { classes } from 'typestyle'; import { commonCss, padding } from '../Css'; @@ -67,7 +67,7 @@ export class AllRunsList extends Page<{ namespace?: string }, AllRunsListState> selectedIds={this.state.selectedIds} onSelectionChange={this._selectionChanged.bind(this)} ref={this._runlistRef} - storageState={RunStorageState.AVAILABLE} + storageState={ApiRunStorageState.AVAILABLE} hideMetricMetadata={true} namespaceMask={this.props.namespace} {...this.props} diff --git a/frontend/src/pages/ArchivedExperiments.test.tsx b/frontend/src/pages/ArchivedExperiments.test.tsx index 1ba3cf1c3b..831d2433b1 100644 --- a/frontend/src/pages/ArchivedExperiments.test.tsx +++ b/frontend/src/pages/ArchivedExperiments.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ import * as React from 'react'; import { ArchivedExperiments } from './ArchivedExperiments'; import TestUtils from '../TestUtils'; import { PageProps } from './Page'; -import { ExperimentStorageState } from '../apis/experiment'; +import { ApiExperimentStorageState } from '../apis/experiment'; import { ShallowWrapper, shallow } from 'enzyme'; import { ButtonKeys } from '../lib/Buttons'; @@ -71,7 +71,7 @@ describe('ArchivedExperiemnts', () => { it('shows a list of archived experiments', () => { tree = shallow(<ArchivedExperiments {...generateProps()} />); expect(tree.find('ExperimentList').prop('storageState')).toBe( - ExperimentStorageState.ARCHIVED.toString(), + ApiExperimentStorageState.ARCHIVED.toString(), ); }); }); diff --git a/frontend/src/pages/ArchivedExperiments.tsx b/frontend/src/pages/ArchivedExperiments.tsx index de0e293514..3962180e22 100644 --- a/frontend/src/pages/ArchivedExperiments.tsx +++ b/frontend/src/pages/ArchivedExperiments.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2020 Google LLC + * Copyright 2020 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ import * as React from 'react'; import Buttons from '../lib/Buttons'; import ExperimentList from '../components/ExperimentList'; import { Page, PageProps } from './Page'; -import { ExperimentStorageState } from '../apis/experiment'; +import { ApiExperimentStorageState } from '../apis/experiment'; import { ToolbarProps } from '../components/Toolbar'; import { classes } from 'typestyle'; import { commonCss, padding } from '../Css'; @@ -48,7 +48,7 @@ export class ArchivedExperiments extends Page<ArchivedExperimentsProp, ArchivedE <ExperimentList onError={this.showPageError.bind(this)} ref={this._experimentlistRef} - storageState={ExperimentStorageState.ARCHIVED} + storageState={ApiExperimentStorageState.ARCHIVED} {...this.props} /> </div> diff --git a/frontend/src/pages/ArchivedRuns.test.tsx b/frontend/src/pages/ArchivedRuns.test.tsx index 7c9648bdc0..70b59104f1 100644 --- a/frontend/src/pages/ArchivedRuns.test.tsx +++ b/frontend/src/pages/ArchivedRuns.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ import * as React from 'react'; import { ArchivedRuns } from './ArchivedRuns'; import TestUtils from '../TestUtils'; import { PageProps } from './Page'; -import { RunStorageState } from '../apis/run'; +import { ApiRunStorageState } from '../apis/run'; import { ShallowWrapper, shallow } from 'enzyme'; import { ButtonKeys } from '../lib/Buttons'; import { Apis } from '../lib/Apis'; @@ -107,7 +107,7 @@ describe('ArchivedRuns', () => { it('shows a list of available runs', () => { tree = shallow(<ArchivedRuns {...generateProps()} />); - expect(tree.find('RunList').prop('storageState')).toBe(RunStorageState.ARCHIVED.toString()); + expect(tree.find('RunList').prop('storageState')).toBe(ApiRunStorageState.ARCHIVED.toString()); }); it('cancells deletion when Cancel is clicked', async () => { diff --git a/frontend/src/pages/ArchivedRuns.tsx b/frontend/src/pages/ArchivedRuns.tsx index 96c7df75d0..8be84aa2f1 100644 --- a/frontend/src/pages/ArchivedRuns.tsx +++ b/frontend/src/pages/ArchivedRuns.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ import * as React from 'react'; import Buttons, { ButtonKeys } from '../lib/Buttons'; import RunList from './RunList'; import { Page, PageProps } from './Page'; -import { RunStorageState } from '../apis/run'; +import { ApiRunStorageState } from '../apis/run'; import { ToolbarProps } from '../components/Toolbar'; import { classes } from 'typestyle'; import { commonCss, padding } from '../Css'; @@ -66,7 +66,7 @@ export class ArchivedRuns extends Page<{ namespace?: string }, ArchivedRunsState selectedIds={this.state.selectedIds} onSelectionChange={this._selectionChanged.bind(this)} ref={this._runlistRef} - storageState={RunStorageState.ARCHIVED} + storageState={ApiRunStorageState.ARCHIVED} {...this.props} /> </div> diff --git a/frontend/src/pages/ArtifactDetails.tsx b/frontend/src/pages/ArtifactDetails.tsx index 3fb13ee272..817fcbf03d 100644 --- a/frontend/src/pages/ArtifactDetails.tsx +++ b/frontend/src/pages/ArtifactDetails.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. @@ -16,16 +16,17 @@ import { Api, - Artifact, - ArtifactCustomProperties, ArtifactProperties, - GetArtifactsByIDRequest, getResourceProperty, LineageResource, LineageView, - titleCase, +} from 'src/mlmd/library'; +import { ArtifactType, -} from '@kubeflow/frontend'; + Artifact, + GetArtifactsByIDRequest, + GetArtifactTypesByIDRequest, +} from 'src/third_party/mlmd'; import { CircularProgress } from '@material-ui/core'; import * as React from 'react'; import { Route, Switch } from 'react-router-dom'; @@ -35,9 +36,9 @@ import { ResourceInfo, ResourceType } from '../components/ResourceInfo'; import { RoutePage, RoutePageFactory, RouteParams } from '../components/Router'; import { ToolbarProps } from '../components/Toolbar'; import { commonCss, padding } from '../Css'; -import { logger, serviceErrorToString } from '../lib/Utils'; +import { logger, serviceErrorToString, titleCase } from '../lib/Utils'; import { Page, PageProps } from './Page'; -import { GetArtifactTypesByIDRequest } from '@kubeflow/frontend/src/mlmd/generated/ml_metadata/proto/metadata_store_service_pb'; +import { ArtifactHelpers } from 'src/mlmd/MlmdUtils'; export enum ArtifactDetailsTab { OVERVIEW = 0, @@ -156,7 +157,7 @@ class ArtifactDetails extends Page<{}, ArtifactDetailsState> { return { actions: {}, breadcrumbs: [{ displayName: 'Artifacts', href: RoutePage.ARTIFACTS }], - pageTitle: `Artifact #${this.id} details`, + pageTitle: `Artifact #${this.id}`, }; } @@ -184,10 +185,7 @@ class ArtifactDetails extends Page<{}, ArtifactDetailsState> { const typeResponse = await this.api.metadataStoreService.getArtifactTypesByID(typeRequest); const artifactType = typeResponse.getArtifactTypesList()[0] || undefined; - const artifactName = - getResourceProperty(artifact, ArtifactProperties.NAME) || - getResourceProperty(artifact, ArtifactCustomProperties.NAME, true); - let title = artifactName ? artifactName.toString() : ''; + let title = ArtifactHelpers.getName(artifact); const version = getResourceProperty(artifact, ArtifactProperties.VERSION); if (version) { title += ` (version: ${version})`; diff --git a/frontend/src/pages/ArtifactList.test.tsx b/frontend/src/pages/ArtifactList.test.tsx index b687233208..c13b8fe808 100644 --- a/frontend/src/pages/ArtifactList.test.tsx +++ b/frontend/src/pages/ArtifactList.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,21 +14,21 @@ * limitations under the License. */ -import * as React from 'react'; -import { ArtifactList } from './ArtifactList'; -import { PageProps } from './Page'; -import { RoutePage } from '../components/Router'; -import TestUtils from '../TestUtils'; import { render, screen } from '@testing-library/react'; +import * as React from 'react'; +import { MemoryRouter } from 'react-router-dom'; +import { Api } from 'src/mlmd/library'; import { - Api, Artifact, ArtifactType, GetArtifactsResponse, GetArtifactTypesResponse, Value, -} from '@kubeflow/frontend'; -import { MemoryRouter } from 'react-router-dom'; +} from 'src/third_party/mlmd'; +import { RoutePage } from '../components/Router'; +import TestUtils from '../TestUtils'; +import { ArtifactList } from './ArtifactList'; +import { PageProps } from './Page'; const pipelineName = 'pipeline1'; const artifactName = 'artifact1'; diff --git a/frontend/src/pages/ArtifactList.tsx b/frontend/src/pages/ArtifactList.tsx index 581cc5f945..2f54682bea 100644 --- a/frontend/src/pages/ArtifactList.tsx +++ b/frontend/src/pages/ArtifactList.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,40 +14,38 @@ * limitations under the License. */ +import * as React from 'react'; +import { Link } from 'react-router-dom'; +import { ListRequest } from 'src/lib/Apis'; import { Api, - Artifact, - ArtifactProperties, ArtifactCustomProperties, - ListRequest, - ArtifactType, + ArtifactProperties, getArtifactCreationTime, getArtifactTypes, getResourcePropertyViaFallBack, - GetArtifactsRequest, -} from '@kubeflow/frontend'; -import * as React from 'react'; -import { Link } from 'react-router-dom'; +} from 'src/mlmd/library'; +import { Artifact, ArtifactType, GetArtifactsRequest } from 'src/third_party/mlmd'; import { classes } from 'typestyle'; +import { ArtifactLink } from '../components/ArtifactLink'; import CustomTable, { Column, - Row, - ExpandState, CustomRendererProps, + ExpandState, + Row, } from '../components/CustomTable'; -import { Page } from './Page'; +import { RoutePageFactory } from '../components/Router'; import { ToolbarProps } from '../components/Toolbar'; import { commonCss, padding } from '../Css'; import { + CollapsedAndExpandedRows, + getExpandedRow, + groupRows, rowCompareFn, rowFilterFn, - groupRows, - getExpandedRow, serviceErrorToString, - CollapsedAndExpandedRows, } from '../lib/Utils'; -import { RoutePageFactory } from '../components/Router'; -import { ArtifactLink } from '../components/ArtifactLink'; +import { Page } from './Page'; interface ArtifactListState { artifacts: Artifact[]; @@ -162,7 +160,7 @@ export class ArtifactList extends Page<{}, ArtifactListState> { className={commonCss.link} to={RoutePageFactory.artifactDetails(Number(props.id))} > - <u>{props.value}</u> + {props.value} </Link> ); }; diff --git a/frontend/src/pages/Compare.test.tsx b/frontend/src/pages/Compare.test.tsx index c3ac25428e..0d89b9dcbe 100644 --- a/frontend/src/pages/Compare.test.tsx +++ b/frontend/src/pages/Compare.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -106,7 +106,7 @@ describe('Compare', () => { artifacts: [ { name: 'mlpipeline-ui-metadata', - s3: { bucket: 'test bucket', key: 'test key' }, + s3: { s3Bucket: { bucket: 'test bucket' }, key: 'test key' }, }, ], }, @@ -372,7 +372,7 @@ describe('Compare', () => { artifacts: [ { name: 'mlpipeline-ui-metadata', - s3: { bucket: 'test bucket', key: 'test key' }, + s3: { s3Bucket: { bucket: 'test bucket' }, key: 'test key' }, }, ], }, @@ -563,7 +563,7 @@ describe('Compare', () => { artifacts: [ { name: 'mlpipeline-ui-metadata', - s3: { bucket: 'test bucket', key: 'test key' }, + s3: { s3Bucket: { bucket: 'test bucket' }, key: 'test key' }, }, ], }, diff --git a/frontend/src/pages/Compare.tsx b/frontend/src/pages/Compare.tsx index a3aa35c98e..d6eefb1c3a 100644 --- a/frontend/src/pages/Compare.tsx +++ b/frontend/src/pages/Compare.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/ExecutionDetails.tsx b/frontend/src/pages/ExecutionDetails.tsx index 033bdd167f..69dda9d94b 100644 --- a/frontend/src/pages/ExecutionDetails.tsx +++ b/frontend/src/pages/ExecutionDetails.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. @@ -14,42 +14,33 @@ * limitations under the License. */ +import { CircularProgress } from '@material-ui/core'; +import React, { Component } from 'react'; +import { Link } from 'react-router-dom'; +import { ExecutionHelpers, getArtifactName, getLinkedArtifactsByEvents } from 'src/mlmd/MlmdUtils'; +import { Api, getArtifactTypes } from 'src/mlmd/library'; import { - Api, - ArtifactCustomProperties, - ArtifactProperties, ArtifactType, Event, Execution, - ExecutionCustomProperties, - ExecutionProperties, - GetArtifactsByIDRequest, - GetExecutionsByIDRequest, + ExecutionType, GetEventsByExecutionIDsRequest, GetEventsByExecutionIDsResponse, - getArtifactTypes, - getResourceProperty, - logger, - ExecutionType, -} from '@kubeflow/frontend'; -import { CircularProgress } from '@material-ui/core'; -import React, { Component } from 'react'; -import { Link } from 'react-router-dom'; + GetExecutionsByIDRequest, + GetExecutionTypesByIDRequest, +} from 'src/third_party/mlmd'; import { classes, stylesheet } from 'typestyle'; -import { Page, PageErrorHandler } from './Page'; -import { ToolbarProps } from '../components/Toolbar'; -import { RoutePage, RouteParams, RoutePageFactory } from '../components/Router'; -import { commonCss, padding } from '../Css'; import { ResourceInfo, ResourceType } from '../components/ResourceInfo'; -import { serviceErrorToString } from '../lib/Utils'; -import { GetExecutionTypesByIDRequest } from '@kubeflow/frontend/src/mlmd/generated/ml_metadata/proto/metadata_store_service_pb'; - -type ArtifactIdList = number[]; +import { RoutePage, RoutePageFactory, RouteParams } from '../components/Router'; +import { ToolbarProps } from '../components/Toolbar'; +import { color, commonCss, padding } from '../Css'; +import { logger, serviceErrorToString } from '../lib/Utils'; +import { Page, PageErrorHandler } from './Page'; interface ExecutionDetailsState { execution?: Execution; executionType?: ExecutionType; - events?: Record<Event.Type, ArtifactIdList>; + events?: Record<Event.Type, Event[]>; artifactTypeMap?: Map<number, ArtifactType>; } @@ -81,7 +72,7 @@ export default class ExecutionDetails extends Page<{}, ExecutionDetailsState> { return { actions: {}, breadcrumbs: [{ displayName: 'Executions', href: RoutePage.EXECUTIONS }], - pageTitle: `${this.id} details`, + pageTitle: `Execution #${this.id}`, }; } @@ -125,22 +116,22 @@ export class ExecutionDetailsContent extends Component< } <SectionIO title={'Declared Inputs'} - artifactIds={this.state.events[Event.Type.DECLARED_INPUT]} + events={this.state.events[Event.Type.DECLARED_INPUT]} artifactTypeMap={this.state.artifactTypeMap} /> <SectionIO title={'Inputs'} - artifactIds={this.state.events[Event.Type.INPUT]} + events={this.state.events[Event.Type.INPUT]} artifactTypeMap={this.state.artifactTypeMap} /> <SectionIO title={'Declared Outputs'} - artifactIds={this.state.events[Event.Type.DECLARED_OUTPUT]} + events={this.state.events[Event.Type.DECLARED_OUTPUT]} artifactTypeMap={this.state.artifactTypeMap} /> <SectionIO title={'Outputs'} - artifactIds={this.state.events[Event.Type.OUTPUT]} + events={this.state.events[Event.Type.OUTPUT]} artifactTypeMap={this.state.artifactTypeMap} /> </div> @@ -212,10 +203,7 @@ export class ExecutionDetailsContent extends Component< } const execution = executionResponse.getExecutionsList()[0]; - const executionName = - getResourceProperty(execution, ExecutionProperties.COMPONENT_ID) || - getResourceProperty(execution, ExecutionCustomProperties.TASK_ID, true); - this.props.onTitleUpdate(executionName ? executionName.toString() : ''); + this.props.onTitleUpdate(ExecutionHelpers.getName(execution)); const typeRequest = new GetExecutionTypesByIDRequest(); typeRequest.setTypeIdsList([execution.getTypeId()]); @@ -257,8 +245,8 @@ export class ExecutionDetailsContent extends Component< function parseEventsByType( response: GetEventsByExecutionIDsResponse | null, -): Record<Event.Type, ArtifactIdList> { - const events: Record<Event.Type, ArtifactIdList> = { +): Record<Event.Type, Event[]> { + const events: Record<Event.Type, Event[]> = { [Event.Type.UNKNOWN]: [], [Event.Type.DECLARED_INPUT]: [], [Event.Type.INPUT]: [], @@ -276,7 +264,7 @@ function parseEventsByType( const type = event.getType(); const id = event.getArtifactId(); if (type != null && id != null) { - events[type].push(id); + events[type].push(event); } }); @@ -292,7 +280,7 @@ interface ArtifactInfo { interface SectionIOProps { title: string; - artifactIds: number[]; + events: Event[]; artifactTypeMap?: Map<number, ArtifactType>; } class SectionIO extends Component< @@ -308,27 +296,21 @@ class SectionIO extends Component< } public async componentDidMount(): Promise<void> { - // loads extra metadata about artifacts - const request = new GetArtifactsByIDRequest(); - request.setArtifactIdsList(this.props.artifactIds); - try { - const response = await Api.getInstance().metadataStoreService.getArtifactsByID(request); + const linkedArtifacts = await getLinkedArtifactsByEvents(this.props.events); const artifactDataMap = {}; - response.getArtifactsList().forEach(artifact => { - const id = artifact.getId(); + linkedArtifacts.forEach(linkedArtifact => { + const id = linkedArtifact.event.getArtifactId(); if (!id) { - logger.error('Artifact has empty id', artifact.toObject()); + logger.error('Artifact has empty id', linkedArtifact.artifact.toObject()); return; } artifactDataMap[id] = { id, - name: (getResourceProperty(artifact, ArtifactProperties.NAME) || - getResourceProperty(artifact, ArtifactCustomProperties.NAME, true) || - '') as string, // TODO: assert name is string - typeId: artifact.getTypeId(), - uri: artifact.getUri() || '', + name: getArtifactName(linkedArtifact), + typeId: linkedArtifact.artifact.getTypeId(), + uri: linkedArtifact.artifact.getUri() || '', }; }); this.setState({ @@ -340,8 +322,8 @@ class SectionIO extends Component< } public render(): JSX.Element | null { - const { title, artifactIds } = this.props; - if (artifactIds.length === 0) { + const { title, events } = this.props; + if (events.length === 0) { return null; } @@ -358,7 +340,8 @@ class SectionIO extends Component< </tr> </thead> <tbody> - {artifactIds.map(id => { + {events.map(event => { + const id = event.getArtifactId(); const data = this.state.artifactDataMap[id] || {}; const type = this.props.artifactTypeMap && data.typeId @@ -388,20 +371,12 @@ const ArtifactRow: React.FC<{ id: number; name: string; type?: string; uri: stri type, uri, }) => ( - <tr> - <td className={css.tableCell}> - {id ? ( - <Link className={commonCss.link} to={RoutePageFactory.artifactDetails(id)}> - {id} - </Link> - ) : ( - id - )} - </td> + <tr className={css.row}> + <td className={css.tableCell}>{id}</td> <td className={css.tableCell}> {id ? ( <Link className={commonCss.link} to={RoutePageFactory.artifactDetails(id)}> - {name} + {name ? name : '(No name)'} </Link> ) : ( name @@ -417,4 +392,17 @@ const css = stylesheet({ padding: 6, textAlign: 'left', }, + row: { + $nest: { + '&:hover': { + backgroundColor: color.whiteSmoke, + }, + '&:hover a': { + color: color.linkLight, + }, + a: { + color: color.link, + }, + }, + }, }); diff --git a/frontend/src/pages/ExecutionList.tsx b/frontend/src/pages/ExecutionList.tsx index 6255d8c948..f2003f7093 100644 --- a/frontend/src/pages/ExecutionList.tsx +++ b/frontend/src/pages/ExecutionList.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,36 +14,36 @@ * limitations under the License. */ +import * as React from 'react'; +import { Link } from 'react-router-dom'; +import { ListRequest } from 'src/lib/Apis'; +import { ExecutionHelpers } from 'src/mlmd/MlmdUtils'; +import { Api } from 'src/mlmd/library'; import { - Api, Execution, ExecutionType, GetExecutionsRequest, GetExecutionTypesRequest, - ListRequest, -} from '@kubeflow/frontend'; -import * as React from 'react'; -import { Link } from 'react-router-dom'; +} from 'src/third_party/mlmd'; import { classes } from 'typestyle'; import CustomTable, { Column, - Row, - ExpandState, CustomRendererProps, + ExpandState, + Row, } from '../components/CustomTable'; -import { Page } from './Page'; +import { RoutePageFactory } from '../components/Router'; import { ToolbarProps } from '../components/Toolbar'; import { commonCss, padding } from '../Css'; import { + CollapsedAndExpandedRows, + getExpandedRow, + groupRows, rowCompareFn, rowFilterFn, - groupRows, - getExpandedRow, - CollapsedAndExpandedRows, serviceErrorToString, } from '../lib/Utils'; -import { RoutePageFactory } from '../components/Router'; -import { ExecutionHelpers } from 'src/lib/MlmdUtils'; +import { Page } from './Page'; interface ExecutionListState { executions: Execution[]; diff --git a/frontend/src/pages/ExperimentDetails.test.tsx b/frontend/src/pages/ExperimentDetails.test.tsx index d868b61384..c0e2db5482 100644 --- a/frontend/src/pages/ExperimentDetails.test.tsx +++ b/frontend/src/pages/ExperimentDetails.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import * as React from 'react'; import EnhancedExperimentDetails, { ExperimentDetails } from './ExperimentDetails'; import TestUtils from '../TestUtils'; -import { ApiExperiment, ExperimentStorageState } from '../apis/experiment'; +import { ApiExperiment, ApiExperimentStorageState } from '../apis/experiment'; import { Apis } from '../lib/Apis'; import { PageProps } from './Page'; import { ReactWrapper, ShallowWrapper, shallow } from 'enzyme'; @@ -233,7 +233,9 @@ describe('ExperimentDetails', () => { tree = shallow(<ExperimentDetails {...generateProps()} />); await TestUtils.flushPromises(); - expect(tree.find('RunListsRouter').prop('storageState')).toBe(ExperimentStorageState.AVAILABLE); + expect(tree.find('RunListsRouter').prop('storageState')).toBe( + ApiExperimentStorageState.AVAILABLE, + ); }); it('shows a list of archived runs', async () => { @@ -241,14 +243,16 @@ describe('ExperimentDetails', () => { getExperimentSpy.mockImplementation(() => { let apiExperiment = newMockExperiment(); - apiExperiment['storage_state'] = ExperimentStorageState.ARCHIVED; + apiExperiment['storage_state'] = ApiExperimentStorageState.ARCHIVED; return apiExperiment; }); tree = shallow(<ExperimentDetails {...generateProps()} />); await TestUtils.flushPromises(); - expect(tree.find('RunListsRouter').prop('storageState')).toBe(ExperimentStorageState.ARCHIVED); + expect(tree.find('RunListsRouter').prop('storageState')).toBe( + ApiExperimentStorageState.ARCHIVED, + ); }); it("fetches this experiment's recurring runs", async () => { diff --git a/frontend/src/pages/ExperimentDetails.tsx b/frontend/src/pages/ExperimentDetails.tsx index 9a17117b99..ffa032d511 100644 --- a/frontend/src/pages/ExperimentDetails.tsx +++ b/frontend/src/pages/ExperimentDetails.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,7 @@ import RecurringRunsManager from './RecurringRunsManager'; import RunListsRouter, { RunListsGroupTab } from './RunListsRouter'; import Toolbar, { ToolbarProps } from '../components/Toolbar'; import Tooltip from '@material-ui/core/Tooltip'; -import { ApiExperiment, ExperimentStorageState } from '../apis/experiment'; +import { ApiExperiment, ApiExperimentStorageState } from '../apis/experiment'; import { Apis } from '../lib/Apis'; import { Page, PageProps } from './Page'; import { RoutePage, RouteParams } from '../components/Router'; @@ -35,7 +35,7 @@ import { color, commonCss, padding } from '../Css'; import { logger } from '../lib/Utils'; import { useNamespaceChangeEvent } from 'src/lib/KubeflowClient'; import { Redirect } from 'react-router-dom'; -import { RunStorageState } from 'src/apis/run'; +import { ApiRunStorageState } from 'src/apis/run'; const css = stylesheet({ card: { @@ -104,7 +104,7 @@ interface ExperimentDetailsState { experiment: ApiExperiment | null; recurringRunsManagerOpen: boolean; selectedIds: string[]; - runStorageState: RunStorageState; + runStorageState: ApiRunStorageState; runListToolbarProps: ToolbarProps; runlistRefreshCount: number; } @@ -125,7 +125,7 @@ export class ExperimentDetails extends Page<{}, ExperimentDetailsState> { }, // TODO: remove selectedIds: [], - runStorageState: RunStorageState.AVAILABLE, + runStorageState: ApiRunStorageState.AVAILABLE, runlistRefreshCount: 0, }; } @@ -289,7 +289,7 @@ export class ExperimentDetails extends Page<{}, ExperimentDetailsState> { this.getInitialToolbarState().actions, ); const idGetter = () => (experiment.id ? [experiment.id] : []); - experiment.storage_state === ExperimentStorageState.ARCHIVED + experiment.storage_state === ApiExperimentStorageState.ARCHIVED ? buttons.restore('experiment', idGetter, true, () => this.refresh()) : buttons.archive('experiment', idGetter, true, () => this.refresh()); // If experiment is archived, shows archived runs list by default. @@ -300,9 +300,9 @@ export class ExperimentDetails extends Page<{}, ExperimentDetailsState> { // want to view. if (isFirstTimeLoad) { runStorageState = - experiment.storage_state === ExperimentStorageState.ARCHIVED - ? RunStorageState.ARCHIVED - : RunStorageState.AVAILABLE; + experiment.storage_state === ApiExperimentStorageState.ARCHIVED + ? ApiRunStorageState.ARCHIVED + : ApiRunStorageState.AVAILABLE; } const actions = buttons.getToolbarActionMap(); @@ -355,9 +355,9 @@ export class ExperimentDetails extends Page<{}, ExperimentDetailsState> { * @param tab selected by user for run storage state */ _onRunTabSwitch = (tab: RunListsGroupTab) => { - let runStorageState = RunStorageState.AVAILABLE; + let runStorageState = ApiRunStorageState.AVAILABLE; if (tab === RunListsGroupTab.ARCHIVE) { - runStorageState = RunStorageState.ARCHIVED; + runStorageState = ApiRunStorageState.ARCHIVED; } let runlistRefreshCount = this.state.runlistRefreshCount + 1; this.setStateSafe( @@ -377,7 +377,7 @@ export class ExperimentDetails extends Page<{}, ExperimentDetailsState> { const toolbarButtons = this._getRunInitialToolBarButtons(); // If user selects to show Active runs list, shows `Archive` button for selected runs. // If user selects to show Archive runs list, shows `Restore` button for selected runs. - if (this.state.runStorageState === RunStorageState.AVAILABLE) { + if (this.state.runStorageState === ApiRunStorageState.AVAILABLE) { toolbarButtons.archive( 'run', () => this.state.selectedIds, diff --git a/frontend/src/pages/ExperimentList.test.tsx b/frontend/src/pages/ExperimentList.test.tsx index b6a20218c5..e6502870b1 100644 --- a/frontend/src/pages/ExperimentList.test.tsx +++ b/frontend/src/pages/ExperimentList.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ import * as Utils from '../lib/Utils'; import EnhancedExperimentList, { ExperimentList } from './ExperimentList'; import TestUtils from '../TestUtils'; import { ApiFilter, PredicateOp } from '../apis/filter'; -import { RunStorageState } from '../apis/run'; +import { ApiRunStorageState } from '../apis/run'; import { Apis } from '../lib/Apis'; import { ExpandState } from '../components/CustomTable'; import { NodePhase } from '../lib/StatusUtils'; @@ -31,7 +31,7 @@ import { ButtonKeys } from '../lib/Buttons'; import { NamespaceContext } from 'src/lib/KubeflowClient'; import { render, act } from '@testing-library/react'; import { MemoryRouter } from 'react-router-dom'; -import { ExperimentStorageState } from '../apis/experiment'; +import { ApiExperimentStorageState } from '../apis/experiment'; // Default arguments for Apis.experimentServiceApi.listExperiment. const LIST_EXPERIMENT_DEFAULTS = [ @@ -44,7 +44,7 @@ const LIST_EXPERIMENT_DEFAULTS = [ { key: 'storage_state', op: PredicateOp.NOTEQUALS, - string_value: ExperimentStorageState.ARCHIVED.toString(), + string_value: ApiExperimentStorageState.ARCHIVED.toString(), }, ], } as ApiFilter), @@ -185,7 +185,7 @@ describe('ExperimentList', () => { { key: 'storage_state', op: PredicateOp.NOTEQUALS, - string_value: RunStorageState.ARCHIVED.toString(), + string_value: ApiRunStorageState.ARCHIVED.toString(), }, ], } as ApiFilter), diff --git a/frontend/src/pages/ExperimentList.tsx b/frontend/src/pages/ExperimentList.tsx index 728b0a8d51..b12a2f7a0c 100644 --- a/frontend/src/pages/ExperimentList.tsx +++ b/frontend/src/pages/ExperimentList.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,9 +28,9 @@ import { ApiFilter, PredicateOp } from '../apis/filter'; import { ApiListExperimentsResponse, ApiExperiment, - ExperimentStorageState, + ApiExperimentStorageState, } from '../apis/experiment'; -import { ApiRun, RunStorageState } from '../apis/run'; +import { ApiRun, ApiRunStorageState } from '../apis/run'; import { Apis, ExperimentSortKeys, ListRequest, RunSortKeys } from '../lib/Apis'; import { Link } from 'react-router-dom'; import { NodePhase } from '../lib/StatusUtils'; @@ -191,7 +191,7 @@ export class ExperimentList extends Page<{ namespace?: string }, ExperimentListS { key: 'storage_state', op: PredicateOp.NOTEQUALS, - string_value: ExperimentStorageState.ARCHIVED.toString(), + string_value: ApiExperimentStorageState.ARCHIVED.toString(), }, ]); request.filter = encodeURIComponent(JSON.stringify(filter)); @@ -228,7 +228,7 @@ export class ExperimentList extends Page<{ namespace?: string }, ExperimentListS { key: 'storage_state', op: PredicateOp.NOTEQUALS, - string_value: RunStorageState.ARCHIVED.toString(), + string_value: ApiRunStorageState.ARCHIVED.toString(), }, ], } as ApiFilter), @@ -280,7 +280,7 @@ export class ExperimentList extends Page<{ namespace?: string }, ExperimentListS disablePaging={false} selectedIds={this.state.selectedIds} noFilterBox={true} - storageState={RunStorageState.AVAILABLE} + storageState={ApiRunStorageState.AVAILABLE} onSelectionChange={this._selectionChanged.bind(this)} disableSorting={true} /> diff --git a/frontend/src/pages/FrontendFeatures.tsx b/frontend/src/pages/FrontendFeatures.tsx new file mode 100644 index 0000000000..e9349fa351 --- /dev/null +++ b/frontend/src/pages/FrontendFeatures.tsx @@ -0,0 +1,98 @@ +/* + * Copyright 2018 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Button, Switch, TableCell } from '@material-ui/core'; +import Table from '@material-ui/core/Table'; +import TableBody from '@material-ui/core/TableBody'; +import TableHead from '@material-ui/core/TableHead'; +import TableRow from '@material-ui/core/TableRow'; +import * as React from 'react'; +import { commonCss, padding } from 'src/Css'; +import { getFeatureList, initFeatures, saveFeatures } from 'src/features'; +import { classes } from 'typestyle'; + +interface FrontendFeaturesProps {} + +// Secret page which developer can enable/disable pre-release features on UI. +const FrontendFeatures: React.FC<FrontendFeaturesProps> = () => { + initFeatures(); + const srcFeatures = getFeatureList(); + const [features, setFeatures] = React.useState(srcFeatures); + + const reset = () => { + setFeatures(srcFeatures); + }; + const submit = () => { + saveFeatures(features); + setFeatures(getFeatureList()); + }; + + const toggleChange = (event: React.ChangeEvent<HTMLInputElement>) => { + const index = features.findIndex(f => f.name === event.target.name); + if (index < 0) { + console.log(`unable to find index for feature name: ${event.target.name}`); + return; + } + const newFeatures = [...features]; + newFeatures[index].active = event.target.checked; + setFeatures(newFeatures); + }; + + return ( + <div className={classes(commonCss.page, padding(20, 't'))}> + <div className={classes(commonCss.page, padding(20, 'lr'))}> + <div style={{ alignSelf: 'flex-end', flexDirection: 'initial' }}> + <Button variant='contained' color='primary' onClick={submit}> + Save changes + </Button> + <Button variant='contained' color='secondary' onClick={reset}> + Reset + </Button> + </div> + <Table aria-label=' table'> + <TableHead> + <TableRow> + <TableCell>Feature Flag Name</TableCell> + <TableCell align='left'>Description</TableCell> + <TableCell align='right'>Enabled</TableCell> + </TableRow> + </TableHead> + <TableBody> + {features.map(f => ( + <TableRow key={f.name}> + <TableCell component='th' scope='row'> + {f.name} + </TableCell> + <TableCell align='left'>{f.description}</TableCell> + <TableCell align='right'> + <Switch + checked={f.active} + onChange={toggleChange} + color='primary' + name={f.name} + inputProps={{ 'aria-label': 'primary checkbox' }} + /> + </TableCell> + </TableRow> + ))} + </TableBody> + </Table> + </div> + </div> + ); +}; + +export default FrontendFeatures; diff --git a/frontend/src/pages/GettingStarted.test.tsx b/frontend/src/pages/GettingStarted.test.tsx index 2a39499dff..6e99949292 100644 --- a/frontend/src/pages/GettingStarted.test.tsx +++ b/frontend/src/pages/GettingStarted.test.tsx @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -119,13 +119,26 @@ describe('GettingStarted page', () => { </p> <ul> <li> - - <a href="#/pipelines" class="link">Data passing in python components</a> + - <a href="#/pipelines" class="link" + + <a href="#/pipelines/details/pipeline-id-5?" class="link" + >V2 Python function based components</a + > + <ul> + <li> + Shows different component input and output options for KFP v2 + @@ --- --- @@ + > + </li> + </ul> + </li> + <li> + - <a href="#/pipelines" class="link">Data passing in Python components</a> + <a href="#/pipelines/details/pipeline-id-3?" class="link" - + >Data passing in python components</a + + >Data passing in Python components</a + > <ul> <li> - Shows how to pass data between python components. + Shows how to pass data between Python components. <a href="https://github.com/kubeflow/pipelines/tree/master/samples/tutorials/Data%20passing%20in%20python%20components" @@ --- --- @@ @@ -174,6 +187,19 @@ describe('GettingStarted page', () => { - Expected + Received + @@ --- --- @@ + <strong>Tutorials</strong> - Learn pipeline concepts by following a + tutorial. + </p> + <ul> + <li> + - <a href="#/pipelines" class="link" + + <a href="#/pipelines/details/pipeline-id-5?" class="link" + >V2 Python function based components</a + > + <ul> + <li> + Shows different component input and output options for KFP v2 @@ --- --- @@ > </li> diff --git a/frontend/src/pages/GettingStarted.tsx b/frontend/src/pages/GettingStarted.tsx index 3f472fdcf0..991ed63b38 100644 --- a/frontend/src/pages/GettingStarted.tsx +++ b/frontend/src/pages/GettingStarted.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,6 +33,7 @@ const DEMO_PIPELINES_ID_MAP = { data: 2, tfx: 1, xgboost: 0, + v2python: 4, }; const PAGE_CONTENT_MD = ({ @@ -40,18 +41,21 @@ const PAGE_CONTENT_MD = ({ data, tfx, xgboost, + v2python, }: { control: string; data: string; tfx: string; xgboost: string; + v2python: string; }) => ` <br/> ## Build your own pipeline with - * TensorFlow Extended (TFX) [SDK](https://www.tensorflow.org/tfx/guide) with end-to-end ML Pipeline Template ([Open TF 2.1 Notebook](https://console.cloud.google.com/mlengine/notebooks/deploy-notebook?q=download_url%3Dhttps%253A%252F%252Fraw.githubusercontent.com%252Ftensorflow%252Ftfx%252Fmaster%252Fdocs%252Ftutorials%252Ftfx%252Ftemplate.ipynb)) * Kubeflow Pipelines [SDK](https://www.kubeflow.org/docs/pipelines/sdk/) + * Try out [the new Kubeflow Pipelines SDK v2 (Beta)](https://www.kubeflow.org/docs/components/pipelines/sdk/v2/v2-compatibility/) + * TensorFlow Extended (TFX) [SDK](https://www.tensorflow.org/tfx/guide) with end-to-end ML Pipeline Template ([Open a Cloud AI Platform Notebook on Google Cloud](https://console.cloud.google.com/mlengine/notebooks/deploy-notebook?q=download_url%3Dhttps%253A%252F%252Fraw.githubusercontent.com%252Ftensorflow%252Ftfx%252Fmaster%252Fdocs%252Ftutorials%252Ftfx%252Ftemplate.ipynb)) <br/> @@ -67,8 +71,9 @@ This section contains demo and tutorial pipelines. **Tutorials** - Learn pipeline concepts by following a tutorial. - * [Data passing in python components](${data}) - Shows how to pass data between python components. [source code](https://github.com/kubeflow/pipelines/tree/master/samples/tutorials/Data%20passing%20in%20python%20components) - * [DSL - Control structures](${control}) - Shows how to use conditional execution and exit handlers. [source code](https://github.com/kubeflow/pipelines/tree/master/samples/tutorials/DSL%20-%20Control%20structures) +* [V2 Python function based components](${v2python}) - Shows different component input and output options for KFP v2 components. [source code](https://github.com/kubeflow/pipelines/blob/master/samples/v2/lightweight_python_functions_v2_pipeline/lightweight_python_functions_v2_pipeline.py) +* [Data passing in Python components](${data}) - Shows how to pass data between Python components. [source code](https://github.com/kubeflow/pipelines/tree/master/samples/tutorials/Data%20passing%20in%20python%20components) +* [DSL - Control structures](${control}) - Shows how to use conditional execution and exit handlers. [source code](https://github.com/kubeflow/pipelines/tree/master/samples/tutorials/DSL%20-%20Control%20structures) Want to learn more? [Learn from sample and tutorial pipelines.](https://www.kubeflow.org/docs/pipelines/tutorials/) `; @@ -103,7 +108,7 @@ const OPTIONS = { export class GettingStarted extends Page<{}, { links: string[] }> { public state = { - links: ['', '', '', ''].map(getPipelineLink), + links: ['', '', '', '', ''].map(getPipelineLink), }; public getInitialToolbarState(): ToolbarProps { @@ -147,6 +152,7 @@ export class GettingStarted extends Page<{}, { links: string[] }> { data: this.state.links[DEMO_PIPELINES_ID_MAP.data], tfx: this.state.links[DEMO_PIPELINES_ID_MAP.tfx], xgboost: this.state.links[DEMO_PIPELINES_ID_MAP.xgboost], + v2python: this.state.links[DEMO_PIPELINES_ID_MAP.v2python], })} </Markdown> </div> diff --git a/frontend/src/pages/NewExperiment.test.tsx b/frontend/src/pages/NewExperiment.test.tsx index 6df4ee0359..55d29d3209 100644 --- a/frontend/src/pages/NewExperiment.test.tsx +++ b/frontend/src/pages/NewExperiment.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/NewExperiment.tsx b/frontend/src/pages/NewExperiment.tsx index 1a00248319..71d9e7b0e7 100644 --- a/frontend/src/pages/NewExperiment.tsx +++ b/frontend/src/pages/NewExperiment.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/NewPipelineVersion.test.tsx b/frontend/src/pages/NewPipelineVersion.test.tsx index 49fc5142a3..3c021d89e5 100644 --- a/frontend/src/pages/NewPipelineVersion.test.tsx +++ b/frontend/src/pages/NewPipelineVersion.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/NewPipelineVersion.tsx b/frontend/src/pages/NewPipelineVersion.tsx index ec9065ed4a..df57ad4d2f 100644 --- a/frontend/src/pages/NewPipelineVersion.tsx +++ b/frontend/src/pages/NewPipelineVersion.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,33 +14,33 @@ * limitations under the License. */ -import * as React from 'react'; -import BusyButton from '../atoms/BusyButton'; import Button from '@material-ui/core/Button'; -import Buttons from '../lib/Buttons'; -import Dropzone from 'react-dropzone'; -import Input from '../atoms/Input'; -import { Page } from './Page'; -import { RoutePage, QUERY_PARAMS, RouteParams } from '../components/Router'; -import { TextFieldProps } from '@material-ui/core/TextField'; -import { ToolbarProps } from '../components/Toolbar'; -import { URLParser } from '../lib/URLParser'; -import { classes, stylesheet } from 'typestyle'; -import { commonCss, padding, color, fontsize, zIndex } from '../Css'; -import { logger, errorToMessage } from '../lib/Utils'; -import ResourceSelector from './ResourceSelector'; -import InputAdornment from '@material-ui/core/InputAdornment'; import Dialog from '@material-ui/core/Dialog'; import DialogActions from '@material-ui/core/DialogActions'; import DialogContent from '@material-ui/core/DialogContent'; -import { ApiResourceType } from '../apis/run'; -import { Apis, PipelineSortKeys } from '../lib/Apis'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import InputAdornment from '@material-ui/core/InputAdornment'; +import Radio from '@material-ui/core/Radio'; +import { TextFieldProps } from '@material-ui/core/TextField'; +import * as React from 'react'; +import Dropzone from 'react-dropzone'; +import { DocumentationCompilePipeline } from 'src/components/UploadPipelineDialog'; +import { classes, stylesheet } from 'typestyle'; import { ApiPipeline, ApiPipelineVersion } from '../apis/pipeline'; +import { ApiResourceType } from '../apis/run'; +import BusyButton from '../atoms/BusyButton'; +import Input from '../atoms/Input'; import { CustomRendererProps } from '../components/CustomTable'; import { Description } from '../components/Description'; -import FormControlLabel from '@material-ui/core/FormControlLabel'; -import Radio from '@material-ui/core/Radio'; -import { ExternalLink } from '../atoms/ExternalLink'; +import { QUERY_PARAMS, RoutePage, RouteParams } from '../components/Router'; +import { ToolbarProps } from '../components/Toolbar'; +import { color, commonCss, fontsize, padding, zIndex } from '../Css'; +import { Apis, PipelineSortKeys } from '../lib/Apis'; +import Buttons from '../lib/Buttons'; +import { URLParser } from '../lib/URLParser'; +import { errorToMessage, logger } from '../lib/Utils'; +import { Page } from './Page'; +import ResourceSelector from './ResourceSelector'; interface NewPipelineVersionState { validationError: string; @@ -664,13 +664,3 @@ class NewPipelineVersion extends Page<{}, NewPipelineVersionState> { } export default NewPipelineVersion; - -const DocumentationCompilePipeline: React.FC = () => ( - <div className={padding(10, 'b')}> - For expected file format, refer to{' '} - <ExternalLink href='https://www.kubeflow.org/docs/pipelines/sdk/build-component/#compile-the-pipeline'> - Compile Pipeline Documentation - </ExternalLink> - . - </div> -); diff --git a/frontend/src/pages/NewRun.test.tsx b/frontend/src/pages/NewRun.test.tsx index df055c9144..e2c7ea752d 100644 --- a/frontend/src/pages/NewRun.test.tsx +++ b/frontend/src/pages/NewRun.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,7 @@ import { MemoryRouter } from 'react-router'; import { logger } from '../lib/Utils'; import { NamespaceContext } from '../lib/KubeflowClient'; import { ApiFilter, PredicateOp } from '../apis/filter'; -import { ExperimentStorageState } from '../apis/experiment'; +import { ApiExperimentStorageState } from '../apis/experiment'; import { ApiJob } from 'src/apis/job'; class TestNewRun extends NewRun { @@ -630,7 +630,7 @@ describe('NewRun', () => { { key: 'storage_state', op: PredicateOp.NOTEQUALS, - string_value: ExperimentStorageState.ARCHIVED.toString(), + string_value: ApiExperimentStorageState.ARCHIVED.toString(), }, ], } as ApiFilter), @@ -661,7 +661,7 @@ describe('NewRun', () => { { key: 'storage_state', op: PredicateOp.NOTEQUALS, - string_value: ExperimentStorageState.ARCHIVED.toString(), + string_value: ApiExperimentStorageState.ARCHIVED.toString(), }, ], } as ApiFilter), @@ -1772,7 +1772,7 @@ describe('NewRun', () => { trigger: { periodic_schedule: { end_time: undefined, - interval_second: '60', + interval_second: '3600', start_time: undefined, }, }, diff --git a/frontend/src/pages/NewRun.tsx b/frontend/src/pages/NewRun.tsx index bd9a4263a9..5beaf02dc8 100644 --- a/frontend/src/pages/NewRun.tsx +++ b/frontend/src/pages/NewRun.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,7 +30,7 @@ import ResourceSelector from './ResourceSelector'; import RunUtils from '../lib/RunUtils'; import { TextFieldProps } from '@material-ui/core/TextField'; import Trigger from '../components/Trigger'; -import { ApiExperiment, ExperimentStorageState } from '../apis/experiment'; +import { ApiExperiment, ApiExperimentStorageState } from '../apis/experiment'; import { ApiPipeline, ApiParameter, ApiPipelineVersion } from '../apis/pipeline'; import { ApiRun, @@ -423,7 +423,7 @@ export class NewRun extends Page<{ namespace?: string }, NewRunState> { { key: 'storage_state', op: PredicateOp.NOTEQUALS, - string_value: ExperimentStorageState.ARCHIVED.toString(), + string_value: ApiExperimentStorageState.ARCHIVED.toString(), }, ]); const response = await Apis.experimentServiceApi.listExperiment( @@ -515,7 +515,7 @@ export class NewRun extends Page<{ namespace?: string }, NewRunState> { helpText={ <div> Note, the service account needs{' '} - <ExternalLink href='https://github.com/argoproj/argo/blob/v2.3.0/docs/workflow-rbac.md'> + <ExternalLink href='https://argoproj.github.io/argo-workflows/workflow-rbac/'> minimum permissions required by argo workflows </ExternalLink>{' '} and extra permissions the specific task requires. diff --git a/frontend/src/pages/Page.tsx b/frontend/src/pages/Page.tsx index b4110b7c5f..0a8cf236c8 100644 --- a/frontend/src/pages/Page.tsx +++ b/frontend/src/pages/Page.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/PipelineDetails.test.tsx b/frontend/src/pages/PipelineDetails.test.tsx index 08249426fe..36f8aeee0a 100644 --- a/frontend/src/pages/PipelineDetails.test.tsx +++ b/frontend/src/pages/PipelineDetails.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,19 +14,20 @@ * limitations under the License. */ +import { graphlib } from 'dagre'; +import { ReactWrapper, shallow, ShallowWrapper } from 'enzyme'; import * as React from 'react'; -import * as StaticGraphParser from '../lib/StaticGraphParser'; -import PipelineDetails, { css } from './PipelineDetails'; -import TestUtils from '../TestUtils'; import { ApiExperiment } from '../apis/experiment'; import { ApiPipeline, ApiPipelineVersion } from '../apis/pipeline'; -import { ApiRunDetail, ApiResourceType } from '../apis/run'; +import { ApiResourceType, ApiRunDetail } from '../apis/run'; +import { QUERY_PARAMS, RoutePage, RouteParams } from '../components/Router'; import { Apis } from '../lib/Apis'; -import { PageProps } from './Page'; -import { RouteParams, RoutePage, QUERY_PARAMS } from '../components/Router'; -import { graphlib } from 'dagre'; -import { shallow, mount, ShallowWrapper, ReactWrapper } from 'enzyme'; import { ButtonKeys } from '../lib/Buttons'; +import * as StaticGraphParser from '../lib/StaticGraphParser'; +import TestUtils from '../TestUtils'; +import * as WorkflowUtils from 'src/lib/v2/WorkflowUtils'; +import { PageProps } from './Page'; +import PipelineDetails from './PipelineDetails'; describe('PipelineDetails', () => { const updateBannerSpy = jest.fn(); @@ -133,14 +134,6 @@ describe('PipelineDetails', () => { jest.resetAllMocks(); }); - it('shows empty pipeline details with no graph', async () => { - TestUtils.makeErrorResponseOnce(createGraphSpy, 'bad graph'); - tree = shallow(<PipelineDetails {...generateProps()} />); - await getPipelineVersionTemplateSpy; - await TestUtils.flushPromises(); - expect(tree).toMatchSnapshot(); - }); - it('shows pipeline name in page name, and breadcrumb to go back to pipelines', async () => { tree = shallow(<PipelineDetails {...generateProps()} />); await getPipelineVersionTemplateSpy; @@ -264,7 +257,7 @@ describe('PipelineDetails', () => { testRun.run!.resource_references = [ { key: { id: 'test-experiment-id', type: ApiResourceType.EXPERIMENT } }, ]; - TestUtils.makeErrorResponseOnce(getExperimentSpy, 'woops'); + TestUtils.makeErrorResponse(getExperimentSpy, 'woops'); tree = shallow(<PipelineDetails {...generateProps(true)} />); await getPipelineSpy; await TestUtils.flushPromises(); @@ -323,7 +316,15 @@ describe('PipelineDetails', () => { }); it('shows no graph error banner when failing to parse graph', async () => { - TestUtils.makeErrorResponseOnce(createGraphSpy, 'bad graph'); + getPipelineVersionTemplateSpy.mockResolvedValue({ + template: ` + apiVersion: argoproj.io/v1alpha1 + kind: Workflow + metadata: + generateName: entry-point-test- + `, + }); + TestUtils.makeErrorResponse(createGraphSpy, 'bad graph'); tree = shallow(<PipelineDetails {...generateProps()} />); await getPipelineVersionTemplateSpy; await TestUtils.flushPromises(); @@ -355,40 +356,6 @@ describe('PipelineDetails', () => { expect(updateBannerSpy).toHaveBeenLastCalledWith({}); }); - it('shows empty pipeline details with empty graph', async () => { - tree = shallow(<PipelineDetails {...generateProps()} />); - await getPipelineVersionTemplateSpy; - await TestUtils.flushPromises(); - expect(tree).toMatchSnapshot(); - }); - - it('sets summary shown state to false when clicking the Hide button', async () => { - tree = mount(<PipelineDetails {...generateProps()} />); - await getPipelineVersionTemplateSpy; - await TestUtils.flushPromises(); - tree.update(); - expect(tree.state('summaryShown')).toBe(true); - tree.find('Paper Button').simulate('click'); - expect(tree.state('summaryShown')).toBe(false); - }); - - it('collapses summary card when summary shown state is false', async () => { - tree = shallow(<PipelineDetails {...generateProps()} />); - await getPipelineVersionTemplateSpy; - await TestUtils.flushPromises(); - tree.setState({ summaryShown: false }); - expect(tree).toMatchSnapshot(); - }); - - it('shows the summary card when clicking Show button', async () => { - tree = mount(<PipelineDetails {...generateProps()} />); - await getPipelineVersionTemplateSpy; - await TestUtils.flushPromises(); - tree.setState({ summaryShown: false }); - tree.find(`.${css.footer} Button`).simulate('click'); - expect(tree.state('summaryShown')).toBe(true); - }); - it('has a new experiment button if it has a pipeline reference', async () => { tree = shallow(<PipelineDetails {...generateProps()} />); await getPipelineVersionTemplateSpy; @@ -601,75 +568,4 @@ describe('PipelineDetails', () => { }), ); }); - - it('opens side panel on clicked node, shows message when node is not found in graph', async () => { - tree = shallow(<PipelineDetails {...generateProps()} />); - await getPipelineVersionTemplateSpy; - await TestUtils.flushPromises(); - clickGraphNode(tree, 'some-node-id'); - expect(tree.state('selectedNodeId')).toBe('some-node-id'); - expect(tree).toMatchSnapshot(); - }); - - it('shows clicked node info in the side panel if it is in the graph', async () => { - const g = new graphlib.Graph(); - const info = new StaticGraphParser.SelectedNodeInfo(); - info.args = ['test arg', 'test arg2']; - info.command = ['test command', 'test command 2']; - info.condition = 'test condition'; - info.image = 'test image'; - info.inputs = [ - ['key1', 'val1'], - ['key2', 'val2'], - ]; - info.outputs = [ - ['key3', 'val3'], - ['key4', 'val4'], - ]; - info.nodeType = 'container'; - g.setNode('node1', { info, label: 'node1' }); - createGraphSpy.mockImplementation(() => g); - - tree = shallow(<PipelineDetails {...generateProps()} />); - await getPipelineVersionTemplateSpy; - await TestUtils.flushPromises(); - clickGraphNode(tree, 'node1'); - expect(tree).toMatchSnapshot(); - }); - - it('shows pipeline source code when config tab is clicked', async () => { - tree = shallow(<PipelineDetails {...generateProps()} />); - await getPipelineVersionTemplateSpy; - await TestUtils.flushPromises(); - tree.find('MD2Tabs').simulate('switch', 1); - expect(tree.state('selectedTab')).toBe(1); - expect(tree).toMatchSnapshot(); - }); - - it('closes side panel when close button is clicked', async () => { - tree = shallow(<PipelineDetails {...generateProps()} />); - await getPipelineVersionTemplateSpy; - await TestUtils.flushPromises(); - tree.setState({ selectedNodeId: 'some-node-id' }); - tree.find('SidePanel').simulate('close'); - expect(tree.state('selectedNodeId')).toBe(''); - expect(tree).toMatchSnapshot(); - }); - - it('shows correct versions in version selector', async () => { - tree = shallow(<PipelineDetails {...generateProps()} />); - await getPipelineVersionTemplateSpy; - await TestUtils.flushPromises(); - expect(tree.state('versions')).toHaveLength(1); - expect(tree).toMatchSnapshot(); - }); }); - -function clickGraphNode(wrapper: ShallowWrapper, nodeId: string) { - // TODO: use dom events instead - wrapper - .find('EnhancedGraph') - .dive() - .dive() - .simulate('click', nodeId); -} diff --git a/frontend/src/pages/PipelineDetails.tsx b/frontend/src/pages/PipelineDetails.tsx index 0b77abcf58..dd918bd9cb 100644 --- a/frontend/src/pages/PipelineDetails.tsx +++ b/frontend/src/pages/PipelineDetails.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,104 +14,46 @@ * limitations under the License. */ -import * as JsYaml from 'js-yaml'; -import * as React from 'react'; -import * as StaticGraphParser from '../lib/StaticGraphParser'; -import Button from '@material-ui/core/Button'; -import Buttons, { ButtonKeys } from '../lib/Buttons'; -import Graph from '../components/Graph'; -import InfoIcon from '@material-ui/icons/InfoOutlined'; -import MD2Tabs from '../atoms/MD2Tabs'; -import Paper from '@material-ui/core/Paper'; -import RunUtils from '../lib/RunUtils'; -import SidePanel from '../components/SidePanel'; -import StaticNodeDetails from '../components/StaticNodeDetails'; -import { ApiExperiment } from '../apis/experiment'; -import { ApiPipeline, ApiGetTemplateResponse, ApiPipelineVersion } from '../apis/pipeline'; -import { Apis } from '../lib/Apis'; -import { Page } from './Page'; -import { RoutePage, RouteParams, QUERY_PARAMS } from '../components/Router'; -import { ToolbarProps } from '../components/Toolbar'; -import { URLParser } from '../lib/URLParser'; -import { Workflow } from '../../third_party/argo-ui/argo_template'; -import { classes, stylesheet } from 'typestyle'; -import Editor from '../components/Editor'; -import { color, commonCss, padding, fontsize, fonts, zIndex } from '../Css'; -import { logger, formatDateString } from '../lib/Utils'; import 'brace'; import 'brace/ext/language_tools'; import 'brace/mode/yaml'; import 'brace/theme/github'; -import { Description } from '../components/Description'; -import Select from '@material-ui/core/Select'; -import FormControl from '@material-ui/core/FormControl'; -import InputLabel from '@material-ui/core/InputLabel'; -import MenuItem from '@material-ui/core/MenuItem'; +import { graphlib } from 'dagre'; +import * as JsYaml from 'js-yaml'; +import * as React from 'react'; +import { FeatureKey, isFeatureEnabled } from 'src/features'; +import { Apis } from 'src/lib/Apis'; +import { convertFlowElements, PipelineFlowElement } from 'src/lib/v2/StaticFlow'; +import * as WorkflowUtils from 'src/lib/v2/WorkflowUtils'; +import { classes } from 'typestyle'; +import { Workflow } from '../../third_party/argo-ui/argo_template'; +import { ApiExperiment } from '../apis/experiment'; +import { ApiGetTemplateResponse, ApiPipeline, ApiPipelineVersion } from '../apis/pipeline'; +import { QUERY_PARAMS, RoutePage, RouteParams } from '../components/Router'; +import { ToolbarProps } from '../components/Toolbar'; +import { commonCss, padding } from '../Css'; +import Buttons, { ButtonKeys } from '../lib/Buttons'; +import RunUtils from '../lib/RunUtils'; +import * as StaticGraphParser from '../lib/StaticGraphParser'; import { compareGraphEdges, transitiveReduction } from '../lib/StaticGraphParser'; -import ReduceGraphSwitch from '../components/ReduceGraphSwitch'; +import { URLParser } from '../lib/URLParser'; +import { logger } from '../lib/Utils'; +import { Page } from './Page'; +import PipelineDetailsV1 from './PipelineDetailsV1'; +import PipelineDetailsV2 from './PipelineDetailsV2'; interface PipelineDetailsState { graph: dagre.graphlib.Graph | null; reducedGraph: dagre.graphlib.Graph | null; + graphV2: PipelineFlowElement[] | null; pipeline: ApiPipeline | null; - selectedNodeId: string; selectedNodeInfo: JSX.Element | null; - selectedTab: number; selectedVersion?: ApiPipelineVersion; - summaryShown: boolean; template?: Workflow; templateString?: string; versions: ApiPipelineVersion[]; - showReducedGraph: boolean; } -const summaryCardWidth = 500; - -export const css = stylesheet({ - containerCss: { - $nest: { - '& .CodeMirror': { - height: '100%', - width: '80%', - }, - - '& .CodeMirror-gutters': { - backgroundColor: '#f7f7f7', - }, - }, - background: '#f7f7f7', - height: '100%', - }, - footer: { - background: color.graphBg, - display: 'flex', - padding: '0 0 20px 20px', - }, - footerInfoOffset: { - marginLeft: summaryCardWidth + 40, - }, - infoSpan: { - color: color.lowContrast, - fontFamily: fonts.secondary, - fontSize: fontsize.small, - letterSpacing: '0.21px', - lineHeight: '24px', - paddingLeft: 6, - }, - summaryCard: { - bottom: 20, - left: 20, - padding: 10, - position: 'absolute', - width: summaryCardWidth, - zIndex: zIndex.PIPELINE_SUMMARY_CARD, - }, - summaryKey: { - color: color.strong, - marginTop: 10, - }, -}); - class PipelineDetails extends Page<{}, PipelineDetailsState> { constructor(props: any) { super(props); @@ -119,13 +61,10 @@ class PipelineDetails extends Page<{}, PipelineDetailsState> { this.state = { graph: null, reducedGraph: null, + graphV2: null, pipeline: null, - selectedNodeId: '', selectedNodeInfo: null, - selectedTab: 0, - summaryShown: true, versions: [], - showReducedGraph: false, }; } @@ -185,223 +124,35 @@ class PipelineDetails extends Page<{}, PipelineDetailsState> { public render(): JSX.Element { const { pipeline, - selectedNodeId, - selectedTab, selectedVersion, - summaryShown, templateString, versions, - showReducedGraph, + graph, + graphV2, + reducedGraph, } = this.state; - // Since react-ace Editor doesn't support in Safari when height or width is a percentage. - // Fix the Yaml file cannot display issue via defining “width/height” does not not take percentage if it's Safari browser. - // The code of detecting wether isSafari is from: https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser/9851769#9851769 - const isSafari = - /constructor/i.test(window.HTMLElement.toString()) || - (function(p) { - return p.toString() === '[object SafariRemoteNotification]'; - })( - !window['safari'] || (typeof 'safari' !== 'undefined' && window['safari'].pushNotification), - ); - - const graphToShow = - this.state.showReducedGraph && this.state.reducedGraph - ? this.state.reducedGraph - : this.state.graph; - let selectedNodeInfo: StaticGraphParser.SelectedNodeInfo | null = null; - if (graphToShow && graphToShow.node(selectedNodeId)) { - selectedNodeInfo = graphToShow.node(selectedNodeId).info; - if (!!selectedNodeId && !selectedNodeInfo) { - logger.error(`Node with ID: ${selectedNodeId} was not found in the graph`); - } - } - - let editorHeightWidth = '100%'; - - if (isSafari) { - editorHeightWidth = '640px'; - } - + const showV2Pipeline = + isFeatureEnabled(FeatureKey.V2) && graphV2 && graphV2.length > 0 && !graph; return ( <div className={classes(commonCss.page, padding(20, 't'))}> - <div className={commonCss.page}> - <MD2Tabs - selectedTab={selectedTab} - onSwitch={(tab: number) => this.setStateSafe({ selectedTab: tab })} - tabs={['Graph', 'YAML']} + {showV2Pipeline && <PipelineDetailsV2 pipelineFlowElements={graphV2!} />} + {!showV2Pipeline && ( + <PipelineDetailsV1 + pipeline={pipeline} + selectedVersion={selectedVersion} + versions={versions} + templateString={templateString} + graph={graph} + reducedGraph={reducedGraph} + updateBanner={this.props.updateBanner} + handleVersionSelected={this.handleVersionSelected.bind(this)} /> - <div className={commonCss.page}> - {selectedTab === 0 && ( - <div className={commonCss.page}> - {graphToShow && ( - <div - className={commonCss.page} - style={{ position: 'relative', overflow: 'hidden' }} - > - {!!pipeline && summaryShown && ( - <Paper className={css.summaryCard}> - <div - style={{ - alignItems: 'baseline', - display: 'flex', - justifyContent: 'space-between', - }} - > - <div className={commonCss.header}>Summary</div> - <Button - onClick={() => this.setStateSafe({ summaryShown: false })} - color='secondary' - > - Hide - </Button> - </div> - <div className={css.summaryKey}>ID</div> - <div>{pipeline.id || 'Unable to obtain Pipeline ID'}</div> - {versions.length && ( - <React.Fragment> - <form autoComplete='off'> - <FormControl> - <InputLabel>Version</InputLabel> - <Select - value={ - selectedVersion - ? selectedVersion.id - : pipeline.default_version!.id! - } - onChange={event => this.handleVersionSelected(event.target.value)} - inputProps={{ id: 'version-selector', name: 'selectedVersion' }} - > - {versions.map((v, _) => ( - <MenuItem key={v.id} value={v.id}> - {v.name} - </MenuItem> - ))} - </Select> - </FormControl> - </form> - <div className={css.summaryKey}> - <a - href={this._createVersionUrl()} - target='_blank' - rel='noopener noreferrer' - > - Version source - </a> - </div> - </React.Fragment> - )} - <div className={css.summaryKey}>Uploaded on</div> - <div>{formatDateString(pipeline.created_at)}</div> - <div className={css.summaryKey}>Description</div> - <Description description={pipeline.description || ''} /> - </Paper> - )} - - <Graph - graph={graphToShow} - selectedNodeId={selectedNodeId} - onClick={id => this.setStateSafe({ selectedNodeId: id })} - onError={(message, additionalInfo) => - this.props.updateBanner({ message, additionalInfo, mode: 'error' }) - } - /> - - <ReduceGraphSwitch - disabled={!this.state.reducedGraph} - checked={showReducedGraph} - onChange={_ => { - this.setState({ showReducedGraph: !this.state.showReducedGraph }); - }} - /> - - <SidePanel - isOpen={!!selectedNodeId} - title={selectedNodeId} - onClose={() => this.setStateSafe({ selectedNodeId: '' })} - > - <div className={commonCss.page}> - {!selectedNodeInfo && ( - <div className={commonCss.absoluteCenter}> - Unable to retrieve node info - </div> - )} - {!!selectedNodeInfo && ( - <div className={padding(20, 'lr')}> - <StaticNodeDetails nodeInfo={selectedNodeInfo} /> - </div> - )} - </div> - </SidePanel> - <div className={css.footer}> - {!summaryShown && ( - <Button - onClick={() => this.setStateSafe({ summaryShown: !summaryShown })} - color='secondary' - > - Show summary - </Button> - )} - <div - className={classes( - commonCss.flex, - summaryShown && !!pipeline && css.footerInfoOffset, - )} - > - <InfoIcon className={commonCss.infoIcon} /> - <span className={css.infoSpan}>Static pipeline graph</span> - </div> - </div> - </div> - )} - {!graphToShow && <span style={{ margin: '40px auto' }}>No graph to show</span>} - </div> - )} - {selectedTab === 1 && !!templateString && ( - <div className={css.containerCss}> - <Editor - value={templateString || ''} - height={editorHeightWidth} - width={editorHeightWidth} - mode='yaml' - theme='github' - editorProps={{ $blockScrolling: true }} - readOnly={true} - highlightActiveLine={true} - showGutter={true} - /> - </div> - )} - </div> - </div> + )} </div> ); } - public async handleVersionSelected(versionId: string): Promise<void> { - if (this.state.pipeline) { - const selectedVersion = (this.state.versions || []).find(v => v.id === versionId); - const selectedVersionPipelineTemplate = await this._getTemplateString( - this.state.pipeline.id!, - versionId, - ); - this.props.history.replace({ - pathname: `/pipelines/details/${this.state.pipeline.id}/version/${versionId}`, - }); - const graph = await this._createGraph(selectedVersionPipelineTemplate); - let reducedGraph = graph ? transitiveReduction(graph) : undefined; - if (graph && reducedGraph && compareGraphEdges(graph, reducedGraph)) { - reducedGraph = undefined; // disable reduction switch - } - this.setStateSafe({ - graph, - reducedGraph, - selectedVersion, - templateString: selectedVersionPipelineTemplate, - }); - } - } - public async refresh(): Promise<void> { return this.load(); } @@ -483,6 +234,7 @@ class PipelineDetails extends Page<{}, PipelineDetailsState> { } catch (err) { await this.showPageError('Cannot retrieve run details.', err); logger.error('Cannot retrieve run details.', err); + return; } } else { // if fromRunId is not specified, then we have a full pipeline @@ -546,19 +298,78 @@ class PipelineDetails extends Page<{}, PipelineDetailsState> { this.props.updateToolbar({ breadcrumbs, actions: toolbarActions, pageTitle }); - const graph = await this._createGraph(templateString); - let reducedGraph = graph ? transitiveReduction(graph) : undefined; - if (graph && reducedGraph && compareGraphEdges(graph, reducedGraph)) { - reducedGraph = undefined; // disable reduction switch + let graph: graphlib.Graph | null = null; + let reducedGraph: graphlib.Graph | null | undefined = null; + let graphV2: PipelineFlowElement[] = []; + if (templateString) { + try { + const template = JsYaml.safeLoad(templateString); + if (WorkflowUtils.isArgoWorkflowTemplate(template)) { + graph = StaticGraphParser.createGraph(template!); + + reducedGraph = graph ? transitiveReduction(graph) : undefined; + if (graph && reducedGraph && compareGraphEdges(graph, reducedGraph)) { + reducedGraph = undefined; // disable reduction switch + } + } else if (isFeatureEnabled(FeatureKey.V2)) { + const pipelineSpec = WorkflowUtils.convertJsonToV2PipelineSpec(templateString); + graphV2 = convertFlowElements(pipelineSpec); + } else { + throw new Error( + 'Unable to convert string response from server to Argo workflow template' + + ': https://argoproj.github.io/argo-workflows/workflow-templates/', + ); + } + } catch (err) { + await this.showPageError('Error: failed to generate Pipeline graph.', err); + } + } + + if (isFeatureEnabled(FeatureKey.V2) && graphV2.length > 0) { + this.setStateSafe({ + graph: undefined, + reducedGraph: undefined, + graphV2, + pipeline, + selectedVersion, + templateString, + versions, + }); + } else { + this.setStateSafe({ + graph, + reducedGraph, + graphV2: undefined, + pipeline, + selectedVersion, + templateString, + versions, + }); + } + } + + public async handleVersionSelected(versionId: string): Promise<void> { + if (this.state.pipeline) { + const selectedVersion = (this.state.versions || []).find(v => v.id === versionId); + const selectedVersionPipelineTemplate = await this._getTemplateString( + this.state.pipeline.id!, + versionId, + ); + this.props.history.replace({ + pathname: `/pipelines/details/${this.state.pipeline.id}/version/${versionId}`, + }); + const graph = await this._createGraph(selectedVersionPipelineTemplate); + let reducedGraph = graph ? transitiveReduction(graph) : undefined; + if (graph && reducedGraph && compareGraphEdges(graph, reducedGraph)) { + reducedGraph = undefined; // disable reduction switch + } + this.setStateSafe({ + graph, + reducedGraph, + selectedVersion, + templateString: selectedVersionPipelineTemplate, + }); } - this.setStateSafe({ - graph, - reducedGraph, - pipeline, - selectedVersion, - templateString, - versions, - }); } private async _getTemplateString(pipelineId: string, versionId: string): Promise<string> { @@ -589,10 +400,6 @@ class PipelineDetails extends Page<{}, PipelineDetailsState> { return null; } - private _createVersionUrl(): string { - return this.state.selectedVersion!.code_source_url!; - } - private _deleteCallback(_: string[], success: boolean): void { if (success) { const breadcrumbs = this.props.toolbarProps.breadcrumbs; diff --git a/frontend/src/pages/PipelineDetailsTest.test.tsx b/frontend/src/pages/PipelineDetailsTest.test.tsx new file mode 100644 index 0000000000..07e5069578 --- /dev/null +++ b/frontend/src/pages/PipelineDetailsTest.test.tsx @@ -0,0 +1,328 @@ +/* + * Copyright 2018 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { render, screen } from '@testing-library/react'; +import { graphlib } from 'dagre'; +import * as JsYaml from 'js-yaml'; +import React from 'react'; +import { ApiExperiment } from 'src/apis/experiment'; +import { ApiPipeline, ApiPipelineVersion } from 'src/apis/pipeline'; +import { ApiRunDetail } from 'src/apis/run'; +import { QUERY_PARAMS, RouteParams } from 'src/components/Router'; +import * as v2PipelineSpec from 'src/data/test/mock_lightweight_python_functions_v2_pipeline.json'; +import * as features from 'src/features'; +import { Apis } from 'src/lib/Apis'; +import TestUtils, { mockResizeObserver, testBestPractices } from 'src/TestUtils'; +import { CommonTestWrapper } from 'src/TestWrapper'; +import * as StaticGraphParser from '../lib/StaticGraphParser'; +import { PageProps } from './Page'; +import PipelineDetails from './PipelineDetails'; +import * as WorkflowUtils from 'src/lib/v2/WorkflowUtils'; + +// This file is created in order to replace enzyme with react-testing-library gradually. +// The old test file is written using enzyme in PipelineDetails.test.tsx. +testBestPractices(); +describe('switch between v1 and v2', () => { + const updateBannerSpy = jest.fn(); + const updateDialogSpy = jest.fn(); + const updateSnackbarSpy = jest.fn(); + const updateToolbarSpy = jest.fn(); + const historyPushSpy = jest.fn(); + + let testPipeline: ApiPipeline = {}; + let testPipelineVersion: ApiPipelineVersion = {}; + let testRun: ApiRunDetail = {}; + + function generateProps(fromRunSpec = false): PageProps { + const match = { + isExact: true, + params: fromRunSpec + ? {} + : { + [RouteParams.pipelineId]: testPipeline.id, + [RouteParams.pipelineVersionId]: + (testPipeline.default_version && testPipeline.default_version!.id) || '', + }, + path: '', + url: '', + }; + const location = { search: fromRunSpec ? `?${QUERY_PARAMS.fromRunId}=test-run-id` : '' } as any; + const pageProps = TestUtils.generatePageProps( + PipelineDetails, + location, + match, + historyPushSpy, + updateBannerSpy, + updateDialogSpy, + updateToolbarSpy, + updateSnackbarSpy, + ); + return pageProps; + } + const v1PipelineSpecTemplate = ` +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: entry-point-test- +spec: + arguments: + parameters: [] + entrypoint: entry-point-test + templates: + - dag: + tasks: + - name: recurse-1 + template: recurse-1 + - name: leaf-1 + template: leaf-1 + name: start + - dag: + tasks: + - name: start + template: start + - name: recurse-2 + template: recurse-2 + name: recurse-1 + - dag: + tasks: + - name: start + template: start + - name: leaf-2 + template: leaf-2 + - name: recurse-3 + template: recurse-3 + name: recurse-2 + - dag: + tasks: + - name: start + template: start + - name: recurse-1 + template: recurse-1 + - name: recurse-2 + template: recurse-2 + name: recurse-3 + - dag: + tasks: + - name: start + template: start + name: entry-point-test + - container: + name: leaf-1 + - container: + name: leaf-2 + `; + + beforeAll(() => jest.spyOn(console, 'error').mockImplementation()); + + beforeEach(() => { + mockResizeObserver(); + + testPipeline = { + created_at: new Date(2018, 8, 5, 4, 3, 2), + description: 'test pipeline description', + id: 'test-pipeline-id', + name: 'test pipeline', + parameters: [{ name: 'param1', value: 'value1' }], + default_version: { + id: 'test-pipeline-version-id', + name: 'test-pipeline-version', + }, + }; + + testPipelineVersion = { + id: 'test-pipeline-version-id', + name: 'test-pipeline-version', + }; + + testRun = { + run: { + id: 'test-run-id', + name: 'test run', + pipeline_spec: { + pipeline_id: 'run-pipeline-id', + }, + }, + }; + + jest.mock('src/lib/Apis', () => jest.fn()); + Apis.pipelineServiceApi.getPipeline = jest.fn().mockResolvedValue(testPipeline); + Apis.pipelineServiceApi.getPipelineVersion = jest.fn().mockResolvedValue(testPipelineVersion); + Apis.pipelineServiceApi.deletePipelineVersion = jest.fn(); + Apis.pipelineServiceApi.listPipelineVersions = jest + .fn() + .mockResolvedValue({ versions: [testPipelineVersion] }); + Apis.pipelineServiceApi.getTemplate = jest + .fn() + .mockResolvedValue({ template: 'test template' }); + Apis.pipelineServiceApi.getPipelineVersionTemplate = jest + .fn() + .mockResolvedValue({ template: 'test template' }); + + Apis.runServiceApi.getRun = jest.fn().mockResolvedValue(testRun); + Apis.experimentServiceApi.getExperiment = jest + .fn() + .mockResolvedValue({ id: 'test-experiment-id', name: 'test experiment' } as ApiExperiment); + }); + + afterEach(async () => { + jest.resetAllMocks(); + }); + + it('Show error if not valid v1 template and disabled v2 feature', async () => { + // v2 feature is turn off. + jest.spyOn(features, 'isFeatureEnabled').mockImplementation(featureKey => { + return false; + }); + Apis.pipelineServiceApi.getPipelineVersionTemplate = jest + .fn() + .mockResolvedValue({ template: 'bad graph' }); + const createGraphSpy = jest.spyOn(StaticGraphParser, 'createGraph'); + TestUtils.makeErrorResponse(createGraphSpy, 'bad graph'); + + render(<PipelineDetails {...generateProps()} />); + await TestUtils.flushPromises(); + + screen.getByTestId('pipeline-detail-v1'); + expect(updateBannerSpy).toHaveBeenCalledTimes(2); // Once to clear banner, once to show error + expect(updateBannerSpy).toHaveBeenLastCalledWith( + expect.objectContaining({ + additionalInfo: + 'Unable to convert string response from server to Argo workflow template: https://argoproj.github.io/argo-workflows/workflow-templates/', + message: 'Error: failed to generate Pipeline graph. Click Details for more information.', + mode: 'error', + }), + ); + }); + + it('Show error if v1 template cannot generate graph and disabled v2 feature', async () => { + // v2 feature is turn off. + jest.spyOn(features, 'isFeatureEnabled').mockImplementation(featureKey => { + return false; + }); + Apis.pipelineServiceApi.getPipelineVersionTemplate = jest.fn().mockResolvedValue({ + template: ` + apiVersion: argoproj.io/v1alpha1 + kind: Workflow + metadata: + generateName: entry-point-test- + `, + }); + const createGraphSpy = jest.spyOn(StaticGraphParser, 'createGraph'); + TestUtils.makeErrorResponse(createGraphSpy, 'bad graph'); + + render(<PipelineDetails {...generateProps()} />); + await TestUtils.flushPromises(); + + screen.getByTestId('pipeline-detail-v1'); + expect(updateBannerSpy).toHaveBeenCalledTimes(2); // Once to clear banner, once to show error + expect(updateBannerSpy).toHaveBeenLastCalledWith( + expect.objectContaining({ + additionalInfo: 'bad graph', + message: 'Error: failed to generate Pipeline graph. Click Details for more information.', + mode: 'error', + }), + ); + }); + + it('Show error if not valid v2 template and enabled v2 feature', async () => { + // v2 feature is turn on. + jest.spyOn(features, 'isFeatureEnabled').mockImplementation(featureKey => { + if (featureKey === features.FeatureKey.V2) { + return true; + } + return false; + }); + const createGraphSpy = jest.spyOn(StaticGraphParser, 'createGraph'); + TestUtils.makeErrorResponse(createGraphSpy, 'bad graph'); + + render(<PipelineDetails {...generateProps()} />); + await TestUtils.flushPromises(); + + screen.getByTestId('pipeline-detail-v1'); + expect(updateBannerSpy).toHaveBeenCalledTimes(2); // Once to clear banner, once to show error + expect(updateBannerSpy).toHaveBeenLastCalledWith( + expect.objectContaining({ + additionalInfo: 'Unexpected token e in JSON at position 1', + message: 'Error: failed to generate Pipeline graph. Click Details for more information.', + mode: 'error', + }), + ); + }); + + it('Show v1 page if valid v1 template and enabled v2 feature flag', async () => { + // v2 feature is turn on. + jest.spyOn(features, 'isFeatureEnabled').mockImplementation(featureKey => { + if (featureKey === features.FeatureKey.V2) { + return true; + } + return false; + }); + + const createGraphSpy = jest.spyOn(StaticGraphParser, 'createGraph'); + createGraphSpy.mockImplementation(() => new graphlib.Graph()); + Apis.pipelineServiceApi.getTemplate = jest + .fn() + .mockResolvedValue({ template: v1PipelineSpecTemplate }); + Apis.pipelineServiceApi.getPipelineVersionTemplate = jest + .fn() + .mockResolvedValue({ template: v1PipelineSpecTemplate }); + + render(<PipelineDetails {...generateProps()} />); + await TestUtils.flushPromises(); + + screen.getByTestId('pipeline-detail-v1'); + expect(updateBannerSpy).toHaveBeenCalledTimes(1); + }); + + it('Show v1 page if valid v1 template and disabled v2 feature flag', async () => { + // v2 feature is turn off. + jest.spyOn(features, 'isFeatureEnabled').mockImplementation(featureKey => { + return false; + }); + Apis.pipelineServiceApi.getPipelineVersionTemplate = jest + .fn() + .mockResolvedValue({ template: v1PipelineSpecTemplate }); + const createGraphSpy = jest.spyOn(StaticGraphParser, 'createGraph'); + createGraphSpy.mockImplementation(() => new graphlib.Graph()); + + render(<PipelineDetails {...generateProps()} />); + await TestUtils.flushPromises(); + + screen.getByTestId('pipeline-detail-v1'); + expect(updateBannerSpy).toHaveBeenCalledTimes(1); + }); + + it('Show v2 page if valid v2 template and enabled v2 feature', async () => { + // v2 feature is turn on. + jest.spyOn(features, 'isFeatureEnabled').mockImplementation(featureKey => { + if (featureKey === features.FeatureKey.V2) { + return true; + } + return false; + }); + const createGraphSpy = jest.spyOn(StaticGraphParser, 'createGraph'); + TestUtils.makeErrorResponse(createGraphSpy, 'bad graph'); + Apis.pipelineServiceApi.getPipelineVersionTemplate = jest + .fn() + .mockResolvedValue({ template: JSON.stringify(v2PipelineSpec) }); + + render(<PipelineDetails {...generateProps()} />); + await TestUtils.flushPromises(); + + screen.getByTestId('pipeline-detail-v2'); + expect(updateBannerSpy).toHaveBeenCalledTimes(1); + }); +}); diff --git a/frontend/src/pages/PipelineDetailsV1.test.tsx b/frontend/src/pages/PipelineDetailsV1.test.tsx new file mode 100644 index 0000000000..a9db446e0e --- /dev/null +++ b/frontend/src/pages/PipelineDetailsV1.test.tsx @@ -0,0 +1,222 @@ +/* + * Copyright 2018 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as JsYaml from 'js-yaml'; +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { graphlib } from 'dagre'; +import * as React from 'react'; +import { testBestPractices } from 'src/TestUtils'; +import PipelineDetailsV1, { PipelineDetailsV1Props } from './PipelineDetailsV1'; +import { color } from 'src/Css'; +import { Constants } from 'src/lib/Constants'; +import { SelectedNodeInfo } from 'src/lib/StaticGraphParser'; + +testBestPractices(); +describe('PipelineDetailsV1', () => { + const testPipeline = { + created_at: new Date(2018, 8, 5, 4, 3, 2), + description: 'test pipeline description', + id: 'test-pipeline-id', + name: 'test pipeline', + parameters: [{ name: 'param1', value: 'value1' }], + default_version: { + id: 'test-pipeline-version-id', + name: 'test-pipeline-version', + }, + }; + const testPipelineVersion = { + id: 'test-pipeline-version-id', + name: 'test-pipeline-version', + }; + const pipelineSpecTemplate = ` + apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: entry-point-test- +spec: + arguments: + parameters: [] + entrypoint: entry-point-test + templates: + - dag: + tasks: + - name: recurse-1 + template: recurse-1 + - name: leaf-1 + template: leaf-1 + name: start + - dag: + tasks: + - name: start + template: start + - name: recurse-2 + template: recurse-2 + name: recurse-1 + - dag: + tasks: + - name: start + template: start + - name: leaf-2 + template: leaf-2 + - name: recurse-3 + template: recurse-3 + name: recurse-2 + - dag: + tasks: + - name: start + template: start + - name: recurse-1 + template: recurse-1 + - name: recurse-2 + template: recurse-2 + name: recurse-3 + - dag: + tasks: + - name: start + template: start + name: entry-point-test + - container: + name: leaf-1 + - container: + name: leaf-2 +`; + + function generateProps( + graph: graphlib.Graph | null, + reducedGraph: graphlib.Graph | null, + ): PipelineDetailsV1Props { + const props: PipelineDetailsV1Props = { + pipeline: testPipeline, + selectedVersion: testPipelineVersion, + versions: [testPipelineVersion], + graph: graph, + reducedGraph: reducedGraph, + templateString: JSON.stringify({ template: JsYaml.safeDump(pipelineSpecTemplate) }), + updateBanner: bannerProps => {}, + handleVersionSelected: async versionId => {}, + }; + return props; + } + + beforeEach(() => {}); + + it('shows correct versions in version selector', async () => { + render(<PipelineDetailsV1 {...generateProps(new graphlib.Graph(), new graphlib.Graph())} />); + + expect(screen.getByText('test-pipeline-version')); + expect(screen.getByTestId('version_selector').childElementCount).toEqual(1); + }); + + it('shows clicked node info in the side panel if it is in the graph', async () => { + // Arrange + const graph = createSimpleGraph(); + const reducedGraph = createSimpleGraph(); + + // Act + render(<PipelineDetailsV1 {...generateProps(graph, reducedGraph)} />); + fireEvent( + screen.getByText('start'), + new MouseEvent('click', { + bubbles: true, + cancelable: true, + }), + ); + + // Assert + screen.getByText('/start'); + }); + + it('closes side panel when close button is clicked', async () => { + // Arrange + const graph = createSimpleGraph(); + const reducedGraph = createSimpleGraph(); + + // Act + render(<PipelineDetailsV1 {...generateProps(graph, reducedGraph)} />); + fireEvent( + screen.getByText('start'), + new MouseEvent('click', { + bubbles: true, + cancelable: true, + }), + ); + fireEvent( + screen.getByLabelText('close'), + new MouseEvent('click', { + bubbles: true, + cancelable: true, + }), + ); + + // Assert + expect(screen.queryByText('/start')).toBeNull(); + }); + + it('shows pipeline source code when config tab is clicked', async () => { + render(<PipelineDetailsV1 {...generateProps(new graphlib.Graph(), new graphlib.Graph())} />); + + fireEvent( + screen.getByText('YAML'), + new MouseEvent('click', { + bubbles: true, + cancelable: true, + }), + ); + screen.getByTestId('spec-yaml'); + }); + + it('shows the summary card when clicking Show button', async () => { + const graph = createSimpleGraph(); + const reducedGraph = createSimpleGraph(); + render(<PipelineDetailsV1 {...generateProps(graph, reducedGraph)} />); + + screen.getByText('Hide'); + fireEvent( + screen.getByText('Hide'), + new MouseEvent('click', { + bubbles: true, + cancelable: true, + }), + ); + fireEvent( + screen.getByText('Show summary'), + new MouseEvent('click', { + bubbles: true, + cancelable: true, + }), + ); + screen.getByText('Hide'); + }); + + it('shows empty pipeline details with empty graph', async () => { + render(<PipelineDetailsV1 {...generateProps(null, null)} />); + + screen.getByText('No graph to show'); + }); +}); + +function createSimpleGraph() { + const graph = new graphlib.Graph(); + graph.setGraph({ width: 1000, height: 700 }); + graph.setNode('/start', { + bgColor: undefined, + height: Constants.NODE_HEIGHT, + info: new SelectedNodeInfo(), + label: 'start', + width: Constants.NODE_WIDTH, + }); + return graph; +} diff --git a/frontend/src/pages/PipelineDetailsV1.tsx b/frontend/src/pages/PipelineDetailsV1.tsx new file mode 100644 index 0000000000..cadcf1fa1e --- /dev/null +++ b/frontend/src/pages/PipelineDetailsV1.tsx @@ -0,0 +1,277 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Button from '@material-ui/core/Button'; +import FormControl from '@material-ui/core/FormControl'; +import InputLabel from '@material-ui/core/InputLabel'; +import MenuItem from '@material-ui/core/MenuItem'; +import Paper from '@material-ui/core/Paper'; +import Select from '@material-ui/core/Select'; +import InfoIcon from '@material-ui/icons/InfoOutlined'; +import * as React from 'react'; +import { useState } from 'react'; +import { ApiPipeline, ApiPipelineVersion } from 'src/apis/pipeline'; +import { BannerProps } from 'src/components/Banner'; +import { classes, stylesheet } from 'typestyle'; +import MD2Tabs from '../atoms/MD2Tabs'; +import { Description } from '../components/Description'; +import Editor from '../components/Editor'; +import Graph from '../components/Graph'; +import ReduceGraphSwitch from '../components/ReduceGraphSwitch'; +import SidePanel from '../components/SidePanel'; +import StaticNodeDetails from '../components/StaticNodeDetails'; +import { color, commonCss, fonts, fontsize, padding, zIndex } from '../Css'; +import * as StaticGraphParser from '../lib/StaticGraphParser'; +import { formatDateString, logger } from '../lib/Utils'; + +const summaryCardWidth = 500; + +export const css = stylesheet({ + containerCss: { + $nest: { + '& .CodeMirror': { + height: '100%', + width: '80%', + }, + + '& .CodeMirror-gutters': { + backgroundColor: '#f7f7f7', + }, + }, + background: '#f7f7f7', + height: '100%', + }, + footer: { + background: color.graphBg, + display: 'flex', + padding: '0 0 20px 20px', + }, + footerInfoOffset: { + marginLeft: summaryCardWidth + 40, + }, + infoSpan: { + color: color.lowContrast, + fontFamily: fonts.secondary, + fontSize: fontsize.small, + letterSpacing: '0.21px', + lineHeight: '24px', + paddingLeft: 6, + }, + summaryCard: { + bottom: 20, + left: 20, + padding: 10, + position: 'absolute', + width: summaryCardWidth, + zIndex: zIndex.PIPELINE_SUMMARY_CARD, + }, + summaryKey: { + color: color.strong, + marginTop: 10, + }, +}); + +export interface PipelineDetailsV1Props { + graph: dagre.graphlib.Graph | null; + reducedGraph: dagre.graphlib.Graph | null; + pipeline: ApiPipeline | null; + selectedVersion: ApiPipelineVersion | undefined; + versions: ApiPipelineVersion[]; + templateString?: string; + updateBanner: (bannerProps: BannerProps) => void; + handleVersionSelected: (versionId: string) => Promise<void>; +} + +const PipelineDetailsV1: React.FC<PipelineDetailsV1Props> = ({ + pipeline, + selectedVersion, + versions, + graph, + reducedGraph, + templateString, + updateBanner, + handleVersionSelected, +}: PipelineDetailsV1Props) => { + const [selectedTab, setSelectedTab] = useState(0); + const [selectedNodeId, setSelectedNodeId] = useState(''); + const [summaryShown, setSummaryShown] = useState(true); + const [showReducedGraph, setShowReducedGraph] = useState(false); + const graphToShow = showReducedGraph && reducedGraph ? reducedGraph : graph; + + let selectedNodeInfo: StaticGraphParser.SelectedNodeInfo | null = null; + if (graphToShow && graphToShow.node(selectedNodeId)) { + selectedNodeInfo = graphToShow.node(selectedNodeId).info; + if (!!selectedNodeId && !selectedNodeInfo) { + logger.error(`Node with ID: ${selectedNodeId} was not found in the graph`); + } + } + + // Since react-ace Editor doesn't support in Safari when height or width is a percentage. + // Fix the Yaml file cannot display issue via defining “width/height” does not not take percentage if it's Safari browser. + // The code of detecting wether isSafari is from: https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser/9851769#9851769 + const isSafari = + /constructor/i.test(window.HTMLElement.toString()) || + (function(p) { + return p.toString() === '[object SafariRemoteNotification]'; + })(!window['safari'] || (typeof 'safari' !== 'undefined' && window['safari'].pushNotification)); + let editorHeightWidth = '100%'; + + if (isSafari) { + editorHeightWidth = '640px'; + } + + const createVersionUrl = () => { + return selectedVersion!.code_source_url!; + }; + + return ( + <div className={commonCss.page} data-testid={'pipeline-detail-v1'}> + <MD2Tabs + selectedTab={selectedTab} + onSwitch={(tab: number) => setSelectedTab(tab)} + tabs={['Graph', 'YAML']} + /> + <div className={commonCss.page}> + {selectedTab === 0 && ( + <div className={commonCss.page}> + {graphToShow && ( + <div className={commonCss.page} style={{ position: 'relative', overflow: 'hidden' }}> + {!!pipeline && summaryShown && ( + <Paper className={css.summaryCard}> + <div + style={{ + alignItems: 'baseline', + display: 'flex', + justifyContent: 'space-between', + }} + > + <div className={commonCss.header}>Summary</div> + <Button onClick={() => setSummaryShown(false)} color='secondary'> + Hide + </Button> + </div> + <div className={css.summaryKey}>ID</div> + <div>{pipeline.id || 'Unable to obtain Pipeline ID'}</div> + {versions.length && ( + <React.Fragment> + <form autoComplete='off'> + <FormControl> + <InputLabel>Version</InputLabel> + <Select + data-testid='version_selector' + value={ + selectedVersion ? selectedVersion.id : pipeline.default_version!.id! + } + onChange={event => handleVersionSelected(event.target.value)} + inputProps={{ id: 'version-selector', name: 'selectedVersion' }} + > + {versions.map((v, _) => ( + <MenuItem key={v.id} value={v.id}> + {v.name} + </MenuItem> + ))} + </Select> + </FormControl> + </form> + <div className={css.summaryKey}> + <a href={createVersionUrl()} target='_blank' rel='noopener noreferrer'> + Version source + </a> + </div> + </React.Fragment> + )} + <div className={css.summaryKey}>Uploaded on</div> + <div>{formatDateString(pipeline.created_at)}</div> + <div className={css.summaryKey}>Description</div> + <Description description={pipeline.description || ''} /> + </Paper> + )} + + <Graph + graph={graphToShow} + selectedNodeId={selectedNodeId} + onClick={id => setSelectedNodeId(id)} + onError={(message, additionalInfo) => { + updateBanner({ message, additionalInfo, mode: 'error' }); + }} + /> + + <ReduceGraphSwitch + disabled={!reducedGraph} + checked={showReducedGraph} + onChange={_ => { + setShowReducedGraph(!showReducedGraph); + }} + /> + + <SidePanel + isOpen={!!selectedNodeId} + title={selectedNodeId} + onClose={() => setSelectedNodeId('')} + > + <div className={commonCss.page}> + {!selectedNodeInfo && ( + <div className={commonCss.absoluteCenter}>Unable to retrieve node info</div> + )} + {!!selectedNodeInfo && ( + <div className={padding(20, 'lr')}> + <StaticNodeDetails nodeInfo={selectedNodeInfo} /> + </div> + )} + </div> + </SidePanel> + <div className={css.footer}> + {!summaryShown && ( + <Button onClick={() => setSummaryShown(!summaryShown)} color='secondary'> + Show summary + </Button> + )} + <div + className={classes( + commonCss.flex, + summaryShown && !!pipeline && css.footerInfoOffset, + )} + > + <InfoIcon className={commonCss.infoIcon} /> + <span className={css.infoSpan}>Static pipeline graph</span> + </div> + </div> + </div> + )} + {!graphToShow && <span style={{ margin: '40px auto' }}>No graph to show</span>} + </div> + )} + {selectedTab === 1 && !!templateString && ( + <div className={css.containerCss} data-testid={'spec-yaml'}> + <Editor + value={templateString || ''} + height={editorHeightWidth} + width={editorHeightWidth} + mode='yaml' + theme='github' + editorProps={{ $blockScrolling: true }} + readOnly={true} + highlightActiveLine={true} + showGutter={true} + /> + </div> + )} + </div> + </div> + ); +}; + +export default PipelineDetailsV1; diff --git a/frontend/src/pages/PipelineDetailsV2.test.tsx b/frontend/src/pages/PipelineDetailsV2.test.tsx new file mode 100644 index 0000000000..59ec433002 --- /dev/null +++ b/frontend/src/pages/PipelineDetailsV2.test.tsx @@ -0,0 +1,37 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { render, screen } from '@testing-library/react'; +import * as React from 'react'; +import { CommonTestWrapper } from 'src/TestWrapper'; +import { mockResizeObserver, testBestPractices } from '../TestUtils'; +import PipelineDetailsV2 from './PipelineDetailsV2'; + +testBestPractices(); +describe('PipelineDetailsV2', () => { + beforeEach(() => { + mockResizeObserver(); + }); + + it('Render detail page with reactflow', async () => { + render( + <CommonTestWrapper> + <PipelineDetailsV2 pipelineFlowElements={[]}></PipelineDetailsV2> + </CommonTestWrapper>, + ); + expect(screen.getByTestId('StaticCanvas')).not.toBeNull(); + }); +}); diff --git a/frontend/src/pages/PipelineDetailsV2.tsx b/frontend/src/pages/PipelineDetailsV2.tsx new file mode 100644 index 0000000000..0384d7620b --- /dev/null +++ b/frontend/src/pages/PipelineDetailsV2.tsx @@ -0,0 +1,38 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react'; +import { PipelineFlowElement } from 'src/lib/v2/StaticFlow'; +import { commonCss } from '../Css'; +import StaticCanvas from './v2/StaticCanvas'; + +interface PipelineDetailsV2Props { + pipelineFlowElements: PipelineFlowElement[]; +} + +const PipelineDetailsV2: React.FC<PipelineDetailsV2Props> = ({ + pipelineFlowElements, +}: PipelineDetailsV2Props) => { + return ( + <div className={commonCss.page} data-testid={'pipeline-detail-v2'}> + <div className={commonCss.page} style={{ position: 'relative', overflow: 'hidden' }}> + <StaticCanvas elements={pipelineFlowElements}></StaticCanvas> + {/* <div>{pipelineIR}</div> */} + </div> + </div> + ); +}; + +export default PipelineDetailsV2; diff --git a/frontend/src/pages/PipelineList.test.tsx b/frontend/src/pages/PipelineList.test.tsx index 1cdf7c4672..8930bbf397 100644 --- a/frontend/src/pages/PipelineList.test.tsx +++ b/frontend/src/pages/PipelineList.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,15 +14,15 @@ * limitations under the License. */ +import { ReactWrapper, shallow, ShallowWrapper } from 'enzyme'; +import { range } from 'lodash'; import * as React from 'react'; -import PipelineList from './PipelineList'; -import TestUtils from '../TestUtils'; -import { Apis } from '../lib/Apis'; -import { PageProps } from './Page'; import { RoutePage, RouteParams } from '../components/Router'; -import { shallow, ReactWrapper, ShallowWrapper } from 'enzyme'; -import { range } from 'lodash'; +import { Apis } from '../lib/Apis'; import { ButtonKeys } from '../lib/Buttons'; +import TestUtils from '../TestUtils'; +import { PageProps } from './Page'; +import PipelineList from './PipelineList'; describe('PipelineList', () => { let tree: ReactWrapper | ShallowWrapper; diff --git a/frontend/src/pages/PipelineList.tsx b/frontend/src/pages/PipelineList.tsx index 6cbf2d0d37..f73606d898 100644 --- a/frontend/src/pages/PipelineList.tsx +++ b/frontend/src/pages/PipelineList.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,28 +14,28 @@ * limitations under the License. */ +import Tooltip from '@material-ui/core/Tooltip'; +import produce from 'immer'; import * as React from 'react'; -import Buttons, { ButtonKeys } from '../lib/Buttons'; +import { Link } from 'react-router-dom'; +import { classes } from 'typestyle'; +import { ApiListPipelinesResponse, ApiPipeline } from '../apis/pipeline'; import CustomTable, { Column, - Row, CustomRendererProps, ExpandState, + Row, } from '../components/CustomTable'; -import PipelineVersionList from './PipelineVersionList'; -import UploadPipelineDialog, { ImportMethod } from '../components/UploadPipelineDialog'; -import { ApiPipeline, ApiListPipelinesResponse } from '../apis/pipeline'; -import { Apis, PipelineSortKeys, ListRequest } from '../lib/Apis'; -import { Link } from 'react-router-dom'; -import { Page } from './Page'; +import { Description } from '../components/Description'; import { RoutePage, RouteParams } from '../components/Router'; import { ToolbarProps } from '../components/Toolbar'; -import { classes } from 'typestyle'; +import UploadPipelineDialog, { ImportMethod } from '../components/UploadPipelineDialog'; import { commonCss, padding } from '../Css'; -import { formatDateString, errorToMessage } from '../lib/Utils'; -import { Description } from '../components/Description'; -import produce from 'immer'; -import Tooltip from '@material-ui/core/Tooltip'; +import { Apis, ListRequest, PipelineSortKeys } from '../lib/Apis'; +import Buttons, { ButtonKeys } from '../lib/Buttons'; +import { errorToMessage, formatDateString } from '../lib/Utils'; +import { Page } from './Page'; +import PipelineVersionList from './PipelineVersionList'; interface DisplayPipeline extends ApiPipeline { expandState?: ExpandState; diff --git a/frontend/src/pages/PipelineVersionList.test.tsx b/frontend/src/pages/PipelineVersionList.test.tsx index d4de18a3b0..f557bac419 100644 --- a/frontend/src/pages/PipelineVersionList.test.tsx +++ b/frontend/src/pages/PipelineVersionList.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2019 Google LLC + * Copyright 2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -88,6 +88,21 @@ describe('PipelineVersionList', () => { expect(tree).toMatchSnapshot(); }); + it('renders a list of one pipeline version with description', async () => { + tree = shallow(<PipelineVersionList {...generateProps()} />); + tree.setState({ + pipelineVersions: [ + { + created_at: new Date(2018, 8, 22, 11, 5, 48), + name: 'pipelineversion1', + description: 'pipelineversion1 description', + } as ApiPipelineVersion, + ], + }); + await listPipelineVersionsSpy; + expect(tree).toMatchSnapshot(); + }); + it('renders a list of one pipeline version without created date', async () => { tree = shallow(<PipelineVersionList {...generateProps()} />); tree.setState({ diff --git a/frontend/src/pages/PipelineVersionList.tsx b/frontend/src/pages/PipelineVersionList.tsx index 8c8f31ce5f..29d0438976 100644 --- a/frontend/src/pages/PipelineVersionList.tsx +++ b/frontend/src/pages/PipelineVersionList.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,10 +14,12 @@ * limitations under the License. */ +import Tooltip from '@material-ui/core/Tooltip'; import CustomTable, { Column, CustomRendererProps, Row } from '../components/CustomTable'; import * as React from 'react'; import { Link, RouteComponentProps } from 'react-router-dom'; import { ApiPipelineVersion, ApiListPipelineVersionsResponse } from '../apis/pipeline'; +import { Description } from '../components/Description'; import { Apis, ListRequest, PipelineVersionSortKeys } from '../lib/Apis'; import { errorToMessage, formatDateString } from '../lib/Utils'; import { RoutePage, RouteParams } from '../components/Router'; @@ -38,6 +40,17 @@ interface PipelineVersionListState { pipelineVersions: ApiPipelineVersion[]; } +const descriptionCustomRenderer: React.FC<CustomRendererProps<string>> = ( + props: CustomRendererProps<string>, +) => { + return ( + <Tooltip title={props.value || ''} enterDelay={300} placement='bottom-start'> + <span> + <Description description={props.value || ''} forceInline={true} /> + </span> + </Tooltip> + ); +}; class PipelineVersionList extends React.PureComponent< PipelineVersionListProps, PipelineVersionListState @@ -55,47 +68,48 @@ class PipelineVersionList extends React.PureComponent< public _nameCustomRenderer: React.FC<CustomRendererProps<string>> = ( props: CustomRendererProps<string>, ) => { - if (this.props.pipelineId) { - return ( - <Link - className={commonCss.link} - onClick={e => e.stopPropagation()} - to={RoutePage.PIPELINE_DETAILS.replace( - ':' + RouteParams.pipelineId, - this.props.pipelineId, - ).replace(':' + RouteParams.pipelineVersionId, props.id)} - > - {props.value} - </Link> - ); - } else { - return ( - <Link - className={commonCss.link} - onClick={e => e.stopPropagation()} - to={RoutePage.PIPELINE_DETAILS.replace(':' + RouteParams.pipelineVersionId, props.id)} - > - {props.value} - </Link> - ); - } + return ( + <Tooltip title={props.value || ''} enterDelay={300} placement='bottom-start'> + {this.props.pipelineId ? ( + <Link + className={commonCss.link} + onClick={e => e.stopPropagation()} + to={RoutePage.PIPELINE_DETAILS.replace( + ':' + RouteParams.pipelineId, + this.props.pipelineId, + ).replace(':' + RouteParams.pipelineVersionId, props.id)} + > + {props.value} + </Link> + ) : ( + <Link + className={commonCss.link} + onClick={e => e.stopPropagation()} + to={RoutePage.PIPELINE_DETAILS.replace(':' + RouteParams.pipelineVersionId, props.id)} + > + {props.value} + </Link> + )} + </Tooltip> + ); }; public render(): JSX.Element { const columns: Column[] = [ { customRenderer: this._nameCustomRenderer, - flex: 2, + flex: 1, label: 'Version name', sortKey: PipelineVersionSortKeys.NAME, }, + { label: 'Description', flex: 3, customRenderer: descriptionCustomRenderer }, { label: 'Uploaded on', flex: 1, sortKey: PipelineVersionSortKeys.CREATED_AT }, ]; const rows: Row[] = this.state.pipelineVersions.map(r => { const row = { id: r.id!, - otherFields: [r.name, formatDateString(r.created_at)] as any, + otherFields: [r.name, r.description, formatDateString(r.created_at)] as any, }; return row; }); diff --git a/frontend/src/pages/RecurringRunDetails.test.tsx b/frontend/src/pages/RecurringRunDetails.test.tsx index bfab7f2694..3b4b7ed597 100644 --- a/frontend/src/pages/RecurringRunDetails.test.tsx +++ b/frontend/src/pages/RecurringRunDetails.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/RecurringRunDetails.tsx b/frontend/src/pages/RecurringRunDetails.tsx index 97331c38ef..08569c4932 100644 --- a/frontend/src/pages/RecurringRunDetails.tsx +++ b/frontend/src/pages/RecurringRunDetails.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/RecurringRunsManager.test.tsx b/frontend/src/pages/RecurringRunsManager.test.tsx index 1c84d09964..b4afdaf29f 100644 --- a/frontend/src/pages/RecurringRunsManager.test.tsx +++ b/frontend/src/pages/RecurringRunsManager.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/RecurringRunsManager.tsx b/frontend/src/pages/RecurringRunsManager.tsx index e3cc8d0fcf..d599f6b593 100644 --- a/frontend/src/pages/RecurringRunsManager.tsx +++ b/frontend/src/pages/RecurringRunsManager.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/ResourceSelector.test.tsx b/frontend/src/pages/ResourceSelector.test.tsx index 5a00f6b31c..68542b684a 100644 --- a/frontend/src/pages/ResourceSelector.test.tsx +++ b/frontend/src/pages/ResourceSelector.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/ResourceSelector.tsx b/frontend/src/pages/ResourceSelector.tsx index 078e80c345..18ad3fa52e 100644 --- a/frontend/src/pages/ResourceSelector.tsx +++ b/frontend/src/pages/ResourceSelector.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/RunDetails.test.tsx b/frontend/src/pages/RunDetails.test.tsx index a7eab80384..6c2413722c 100644 --- a/frontend/src/pages/RunDetails.test.tsx +++ b/frontend/src/pages/RunDetails.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018-2019 Google LLC + * Copyright 2018-2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Api, GetArtifactTypesResponse } from '@kubeflow/frontend'; +import { Api, GetArtifactTypesResponse } from 'src/mlmd/library'; import { render } from '@testing-library/react'; import * as dagre from 'dagre'; import { mount, ReactWrapper, shallow, ShallowWrapper } from 'enzyme'; @@ -22,19 +22,21 @@ import * as React from 'react'; import { Router } from 'react-router-dom'; import { NamespaceContext } from 'src/lib/KubeflowClient'; import { Workflow } from 'third_party/argo-ui/argo_template'; -import { ApiResourceType, ApiRunDetail, RunStorageState } from '../apis/run'; +import { ApiResourceType, ApiRunDetail, ApiRunStorageState } from '../apis/run'; import { QUERY_PARAMS, RoutePage, RouteParams } from '../components/Router'; import { PlotType } from '../components/viewers/Viewer'; import { Apis, JSONObject } from '../lib/Apis'; import { ButtonKeys } from '../lib/Buttons'; -import * as MlmdUtils from '../lib/MlmdUtils'; +import * as MlmdUtils from 'src/mlmd/MlmdUtils'; import { OutputArtifactLoader } from '../lib/OutputArtifactLoader'; import { NodePhase } from '../lib/StatusUtils'; import * as Utils from '../lib/Utils'; import WorkflowParser from '../lib/WorkflowParser'; -import TestUtils from '../TestUtils'; +import TestUtils, { testBestPractices } from '../TestUtils'; import { PageProps } from './Page'; -import EnhancedRunDetails, { RunDetailsInternalProps, TEST_ONLY } from './RunDetails'; +import EnhancedRunDetails, { RunDetailsInternalProps, SidePanelTab, TEST_ONLY } from './RunDetails'; +import { Context, Execution, Value } from 'src/third_party/mlmd'; +import { KfpExecutionProperties } from 'src/mlmd/MlmdUtils'; const RunDetails = TEST_ONLY.RunDetails; @@ -56,15 +58,15 @@ jest.mock('../components/Graph', () => { }); const STEP_TABS = { - INPUT_OUTPUT: 0, - VISUALIZATIONS: 1, - ML_METADATA: 2, - TASK_DETAILS: 3, - VOLUMES: 4, - LOGS: 5, - POD: 6, - EVENTS: 7, - MANIFEST: 8, + INPUT_OUTPUT: SidePanelTab.INPUT_OUTPUT, + VISUALIZATIONS: SidePanelTab.VISUALIZATIONS, + TASK_DETAILS: SidePanelTab.TASK_DETAILS, + VOLUMES: SidePanelTab.VOLUMES, + LOGS: SidePanelTab.LOGS, + POD: SidePanelTab.POD, + EVENTS: SidePanelTab.EVENTS, + ML_METADATA: SidePanelTab.ML_METADATA, + MANIFEST: SidePanelTab.MANIFEST, }; const WORKFLOW_TEMPLATE = { @@ -75,6 +77,11 @@ const WORKFLOW_TEMPLATE = { const NODE_DETAILS_SELECTOR = '[data-testid="run-details-node-details"]'; +interface CustomProps { + param_exeuction_id?: string; +} + +testBestPractices(); describe('RunDetails', () => { let updateBannerSpy: any; let updateDialogSpy: any; @@ -94,16 +101,25 @@ describe('RunDetails', () => { let artifactTypesSpy: any; let formatDateStringSpy: any; let getRunContextSpy: any; + let getExecutionsFromContextSpy: any; let warnSpy: any; let testRun: ApiRunDetail = {}; let tree: ShallowWrapper | ReactWrapper; - function generateProps(): RunDetailsInternalProps & PageProps { + function generateProps(customProps?: CustomProps): RunDetailsInternalProps & PageProps { const pageProps: PageProps = { history: { push: historyPushSpy } as any, location: '' as any, - match: { params: { [RouteParams.runId]: testRun.run!.id }, isExact: true, path: '', url: '' }, + match: { + params: { + [RouteParams.runId]: testRun.run!.id, + [RouteParams.executionId]: customProps?.param_exeuction_id, + }, + isExact: true, + path: '', + url: '', + }, toolbarProps: { actions: {}, breadcrumbs: [], pageTitle: '' }, updateBanner: updateBannerSpy, updateDialog: updateDialogSpy, @@ -160,6 +176,7 @@ describe('RunDetails', () => { getRunContextSpy = jest.spyOn(MlmdUtils, 'getRunContext').mockImplementation(() => { throw new Error('cannot find run context'); }); + getExecutionsFromContextSpy = jest.spyOn(MlmdUtils, 'getExecutionsFromContext'); // Hide expected warning messages warnSpy = jest.spyOn(Utils.logger, 'warn').mockImplementation(); @@ -420,7 +437,7 @@ describe('RunDetails', () => { }); it('has a Restore button if the run is archived', async () => { - testRun.run!.storage_state = RunStorageState.ARCHIVED; + testRun.run!.storage_state = ApiRunStorageState.ARCHIVED; tree = shallow(<RunDetails {...generateProps()} />); await getRunSpy; await TestUtils.flushPromises(); @@ -429,7 +446,7 @@ describe('RunDetails', () => { }); it('shows Archive in breadcrumbs if the run is archived', async () => { - testRun.run!.storage_state = RunStorageState.ARCHIVED; + testRun.run!.storage_state = ApiRunStorageState.ARCHIVED; tree = shallow(<RunDetails {...generateProps()} />); await getRunSpy; await TestUtils.flushPromises(); @@ -706,6 +723,33 @@ describe('RunDetails', () => { expect(tree).toMatchSnapshot(); }); + it('opens side panel when valid execution id in router parameter', async () => { + // Arrange + testRun.pipeline_runtime!.workflow_manifest = JSON.stringify({ + status: { nodes: { node1: { id: 'node1' } } }, + }); + const execution = new Execution(); + const nodePodName = new Value(); + nodePodName.setStringValue('node1'); + execution + .setId(1) + .getCustomPropertiesMap() + .set(KfpExecutionProperties.POD_NAME, nodePodName); + getRunContextSpy.mockResolvedValue(new Context()); + getExecutionsFromContextSpy.mockResolvedValue([execution]); + + // Act + tree = shallow(<RunDetails {...generateProps({ param_exeuction_id: '1' })} />); + await getRunSpy; + await getRunContextSpy; + await getExecutionsFromContextSpy; + await TestUtils.flushPromises(); + + // Assert + expect(tree.state('selectedNodeDetails')).toHaveProperty('id', 'node1'); + expect(tree.find('MD2Tabs').length).toEqual(2); // Both Page Tab bar and Side Panel exist, + }); + it('shows clicked node message in side panel', async () => { testRun.pipeline_runtime!.workflow_manifest = JSON.stringify({ status: { diff --git a/frontend/src/pages/RunDetails.tsx b/frontend/src/pages/RunDetails.tsx index d790ae8077..e970a7d31d 100644 --- a/frontend/src/pages/RunDetails.tsx +++ b/frontend/src/pages/RunDetails.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018-2019 Google LLC + * Copyright 2018-2019 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,19 +14,23 @@ * limitations under the License. */ -import { Context, Execution } from '@kubeflow/frontend'; import CircularProgress from '@material-ui/core/CircularProgress'; import InfoIcon from '@material-ui/icons/InfoOutlined'; import { flatten } from 'lodash'; import * as React from 'react'; import { Link, Redirect } from 'react-router-dom'; +import { ExternalLink } from 'src/atoms/ExternalLink'; +import InputOutputTab from 'src/components/tabs/InputOutputTab'; +import { MetricsTab } from 'src/components/tabs/MetricsTab'; import { GkeMetadata, GkeMetadataContext } from 'src/lib/GkeMetadata'; import { useNamespaceChangeEvent } from 'src/lib/KubeflowClient'; -import { ExecutionHelpers, getExecutionsFromContext, getRunContext } from 'src/lib/MlmdUtils'; +import { ExecutionHelpers, getExecutionsFromContext, getRunContext } from 'src/mlmd/MlmdUtils'; +import { isV2Pipeline } from 'src/lib/v2/WorkflowUtils'; +import { Context, Execution } from 'src/third_party/mlmd'; import { classes, stylesheet } from 'typestyle'; import { NodePhase as ArgoNodePhase } from '../../third_party/argo-ui/argo_template'; import { ApiExperiment } from '../apis/experiment'; -import { ApiRun, RunStorageState } from '../apis/run'; +import { ApiRun, ApiRunStorageState } from '../apis/run'; import { ApiVisualization, ApiVisualizationType } from '../apis/visualization'; import Hr from '../atoms/Hr'; import MD2Tabs from '../atoms/MD2Tabs'; @@ -36,12 +40,13 @@ import CompareTable from '../components/CompareTable'; import DetailsTable from '../components/DetailsTable'; import Graph from '../components/Graph'; import LogViewer from '../components/LogViewer'; +import MinioArtifactPreview from '../components/MinioArtifactPreview'; import PlotCard from '../components/PlotCard'; import { PodEvents, PodInfo } from '../components/PodYaml'; +import ReduceGraphSwitch from '../components/ReduceGraphSwitch'; import { RoutePage, RoutePageFactory, RouteParams } from '../components/Router'; import SidePanel from '../components/SidePanel'; import { ToolbarProps } from '../components/Toolbar'; -import MinioArtifactPreview from '../components/MinioArtifactPreview'; import { HTMLViewerConfig } from '../components/viewers/HTMLViewer'; import { PlotType, ViewerConfig } from '../components/viewers/Viewer'; import { componentMap } from '../components/viewers/ViewerContainer'; @@ -54,33 +59,31 @@ import Buttons, { ButtonKeys } from '../lib/Buttons'; import CompareUtils from '../lib/CompareUtils'; import { OutputArtifactLoader } from '../lib/OutputArtifactLoader'; import RunUtils from '../lib/RunUtils'; -import { KeyValue, transitiveReduction, compareGraphEdges } from '../lib/StaticGraphParser'; +import { compareGraphEdges, KeyValue, transitiveReduction } from '../lib/StaticGraphParser'; import { hasFinished, NodePhase, statusToPhase } from '../lib/StatusUtils'; import { + decodeCompressedNodes, errorToMessage, formatDateString, + getRunDurationFromNode, getRunDurationFromWorkflow, logger, serviceErrorToString, - decodeCompressedNodes, - getRunDurationFromNode, } from '../lib/Utils'; import WorkflowParser from '../lib/WorkflowParser'; import { ExecutionDetailsContent } from './ExecutionDetails'; import { Page, PageProps } from './Page'; import { statusToIcon } from './Status'; -import { ExternalLink } from 'src/atoms/ExternalLink'; -import ReduceGraphSwitch from '../components/ReduceGraphSwitch'; -enum SidePaneTab { +export enum SidePanelTab { INPUT_OUTPUT, VISUALIZATIONS, - ML_METADATA, TASK_DETAILS, VOLUMES, LOGS, POD, EVENTS, + ML_METADATA, MANIFEST, } @@ -126,12 +129,13 @@ interface RunDetailsState { selectedNodeDetails: SelectedNodeDetails | null; sidepanelBannerMode: Mode; sidepanelBusy: boolean; - sidepanelSelectedTab: SidePaneTab; + sidepanelSelectedTab: SidePanelTab; workflow?: any; mlmdRunContext?: Context; mlmdExecutions?: Execution[]; showReducedGraph?: boolean; cachedPipelineRun?: string; + namespace?: string; } export const css = stylesheet({ @@ -178,7 +182,7 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { selectedTab: 0, sidepanelBannerMode: 'warning', sidepanelBusy: false, - sidepanelSelectedTab: SidePaneTab.INPUT_OUTPUT, + sidepanelSelectedTab: SidePanelTab.INPUT_OUTPUT, mlmdRunContext: undefined, mlmdExecutions: undefined, showReducedGraph: false, @@ -265,7 +269,6 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { const selectedExecution = mlmdExecutions?.find( execution => ExecutionHelpers.getKfpPod(execution) === selectedNodeId, ); - // const selectedExecution = mlmdExecutions && mlmdExecutions.find(execution => execution.getPropertiesMap()) const hasMetrics = runMetadata && runMetadata.metrics && runMetadata.metrics.length > 0; const visualizationCreatorConfig: VisualizationCreatorConfig = { allowCustomVisualizations, @@ -329,21 +332,7 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { )} <div className={commonCss.page}> <MD2Tabs - tabs={[ - 'Input/Output', - 'Visualizations', - 'ML Metadata', - 'Details', - 'Volumes', - 'Logs', - 'Pod', - 'Events', - // NOTE: it's only possible to conditionally add a tab at the end - ...(WorkflowParser.getNodeManifest(workflow, selectedNodeId) - .length > 0 - ? ['Manifest'] - : []), - ]} + tabs={this.getTabNames(workflow, selectedNodeId)} selectedTab={sidepanelSelectedTab} onSwitch={(panelTab: number) => { this.setStateSafe({ @@ -357,9 +346,10 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { data-testid='run-details-node-details' className={commonCss.page} > - {sidepanelSelectedTab === SidePaneTab.VISUALIZATIONS && + {sidepanelSelectedTab === SidePanelTab.VISUALIZATIONS && this.state.selectedNodeDetails && - this.state.workflow && ( + this.state.workflow && + !isV2Pipeline(workflow) && ( <VisualizationsTabContent execution={selectedExecution} nodeId={selectedNodeId} @@ -377,44 +367,63 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { onError={this.handleError} /> )} - - {sidepanelSelectedTab === SidePaneTab.INPUT_OUTPUT && ( - <div className={padding(20)}> - <DetailsTable - key={`input-parameters-${selectedNodeId}`} - title='Input parameters' - fields={inputParams} - /> - - <DetailsTable - key={`input-artifacts-${selectedNodeId}`} - title='Input artifacts' - fields={inputArtifacts} - valueComponent={MinioArtifactPreview} - valueComponentProps={{ - namespace: this.state.workflow?.metadata?.namespace, - }} - /> - - <DetailsTable - key={`output-parameters-${selectedNodeId}`} - title='Output parameters' - fields={outputParams} + {sidepanelSelectedTab === SidePanelTab.VISUALIZATIONS && + this.state.selectedNodeDetails && + this.state.workflow && + isV2Pipeline(workflow) && + selectedExecution && ( + <MetricsTab + execution={selectedExecution} + namespace={this.state.workflow?.metadata?.namespace} /> + )} - <DetailsTable - key={`output-artifacts-${selectedNodeId}`} - title='Output artifacts' - fields={outputArtifacts} - valueComponent={MinioArtifactPreview} - valueComponentProps={{ - namespace: this.state.workflow?.metadata?.namespace, - }} + {sidepanelSelectedTab === SidePanelTab.INPUT_OUTPUT && + !isV2Pipeline(workflow) && ( + <div className={padding(20)}> + <DetailsTable + key={`input-parameters-${selectedNodeId}`} + title='Input parameters' + fields={inputParams} + /> + + <DetailsTable + key={`input-artifacts-${selectedNodeId}`} + title='Input artifacts' + fields={inputArtifacts} + valueComponent={MinioArtifactPreview} + valueComponentProps={{ + namespace: this.state.workflow?.metadata?.namespace, + }} + /> + + <DetailsTable + key={`output-parameters-${selectedNodeId}`} + title='Output parameters' + fields={outputParams} + /> + + <DetailsTable + key={`output-artifacts-${selectedNodeId}`} + title='Output artifacts' + fields={outputArtifacts} + valueComponent={MinioArtifactPreview} + valueComponentProps={{ + namespace: this.state.workflow?.metadata?.namespace, + }} + /> + </div> + )} + {sidepanelSelectedTab === SidePanelTab.INPUT_OUTPUT && + isV2Pipeline(workflow) && + selectedExecution && ( + <InputOutputTab + execution={selectedExecution} + namespace={namespace} /> - </div> - )} + )} - {sidepanelSelectedTab === SidePaneTab.TASK_DETAILS && ( + {sidepanelSelectedTab === SidePanelTab.TASK_DETAILS && ( <div className={padding(20)}> <DetailsTable title='Task Details' @@ -423,42 +432,43 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { </div> )} - {sidepanelSelectedTab === SidePaneTab.ML_METADATA && ( - <div className={padding(20)}> - {selectedExecution && ( - <> - <div> - This step corresponds to execution{' '} - <Link - className={commonCss.link} - to={RoutePageFactory.executionDetails( - selectedExecution.getId(), - )} - > - "{ExecutionHelpers.getName(selectedExecution)}". - </Link> - </div> - <ExecutionDetailsContent - key={selectedExecution.getId()} - id={selectedExecution.getId()} - onError={ - ((msg: string, ...args: any[]) => { - // TODO: show a proper error banner and retry button - console.warn(msg); - }) as any - } - // No title here - onTitleUpdate={() => null} - /> - </> - )} - {!selectedExecution && ( - <div>Corresponding ML Metadata not found.</div> - )} - </div> - )} + {sidepanelSelectedTab === SidePanelTab.ML_METADATA && + !isV2Pipeline(workflow) && ( + <div className={padding(20)}> + {selectedExecution && ( + <> + <div> + This step corresponds to execution{' '} + <Link + className={commonCss.link} + to={RoutePageFactory.executionDetails( + selectedExecution.getId(), + )} + > + "{ExecutionHelpers.getName(selectedExecution)}". + </Link> + </div> + <ExecutionDetailsContent + key={selectedExecution.getId()} + id={selectedExecution.getId()} + onError={ + ((msg: string, ...args: any[]) => { + // TODO: show a proper error banner and retry button + console.warn(msg); + }) as any + } + // No title here + onTitleUpdate={() => null} + /> + </> + )} + {!selectedExecution && ( + <div>Corresponding ML Metadata not found.</div> + )} + </div> + )} - {sidepanelSelectedTab === SidePaneTab.VOLUMES && ( + {sidepanelSelectedTab === SidePanelTab.VOLUMES && ( <div className={padding(20)}> <DetailsTable title='Volume Mounts' @@ -470,7 +480,7 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { </div> )} - {sidepanelSelectedTab === SidePaneTab.MANIFEST && ( + {sidepanelSelectedTab === SidePanelTab.MANIFEST && ( <div className={padding(20)}> <DetailsTable title='Resource Manifest' @@ -482,7 +492,7 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { </div> )} - {sidepanelSelectedTab === SidePaneTab.POD && + {sidepanelSelectedTab === SidePanelTab.POD && selectedNodeDetails.phase !== NodePhase.SKIPPED && ( <div className={commonCss.page}> {selectedNodeId && namespace && ( @@ -491,7 +501,7 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { </div> )} - {sidepanelSelectedTab === SidePaneTab.EVENTS && + {sidepanelSelectedTab === SidePanelTab.EVENTS && selectedNodeDetails.phase !== NodePhase.SKIPPED && ( <div className={commonCss.page}> {selectedNodeId && namespace && ( @@ -500,7 +510,7 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { </div> )} - {sidepanelSelectedTab === SidePaneTab.LOGS && + {sidepanelSelectedTab === SidePanelTab.LOGS && selectedNodeDetails.phase !== NodePhase.SKIPPED && ( <div className={commonCss.page}> {this.state.logsBannerMessage && ( @@ -630,6 +640,67 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { </div> ); } + getTabNames(workflow: any, selectedNodeId: string): string[] { + // NOTE: it's only possible to conditionally add a tab at the end + const tabNameList = []; + for (let tab in SidePanelTab) { + // enum iterator will get both number key and string value of all cases. + // Skip string value because we only switch by numeric key later. + if (isNaN(Number(tab))) { + continue; + } + // plus symbol changes enum to number. + switch (+tab) { + case SidePanelTab.INPUT_OUTPUT: { + tabNameList.push('Input/Output'); + break; + } + case SidePanelTab.VISUALIZATIONS: { + tabNameList.push('Visualizations'); + break; + } + case SidePanelTab.ML_METADATA: { + if (isV2Pipeline(workflow)) { + break; + } + tabNameList.push('ML Metadata'); + break; + } + case SidePanelTab.TASK_DETAILS: { + tabNameList.push('Details'); + break; + } + case SidePanelTab.VOLUMES: { + tabNameList.push('Volumes'); + break; + } + case SidePanelTab.LOGS: { + tabNameList.push('Logs'); + break; + } + case SidePanelTab.POD: { + tabNameList.push('Pod'); + break; + } + case SidePanelTab.EVENTS: { + tabNameList.push('Events'); + break; + } + case SidePanelTab.MANIFEST: { + if (WorkflowParser.getNodeManifest(workflow, selectedNodeId).length === 0) { + break; + } + tabNameList.push('Manifest'); + break; + } + default: { + console.error(`Unable to find corresponding tab name for ${tab}`); + break; + } + } + } + return tabNameList; + } public async componentDidMount(): Promise<void> { window.addEventListener('focus', this.onFocusHandler); @@ -681,8 +752,10 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { const relatedExperimentId = RunUtils.getFirstExperimentReferenceId(runDetail.run); let experiment: ApiExperiment | undefined; + let namespace: string | undefined; if (relatedExperimentId) { experiment = await Apis.experimentServiceApi.getExperiment(relatedExperimentId); + namespace = RunUtils.getNamespaceReferenceName(experiment); } const runMetadata = runDetail.run!; @@ -774,7 +847,7 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { let mlmdExecutions: Execution[] | undefined; // Get data about this workflow from MLMD try { - mlmdRunContext = await getRunContext(workflow); + mlmdRunContext = await getRunContext(workflow, runId); mlmdExecutions = await getExecutionsFromContext(mlmdRunContext); } catch (err) { // Data in MLMD may not exist depending on this pipeline is a TFX pipeline. @@ -782,8 +855,7 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { logger.warn(err); } - let templateString = workflow; - const graph = WorkflowParser.createRuntimeGraph(templateString); + const graph = WorkflowParser.createRuntimeGraph(workflow, mlmdExecutions) let reducedGraph = graph ? // copy graph before removing edges @@ -796,7 +868,7 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { const breadcrumbs: Array<{ displayName: string; href: string }> = []; // If this is an archived run, only show Archive in breadcrumbs, otherwise show // the full path, including the experiment if any. - if (runMetadata.storage_state === RunStorageState.ARCHIVED) { + if (runMetadata.storage_state === ApiRunStorageState.ARCHIVED) { breadcrumbs.push({ displayName: 'Archive', href: RoutePage.ARCHIVED_RUNS }); } else { if (experiment) { @@ -828,7 +900,7 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { this.getInitialToolbarState().actions, ); const idGetter = () => (runMetadata ? [runMetadata!.id!] : []); - runMetadata!.storage_state === RunStorageState.ARCHIVED + runMetadata!.storage_state === ApiRunStorageState.ARCHIVED ? buttons.restore('run', idGetter, true, () => this.refresh()) : buttons.archive('run', idGetter, true, () => this.refresh()); const actions = buttons.getToolbarActionMap(); @@ -853,7 +925,22 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { workflow, mlmdRunContext, mlmdExecutions, + namespace, }); + + // Read optional exeuction id from query parameter. If valid, shows detail of selected node. + const paramExecutionId = this.props.match.params[RouteParams.executionId]; + if (mlmdExecutions) { + const selectedExec = mlmdExecutions.find( + exec => exec.getId().toString() === paramExecutionId, + ); + if (selectedExec) { + const selectedNodeId = ExecutionHelpers.getKfpPod(selectedExec); + if (typeof selectedNodeId === 'string') { + this.setStateSafe({ selectedNodeDetails: { id: selectedNodeId } }); + } + } + } } catch (err) { await this.showPageError(`Error: failed to retrieve run: ${runId}.`, err); logger.error('Error loading run:', runId, err); @@ -962,7 +1049,7 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { ); } - private async _loadSidePaneTab(tab: SidePaneTab): Promise<void> { + private async _loadSidePaneTab(tab: SidePanelTab): Promise<void> { const workflow = this.state.workflow; const selectedNodeDetails = this.state.selectedNodeDetails; @@ -1015,7 +1102,7 @@ class RunDetails extends Page<RunDetailsInternalProps, RunDetailsState> { this.setStateSafe({ selectedNodeDetails, sidepanelSelectedTab: tab, sidepanelBannerMode }); switch (tab) { - case SidePaneTab.LOGS: + case SidePanelTab.LOGS: if ( node && node.status && @@ -1287,7 +1374,8 @@ const VisualizationsTabContent: React.FC<{ // nodeStatus object instance will keep changing after new requests to get // workflow status. // eslint-disable-next-line react-hooks/exhaustive-deps - }, [nodeId, execution?.getId(), nodeCompleted, onError, namespace]); + }, [nodeId, execution ? execution.getId() : undefined, nodeCompleted, onError, namespace]); + // Temporarily use verbose undefined detection instead of execution?.getId() for eslint issue. return ( <div className={commonCss.page}> diff --git a/frontend/src/pages/RunList.test.tsx b/frontend/src/pages/RunList.test.tsx index f2d4cd121d..3cee3842b9 100644 --- a/frontend/src/pages/RunList.test.tsx +++ b/frontend/src/pages/RunList.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,14 +26,14 @@ import { ApiResourceType, ApiRunMetric, RunMetricFormat, - RunStorageState, + ApiRunStorageState, } from '../apis/run'; import { Apis, RunSortKeys, ListRequest } from '../lib/Apis'; import { MetricMetadata } from '../lib/RunUtils'; import { NodePhase } from '../lib/StatusUtils'; import { ReactWrapper, ShallowWrapper, shallow } from 'enzyme'; import { range } from 'lodash'; -import { BrowserRouter } from 'react-router-dom'; +import MetricUtils from '../lib/MetricUtils'; class RunListTest extends RunList { public _loadRuns(request: ListRequest): Promise<string> { @@ -131,14 +131,14 @@ describe('RunList', () => { describe('in archived state', () => { it('renders the empty experience', () => { const props = generateProps(); - props.storageState = RunStorageState.ARCHIVED; + props.storageState = ApiRunStorageState.ARCHIVED; expect(shallow(<RunList {...props} />)).toMatchSnapshot(); }); it('loads runs whose storage state is not ARCHIVED when storage state equals AVAILABLE', async () => { mockNRuns(1, {}); const props = generateProps(); - props.storageState = RunStorageState.AVAILABLE; + props.storageState = ApiRunStorageState.AVAILABLE; tree = shallow(<RunList {...props} />); await (tree.instance() as RunListTest)._loadRuns({}); expect(Apis.runServiceApi.listRuns).toHaveBeenLastCalledWith( @@ -153,7 +153,7 @@ describe('RunList', () => { { key: 'storage_state', op: PredicateOp.NOTEQUALS, - string_value: RunStorageState.ARCHIVED.toString(), + string_value: ApiRunStorageState.ARCHIVED.toString(), }, ], } as ApiFilter), @@ -164,7 +164,7 @@ describe('RunList', () => { it('loads runs whose storage state is ARCHIVED when storage state equals ARCHIVED', async () => { mockNRuns(1, {}); const props = generateProps(); - props.storageState = RunStorageState.ARCHIVED; + props.storageState = ApiRunStorageState.ARCHIVED; tree = shallow(<RunList {...props} />); await (tree.instance() as RunListTest)._loadRuns({}); expect(Apis.runServiceApi.listRuns).toHaveBeenLastCalledWith( @@ -179,7 +179,7 @@ describe('RunList', () => { { key: 'storage_state', op: PredicateOp.EQUALS, - string_value: RunStorageState.ARCHIVED.toString(), + string_value: ApiRunStorageState.ARCHIVED.toString(), }, ], } as ApiFilter), @@ -190,7 +190,7 @@ describe('RunList', () => { it('augments request filter with storage state predicates', async () => { mockNRuns(1, {}); const props = generateProps(); - props.storageState = RunStorageState.ARCHIVED; + props.storageState = ApiRunStorageState.ARCHIVED; tree = shallow(<RunList {...props} />); await (tree.instance() as RunListTest)._loadRuns({ filter: encodeURIComponent( @@ -216,7 +216,7 @@ describe('RunList', () => { { key: 'storage_state', op: PredicateOp.EQUALS, - string_value: RunStorageState.ARCHIVED.toString(), + string_value: ApiRunStorageState.ARCHIVED.toString(), }, ], } as ApiFilter), @@ -398,6 +398,25 @@ describe('RunList', () => { expect(tree).toMatchSnapshot(); }); + it('adds metrics column in the same order metrics were defined', async () => { + const z_metric = { name: 'z_metric', number_value: 2 } as ApiRunMetric; + const y_metric = { name: 'y_metric', number_value: 1 } as ApiRunMetric; + + let actualValues = [ + MetricUtils.getMetricDisplayString(z_metric), + MetricUtils.getMetricDisplayString(y_metric), + ]; + + mockNRuns(1, { run: { metrics: [z_metric, y_metric] } }); + const props = generateProps(); + tree = TestUtils.mountWithRouter(<RunList {...props} />); + await TestUtils.flushPromises(); + tree.update(); + + const metricValues = tree.find("[data-testid='metric']"); + expect(metricValues.map(v => v.text())).toEqual(actualValues); + }); + it('shows pipeline name', async () => { mockNRuns(1, { run: { pipeline_spec: { pipeline_id: 'test-pipeline-id', pipeline_name: 'pipeline name' } }, diff --git a/frontend/src/pages/RunList.tsx b/frontend/src/pages/RunList.tsx index 0cc248d0dd..844be8edf2 100644 --- a/frontend/src/pages/RunList.tsx +++ b/frontend/src/pages/RunList.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ import * as React from 'react'; import CustomTable, { Column, Row, CustomRendererProps } from '../components/CustomTable'; import Metric from '../components/Metric'; import RunUtils, { MetricMetadata, ExperimentInfo } from '../../src/lib/RunUtils'; -import { ApiRun, ApiRunMetric, RunStorageState, ApiRunDetail } from '../../src/apis/run'; +import { ApiRun, ApiRunMetric, ApiRunStorageState, ApiRunDetail } from '../../src/apis/run'; import { Apis, RunSortKeys, ListRequest } from '../lib/Apis'; import { Link, RouteComponentProps } from 'react-router-dom'; import { NodePhase } from '../lib/StatusUtils'; @@ -75,7 +75,7 @@ export type RunListProps = MaskProps & onSelectionChange?: (selectedRunIds: string[]) => void; runIdListMask?: string[]; selectedIds?: string[]; - storageState?: RunStorageState; + storageState?: ApiRunStorageState; }; interface RunListState { @@ -190,7 +190,9 @@ class RunList extends React.PureComponent<RunListProps, RunListState> { noFilterBox={this.props.noFilterBox} emptyMessage={ `No` + - `${this.props.storageState === RunStorageState.ARCHIVED ? ' archived' : ' available'}` + + `${ + this.props.storageState === ApiRunStorageState.ARCHIVED ? ' archived' : ' available' + }` + ` runs found` + `${ this.props.experimentIdMask @@ -347,10 +349,10 @@ class RunList extends React.PureComponent<RunListProps, RunListState> { // Use EQUALS ARCHIVED or NOT EQUALS ARCHIVED to account for cases where the field // is missing, in which case it should be counted as available. op: - this.props.storageState === RunStorageState.ARCHIVED + this.props.storageState === ApiRunStorageState.ARCHIVED ? PredicateOp.EQUALS : PredicateOp.NOTEQUALS, - string_value: RunStorageState.ARCHIVED.toString(), + string_value: ApiRunStorageState.ARCHIVED.toString(), }, ]); request.filter = encodeURIComponent(JSON.stringify(filter)); diff --git a/frontend/src/pages/RunListsRouter.test.tsx b/frontend/src/pages/RunListsRouter.test.tsx index de121578ae..fd2dc0aa3c 100644 --- a/frontend/src/pages/RunListsRouter.test.tsx +++ b/frontend/src/pages/RunListsRouter.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2020 Google LLC + * Copyright 2020 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ import produce from 'immer'; import RunListsRouter, { RunListsRouterProps } from './RunListsRouter'; import React from 'react'; import { RouteParams } from 'src/components/Router'; -import { ApiRunDetail, RunStorageState } from 'src/apis/run'; +import { ApiRunDetail, ApiRunStorageState } from 'src/apis/run'; import { ApiExperiment } from 'src/apis/experiment'; import { Apis } from 'src/lib/Apis'; import * as Utils from '../lib/Utils'; @@ -28,7 +28,7 @@ import { PredicateOp } from 'src/apis/filter'; describe('RunListsRouter', () => { let historyPushSpy: any; - let runStorageState = RunStorageState.AVAILABLE; + let runStorageState = ApiRunStorageState.AVAILABLE; const onSelectionChangeMock = jest.fn(); const listRunsSpy = jest.spyOn(Apis.runServiceApi, 'listRuns'); @@ -55,9 +55,9 @@ describe('RunListsRouter', () => { onTabSwitch: jest.fn((newTab: number) => { // this.refresh(); if (newTab === 1) { - runStorageState = RunStorageState.ARCHIVED; + runStorageState = ApiRunStorageState.ARCHIVED; } else { - runStorageState = RunStorageState.AVAILABLE; + runStorageState = ApiRunStorageState.AVAILABLE; } }), hideExperimentColumn: true, @@ -96,7 +96,7 @@ describe('RunListsRouter', () => { { key: 'storage_state', op: PredicateOp.EQUALS, - string_value: RunStorageState.ARCHIVED.toString(), + string_value: ApiRunStorageState.ARCHIVED.toString(), }, ], }), diff --git a/frontend/src/pages/RunListsRouter.tsx b/frontend/src/pages/RunListsRouter.tsx index bbd37668e0..c5c590f1ee 100644 --- a/frontend/src/pages/RunListsRouter.tsx +++ b/frontend/src/pages/RunListsRouter.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2020 Google LLC + * Copyright 2020 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ */ import * as React from 'react'; -import { RunStorageState } from 'src/apis/run'; +import { ApiRunStorageState } from 'src/apis/run'; import MD2Tabs from 'src/atoms/MD2Tabs'; import { commonCss, padding } from 'src/Css'; import { classes } from 'typestyle'; @@ -27,7 +27,7 @@ export enum RunListsGroupTab { } export type RunListsRouterProps = RunListProps & { - storageState: RunStorageState; + storageState: ApiRunStorageState; refreshCount: number; onTabSwitch?: (tab: RunListsGroupTab) => void; }; @@ -88,7 +88,7 @@ class RunListsRouter extends React.PureComponent<RunListsRouterProps> { } private _getSelectedTab() { - return this.props.storageState === RunStorageState.ARCHIVED + return this.props.storageState === ApiRunStorageState.ARCHIVED ? RunListsGroupTab.ARCHIVE : RunListsGroupTab.ACTIVE; } diff --git a/frontend/src/pages/Status.test.tsx b/frontend/src/pages/Status.test.tsx index 612f56840b..454d3958eb 100644 --- a/frontend/src/pages/Status.test.tsx +++ b/frontend/src/pages/Status.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/pages/Status.tsx b/frontend/src/pages/Status.tsx index b61b97e701..f0f9636bc2 100644 --- a/frontend/src/pages/Status.tsx +++ b/frontend/src/pages/Status.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,12 +28,14 @@ import UnknownIcon from '@material-ui/icons/Help'; import { color } from '../Css'; import { logger, formatDateString } from '../lib/Utils'; import { NodePhase, checkIfTerminated } from '../lib/StatusUtils'; +import { Execution } from 'src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_pb'; export function statusToIcon( status?: NodePhase, startDate?: Date | string, endDate?: Date | string, nodeMessage?: string, + mlmdState?: Execution.State, ): JSX.Element { status = checkIfTerminated(status, nodeMessage); // tslint:disable-next-line:variable-name @@ -153,6 +155,11 @@ export function statusToIcon( default: logger.verbose('Unknown node phase:', status); } + if (mlmdState === Execution.State.CACHED) { + IconComponent = CachedIcon; + iconColor = color.success; + title = 'Execution was skipped and outputs were taken from cache'; + } return ( <Tooltip title={ diff --git a/frontend/src/pages/__snapshots__/GettingStarted.test.tsx.snap b/frontend/src/pages/__snapshots__/GettingStarted.test.tsx.snap index 3ef2e519ac..e2eb9d36b7 100644 --- a/frontend/src/pages/__snapshots__/GettingStarted.test.tsx.snap +++ b/frontend/src/pages/__snapshots__/GettingStarted.test.tsx.snap @@ -14,36 +14,51 @@ exports[`GettingStarted page initially renders documentation 1`] = ` </h2> <ul> <li> - TensorFlow Extended (TFX) + Kubeflow Pipelines <a class="link" - href="https://www.tensorflow.org/tfx/guide" + href="https://www.kubeflow.org/docs/pipelines/sdk/" rel="noopener" target="_blank" > SDK </a> - with end-to-end ML Pipeline Template ( + + + <ul> + <li> + Try out + <a + class="link" + href="https://www.kubeflow.org/docs/components/pipelines/sdk/v2/v2-compatibility/" + rel="noopener" + target="_blank" + > + the new Kubeflow Pipelines SDK v2 (Beta) + </a> + </li> + </ul> + </li> + <li> + TensorFlow Extended (TFX) <a class="link" - href="https://console.cloud.google.com/mlengine/notebooks/deploy-notebook?q=download_url%3Dhttps%253A%252F%252Fraw.githubusercontent.com%252Ftensorflow%252Ftfx%252Fmaster%252Fdocs%252Ftutorials%252Ftfx%252Ftemplate.ipynb" + href="https://www.tensorflow.org/tfx/guide" rel="noopener" target="_blank" > - Open TF 2.1 Notebook + SDK </a> - ) - </li> - <li> - Kubeflow Pipelines + with end-to-end ML Pipeline Template ( <a class="link" - href="https://www.kubeflow.org/docs/pipelines/sdk/" + href="https://console.cloud.google.com/mlengine/notebooks/deploy-notebook?q=download_url%3Dhttps%253A%252F%252Fraw.githubusercontent.com%252Ftensorflow%252Ftfx%252Fmaster%252Fdocs%252Ftutorials%252Ftfx%252Ftemplate.ipynb" rel="noopener" target="_blank" > - SDK + Open a Cloud AI Platform Notebook on Google Cloud </a> + ) </li> </ul> <br /> @@ -120,12 +135,34 @@ exports[`GettingStarted page initially renders documentation 1`] = ` class="link" href="#/pipelines" > - Data passing in python components + V2 Python function based components </a> <ul> <li> - Shows how to pass data between python components. + Shows different component input and output options for KFP v2 components. + <a + class="link" + href="https://github.com/kubeflow/pipelines/blob/master/samples/v2/lightweight_python_functions_v2_pipeline/lightweight_python_functions_v2_pipeline.py" + rel="noopener" + target="_blank" + > + source code + </a> + </li> + </ul> + </li> + <li> + <a + class="link" + href="#/pipelines" + > + Data passing in Python components + </a> + + <ul> + <li> + Shows how to pass data between Python components. <a class="link" href="https://github.com/kubeflow/pipelines/tree/master/samples/tutorials/Data%20passing%20in%20python%20components" @@ -202,5 +239,11 @@ Array [ undefined, "%7B%22predicates%22%3A%5B%7B%22key%22%3A%22name%22%2C%22op%22%3A%22EQUALS%22%2C%22string_value%22%3A%22%5BTutorial%5D%20DSL%20-%20Control%20structures%22%7D%5D%7D", ], + Array [ + undefined, + 10, + undefined, + "%7B%22predicates%22%3A%5B%7B%22key%22%3A%22name%22%2C%22op%22%3A%22EQUALS%22%2C%22string_value%22%3A%22%5BTutorial%5D%20V2%20lightweight%20Python%20components%22%7D%5D%7D", + ], ] `; diff --git a/frontend/src/pages/__snapshots__/NewPipelineVersion.test.tsx.snap b/frontend/src/pages/__snapshots__/NewPipelineVersion.test.tsx.snap index a8c647230c..aaf5e1502d 100644 --- a/frontend/src/pages/__snapshots__/NewPipelineVersion.test.tsx.snap +++ b/frontend/src/pages/__snapshots__/NewPipelineVersion.test.tsx.snap @@ -113,7 +113,7 @@ exports[`NewPipelineVersion creating new pipeline renders the new pipeline page <Input InputProps={ Object { - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -130,7 +130,7 @@ exports[`NewPipelineVersion creating new pipeline renders the new pipeline page > Choose file </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, "style": Object { "maxWidth": 2000, diff --git a/frontend/src/pages/__snapshots__/NewRun.test.tsx.snap b/frontend/src/pages/__snapshots__/NewRun.test.tsx.snap index 61aba16671..d8c7d19451 100644 --- a/frontend/src/pages/__snapshots__/NewRun.test.tsx.snap +++ b/frontend/src/pages/__snapshots__/NewRun.test.tsx.snap @@ -353,7 +353,7 @@ exports[`NewRun arriving from pipeline details page indicates that a pipeline is "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -369,7 +369,7 @@ exports[`NewRun arriving from pipeline details page indicates that a pipeline is > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -388,7 +388,7 @@ exports[`NewRun arriving from pipeline details page indicates that a pipeline is Note, the service account needs <ExternalLink - href="https://github.com/argoproj/argo/blob/v2.3.0/docs/workflow-rbac.md" + href="https://argoproj.github.io/argo-workflows/workflow-rbac/" > minimum permissions required by argo workflows </ExternalLink> @@ -486,7 +486,7 @@ exports[`NewRun changes the exit button's text if query params indicate this is "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -502,7 +502,7 @@ exports[`NewRun changes the exit button's text if query params indicate this is > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -518,7 +518,7 @@ exports[`NewRun changes the exit button's text if query params indicate this is "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -534,7 +534,7 @@ exports[`NewRun changes the exit button's text if query params indicate this is > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -874,7 +874,7 @@ exports[`NewRun changes the exit button's text if query params indicate this is "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -890,7 +890,7 @@ exports[`NewRun changes the exit button's text if query params indicate this is > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -909,7 +909,7 @@ exports[`NewRun changes the exit button's text if query params indicate this is Note, the service account needs <ExternalLink - href="https://github.com/argoproj/argo/blob/v2.3.0/docs/workflow-rbac.md" + href="https://argoproj.github.io/argo-workflows/workflow-rbac/" > minimum permissions required by argo workflows </ExternalLink> @@ -1007,7 +1007,7 @@ exports[`NewRun changes title and form if the new run will recur, based on the r "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -1023,7 +1023,7 @@ exports[`NewRun changes title and form if the new run will recur, based on the r > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -1039,7 +1039,7 @@ exports[`NewRun changes title and form if the new run will recur, based on the r "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -1055,7 +1055,7 @@ exports[`NewRun changes title and form if the new run will recur, based on the r > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -1395,7 +1395,7 @@ exports[`NewRun changes title and form if the new run will recur, based on the r "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -1411,7 +1411,7 @@ exports[`NewRun changes title and form if the new run will recur, based on the r > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -1430,7 +1430,7 @@ exports[`NewRun changes title and form if the new run will recur, based on the r Note, the service account needs <ExternalLink - href="https://github.com/argoproj/argo/blob/v2.3.0/docs/workflow-rbac.md" + href="https://argoproj.github.io/argo-workflows/workflow-rbac/" > minimum permissions required by argo workflows </ExternalLink> @@ -1546,7 +1546,7 @@ exports[`NewRun changes title and form to default state if the new run is a one- "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -1562,7 +1562,7 @@ exports[`NewRun changes title and form to default state if the new run is a one- > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -1578,7 +1578,7 @@ exports[`NewRun changes title and form to default state if the new run is a one- "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -1594,7 +1594,7 @@ exports[`NewRun changes title and form to default state if the new run is a one- > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -1934,7 +1934,7 @@ exports[`NewRun changes title and form to default state if the new run is a one- "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -1950,7 +1950,7 @@ exports[`NewRun changes title and form to default state if the new run is a one- > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -1969,7 +1969,7 @@ exports[`NewRun changes title and form to default state if the new run is a one- Note, the service account needs <ExternalLink - href="https://github.com/argoproj/argo/blob/v2.3.0/docs/workflow-rbac.md" + href="https://argoproj.github.io/argo-workflows/workflow-rbac/" > minimum permissions required by argo workflows </ExternalLink> @@ -2067,7 +2067,7 @@ exports[`NewRun fetches the associated pipeline if one is present in the query p "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -2083,7 +2083,7 @@ exports[`NewRun fetches the associated pipeline if one is present in the query p > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -2099,7 +2099,7 @@ exports[`NewRun fetches the associated pipeline if one is present in the query p "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -2115,7 +2115,7 @@ exports[`NewRun fetches the associated pipeline if one is present in the query p > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -2455,7 +2455,7 @@ exports[`NewRun fetches the associated pipeline if one is present in the query p "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -2471,7 +2471,7 @@ exports[`NewRun fetches the associated pipeline if one is present in the query p > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -2490,7 +2490,7 @@ exports[`NewRun fetches the associated pipeline if one is present in the query p Note, the service account needs <ExternalLink - href="https://github.com/argoproj/argo/blob/v2.3.0/docs/workflow-rbac.md" + href="https://argoproj.github.io/argo-workflows/workflow-rbac/" > minimum permissions required by argo workflows </ExternalLink> @@ -2586,7 +2586,7 @@ exports[`NewRun renders the new run page 1`] = ` "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -2602,7 +2602,7 @@ exports[`NewRun renders the new run page 1`] = ` > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -2618,7 +2618,7 @@ exports[`NewRun renders the new run page 1`] = ` "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -2634,7 +2634,7 @@ exports[`NewRun renders the new run page 1`] = ` > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -2974,7 +2974,7 @@ exports[`NewRun renders the new run page 1`] = ` "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -2990,7 +2990,7 @@ exports[`NewRun renders the new run page 1`] = ` > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -3009,7 +3009,7 @@ exports[`NewRun renders the new run page 1`] = ` Note, the service account needs <ExternalLink - href="https://github.com/argoproj/argo/blob/v2.3.0/docs/workflow-rbac.md" + href="https://argoproj.github.io/argo-workflows/workflow-rbac/" > minimum permissions required by argo workflows </ExternalLink> @@ -3107,7 +3107,7 @@ exports[`NewRun starting a new recurring run includes additional trigger input f "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -3123,7 +3123,7 @@ exports[`NewRun starting a new recurring run includes additional trigger input f > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -3139,7 +3139,7 @@ exports[`NewRun starting a new recurring run includes additional trigger input f "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -3155,7 +3155,7 @@ exports[`NewRun starting a new recurring run includes additional trigger input f > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -3495,7 +3495,7 @@ exports[`NewRun starting a new recurring run includes additional trigger input f "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -3511,7 +3511,7 @@ exports[`NewRun starting a new recurring run includes additional trigger input f > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -3530,7 +3530,7 @@ exports[`NewRun starting a new recurring run includes additional trigger input f Note, the service account needs <ExternalLink - href="https://github.com/argoproj/argo/blob/v2.3.0/docs/workflow-rbac.md" + href="https://argoproj.github.io/argo-workflows/workflow-rbac/" > minimum permissions required by argo workflows </ExternalLink> @@ -3646,7 +3646,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -3662,7 +3662,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -3678,7 +3678,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -3694,7 +3694,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -4034,7 +4034,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -4050,7 +4050,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -4069,7 +4069,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d Note, the service account needs <ExternalLink - href="https://github.com/argoproj/argo/blob/v2.3.0/docs/workflow-rbac.md" + href="https://argoproj.github.io/argo-workflows/workflow-rbac/" > minimum permissions required by argo workflows </ExternalLink> @@ -4167,7 +4167,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -4183,7 +4183,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -4199,7 +4199,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -4215,7 +4215,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -4555,7 +4555,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -4571,7 +4571,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -4590,7 +4590,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d Note, the service account needs <ExternalLink - href="https://github.com/argoproj/argo/blob/v2.3.0/docs/workflow-rbac.md" + href="https://argoproj.github.io/argo-workflows/workflow-rbac/" > minimum permissions required by argo workflows </ExternalLink> @@ -4699,7 +4699,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -4715,7 +4715,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -4731,7 +4731,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -4747,7 +4747,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -5087,7 +5087,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -5103,7 +5103,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -5122,7 +5122,7 @@ exports[`NewRun starting a new run updates the pipeline params as user selects d Note, the service account needs <ExternalLink - href="https://github.com/argoproj/argo/blob/v2.3.0/docs/workflow-rbac.md" + href="https://argoproj.github.io/argo-workflows/workflow-rbac/" > minimum permissions required by argo workflows </ExternalLink> @@ -5220,7 +5220,7 @@ exports[`NewRun updates the run's state with the associated experiment if one is "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -5236,7 +5236,7 @@ exports[`NewRun updates the run's state with the associated experiment if one is > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -5252,7 +5252,7 @@ exports[`NewRun updates the run's state with the associated experiment if one is "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -5268,7 +5268,7 @@ exports[`NewRun updates the run's state with the associated experiment if one is > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -5608,7 +5608,7 @@ exports[`NewRun updates the run's state with the associated experiment if one is "classes": Object { "disabled": "nonEditableInput", }, - "endAdornment": <WithStyles(InputAdornment) + "endAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <WithStyles(Button) @@ -5624,7 +5624,7 @@ exports[`NewRun updates the run's state with the associated experiment if one is > Choose </WithStyles(Button)> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, "readOnly": true, } } @@ -5643,7 +5643,7 @@ exports[`NewRun updates the run's state with the associated experiment if one is Note, the service account needs <ExternalLink - href="https://github.com/argoproj/argo/blob/v2.3.0/docs/workflow-rbac.md" + href="https://argoproj.github.io/argo-workflows/workflow-rbac/" > minimum permissions required by argo workflows </ExternalLink> diff --git a/frontend/src/pages/__snapshots__/PipelineDetails.test.tsx.snap b/frontend/src/pages/__snapshots__/PipelineDetails.test.tsx.snap deleted file mode 100644 index 847cd78fcc..0000000000 --- a/frontend/src/pages/__snapshots__/PipelineDetails.test.tsx.snap +++ /dev/null @@ -1,1218 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`PipelineDetails closes side panel when close button is clicked 1`] = ` -<div - className="page" -> - <div - className="page" - > - <MD2Tabs - onSwitch={[Function]} - selectedTab={0} - tabs={ - Array [ - "Graph", - "YAML", - ] - } - /> - <div - className="page" - > - <div - className="page" - > - <div - className="page" - style={ - Object { - "overflow": "hidden", - "position": "relative", - } - } - > - <WithStyles(Paper) - className="summaryCard" - > - <div - style={ - Object { - "alignItems": "baseline", - "display": "flex", - "justifyContent": "space-between", - } - } - > - <div - className="header" - > - Summary - </div> - <WithStyles(Button) - color="secondary" - onClick={[Function]} - > - Hide - </WithStyles(Button)> - </div> - <div - className="summaryKey" - > - ID - </div> - <div> - test-pipeline-id - </div> - <form - autoComplete="off" - > - <WithStyles(FormControl)> - <WithStyles(WithFormControlContext(InputLabel))> - Version - </WithStyles(WithFormControlContext(InputLabel))> - <WithStyles(WithFormControlContext(Select)) - inputProps={ - Object { - "id": "version-selector", - "name": "selectedVersion", - } - } - onChange={[Function]} - value="test-pipeline-version-id" - > - <WithStyles(MenuItem) - key="test-pipeline-version-id" - value="test-pipeline-version-id" - > - test-pipeline-version - </WithStyles(MenuItem)> - </WithStyles(WithFormControlContext(Select))> - </WithStyles(FormControl)> - </form> - <div - className="summaryKey" - > - <a - rel="noopener noreferrer" - target="_blank" - > - Version source - </a> - </div> - <div - className="summaryKey" - > - Uploaded on - </div> - <div> - 9/5/2018, 4:03:02 AM - </div> - <div - className="summaryKey" - > - Description - </div> - <Description - description="test pipeline description" - /> - </WithStyles(Paper)> - <EnhancedGraph - graph={ - Graph { - "_defaultEdgeLabelFn": [Function], - "_defaultNodeLabelFn": [Function], - "_edgeLabels": Object {}, - "_edgeObjs": Object {}, - "_in": Object {}, - "_isCompound": false, - "_isDirected": true, - "_isMultigraph": false, - "_label": undefined, - "_nodes": Object {}, - "_out": Object {}, - "_preds": Object {}, - "_sucs": Object {}, - } - } - onClick={[Function]} - onError={[Function]} - selectedNodeId="" - /> - <ReduceGraphSwitch - checked={false} - disabled={true} - onChange={[Function]} - /> - <SidePanel - isOpen={false} - onClose={[Function]} - title="" - > - <div - className="page" - > - <div - className="absoluteCenter" - > - Unable to retrieve node info - </div> - </div> - </SidePanel> - <div - className="footer" - > - <div - className="flex footerInfoOffset" - > - <pure(InfoOutlinedIcon) - className="infoIcon" - /> - <span - className="infoSpan" - > - Static pipeline graph - </span> - </div> - </div> - </div> - </div> - </div> - </div> -</div> -`; - -exports[`PipelineDetails collapses summary card when summary shown state is false 1`] = ` -<div - className="page" -> - <div - className="page" - > - <MD2Tabs - onSwitch={[Function]} - selectedTab={0} - tabs={ - Array [ - "Graph", - "YAML", - ] - } - /> - <div - className="page" - > - <div - className="page" - > - <div - className="page" - style={ - Object { - "overflow": "hidden", - "position": "relative", - } - } - > - <EnhancedGraph - graph={ - Graph { - "_defaultEdgeLabelFn": [Function], - "_defaultNodeLabelFn": [Function], - "_edgeLabels": Object {}, - "_edgeObjs": Object {}, - "_in": Object {}, - "_isCompound": false, - "_isDirected": true, - "_isMultigraph": false, - "_label": undefined, - "_nodes": Object {}, - "_out": Object {}, - "_preds": Object {}, - "_sucs": Object {}, - } - } - onClick={[Function]} - onError={[Function]} - selectedNodeId="" - /> - <ReduceGraphSwitch - checked={false} - disabled={true} - onChange={[Function]} - /> - <SidePanel - isOpen={false} - onClose={[Function]} - title="" - > - <div - className="page" - > - <div - className="absoluteCenter" - > - Unable to retrieve node info - </div> - </div> - </SidePanel> - <div - className="footer" - > - <WithStyles(Button) - color="secondary" - onClick={[Function]} - > - Show summary - </WithStyles(Button)> - <div - className="flex" - > - <pure(InfoOutlinedIcon) - className="infoIcon" - /> - <span - className="infoSpan" - > - Static pipeline graph - </span> - </div> - </div> - </div> - </div> - </div> - </div> -</div> -`; - -exports[`PipelineDetails opens side panel on clicked node, shows message when node is not found in graph 1`] = ` -<div - className="page" -> - <div - className="page" - > - <MD2Tabs - onSwitch={[Function]} - selectedTab={0} - tabs={ - Array [ - "Graph", - "YAML", - ] - } - /> - <div - className="page" - > - <div - className="page" - > - <div - className="page" - style={ - Object { - "overflow": "hidden", - "position": "relative", - } - } - > - <WithStyles(Paper) - className="summaryCard" - > - <div - style={ - Object { - "alignItems": "baseline", - "display": "flex", - "justifyContent": "space-between", - } - } - > - <div - className="header" - > - Summary - </div> - <WithStyles(Button) - color="secondary" - onClick={[Function]} - > - Hide - </WithStyles(Button)> - </div> - <div - className="summaryKey" - > - ID - </div> - <div> - test-pipeline-id - </div> - <form - autoComplete="off" - > - <WithStyles(FormControl)> - <WithStyles(WithFormControlContext(InputLabel))> - Version - </WithStyles(WithFormControlContext(InputLabel))> - <WithStyles(WithFormControlContext(Select)) - inputProps={ - Object { - "id": "version-selector", - "name": "selectedVersion", - } - } - onChange={[Function]} - value="test-pipeline-version-id" - > - <WithStyles(MenuItem) - key="test-pipeline-version-id" - value="test-pipeline-version-id" - > - test-pipeline-version - </WithStyles(MenuItem)> - </WithStyles(WithFormControlContext(Select))> - </WithStyles(FormControl)> - </form> - <div - className="summaryKey" - > - <a - rel="noopener noreferrer" - target="_blank" - > - Version source - </a> - </div> - <div - className="summaryKey" - > - Uploaded on - </div> - <div> - 9/5/2018, 4:03:02 AM - </div> - <div - className="summaryKey" - > - Description - </div> - <Description - description="test pipeline description" - /> - </WithStyles(Paper)> - <EnhancedGraph - graph={ - Graph { - "_defaultEdgeLabelFn": [Function], - "_defaultNodeLabelFn": [Function], - "_edgeLabels": Object {}, - "_edgeObjs": Object {}, - "_in": Object {}, - "_isCompound": false, - "_isDirected": true, - "_isMultigraph": false, - "_label": undefined, - "_nodes": Object {}, - "_out": Object {}, - "_preds": Object {}, - "_sucs": Object {}, - } - } - onClick={[Function]} - onError={[Function]} - selectedNodeId="some-node-id" - /> - <ReduceGraphSwitch - checked={false} - disabled={true} - onChange={[Function]} - /> - <SidePanel - isOpen={true} - onClose={[Function]} - title="some-node-id" - > - <div - className="page" - > - <div - className="absoluteCenter" - > - Unable to retrieve node info - </div> - </div> - </SidePanel> - <div - className="footer" - > - <div - className="flex footerInfoOffset" - > - <pure(InfoOutlinedIcon) - className="infoIcon" - /> - <span - className="infoSpan" - > - Static pipeline graph - </span> - </div> - </div> - </div> - </div> - </div> - </div> -</div> -`; - -exports[`PipelineDetails shows clicked node info in the side panel if it is in the graph 1`] = ` -<div - className="page" -> - <div - className="page" - > - <MD2Tabs - onSwitch={[Function]} - selectedTab={0} - tabs={ - Array [ - "Graph", - "YAML", - ] - } - /> - <div - className="page" - > - <div - className="page" - > - <div - className="page" - style={ - Object { - "overflow": "hidden", - "position": "relative", - } - } - > - <WithStyles(Paper) - className="summaryCard" - > - <div - style={ - Object { - "alignItems": "baseline", - "display": "flex", - "justifyContent": "space-between", - } - } - > - <div - className="header" - > - Summary - </div> - <WithStyles(Button) - color="secondary" - onClick={[Function]} - > - Hide - </WithStyles(Button)> - </div> - <div - className="summaryKey" - > - ID - </div> - <div> - test-pipeline-id - </div> - <form - autoComplete="off" - > - <WithStyles(FormControl)> - <WithStyles(WithFormControlContext(InputLabel))> - Version - </WithStyles(WithFormControlContext(InputLabel))> - <WithStyles(WithFormControlContext(Select)) - inputProps={ - Object { - "id": "version-selector", - "name": "selectedVersion", - } - } - onChange={[Function]} - value="test-pipeline-version-id" - > - <WithStyles(MenuItem) - key="test-pipeline-version-id" - value="test-pipeline-version-id" - > - test-pipeline-version - </WithStyles(MenuItem)> - </WithStyles(WithFormControlContext(Select))> - </WithStyles(FormControl)> - </form> - <div - className="summaryKey" - > - <a - rel="noopener noreferrer" - target="_blank" - > - Version source - </a> - </div> - <div - className="summaryKey" - > - Uploaded on - </div> - <div> - 9/5/2018, 4:03:02 AM - </div> - <div - className="summaryKey" - > - Description - </div> - <Description - description="test pipeline description" - /> - </WithStyles(Paper)> - <EnhancedGraph - graph={ - Graph { - "_defaultEdgeLabelFn": [Function], - "_defaultNodeLabelFn": [Function], - "_edgeLabels": Object {}, - "_edgeObjs": Object {}, - "_in": Object { - "node1": Object {}, - }, - "_isCompound": false, - "_isDirected": true, - "_isMultigraph": false, - "_label": undefined, - "_nodeCount": 1, - "_nodes": Object { - "node1": Object { - "info": SelectedNodeInfo { - "args": Array [ - "test arg", - "test arg2", - ], - "command": Array [ - "test command", - "test command 2", - ], - "condition": "test condition", - "image": "test image", - "inputs": Array [ - Array [ - "key1", - "val1", - ], - Array [ - "key2", - "val2", - ], - ], - "nodeType": "container", - "outputs": Array [ - Array [ - "key3", - "val3", - ], - Array [ - "key4", - "val4", - ], - ], - "resource": Array [ - Array [], - ], - "volumeMounts": Array [ - Array [], - ], - }, - "label": "node1", - }, - }, - "_out": Object { - "node1": Object {}, - }, - "_preds": Object { - "node1": Object {}, - }, - "_sucs": Object { - "node1": Object {}, - }, - } - } - onClick={[Function]} - onError={[Function]} - selectedNodeId="node1" - /> - <ReduceGraphSwitch - checked={false} - disabled={true} - onChange={[Function]} - /> - <SidePanel - isOpen={true} - onClose={[Function]} - title="node1" - > - <div - className="page" - > - <div - className="" - > - <StaticNodeDetails - nodeInfo={ - SelectedNodeInfo { - "args": Array [ - "test arg", - "test arg2", - ], - "command": Array [ - "test command", - "test command 2", - ], - "condition": "test condition", - "image": "test image", - "inputs": Array [ - Array [ - "key1", - "val1", - ], - Array [ - "key2", - "val2", - ], - ], - "nodeType": "container", - "outputs": Array [ - Array [ - "key3", - "val3", - ], - Array [ - "key4", - "val4", - ], - ], - "resource": Array [ - Array [], - ], - "volumeMounts": Array [ - Array [], - ], - } - } - /> - </div> - </div> - </SidePanel> - <div - className="footer" - > - <div - className="flex footerInfoOffset" - > - <pure(InfoOutlinedIcon) - className="infoIcon" - /> - <span - className="infoSpan" - > - Static pipeline graph - </span> - </div> - </div> - </div> - </div> - </div> - </div> -</div> -`; - -exports[`PipelineDetails shows correct versions in version selector 1`] = ` -<div - className="page" -> - <div - className="page" - > - <MD2Tabs - onSwitch={[Function]} - selectedTab={0} - tabs={ - Array [ - "Graph", - "YAML", - ] - } - /> - <div - className="page" - > - <div - className="page" - > - <div - className="page" - style={ - Object { - "overflow": "hidden", - "position": "relative", - } - } - > - <WithStyles(Paper) - className="summaryCard" - > - <div - style={ - Object { - "alignItems": "baseline", - "display": "flex", - "justifyContent": "space-between", - } - } - > - <div - className="header" - > - Summary - </div> - <WithStyles(Button) - color="secondary" - onClick={[Function]} - > - Hide - </WithStyles(Button)> - </div> - <div - className="summaryKey" - > - ID - </div> - <div> - test-pipeline-id - </div> - <form - autoComplete="off" - > - <WithStyles(FormControl)> - <WithStyles(WithFormControlContext(InputLabel))> - Version - </WithStyles(WithFormControlContext(InputLabel))> - <WithStyles(WithFormControlContext(Select)) - inputProps={ - Object { - "id": "version-selector", - "name": "selectedVersion", - } - } - onChange={[Function]} - value="test-pipeline-version-id" - > - <WithStyles(MenuItem) - key="test-pipeline-version-id" - value="test-pipeline-version-id" - > - test-pipeline-version - </WithStyles(MenuItem)> - </WithStyles(WithFormControlContext(Select))> - </WithStyles(FormControl)> - </form> - <div - className="summaryKey" - > - <a - rel="noopener noreferrer" - target="_blank" - > - Version source - </a> - </div> - <div - className="summaryKey" - > - Uploaded on - </div> - <div> - 9/5/2018, 4:03:02 AM - </div> - <div - className="summaryKey" - > - Description - </div> - <Description - description="test pipeline description" - /> - </WithStyles(Paper)> - <EnhancedGraph - graph={ - Graph { - "_defaultEdgeLabelFn": [Function], - "_defaultNodeLabelFn": [Function], - "_edgeLabels": Object {}, - "_edgeObjs": Object {}, - "_in": Object {}, - "_isCompound": false, - "_isDirected": true, - "_isMultigraph": false, - "_label": undefined, - "_nodes": Object {}, - "_out": Object {}, - "_preds": Object {}, - "_sucs": Object {}, - } - } - onClick={[Function]} - onError={[Function]} - selectedNodeId="" - /> - <ReduceGraphSwitch - checked={false} - disabled={true} - onChange={[Function]} - /> - <SidePanel - isOpen={false} - onClose={[Function]} - title="" - > - <div - className="page" - > - <div - className="absoluteCenter" - > - Unable to retrieve node info - </div> - </div> - </SidePanel> - <div - className="footer" - > - <div - className="flex footerInfoOffset" - > - <pure(InfoOutlinedIcon) - className="infoIcon" - /> - <span - className="infoSpan" - > - Static pipeline graph - </span> - </div> - </div> - </div> - </div> - </div> - </div> -</div> -`; - -exports[`PipelineDetails shows empty pipeline details with empty graph 1`] = ` -<div - className="page" -> - <div - className="page" - > - <MD2Tabs - onSwitch={[Function]} - selectedTab={0} - tabs={ - Array [ - "Graph", - "YAML", - ] - } - /> - <div - className="page" - > - <div - className="page" - > - <div - className="page" - style={ - Object { - "overflow": "hidden", - "position": "relative", - } - } - > - <WithStyles(Paper) - className="summaryCard" - > - <div - style={ - Object { - "alignItems": "baseline", - "display": "flex", - "justifyContent": "space-between", - } - } - > - <div - className="header" - > - Summary - </div> - <WithStyles(Button) - color="secondary" - onClick={[Function]} - > - Hide - </WithStyles(Button)> - </div> - <div - className="summaryKey" - > - ID - </div> - <div> - test-pipeline-id - </div> - <form - autoComplete="off" - > - <WithStyles(FormControl)> - <WithStyles(WithFormControlContext(InputLabel))> - Version - </WithStyles(WithFormControlContext(InputLabel))> - <WithStyles(WithFormControlContext(Select)) - inputProps={ - Object { - "id": "version-selector", - "name": "selectedVersion", - } - } - onChange={[Function]} - value="test-pipeline-version-id" - > - <WithStyles(MenuItem) - key="test-pipeline-version-id" - value="test-pipeline-version-id" - > - test-pipeline-version - </WithStyles(MenuItem)> - </WithStyles(WithFormControlContext(Select))> - </WithStyles(FormControl)> - </form> - <div - className="summaryKey" - > - <a - rel="noopener noreferrer" - target="_blank" - > - Version source - </a> - </div> - <div - className="summaryKey" - > - Uploaded on - </div> - <div> - 9/5/2018, 4:03:02 AM - </div> - <div - className="summaryKey" - > - Description - </div> - <Description - description="test pipeline description" - /> - </WithStyles(Paper)> - <EnhancedGraph - graph={ - Graph { - "_defaultEdgeLabelFn": [Function], - "_defaultNodeLabelFn": [Function], - "_edgeLabels": Object {}, - "_edgeObjs": Object {}, - "_in": Object {}, - "_isCompound": false, - "_isDirected": true, - "_isMultigraph": false, - "_label": undefined, - "_nodes": Object {}, - "_out": Object {}, - "_preds": Object {}, - "_sucs": Object {}, - } - } - onClick={[Function]} - onError={[Function]} - selectedNodeId="" - /> - <ReduceGraphSwitch - checked={false} - disabled={true} - onChange={[Function]} - /> - <SidePanel - isOpen={false} - onClose={[Function]} - title="" - > - <div - className="page" - > - <div - className="absoluteCenter" - > - Unable to retrieve node info - </div> - </div> - </SidePanel> - <div - className="footer" - > - <div - className="flex footerInfoOffset" - > - <pure(InfoOutlinedIcon) - className="infoIcon" - /> - <span - className="infoSpan" - > - Static pipeline graph - </span> - </div> - </div> - </div> - </div> - </div> - </div> -</div> -`; - -exports[`PipelineDetails shows empty pipeline details with no graph 1`] = ` -<div - className="page" -> - <div - className="page" - > - <MD2Tabs - onSwitch={[Function]} - selectedTab={0} - tabs={ - Array [ - "Graph", - "YAML", - ] - } - /> - <div - className="page" - > - <div - className="page" - > - <span - style={ - Object { - "margin": "40px auto", - } - } - > - No graph to show - </span> - </div> - </div> - </div> -</div> -`; - -exports[`PipelineDetails shows pipeline source code when config tab is clicked 1`] = ` -<div - className="page" -> - <div - className="page" - > - <MD2Tabs - onSwitch={[Function]} - selectedTab={1} - tabs={ - Array [ - "Graph", - "YAML", - ] - } - /> - <div - className="page" - > - <div - className="containerCss" - > - <Editor - cursorStart={1} - editorProps={ - Object { - "$blockScrolling": true, - } - } - enableBasicAutocompletion={false} - enableLiveAutocompletion={false} - enableSnippets={false} - focus={false} - fontSize={12} - height="640px" - highlightActiveLine={true} - maxLines={null} - minLines={null} - mode="yaml" - name="brace-editor" - navigateToFileEnd={true} - onChange={null} - onLoad={null} - onPaste={null} - onScroll={null} - placeholder={null} - readOnly={true} - scrollMargin={ - Array [ - 0, - 0, - 0, - 0, - ] - } - setOptions={Object {}} - showGutter={true} - showPrintMargin={true} - style={Object {}} - tabSize={4} - theme="github" - value="test template" - width="640px" - wrapEnabled={false} - /> - </div> - </div> - </div> -</div> -`; diff --git a/frontend/src/pages/__snapshots__/PipelineVersionList.test.tsx.snap b/frontend/src/pages/__snapshots__/PipelineVersionList.test.tsx.snap index 0757b9f77e..de2ebb55e3 100644 --- a/frontend/src/pages/__snapshots__/PipelineVersionList.test.tsx.snap +++ b/frontend/src/pages/__snapshots__/PipelineVersionList.test.tsx.snap @@ -18,10 +18,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre Array [ Object { "customRenderer": [Function], - "flex": 2, + "flex": 1, "label": "Version name", "sortKey": "name", }, + Object { + "customRenderer": [Function], + "flex": 3, + "label": "Description", + }, Object { "flex": 1, "label": "Uploaded on", @@ -38,6 +43,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre "id": "test-pipeline-version-id0", "otherFields": Array [ "test pipeline version name0", + undefined, "-", ], }, @@ -45,6 +51,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre "id": "test-pipeline-version-id1", "otherFields": Array [ "test pipeline version name1", + undefined, "-", ], }, @@ -69,7 +76,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -80,7 +87,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -106,7 +113,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -117,7 +124,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -334,7 +341,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre labelWidth={0} onChange={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -345,7 +352,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } value="" > @@ -371,7 +378,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre labelWidth={0} onChange={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -382,7 +389,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } value="" > @@ -411,7 +418,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre onChange={[Function]} renderPrefix={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -422,7 +429,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } type="text" value="" @@ -456,7 +463,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre onChange={[Function]} renderPrefix={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -467,7 +474,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } type="text" value="" @@ -517,7 +524,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre onChange={[Function]} renderPrefix={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -528,7 +535,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } type="text" value="" @@ -750,7 +757,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -943,34 +950,56 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre </fieldset> </NotchedOutline> </WithStyles(NotchedOutline)> - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > - <InputAdornment + <WithFormControlContext(InputAdornment) classes={ Object { + "disablePointerEvents": "MuiInputAdornment-disablePointerEvents-59", "filled": "MuiInputAdornment-filled-56", "positionEnd": "MuiInputAdornment-positionEnd-58", "positionStart": "MuiInputAdornment-positionStart-57", "root": "MuiInputAdornment-root-55", } } - component="div" - disableTypography={false} position="end" > - <div - className="MuiInputAdornment-root-55 MuiInputAdornment-positionEnd-58" - > - <pure(FilterListIcon) - style={ - Object { - "color": "#80868b", - "paddingRight": 16, - } + <InputAdornment + classes={ + Object { + "disablePointerEvents": "MuiInputAdornment-disablePointerEvents-59", + "filled": "MuiInputAdornment-filled-56", + "positionEnd": "MuiInputAdornment-positionEnd-58", + "positionStart": "MuiInputAdornment-positionStart-57", + "root": "MuiInputAdornment-root-55", } + } + component="div" + disablePointerEvents={false} + disableTypography={false} + muiFormControl={ + Object { + "adornedStart": true, + "disabled": false, + "error": false, + "filled": false, + "focused": false, + "margin": "none", + "onBlur": [Function], + "onEmpty": [Function], + "onFilled": [Function], + "onFocus": [Function], + "required": false, + "variant": "outlined", + } + } + position="end" + > + <div + className="MuiInputAdornment-root-55 MuiInputAdornment-positionEnd-58" > - <FilterListIcon + <pure(FilterListIcon) style={ Object { "color": "#80868b", @@ -978,7 +1007,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre } } > - <WithStyles(SvgIcon) + <FilterListIcon style={ Object { "color": "#80868b", @@ -986,36 +1015,31 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre } } > - <SvgIcon - classes={ - Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", - } - } - color="inherit" - component="svg" - fontSize="default" + <WithStyles(SvgIcon) style={ Object { "color": "#80868b", "paddingRight": 16, } } - viewBox="0 0 24 24" > - <svg - aria-hidden="true" - className="MuiSvgIcon-root-59" - focusable="false" - role="presentation" + <SvgIcon + classes={ + Object { + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", + } + } + color="inherit" + component="svg" + fontSize="default" style={ Object { "color": "#80868b", @@ -1024,21 +1048,35 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre } viewBox="0 0 24 24" > - <path - d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z" - /> - <path - d="M0 0h24v24H0z" - fill="none" - /> - </svg> - </SvgIcon> - </WithStyles(SvgIcon)> - </FilterListIcon> - </pure(FilterListIcon)> - </div> - </InputAdornment> - </WithStyles(InputAdornment)> + <svg + aria-hidden="true" + className="MuiSvgIcon-root-60" + focusable="false" + role="presentation" + style={ + Object { + "color": "#80868b", + "paddingRight": 16, + } + } + viewBox="0 0 24 24" + > + <path + d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z" + /> + <path + d="M0 0h24v24H0z" + fill="none" + /> + </svg> + </SvgIcon> + </WithStyles(SvgIcon)> + </FilterListIcon> + </pure(FilterListIcon)> + </div> + </InputAdornment> + </WithFormControlContext(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> <input aria-invalid={false} className="MuiInputBase-input-46 MuiOutlinedInput-input-31 MuiInputBase-inputAdornedStart-51 MuiOutlinedInput-inputAdornedStart-34" @@ -1080,12 +1118,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre checkedIcon={<pure(CheckBox) />} classes={ Object { - "checked": "MuiCheckbox-checked-69", - "colorPrimary": "MuiCheckbox-colorPrimary-72", - "colorSecondary": "MuiCheckbox-colorSecondary-73", - "disabled": "MuiCheckbox-disabled-70", - "indeterminate": "MuiCheckbox-indeterminate-71", - "root": "MuiCheckbox-root-68", + "checked": "MuiCheckbox-checked-70", + "colorPrimary": "MuiCheckbox-colorPrimary-73", + "colorSecondary": "MuiCheckbox-colorSecondary-74", + "disabled": "MuiCheckbox-disabled-71", + "indeterminate": "MuiCheckbox-indeterminate-72", + "root": "MuiCheckbox-root-69", } } color="primary" @@ -1100,9 +1138,9 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre className="" classes={ Object { - "checked": "MuiCheckbox-checked-69", - "disabled": "MuiCheckbox-disabled-70", - "root": "MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72", + "checked": "MuiCheckbox-checked-70", + "disabled": "MuiCheckbox-disabled-71", + "root": "MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -1120,10 +1158,10 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre className="" classes={ Object { - "checked": "MuiPrivateSwitchBase-checked-75 MuiCheckbox-checked-69", - "disabled": "MuiPrivateSwitchBase-disabled-76 MuiCheckbox-disabled-70", - "input": "MuiPrivateSwitchBase-input-77", - "root": "MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72", + "checked": "MuiPrivateSwitchBase-checked-76 MuiCheckbox-checked-70", + "disabled": "MuiPrivateSwitchBase-disabled-77 MuiCheckbox-disabled-71", + "input": "MuiPrivateSwitchBase-input-78", + "root": "MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -1141,10 +1179,10 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre className="" classes={ Object { - "checked": "MuiPrivateSwitchBase-checked-75 MuiCheckbox-checked-69", - "disabled": "MuiPrivateSwitchBase-disabled-76 MuiCheckbox-disabled-70", - "input": "MuiPrivateSwitchBase-input-77", - "root": "MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72", + "checked": "MuiPrivateSwitchBase-checked-76 MuiCheckbox-checked-70", + "disabled": "MuiPrivateSwitchBase-disabled-77 MuiCheckbox-disabled-71", + "input": "MuiPrivateSwitchBase-input-78", + "root": "MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -1157,22 +1195,22 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre type="checkbox" > <WithStyles(IconButton) - className="MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" component="span" onBlur={[Function]} onFocus={[Function]} tabIndex={null} > <IconButton - className="MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-79", - "colorPrimary": "MuiIconButton-colorPrimary-80", - "colorSecondary": "MuiIconButton-colorSecondary-81", - "disabled": "MuiIconButton-disabled-82", - "label": "MuiIconButton-label-83", - "root": "MuiIconButton-root-78", + "colorInherit": "MuiIconButton-colorInherit-80", + "colorPrimary": "MuiIconButton-colorPrimary-81", + "colorSecondary": "MuiIconButton-colorSecondary-82", + "disabled": "MuiIconButton-disabled-83", + "label": "MuiIconButton-label-84", + "root": "MuiIconButton-root-79", } } color="default" @@ -1184,7 +1222,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-78 MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiIconButton-root-79 MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" component="span" disabled={false} focusRipple={true} @@ -1194,12 +1232,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <ButtonBase centerRipple={true} - className="MuiIconButton-root-78 MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiIconButton-root-79 MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="span" @@ -1213,7 +1251,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre type="button" > <span - className="MuiButtonBase-root-84 MuiIconButton-root-78 MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiButtonBase-root-85 MuiIconButton-root-79 MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" onBlur={[Function]} onContextMenu={[Function]} onFocus={[Function]} @@ -1228,7 +1266,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre tabIndex={null} > <span - className="MuiIconButton-label-83" + className="MuiIconButton-label-84" > <pure(CheckBoxOutlineBlank)> <CheckBoxOutlineBlank> @@ -1236,15 +1274,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -1254,7 +1292,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <svg aria-hidden="true" - className="MuiSvgIcon-root-59" + className="MuiSvgIcon-root-60" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -1269,7 +1307,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre </pure(CheckBoxOutlineBlank)> <input checked={false} - className="MuiPrivateSwitchBase-input-77" + className="MuiPrivateSwitchBase-input-78" data-indeterminate={false} onChange={[Function]} type="checkbox" @@ -1287,25 +1325,25 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre center={true} classes={ Object { - "child": "MuiTouchRipple-child-128", - "childLeaving": "MuiTouchRipple-childLeaving-129", - "childPulsate": "MuiTouchRipple-childPulsate-130", - "ripple": "MuiTouchRipple-ripple-125", - "ripplePulsate": "MuiTouchRipple-ripplePulsate-127", - "rippleVisible": "MuiTouchRipple-rippleVisible-126", - "root": "MuiTouchRipple-root-124", + "child": "MuiTouchRipple-child-129", + "childLeaving": "MuiTouchRipple-childLeaving-130", + "childPulsate": "MuiTouchRipple-childPulsate-131", + "ripple": "MuiTouchRipple-ripple-126", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-128", + "rippleVisible": "MuiTouchRipple-rippleVisible-127", + "root": "MuiTouchRipple-root-125", } } > <TransitionGroup childFactory={[Function]} - className="MuiTouchRipple-root-124" + className="MuiTouchRipple-root-125" component="span" enter={true} exit={true} > <span - className="MuiTouchRipple-root-124" + className="MuiTouchRipple-root-125" /> </TransitionGroup> </TouchRipple> @@ -1327,7 +1365,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre key="0" style={ Object { - "width": "66.66666666666666%", + "width": "20%", } } title="Version name" @@ -1340,14 +1378,14 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre TransitionComponent={[Function]} classes={ Object { - "popper": "MuiTooltip-popper-87", - "popperInteractive": "MuiTooltip-popperInteractive-88", - "tooltip": "MuiTooltip-tooltip-89", - "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-94", - "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-91", - "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-92", - "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-93", - "touch": "MuiTooltip-touch-90", + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", } } disableFocusListener={false} @@ -1557,7 +1595,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -1747,11 +1785,11 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre className="ellipsis" classes={ Object { - "active": "MuiTableSortLabel-active-96", - "icon": "MuiTableSortLabel-icon-97", - "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-99", - "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-98", - "root": "MuiTableSortLabel-root-95", + "active": "MuiTableSortLabel-active-97", + "icon": "MuiTableSortLabel-icon-98", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-100", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-99", + "root": "MuiTableSortLabel-root-96", } } direction="desc" @@ -1767,7 +1805,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <WithStyles(ButtonBase) aria-describedby={null} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" component="span" disableRipple={true} onBlur={[Function]} @@ -1782,12 +1820,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <ButtonBase aria-describedby={null} centerRipple={false} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="span" @@ -1807,7 +1845,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <span aria-describedby={null} - className="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + className="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} @@ -1827,27 +1865,27 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > Version name <pure(ArrowDownward) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <ArrowDownward - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <WithStyles(SvgIcon) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <SvgIcon - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -1857,7 +1895,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -1879,7 +1917,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <Popper anchorEl={ <span - class="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + class="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" role="button" tabindex="0" title="Sort" @@ -1887,7 +1925,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre Version name <svg aria-hidden="true" - class="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + class="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -1898,7 +1936,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre </svg> </span> } - className="MuiTooltip-popper-87" + className="MuiTooltip-popper-88" disablePortal={false} id={null} open={false} @@ -1913,27 +1951,27 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre key="1" style={ Object { - "width": "33.33333333333333%", + "width": "60%", } } - title="Uploaded on" + title="Description" > <WithStyles(Tooltip) enterDelay={300} - title="Sort" + title="Cannot sort by this column" > <Tooltip TransitionComponent={[Function]} classes={ Object { - "popper": "MuiTooltip-popper-87", - "popperInteractive": "MuiTooltip-popperInteractive-88", - "tooltip": "MuiTooltip-tooltip-89", - "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-94", - "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-91", - "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-92", - "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-93", - "touch": "MuiTooltip-touch-90", + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", } } disableFocusListener={false} @@ -2143,7 +2181,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -2307,16 +2345,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre }, } } - title="Sort" + title="Cannot sort by this column" > <RootRef rootRef={[Function]} > <WithStyles(TableSortLabel) - active={true} + active={false} aria-describedby={null} className="ellipsis" - direction="desc" onBlur={[Function]} onClick={[Function]} onFocus={[Function]} @@ -2324,20 +2361,20 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre onMouseOver={[Function]} onTouchEnd={[Function]} onTouchStart={[Function]} - title="Sort" + title="Cannot sort by this column" > <TableSortLabel IconComponent={[Function]} - active={true} + active={false} aria-describedby={null} className="ellipsis" classes={ Object { - "active": "MuiTableSortLabel-active-96", - "icon": "MuiTableSortLabel-icon-97", - "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-99", - "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-98", - "root": "MuiTableSortLabel-root-95", + "active": "MuiTableSortLabel-active-97", + "icon": "MuiTableSortLabel-icon-98", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-100", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-99", + "root": "MuiTableSortLabel-root-96", } } direction="desc" @@ -2349,11 +2386,11 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre onMouseOver={[Function]} onTouchEnd={[Function]} onTouchStart={[Function]} - title="Sort" + title="Cannot sort by this column" > <WithStyles(ButtonBase) aria-describedby={null} - className="MuiTableSortLabel-root-95 MuiTableSortLabel-active-96 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" component="span" disableRipple={true} onBlur={[Function]} @@ -2363,17 +2400,17 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre onMouseOver={[Function]} onTouchEnd={[Function]} onTouchStart={[Function]} - title="Sort" + title="Cannot sort by this column" > <ButtonBase aria-describedby={null} centerRipple={false} - className="MuiTableSortLabel-root-95 MuiTableSortLabel-active-96 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="span" @@ -2388,12 +2425,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre onTouchEnd={[Function]} onTouchStart={[Function]} tabIndex="0" - title="Sort" + title="Cannot sort by this column" type="button" > <span aria-describedby={null} - className="MuiButtonBase-root-84 MuiTableSortLabel-root-95 MuiTableSortLabel-active-96 ellipsis" + className="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} @@ -2409,31 +2446,31 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre onTouchStart={[Function]} role="button" tabIndex="0" - title="Sort" + title="Cannot sort by this column" > - Uploaded on + Description <pure(ArrowDownward) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <ArrowDownward - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <WithStyles(SvgIcon) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <SvgIcon - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -2443,7 +2480,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -2465,15 +2502,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <Popper anchorEl={ <span - class="MuiButtonBase-root-84 MuiTableSortLabel-root-95 MuiTableSortLabel-active-96 ellipsis" + class="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" role="button" tabindex="0" - title="Sort" + title="Cannot sort by this column" > - Uploaded on + Description <svg aria-hidden="true" - class="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + class="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -2484,7 +2521,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre </svg> </span> } - className="MuiTooltip-popper-87" + className="MuiTooltip-popper-88" disablePortal={false} id={null} open={false} @@ -2494,213 +2531,799 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre </Tooltip> </WithStyles(Tooltip)> </div> - </div> - <div - className="scrollContainer" - style={ - Object { - "minHeight": 60, - } - } - > <div - className="expandableContainer" - key="0" + className="columnName" + key="2" + style={ + Object { + "width": "20%", + } + } + title="Uploaded on" > - <div - aria-checked={false} - className="tableRow row" - onClick={[Function]} - role="checkbox" - tabIndex={-1} + <WithStyles(Tooltip) + enterDelay={300} + title="Sort" > - <div - className="cell selectionToggle" - > - <WithStyles(Checkbox) - checked={false} - color="primary" - > - <Checkbox - checked={false} - checkedIcon={<pure(CheckBox) />} - classes={ - Object { - "checked": "MuiCheckbox-checked-69", - "colorPrimary": "MuiCheckbox-colorPrimary-72", - "colorSecondary": "MuiCheckbox-colorSecondary-73", - "disabled": "MuiCheckbox-disabled-70", - "indeterminate": "MuiCheckbox-indeterminate-71", - "root": "MuiCheckbox-root-68", - } - } - color="primary" - icon={<pure(CheckBoxOutlineBlank) />} - indeterminate={false} - indeterminateIcon={<pure(IndeterminateCheckBox) />} - > - <WithStyles(WithFormControlContext(SwitchBase)) - checked={false} - checkedIcon={<pure(CheckBox) />} - className="" - classes={ - Object { - "checked": "MuiCheckbox-checked-69", - "disabled": "MuiCheckbox-disabled-70", - "root": "MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72", - } - } - icon={<pure(CheckBoxOutlineBlank) />} - inputProps={ - Object { - "data-indeterminate": false, - } - } - type="checkbox" - > - <WithFormControlContext(SwitchBase) - checked={false} - checkedIcon={<pure(CheckBox) />} - className="" - classes={ - Object { - "checked": "MuiPrivateSwitchBase-checked-75 MuiCheckbox-checked-69", - "disabled": "MuiPrivateSwitchBase-disabled-76 MuiCheckbox-disabled-70", - "input": "MuiPrivateSwitchBase-input-77", - "root": "MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72", - } - } - icon={<pure(CheckBoxOutlineBlank) />} - inputProps={ - Object { - "data-indeterminate": false, - } - } - type="checkbox" - > - <SwitchBase - checked={false} - checkedIcon={<pure(CheckBox) />} - className="" - classes={ - Object { - "checked": "MuiPrivateSwitchBase-checked-75 MuiCheckbox-checked-69", - "disabled": "MuiPrivateSwitchBase-disabled-76 MuiCheckbox-disabled-70", - "input": "MuiPrivateSwitchBase-input-77", - "root": "MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72", - } - } - icon={<pure(CheckBoxOutlineBlank) />} - inputProps={ - Object { - "data-indeterminate": false, - } - } - type="checkbox" - > - <WithStyles(IconButton) - className="MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" - component="span" - onBlur={[Function]} - onFocus={[Function]} - tabIndex={null} - > - <IconButton - className="MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" - classes={ - Object { - "colorInherit": "MuiIconButton-colorInherit-79", - "colorPrimary": "MuiIconButton-colorPrimary-80", - "colorSecondary": "MuiIconButton-colorSecondary-81", - "disabled": "MuiIconButton-disabled-82", - "label": "MuiIconButton-label-83", - "root": "MuiIconButton-root-78", - } - } - color="default" - component="span" - disabled={false} - onBlur={[Function]} - onFocus={[Function]} - tabIndex={null} - > - <WithStyles(ButtonBase) - centerRipple={true} - className="MuiIconButton-root-78 MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" - component="span" - disabled={false} - focusRipple={true} - onBlur={[Function]} - onFocus={[Function]} - tabIndex={null} - > - <ButtonBase - centerRipple={true} - className="MuiIconButton-root-78 MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" - classes={ - Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", - } - } - component="span" - disableRipple={false} - disableTouchRipple={false} - disabled={false} - focusRipple={true} - onBlur={[Function]} - onFocus={[Function]} - tabIndex={null} - type="button" - > - <span - className="MuiButtonBase-root-84 MuiIconButton-root-78 MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" - onBlur={[Function]} - onContextMenu={[Function]} - onFocus={[Function]} - onKeyDown={[Function]} - onKeyUp={[Function]} - onMouseDown={[Function]} - onMouseLeave={[Function]} - onMouseUp={[Function]} - onTouchEnd={[Function]} - onTouchMove={[Function]} - onTouchStart={[Function]} - tabIndex={null} - > - <span - className="MuiIconButton-label-83" - > - <pure(CheckBoxOutlineBlank)> - <CheckBoxOutlineBlank> - <WithStyles(SvgIcon)> - <SvgIcon - classes={ - Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", - } - } - color="inherit" - component="svg" - fontSize="default" - viewBox="0 0 24 24" - > - <svg - aria-hidden="true" - className="MuiSvgIcon-root-59" - focusable="false" - role="presentation" - viewBox="0 0 24 24" - > + <Tooltip + TransitionComponent={[Function]} + classes={ + Object { + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", + } + } + disableFocusListener={false} + disableHoverListener={false} + disableTouchListener={false} + enterDelay={300} + enterTouchDelay={1000} + interactive={false} + leaveDelay={0} + leaveTouchDelay={1500} + placement="bottom" + theme={ + Object { + "breakpoints": Object { + "between": [Function], + "down": [Function], + "keys": Array [ + "xs", + "sm", + "md", + "lg", + "xl", + ], + "only": [Function], + "up": [Function], + "values": Object { + "lg": 1280, + "md": 960, + "sm": 600, + "xl": 1920, + "xs": 0, + }, + "width": [Function], + }, + "direction": "ltr", + "mixins": Object { + "gutters": [Function], + "toolbar": Object { + "@media (min-width:0px) and (orientation: landscape)": Object { + "minHeight": 48, + }, + "@media (min-width:600px)": Object { + "minHeight": 64, + }, + "minHeight": 56, + }, + }, + "overrides": Object {}, + "palette": Object { + "action": Object { + "active": "rgba(0, 0, 0, 0.54)", + "disabled": "rgba(0, 0, 0, 0.26)", + "disabledBackground": "rgba(0, 0, 0, 0.12)", + "hover": "rgba(0, 0, 0, 0.08)", + "hoverOpacity": 0.08, + "selected": "rgba(0, 0, 0, 0.14)", + }, + "augmentColor": [Function], + "background": Object { + "default": "#fafafa", + "paper": "#fff", + }, + "common": Object { + "black": "#000", + "white": "#fff", + }, + "contrastThreshold": 3, + "divider": "rgba(0, 0, 0, 0.12)", + "error": Object { + "contrastText": "#fff", + "dark": "#d32f2f", + "light": "#e57373", + "main": "#f44336", + }, + "getContrastText": [Function], + "grey": Object { + "100": "#f5f5f5", + "200": "#eeeeee", + "300": "#e0e0e0", + "400": "#bdbdbd", + "50": "#fafafa", + "500": "#9e9e9e", + "600": "#757575", + "700": "#616161", + "800": "#424242", + "900": "#212121", + "A100": "#d5d5d5", + "A200": "#aaaaaa", + "A400": "#303030", + "A700": "#616161", + }, + "primary": Object { + "contrastText": "#fff", + "dark": "#303f9f", + "light": "#7986cb", + "main": "#3f51b5", + }, + "secondary": Object { + "contrastText": "#fff", + "dark": "#c51162", + "light": "#ff4081", + "main": "#f50057", + }, + "text": Object { + "disabled": "rgba(0, 0, 0, 0.38)", + "hint": "rgba(0, 0, 0, 0.38)", + "primary": "rgba(0, 0, 0, 0.87)", + "secondary": "rgba(0, 0, 0, 0.54)", + }, + "tonalOffset": 0.2, + "type": "light", + }, + "props": Object {}, + "shadows": Array [ + "none", + "0px 1px 3px 0px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12)", + "0px 1px 5px 0px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12)", + "0px 1px 8px 0px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12)", + "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)", + "0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)", + "0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)", + "0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)", + "0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)", + "0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)", + "0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)", + "0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)", + "0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)", + "0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)", + "0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)", + "0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)", + "0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)", + "0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)", + "0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)", + ], + "shape": Object { + "borderRadius": 4, + }, + "spacing": Object { + "unit": 8, + }, + "transitions": Object { + "create": [Function], + "duration": Object { + "complex": 375, + "enteringScreen": 225, + "leavingScreen": 195, + "short": 250, + "shorter": 200, + "shortest": 150, + "standard": 300, + }, + "easing": Object { + "easeIn": "cubic-bezier(0.4, 0, 1, 1)", + "easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)", + "easeOut": "cubic-bezier(0.0, 0, 0.2, 1)", + "sharp": "cubic-bezier(0.4, 0, 0.6, 1)", + }, + "getAutoHeightDuration": [Function], + }, + "typography": Object { + "body1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "lineHeight": "1.46429em", + }, + "body1Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.5, + }, + "body2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "lineHeight": "1.71429em", + }, + "body2Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "letterSpacing": "0.01071em", + "lineHeight": 1.5, + }, + "button": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "textTransform": "uppercase", + }, + "buttonNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.02857em", + "lineHeight": 1.75, + "textTransform": "uppercase", + }, + "caption": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "lineHeight": "1.375em", + }, + "captionNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.03333em", + "lineHeight": 1.66, + }, + "display1": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "lineHeight": "1.20588em", + }, + "display2": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.8125rem", + "fontWeight": 400, + "lineHeight": "1.13333em", + "marginLeft": "-.02em", + }, + "display3": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.5rem", + "fontWeight": 400, + "letterSpacing": "-.02em", + "lineHeight": "1.30357em", + "marginLeft": "-.02em", + }, + "display4": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "7rem", + "fontWeight": 300, + "letterSpacing": "-.04em", + "lineHeight": "1.14286em", + "marginLeft": "-.04em", + }, + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": 14, + "fontWeightLight": 300, + "fontWeightMedium": 500, + "fontWeightRegular": 400, + "h1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "6rem", + "fontWeight": 300, + "letterSpacing": "-0.01562em", + "lineHeight": 1, + }, + "h2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.75rem", + "fontWeight": 300, + "letterSpacing": "-0.00833em", + "lineHeight": 1, + }, + "h3": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.04, + }, + "h4": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "letterSpacing": "0.00735em", + "lineHeight": 1.17, + }, + "h5": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.33, + }, + "h6": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.25rem", + "fontWeight": 500, + "letterSpacing": "0.0075em", + "lineHeight": 1.6, + }, + "headline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "lineHeight": "1.35417em", + }, + "overline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.08333em", + "lineHeight": 2.66, + "textTransform": "uppercase", + }, + "pxToRem": [Function], + "round": [Function], + "subheading": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "lineHeight": "1.5em", + }, + "subtitle1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.75, + }, + "subtitle2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.00714em", + "lineHeight": 1.57, + }, + "title": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.3125rem", + "fontWeight": 500, + "lineHeight": "1.16667em", + }, + "useNextVariants": false, + }, + "zIndex": Object { + "appBar": 1100, + "drawer": 1200, + "mobileStepper": 1000, + "modal": 1300, + "snackbar": 1400, + "tooltip": 1500, + }, + } + } + title="Sort" + > + <RootRef + rootRef={[Function]} + > + <WithStyles(TableSortLabel) + active={true} + aria-describedby={null} + className="ellipsis" + direction="desc" + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="Sort" + > + <TableSortLabel + IconComponent={[Function]} + active={true} + aria-describedby={null} + className="ellipsis" + classes={ + Object { + "active": "MuiTableSortLabel-active-97", + "icon": "MuiTableSortLabel-icon-98", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-100", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-99", + "root": "MuiTableSortLabel-root-96", + } + } + direction="desc" + hideSortIcon={false} + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="Sort" + > + <WithStyles(ButtonBase) + aria-describedby={null} + className="MuiTableSortLabel-root-96 MuiTableSortLabel-active-97 ellipsis" + component="span" + disableRipple={true} + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="Sort" + > + <ButtonBase + aria-describedby={null} + centerRipple={false} + className="MuiTableSortLabel-root-96 MuiTableSortLabel-active-97 ellipsis" + classes={ + Object { + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", + } + } + component="span" + disableRipple={true} + disableTouchRipple={false} + focusRipple={false} + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + tabIndex="0" + title="Sort" + type="button" + > + <span + aria-describedby={null} + className="MuiButtonBase-root-85 MuiTableSortLabel-root-96 MuiTableSortLabel-active-97 ellipsis" + onBlur={[Function]} + onClick={[Function]} + onContextMenu={[Function]} + onFocus={[Function]} + onKeyDown={[Function]} + onKeyUp={[Function]} + onMouseDown={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onMouseUp={[Function]} + onTouchEnd={[Function]} + onTouchMove={[Function]} + onTouchStart={[Function]} + role="button" + tabIndex="0" + title="Sort" + > + Uploaded on + <pure(ArrowDownward) + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" + > + <ArrowDownward + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" + > + <WithStyles(SvgIcon) + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" + > + <SvgIcon + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" + classes={ + Object { + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", + } + } + color="inherit" + component="svg" + fontSize="default" + viewBox="0 0 24 24" + > + <svg + aria-hidden="true" + className="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" + focusable="false" + role="presentation" + viewBox="0 0 24 24" + > + <path + d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" + /> + </svg> + </SvgIcon> + </WithStyles(SvgIcon)> + </ArrowDownward> + </pure(ArrowDownward)> + </span> + </ButtonBase> + </WithStyles(ButtonBase)> + </TableSortLabel> + </WithStyles(TableSortLabel)> + </RootRef> + <Popper + anchorEl={ + <span + class="MuiButtonBase-root-85 MuiTableSortLabel-root-96 MuiTableSortLabel-active-97 ellipsis" + role="button" + tabindex="0" + title="Sort" + > + Uploaded on + <svg + aria-hidden="true" + class="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" + focusable="false" + role="presentation" + viewBox="0 0 24 24" + > + <path + d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" + /> + </svg> + </span> + } + className="MuiTooltip-popper-88" + disablePortal={false} + id={null} + open={false} + placement="bottom" + transition={true} + /> + </Tooltip> + </WithStyles(Tooltip)> + </div> + </div> + <div + className="scrollContainer" + style={ + Object { + "minHeight": 60, + } + } + > + <div + className="expandableContainer" + key="0" + > + <div + aria-checked={false} + className="tableRow row" + onClick={[Function]} + role="checkbox" + tabIndex={-1} + > + <div + className="cell selectionToggle" + > + <WithStyles(Checkbox) + checked={false} + color="primary" + > + <Checkbox + checked={false} + checkedIcon={<pure(CheckBox) />} + classes={ + Object { + "checked": "MuiCheckbox-checked-70", + "colorPrimary": "MuiCheckbox-colorPrimary-73", + "colorSecondary": "MuiCheckbox-colorSecondary-74", + "disabled": "MuiCheckbox-disabled-71", + "indeterminate": "MuiCheckbox-indeterminate-72", + "root": "MuiCheckbox-root-69", + } + } + color="primary" + icon={<pure(CheckBoxOutlineBlank) />} + indeterminate={false} + indeterminateIcon={<pure(IndeterminateCheckBox) />} + > + <WithStyles(WithFormControlContext(SwitchBase)) + checked={false} + checkedIcon={<pure(CheckBox) />} + className="" + classes={ + Object { + "checked": "MuiCheckbox-checked-70", + "disabled": "MuiCheckbox-disabled-71", + "root": "MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73", + } + } + icon={<pure(CheckBoxOutlineBlank) />} + inputProps={ + Object { + "data-indeterminate": false, + } + } + type="checkbox" + > + <WithFormControlContext(SwitchBase) + checked={false} + checkedIcon={<pure(CheckBox) />} + className="" + classes={ + Object { + "checked": "MuiPrivateSwitchBase-checked-76 MuiCheckbox-checked-70", + "disabled": "MuiPrivateSwitchBase-disabled-77 MuiCheckbox-disabled-71", + "input": "MuiPrivateSwitchBase-input-78", + "root": "MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73", + } + } + icon={<pure(CheckBoxOutlineBlank) />} + inputProps={ + Object { + "data-indeterminate": false, + } + } + type="checkbox" + > + <SwitchBase + checked={false} + checkedIcon={<pure(CheckBox) />} + className="" + classes={ + Object { + "checked": "MuiPrivateSwitchBase-checked-76 MuiCheckbox-checked-70", + "disabled": "MuiPrivateSwitchBase-disabled-77 MuiCheckbox-disabled-71", + "input": "MuiPrivateSwitchBase-input-78", + "root": "MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73", + } + } + icon={<pure(CheckBoxOutlineBlank) />} + inputProps={ + Object { + "data-indeterminate": false, + } + } + type="checkbox" + > + <WithStyles(IconButton) + className="MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" + component="span" + onBlur={[Function]} + onFocus={[Function]} + tabIndex={null} + > + <IconButton + className="MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" + classes={ + Object { + "colorInherit": "MuiIconButton-colorInherit-80", + "colorPrimary": "MuiIconButton-colorPrimary-81", + "colorSecondary": "MuiIconButton-colorSecondary-82", + "disabled": "MuiIconButton-disabled-83", + "label": "MuiIconButton-label-84", + "root": "MuiIconButton-root-79", + } + } + color="default" + component="span" + disabled={false} + onBlur={[Function]} + onFocus={[Function]} + tabIndex={null} + > + <WithStyles(ButtonBase) + centerRipple={true} + className="MuiIconButton-root-79 MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" + component="span" + disabled={false} + focusRipple={true} + onBlur={[Function]} + onFocus={[Function]} + tabIndex={null} + > + <ButtonBase + centerRipple={true} + className="MuiIconButton-root-79 MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" + classes={ + Object { + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", + } + } + component="span" + disableRipple={false} + disableTouchRipple={false} + disabled={false} + focusRipple={true} + onBlur={[Function]} + onFocus={[Function]} + tabIndex={null} + type="button" + > + <span + className="MuiButtonBase-root-85 MuiIconButton-root-79 MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" + onBlur={[Function]} + onContextMenu={[Function]} + onFocus={[Function]} + onKeyDown={[Function]} + onKeyUp={[Function]} + onMouseDown={[Function]} + onMouseLeave={[Function]} + onMouseUp={[Function]} + onTouchEnd={[Function]} + onTouchMove={[Function]} + onTouchStart={[Function]} + tabIndex={null} + > + <span + className="MuiIconButton-label-84" + > + <pure(CheckBoxOutlineBlank)> + <CheckBoxOutlineBlank> + <WithStyles(SvgIcon)> + <SvgIcon + classes={ + Object { + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", + } + } + color="inherit" + component="svg" + fontSize="default" + viewBox="0 0 24 24" + > + <svg + aria-hidden="true" + className="MuiSvgIcon-root-60" + focusable="false" + role="presentation" + viewBox="0 0 24 24" + > <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" /> @@ -2711,7 +3334,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre </pure(CheckBoxOutlineBlank)> <input checked={false} - className="MuiPrivateSwitchBase-input-77" + className="MuiPrivateSwitchBase-input-78" data-indeterminate={false} onChange={[Function]} type="checkbox" @@ -2729,25 +3352,25 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre center={true} classes={ Object { - "child": "MuiTouchRipple-child-128", - "childLeaving": "MuiTouchRipple-childLeaving-129", - "childPulsate": "MuiTouchRipple-childPulsate-130", - "ripple": "MuiTouchRipple-ripple-125", - "ripplePulsate": "MuiTouchRipple-ripplePulsate-127", - "rippleVisible": "MuiTouchRipple-rippleVisible-126", - "root": "MuiTouchRipple-root-124", + "child": "MuiTouchRipple-child-129", + "childLeaving": "MuiTouchRipple-childLeaving-130", + "childPulsate": "MuiTouchRipple-childPulsate-131", + "ripple": "MuiTouchRipple-ripple-126", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-128", + "rippleVisible": "MuiTouchRipple-rippleVisible-127", + "root": "MuiTouchRipple-root-125", } } > <TransitionGroup childFactory={[Function]} - className="MuiTouchRipple-root-124" + className="MuiTouchRipple-root-125" component="span" enter={true} exit={true} > <span - className="MuiTouchRipple-root-124" + className="MuiTouchRipple-root-125" /> </TransitionGroup> </TouchRipple> @@ -2769,10 +3392,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre Array [ Object { "customRenderer": [Function], - "flex": 2, + "flex": 1, "label": "Version name", "sortKey": "name", }, + Object { + "customRenderer": [Function], + "flex": 3, + "label": "Description", + }, Object { "flex": 1, "label": "Uploaded on", @@ -2785,6 +3413,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre "id": "test-pipeline-version-id0", "otherFields": Array [ "test pipeline version name0", + undefined, "-", ], } @@ -2795,31 +3424,928 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre key="0" style={ Object { - "width": "66.66666666666666%", + "width": "20%", } } > - <Link - className="link" - onClick={[Function]} - replace={false} - to="/pipelines/details/pipeline/version/test-pipeline-version-id0?" + <WithStyles(Tooltip) + enterDelay={300} + placement="bottom-start" + title="test pipeline version name0" > - <a - className="link" - href="/pipelines/details/pipeline/version/test-pipeline-version-id0" - onClick={[Function]} + <Tooltip + TransitionComponent={[Function]} + classes={ + Object { + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", + } + } + disableFocusListener={false} + disableHoverListener={false} + disableTouchListener={false} + enterDelay={300} + enterTouchDelay={1000} + interactive={false} + leaveDelay={0} + leaveTouchDelay={1500} + placement="bottom-start" + theme={ + Object { + "breakpoints": Object { + "between": [Function], + "down": [Function], + "keys": Array [ + "xs", + "sm", + "md", + "lg", + "xl", + ], + "only": [Function], + "up": [Function], + "values": Object { + "lg": 1280, + "md": 960, + "sm": 600, + "xl": 1920, + "xs": 0, + }, + "width": [Function], + }, + "direction": "ltr", + "mixins": Object { + "gutters": [Function], + "toolbar": Object { + "@media (min-width:0px) and (orientation: landscape)": Object { + "minHeight": 48, + }, + "@media (min-width:600px)": Object { + "minHeight": 64, + }, + "minHeight": 56, + }, + }, + "overrides": Object {}, + "palette": Object { + "action": Object { + "active": "rgba(0, 0, 0, 0.54)", + "disabled": "rgba(0, 0, 0, 0.26)", + "disabledBackground": "rgba(0, 0, 0, 0.12)", + "hover": "rgba(0, 0, 0, 0.08)", + "hoverOpacity": 0.08, + "selected": "rgba(0, 0, 0, 0.14)", + }, + "augmentColor": [Function], + "background": Object { + "default": "#fafafa", + "paper": "#fff", + }, + "common": Object { + "black": "#000", + "white": "#fff", + }, + "contrastThreshold": 3, + "divider": "rgba(0, 0, 0, 0.12)", + "error": Object { + "contrastText": "#fff", + "dark": "#d32f2f", + "light": "#e57373", + "main": "#f44336", + }, + "getContrastText": [Function], + "grey": Object { + "100": "#f5f5f5", + "200": "#eeeeee", + "300": "#e0e0e0", + "400": "#bdbdbd", + "50": "#fafafa", + "500": "#9e9e9e", + "600": "#757575", + "700": "#616161", + "800": "#424242", + "900": "#212121", + "A100": "#d5d5d5", + "A200": "#aaaaaa", + "A400": "#303030", + "A700": "#616161", + }, + "primary": Object { + "contrastText": "#fff", + "dark": "#303f9f", + "light": "#7986cb", + "main": "#3f51b5", + }, + "secondary": Object { + "contrastText": "#fff", + "dark": "#c51162", + "light": "#ff4081", + "main": "#f50057", + }, + "text": Object { + "disabled": "rgba(0, 0, 0, 0.38)", + "hint": "rgba(0, 0, 0, 0.38)", + "primary": "rgba(0, 0, 0, 0.87)", + "secondary": "rgba(0, 0, 0, 0.54)", + }, + "tonalOffset": 0.2, + "type": "light", + }, + "props": Object {}, + "shadows": Array [ + "none", + "0px 1px 3px 0px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12)", + "0px 1px 5px 0px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12)", + "0px 1px 8px 0px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12)", + "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)", + "0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)", + "0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)", + "0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)", + "0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)", + "0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)", + "0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)", + "0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)", + "0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)", + "0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)", + "0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)", + "0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)", + "0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)", + "0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)", + "0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)", + ], + "shape": Object { + "borderRadius": 4, + }, + "spacing": Object { + "unit": 8, + }, + "transitions": Object { + "create": [Function], + "duration": Object { + "complex": 375, + "enteringScreen": 225, + "leavingScreen": 195, + "short": 250, + "shorter": 200, + "shortest": 150, + "standard": 300, + }, + "easing": Object { + "easeIn": "cubic-bezier(0.4, 0, 1, 1)", + "easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)", + "easeOut": "cubic-bezier(0.0, 0, 0.2, 1)", + "sharp": "cubic-bezier(0.4, 0, 0.6, 1)", + }, + "getAutoHeightDuration": [Function], + }, + "typography": Object { + "body1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "lineHeight": "1.46429em", + }, + "body1Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.5, + }, + "body2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "lineHeight": "1.71429em", + }, + "body2Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "letterSpacing": "0.01071em", + "lineHeight": 1.5, + }, + "button": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "textTransform": "uppercase", + }, + "buttonNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.02857em", + "lineHeight": 1.75, + "textTransform": "uppercase", + }, + "caption": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "lineHeight": "1.375em", + }, + "captionNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.03333em", + "lineHeight": 1.66, + }, + "display1": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "lineHeight": "1.20588em", + }, + "display2": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.8125rem", + "fontWeight": 400, + "lineHeight": "1.13333em", + "marginLeft": "-.02em", + }, + "display3": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.5rem", + "fontWeight": 400, + "letterSpacing": "-.02em", + "lineHeight": "1.30357em", + "marginLeft": "-.02em", + }, + "display4": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "7rem", + "fontWeight": 300, + "letterSpacing": "-.04em", + "lineHeight": "1.14286em", + "marginLeft": "-.04em", + }, + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": 14, + "fontWeightLight": 300, + "fontWeightMedium": 500, + "fontWeightRegular": 400, + "h1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "6rem", + "fontWeight": 300, + "letterSpacing": "-0.01562em", + "lineHeight": 1, + }, + "h2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.75rem", + "fontWeight": 300, + "letterSpacing": "-0.00833em", + "lineHeight": 1, + }, + "h3": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.04, + }, + "h4": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "letterSpacing": "0.00735em", + "lineHeight": 1.17, + }, + "h5": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.33, + }, + "h6": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.25rem", + "fontWeight": 500, + "letterSpacing": "0.0075em", + "lineHeight": 1.6, + }, + "headline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "lineHeight": "1.35417em", + }, + "overline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.08333em", + "lineHeight": 2.66, + "textTransform": "uppercase", + }, + "pxToRem": [Function], + "round": [Function], + "subheading": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "lineHeight": "1.5em", + }, + "subtitle1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.75, + }, + "subtitle2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.00714em", + "lineHeight": 1.57, + }, + "title": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.3125rem", + "fontWeight": 500, + "lineHeight": "1.16667em", + }, + "useNextVariants": false, + }, + "zIndex": Object { + "appBar": 1100, + "drawer": 1200, + "mobileStepper": 1000, + "modal": 1300, + "snackbar": 1400, + "tooltip": 1500, + }, + } + } + title="test pipeline version name0" > - test pipeline version name0 - </a> - </Link> + <RootRef + rootRef={[Function]} + > + <Link + aria-describedby={null} + className="link" + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + replace={false} + title="test pipeline version name0" + to="/pipelines/details/pipeline/version/test-pipeline-version-id0?" + > + <a + aria-describedby={null} + className="link" + href="/pipelines/details/pipeline/version/test-pipeline-version-id0" + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="test pipeline version name0" + > + test pipeline version name0 + </a> + </Link> + </RootRef> + <Popper + anchorEl={ + <a + class="link" + href="/pipelines/details/pipeline/version/test-pipeline-version-id0" + title="test pipeline version name0" + > + test pipeline version name0 + </a> + } + className="MuiTooltip-popper-88" + disablePortal={false} + id={null} + open={false} + placement="bottom-start" + transition={true} + /> + </Tooltip> + </WithStyles(Tooltip)> </div> <div className="cell" key="1" style={ Object { - "width": "33.33333333333333%", + "width": "60%", + } + } + > + <WithStyles(Tooltip) + enterDelay={300} + placement="bottom-start" + title="" + > + <Tooltip + TransitionComponent={[Function]} + classes={ + Object { + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", + } + } + disableFocusListener={false} + disableHoverListener={false} + disableTouchListener={false} + enterDelay={300} + enterTouchDelay={1000} + interactive={false} + leaveDelay={0} + leaveTouchDelay={1500} + placement="bottom-start" + theme={ + Object { + "breakpoints": Object { + "between": [Function], + "down": [Function], + "keys": Array [ + "xs", + "sm", + "md", + "lg", + "xl", + ], + "only": [Function], + "up": [Function], + "values": Object { + "lg": 1280, + "md": 960, + "sm": 600, + "xl": 1920, + "xs": 0, + }, + "width": [Function], + }, + "direction": "ltr", + "mixins": Object { + "gutters": [Function], + "toolbar": Object { + "@media (min-width:0px) and (orientation: landscape)": Object { + "minHeight": 48, + }, + "@media (min-width:600px)": Object { + "minHeight": 64, + }, + "minHeight": 56, + }, + }, + "overrides": Object {}, + "palette": Object { + "action": Object { + "active": "rgba(0, 0, 0, 0.54)", + "disabled": "rgba(0, 0, 0, 0.26)", + "disabledBackground": "rgba(0, 0, 0, 0.12)", + "hover": "rgba(0, 0, 0, 0.08)", + "hoverOpacity": 0.08, + "selected": "rgba(0, 0, 0, 0.14)", + }, + "augmentColor": [Function], + "background": Object { + "default": "#fafafa", + "paper": "#fff", + }, + "common": Object { + "black": "#000", + "white": "#fff", + }, + "contrastThreshold": 3, + "divider": "rgba(0, 0, 0, 0.12)", + "error": Object { + "contrastText": "#fff", + "dark": "#d32f2f", + "light": "#e57373", + "main": "#f44336", + }, + "getContrastText": [Function], + "grey": Object { + "100": "#f5f5f5", + "200": "#eeeeee", + "300": "#e0e0e0", + "400": "#bdbdbd", + "50": "#fafafa", + "500": "#9e9e9e", + "600": "#757575", + "700": "#616161", + "800": "#424242", + "900": "#212121", + "A100": "#d5d5d5", + "A200": "#aaaaaa", + "A400": "#303030", + "A700": "#616161", + }, + "primary": Object { + "contrastText": "#fff", + "dark": "#303f9f", + "light": "#7986cb", + "main": "#3f51b5", + }, + "secondary": Object { + "contrastText": "#fff", + "dark": "#c51162", + "light": "#ff4081", + "main": "#f50057", + }, + "text": Object { + "disabled": "rgba(0, 0, 0, 0.38)", + "hint": "rgba(0, 0, 0, 0.38)", + "primary": "rgba(0, 0, 0, 0.87)", + "secondary": "rgba(0, 0, 0, 0.54)", + }, + "tonalOffset": 0.2, + "type": "light", + }, + "props": Object {}, + "shadows": Array [ + "none", + "0px 1px 3px 0px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12)", + "0px 1px 5px 0px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12)", + "0px 1px 8px 0px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12)", + "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)", + "0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)", + "0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)", + "0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)", + "0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)", + "0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)", + "0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)", + "0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)", + "0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)", + "0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)", + "0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)", + "0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)", + "0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)", + "0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)", + "0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)", + ], + "shape": Object { + "borderRadius": 4, + }, + "spacing": Object { + "unit": 8, + }, + "transitions": Object { + "create": [Function], + "duration": Object { + "complex": 375, + "enteringScreen": 225, + "leavingScreen": 195, + "short": 250, + "shorter": 200, + "shortest": 150, + "standard": 300, + }, + "easing": Object { + "easeIn": "cubic-bezier(0.4, 0, 1, 1)", + "easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)", + "easeOut": "cubic-bezier(0.0, 0, 0.2, 1)", + "sharp": "cubic-bezier(0.4, 0, 0.6, 1)", + }, + "getAutoHeightDuration": [Function], + }, + "typography": Object { + "body1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "lineHeight": "1.46429em", + }, + "body1Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.5, + }, + "body2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "lineHeight": "1.71429em", + }, + "body2Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "letterSpacing": "0.01071em", + "lineHeight": 1.5, + }, + "button": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "textTransform": "uppercase", + }, + "buttonNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.02857em", + "lineHeight": 1.75, + "textTransform": "uppercase", + }, + "caption": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "lineHeight": "1.375em", + }, + "captionNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.03333em", + "lineHeight": 1.66, + }, + "display1": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "lineHeight": "1.20588em", + }, + "display2": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.8125rem", + "fontWeight": 400, + "lineHeight": "1.13333em", + "marginLeft": "-.02em", + }, + "display3": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.5rem", + "fontWeight": 400, + "letterSpacing": "-.02em", + "lineHeight": "1.30357em", + "marginLeft": "-.02em", + }, + "display4": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "7rem", + "fontWeight": 300, + "letterSpacing": "-.04em", + "lineHeight": "1.14286em", + "marginLeft": "-.04em", + }, + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": 14, + "fontWeightLight": 300, + "fontWeightMedium": 500, + "fontWeightRegular": 400, + "h1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "6rem", + "fontWeight": 300, + "letterSpacing": "-0.01562em", + "lineHeight": 1, + }, + "h2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.75rem", + "fontWeight": 300, + "letterSpacing": "-0.00833em", + "lineHeight": 1, + }, + "h3": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.04, + }, + "h4": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "letterSpacing": "0.00735em", + "lineHeight": 1.17, + }, + "h5": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.33, + }, + "h6": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.25rem", + "fontWeight": 500, + "letterSpacing": "0.0075em", + "lineHeight": 1.6, + }, + "headline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "lineHeight": "1.35417em", + }, + "overline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.08333em", + "lineHeight": 2.66, + "textTransform": "uppercase", + }, + "pxToRem": [Function], + "round": [Function], + "subheading": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "lineHeight": "1.5em", + }, + "subtitle1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.75, + }, + "subtitle2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.00714em", + "lineHeight": 1.57, + }, + "title": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.3125rem", + "fontWeight": 500, + "lineHeight": "1.16667em", + }, + "useNextVariants": false, + }, + "zIndex": Object { + "appBar": 1100, + "drawer": 1200, + "mobileStepper": 1000, + "modal": 1300, + "snackbar": 1400, + "tooltip": 1500, + }, + } + } + title="" + > + <RootRef + rootRef={[Function]} + > + <span + aria-describedby={null} + className="" + onBlur={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="" + > + <Description + description="" + forceInline={true} + > + <Markdown + options={ + Object { + "forceInline": true, + "namedCodesToUnicode": Object { + "amp": "&", + "apos": "'", + "gt": ">", + "lt": "<", + "nbsp": " ", + "quot": "“", + }, + "overrides": Object { + "a": Object { + "component": [Function], + }, + }, + "slugify": [Function], + } + } + > + <span + key="outer" + /> + </Markdown> + </Description> + </span> + </RootRef> + <Popper + anchorEl={ + <span + class="" + title="" + > + <span /> + </span> + } + className="MuiTooltip-popper-88" + disablePortal={false} + id={null} + open={false} + placement="bottom-start" + transition={true} + /> + </Tooltip> + </WithStyles(Tooltip)> + </div> + <div + className="cell" + key="2" + style={ + Object { + "width": "20%", } } > @@ -2851,12 +4377,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre checkedIcon={<pure(CheckBox) />} classes={ Object { - "checked": "MuiCheckbox-checked-69", - "colorPrimary": "MuiCheckbox-colorPrimary-72", - "colorSecondary": "MuiCheckbox-colorSecondary-73", - "disabled": "MuiCheckbox-disabled-70", - "indeterminate": "MuiCheckbox-indeterminate-71", - "root": "MuiCheckbox-root-68", + "checked": "MuiCheckbox-checked-70", + "colorPrimary": "MuiCheckbox-colorPrimary-73", + "colorSecondary": "MuiCheckbox-colorSecondary-74", + "disabled": "MuiCheckbox-disabled-71", + "indeterminate": "MuiCheckbox-indeterminate-72", + "root": "MuiCheckbox-root-69", } } color="primary" @@ -2870,9 +4396,9 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre className="" classes={ Object { - "checked": "MuiCheckbox-checked-69", - "disabled": "MuiCheckbox-disabled-70", - "root": "MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72", + "checked": "MuiCheckbox-checked-70", + "disabled": "MuiCheckbox-disabled-71", + "root": "MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -2889,10 +4415,10 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre className="" classes={ Object { - "checked": "MuiPrivateSwitchBase-checked-75 MuiCheckbox-checked-69", - "disabled": "MuiPrivateSwitchBase-disabled-76 MuiCheckbox-disabled-70", - "input": "MuiPrivateSwitchBase-input-77", - "root": "MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72", + "checked": "MuiPrivateSwitchBase-checked-76 MuiCheckbox-checked-70", + "disabled": "MuiPrivateSwitchBase-disabled-77 MuiCheckbox-disabled-71", + "input": "MuiPrivateSwitchBase-input-78", + "root": "MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -2909,10 +4435,10 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre className="" classes={ Object { - "checked": "MuiPrivateSwitchBase-checked-75 MuiCheckbox-checked-69", - "disabled": "MuiPrivateSwitchBase-disabled-76 MuiCheckbox-disabled-70", - "input": "MuiPrivateSwitchBase-input-77", - "root": "MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72", + "checked": "MuiPrivateSwitchBase-checked-76 MuiCheckbox-checked-70", + "disabled": "MuiPrivateSwitchBase-disabled-77 MuiCheckbox-disabled-71", + "input": "MuiPrivateSwitchBase-input-78", + "root": "MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -2924,22 +4450,22 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre type="checkbox" > <WithStyles(IconButton) - className="MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" component="span" onBlur={[Function]} onFocus={[Function]} tabIndex={null} > <IconButton - className="MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-79", - "colorPrimary": "MuiIconButton-colorPrimary-80", - "colorSecondary": "MuiIconButton-colorSecondary-81", - "disabled": "MuiIconButton-disabled-82", - "label": "MuiIconButton-label-83", - "root": "MuiIconButton-root-78", + "colorInherit": "MuiIconButton-colorInherit-80", + "colorPrimary": "MuiIconButton-colorPrimary-81", + "colorSecondary": "MuiIconButton-colorSecondary-82", + "disabled": "MuiIconButton-disabled-83", + "label": "MuiIconButton-label-84", + "root": "MuiIconButton-root-79", } } color="default" @@ -2951,7 +4477,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-78 MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiIconButton-root-79 MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" component="span" disabled={false} focusRipple={true} @@ -2961,12 +4487,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <ButtonBase centerRipple={true} - className="MuiIconButton-root-78 MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiIconButton-root-79 MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="span" @@ -2980,7 +4506,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre type="button" > <span - className="MuiButtonBase-root-84 MuiIconButton-root-78 MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiButtonBase-root-85 MuiIconButton-root-79 MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" onBlur={[Function]} onContextMenu={[Function]} onFocus={[Function]} @@ -2995,7 +4521,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre tabIndex={null} > <span - className="MuiIconButton-label-83" + className="MuiIconButton-label-84" > <pure(CheckBoxOutlineBlank)> <CheckBoxOutlineBlank> @@ -3003,15 +4529,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -3021,7 +4547,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <svg aria-hidden="true" - className="MuiSvgIcon-root-59" + className="MuiSvgIcon-root-60" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -3036,7 +4562,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre </pure(CheckBoxOutlineBlank)> <input checked={false} - className="MuiPrivateSwitchBase-input-77" + className="MuiPrivateSwitchBase-input-78" data-indeterminate={false} onChange={[Function]} type="checkbox" @@ -3054,25 +4580,25 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre center={true} classes={ Object { - "child": "MuiTouchRipple-child-128", - "childLeaving": "MuiTouchRipple-childLeaving-129", - "childPulsate": "MuiTouchRipple-childPulsate-130", - "ripple": "MuiTouchRipple-ripple-125", - "ripplePulsate": "MuiTouchRipple-ripplePulsate-127", - "rippleVisible": "MuiTouchRipple-rippleVisible-126", - "root": "MuiTouchRipple-root-124", + "child": "MuiTouchRipple-child-129", + "childLeaving": "MuiTouchRipple-childLeaving-130", + "childPulsate": "MuiTouchRipple-childPulsate-131", + "ripple": "MuiTouchRipple-ripple-126", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-128", + "rippleVisible": "MuiTouchRipple-rippleVisible-127", + "root": "MuiTouchRipple-root-125", } } > <TransitionGroup childFactory={[Function]} - className="MuiTouchRipple-root-124" + className="MuiTouchRipple-root-125" component="span" enter={true} exit={true} > <span - className="MuiTouchRipple-root-124" + className="MuiTouchRipple-root-125" /> </TransitionGroup> </TouchRipple> @@ -3094,10 +4620,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre Array [ Object { "customRenderer": [Function], - "flex": 2, + "flex": 1, "label": "Version name", "sortKey": "name", }, + Object { + "customRenderer": [Function], + "flex": 3, + "label": "Description", + }, Object { "flex": 1, "label": "Uploaded on", @@ -3110,6 +4641,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre "id": "test-pipeline-version-id1", "otherFields": Array [ "test pipeline version name1", + undefined, "-", ], } @@ -3120,31 +4652,928 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre key="0" style={ Object { - "width": "66.66666666666666%", + "width": "20%", } } > - <Link - className="link" - onClick={[Function]} - replace={false} - to="/pipelines/details/pipeline/version/test-pipeline-version-id1?" + <WithStyles(Tooltip) + enterDelay={300} + placement="bottom-start" + title="test pipeline version name1" > - <a - className="link" - href="/pipelines/details/pipeline/version/test-pipeline-version-id1" - onClick={[Function]} + <Tooltip + TransitionComponent={[Function]} + classes={ + Object { + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", + } + } + disableFocusListener={false} + disableHoverListener={false} + disableTouchListener={false} + enterDelay={300} + enterTouchDelay={1000} + interactive={false} + leaveDelay={0} + leaveTouchDelay={1500} + placement="bottom-start" + theme={ + Object { + "breakpoints": Object { + "between": [Function], + "down": [Function], + "keys": Array [ + "xs", + "sm", + "md", + "lg", + "xl", + ], + "only": [Function], + "up": [Function], + "values": Object { + "lg": 1280, + "md": 960, + "sm": 600, + "xl": 1920, + "xs": 0, + }, + "width": [Function], + }, + "direction": "ltr", + "mixins": Object { + "gutters": [Function], + "toolbar": Object { + "@media (min-width:0px) and (orientation: landscape)": Object { + "minHeight": 48, + }, + "@media (min-width:600px)": Object { + "minHeight": 64, + }, + "minHeight": 56, + }, + }, + "overrides": Object {}, + "palette": Object { + "action": Object { + "active": "rgba(0, 0, 0, 0.54)", + "disabled": "rgba(0, 0, 0, 0.26)", + "disabledBackground": "rgba(0, 0, 0, 0.12)", + "hover": "rgba(0, 0, 0, 0.08)", + "hoverOpacity": 0.08, + "selected": "rgba(0, 0, 0, 0.14)", + }, + "augmentColor": [Function], + "background": Object { + "default": "#fafafa", + "paper": "#fff", + }, + "common": Object { + "black": "#000", + "white": "#fff", + }, + "contrastThreshold": 3, + "divider": "rgba(0, 0, 0, 0.12)", + "error": Object { + "contrastText": "#fff", + "dark": "#d32f2f", + "light": "#e57373", + "main": "#f44336", + }, + "getContrastText": [Function], + "grey": Object { + "100": "#f5f5f5", + "200": "#eeeeee", + "300": "#e0e0e0", + "400": "#bdbdbd", + "50": "#fafafa", + "500": "#9e9e9e", + "600": "#757575", + "700": "#616161", + "800": "#424242", + "900": "#212121", + "A100": "#d5d5d5", + "A200": "#aaaaaa", + "A400": "#303030", + "A700": "#616161", + }, + "primary": Object { + "contrastText": "#fff", + "dark": "#303f9f", + "light": "#7986cb", + "main": "#3f51b5", + }, + "secondary": Object { + "contrastText": "#fff", + "dark": "#c51162", + "light": "#ff4081", + "main": "#f50057", + }, + "text": Object { + "disabled": "rgba(0, 0, 0, 0.38)", + "hint": "rgba(0, 0, 0, 0.38)", + "primary": "rgba(0, 0, 0, 0.87)", + "secondary": "rgba(0, 0, 0, 0.54)", + }, + "tonalOffset": 0.2, + "type": "light", + }, + "props": Object {}, + "shadows": Array [ + "none", + "0px 1px 3px 0px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12)", + "0px 1px 5px 0px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12)", + "0px 1px 8px 0px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12)", + "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)", + "0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)", + "0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)", + "0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)", + "0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)", + "0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)", + "0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)", + "0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)", + "0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)", + "0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)", + "0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)", + "0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)", + "0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)", + "0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)", + "0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)", + ], + "shape": Object { + "borderRadius": 4, + }, + "spacing": Object { + "unit": 8, + }, + "transitions": Object { + "create": [Function], + "duration": Object { + "complex": 375, + "enteringScreen": 225, + "leavingScreen": 195, + "short": 250, + "shorter": 200, + "shortest": 150, + "standard": 300, + }, + "easing": Object { + "easeIn": "cubic-bezier(0.4, 0, 1, 1)", + "easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)", + "easeOut": "cubic-bezier(0.0, 0, 0.2, 1)", + "sharp": "cubic-bezier(0.4, 0, 0.6, 1)", + }, + "getAutoHeightDuration": [Function], + }, + "typography": Object { + "body1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "lineHeight": "1.46429em", + }, + "body1Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.5, + }, + "body2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "lineHeight": "1.71429em", + }, + "body2Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "letterSpacing": "0.01071em", + "lineHeight": 1.5, + }, + "button": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "textTransform": "uppercase", + }, + "buttonNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.02857em", + "lineHeight": 1.75, + "textTransform": "uppercase", + }, + "caption": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "lineHeight": "1.375em", + }, + "captionNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.03333em", + "lineHeight": 1.66, + }, + "display1": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "lineHeight": "1.20588em", + }, + "display2": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.8125rem", + "fontWeight": 400, + "lineHeight": "1.13333em", + "marginLeft": "-.02em", + }, + "display3": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.5rem", + "fontWeight": 400, + "letterSpacing": "-.02em", + "lineHeight": "1.30357em", + "marginLeft": "-.02em", + }, + "display4": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "7rem", + "fontWeight": 300, + "letterSpacing": "-.04em", + "lineHeight": "1.14286em", + "marginLeft": "-.04em", + }, + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": 14, + "fontWeightLight": 300, + "fontWeightMedium": 500, + "fontWeightRegular": 400, + "h1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "6rem", + "fontWeight": 300, + "letterSpacing": "-0.01562em", + "lineHeight": 1, + }, + "h2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.75rem", + "fontWeight": 300, + "letterSpacing": "-0.00833em", + "lineHeight": 1, + }, + "h3": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.04, + }, + "h4": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "letterSpacing": "0.00735em", + "lineHeight": 1.17, + }, + "h5": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.33, + }, + "h6": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.25rem", + "fontWeight": 500, + "letterSpacing": "0.0075em", + "lineHeight": 1.6, + }, + "headline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "lineHeight": "1.35417em", + }, + "overline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.08333em", + "lineHeight": 2.66, + "textTransform": "uppercase", + }, + "pxToRem": [Function], + "round": [Function], + "subheading": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "lineHeight": "1.5em", + }, + "subtitle1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.75, + }, + "subtitle2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.00714em", + "lineHeight": 1.57, + }, + "title": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.3125rem", + "fontWeight": 500, + "lineHeight": "1.16667em", + }, + "useNextVariants": false, + }, + "zIndex": Object { + "appBar": 1100, + "drawer": 1200, + "mobileStepper": 1000, + "modal": 1300, + "snackbar": 1400, + "tooltip": 1500, + }, + } + } + title="test pipeline version name1" + > + <RootRef + rootRef={[Function]} + > + <Link + aria-describedby={null} + className="link" + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + replace={false} + title="test pipeline version name1" + to="/pipelines/details/pipeline/version/test-pipeline-version-id1?" + > + <a + aria-describedby={null} + className="link" + href="/pipelines/details/pipeline/version/test-pipeline-version-id1" + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="test pipeline version name1" + > + test pipeline version name1 + </a> + </Link> + </RootRef> + <Popper + anchorEl={ + <a + class="link" + href="/pipelines/details/pipeline/version/test-pipeline-version-id1" + title="test pipeline version name1" + > + test pipeline version name1 + </a> + } + className="MuiTooltip-popper-88" + disablePortal={false} + id={null} + open={false} + placement="bottom-start" + transition={true} + /> + </Tooltip> + </WithStyles(Tooltip)> + </div> + <div + className="cell" + key="1" + style={ + Object { + "width": "60%", + } + } + > + <WithStyles(Tooltip) + enterDelay={300} + placement="bottom-start" + title="" + > + <Tooltip + TransitionComponent={[Function]} + classes={ + Object { + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", + } + } + disableFocusListener={false} + disableHoverListener={false} + disableTouchListener={false} + enterDelay={300} + enterTouchDelay={1000} + interactive={false} + leaveDelay={0} + leaveTouchDelay={1500} + placement="bottom-start" + theme={ + Object { + "breakpoints": Object { + "between": [Function], + "down": [Function], + "keys": Array [ + "xs", + "sm", + "md", + "lg", + "xl", + ], + "only": [Function], + "up": [Function], + "values": Object { + "lg": 1280, + "md": 960, + "sm": 600, + "xl": 1920, + "xs": 0, + }, + "width": [Function], + }, + "direction": "ltr", + "mixins": Object { + "gutters": [Function], + "toolbar": Object { + "@media (min-width:0px) and (orientation: landscape)": Object { + "minHeight": 48, + }, + "@media (min-width:600px)": Object { + "minHeight": 64, + }, + "minHeight": 56, + }, + }, + "overrides": Object {}, + "palette": Object { + "action": Object { + "active": "rgba(0, 0, 0, 0.54)", + "disabled": "rgba(0, 0, 0, 0.26)", + "disabledBackground": "rgba(0, 0, 0, 0.12)", + "hover": "rgba(0, 0, 0, 0.08)", + "hoverOpacity": 0.08, + "selected": "rgba(0, 0, 0, 0.14)", + }, + "augmentColor": [Function], + "background": Object { + "default": "#fafafa", + "paper": "#fff", + }, + "common": Object { + "black": "#000", + "white": "#fff", + }, + "contrastThreshold": 3, + "divider": "rgba(0, 0, 0, 0.12)", + "error": Object { + "contrastText": "#fff", + "dark": "#d32f2f", + "light": "#e57373", + "main": "#f44336", + }, + "getContrastText": [Function], + "grey": Object { + "100": "#f5f5f5", + "200": "#eeeeee", + "300": "#e0e0e0", + "400": "#bdbdbd", + "50": "#fafafa", + "500": "#9e9e9e", + "600": "#757575", + "700": "#616161", + "800": "#424242", + "900": "#212121", + "A100": "#d5d5d5", + "A200": "#aaaaaa", + "A400": "#303030", + "A700": "#616161", + }, + "primary": Object { + "contrastText": "#fff", + "dark": "#303f9f", + "light": "#7986cb", + "main": "#3f51b5", + }, + "secondary": Object { + "contrastText": "#fff", + "dark": "#c51162", + "light": "#ff4081", + "main": "#f50057", + }, + "text": Object { + "disabled": "rgba(0, 0, 0, 0.38)", + "hint": "rgba(0, 0, 0, 0.38)", + "primary": "rgba(0, 0, 0, 0.87)", + "secondary": "rgba(0, 0, 0, 0.54)", + }, + "tonalOffset": 0.2, + "type": "light", + }, + "props": Object {}, + "shadows": Array [ + "none", + "0px 1px 3px 0px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12)", + "0px 1px 5px 0px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12)", + "0px 1px 8px 0px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12)", + "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)", + "0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)", + "0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)", + "0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)", + "0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)", + "0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)", + "0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)", + "0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)", + "0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)", + "0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)", + "0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)", + "0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)", + "0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)", + "0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)", + "0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)", + ], + "shape": Object { + "borderRadius": 4, + }, + "spacing": Object { + "unit": 8, + }, + "transitions": Object { + "create": [Function], + "duration": Object { + "complex": 375, + "enteringScreen": 225, + "leavingScreen": 195, + "short": 250, + "shorter": 200, + "shortest": 150, + "standard": 300, + }, + "easing": Object { + "easeIn": "cubic-bezier(0.4, 0, 1, 1)", + "easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)", + "easeOut": "cubic-bezier(0.0, 0, 0.2, 1)", + "sharp": "cubic-bezier(0.4, 0, 0.6, 1)", + }, + "getAutoHeightDuration": [Function], + }, + "typography": Object { + "body1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "lineHeight": "1.46429em", + }, + "body1Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.5, + }, + "body2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "lineHeight": "1.71429em", + }, + "body2Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "letterSpacing": "0.01071em", + "lineHeight": 1.5, + }, + "button": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "textTransform": "uppercase", + }, + "buttonNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.02857em", + "lineHeight": 1.75, + "textTransform": "uppercase", + }, + "caption": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "lineHeight": "1.375em", + }, + "captionNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.03333em", + "lineHeight": 1.66, + }, + "display1": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "lineHeight": "1.20588em", + }, + "display2": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.8125rem", + "fontWeight": 400, + "lineHeight": "1.13333em", + "marginLeft": "-.02em", + }, + "display3": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.5rem", + "fontWeight": 400, + "letterSpacing": "-.02em", + "lineHeight": "1.30357em", + "marginLeft": "-.02em", + }, + "display4": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "7rem", + "fontWeight": 300, + "letterSpacing": "-.04em", + "lineHeight": "1.14286em", + "marginLeft": "-.04em", + }, + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": 14, + "fontWeightLight": 300, + "fontWeightMedium": 500, + "fontWeightRegular": 400, + "h1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "6rem", + "fontWeight": 300, + "letterSpacing": "-0.01562em", + "lineHeight": 1, + }, + "h2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.75rem", + "fontWeight": 300, + "letterSpacing": "-0.00833em", + "lineHeight": 1, + }, + "h3": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.04, + }, + "h4": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "letterSpacing": "0.00735em", + "lineHeight": 1.17, + }, + "h5": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.33, + }, + "h6": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.25rem", + "fontWeight": 500, + "letterSpacing": "0.0075em", + "lineHeight": 1.6, + }, + "headline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "lineHeight": "1.35417em", + }, + "overline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.08333em", + "lineHeight": 2.66, + "textTransform": "uppercase", + }, + "pxToRem": [Function], + "round": [Function], + "subheading": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "lineHeight": "1.5em", + }, + "subtitle1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.75, + }, + "subtitle2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.00714em", + "lineHeight": 1.57, + }, + "title": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.3125rem", + "fontWeight": 500, + "lineHeight": "1.16667em", + }, + "useNextVariants": false, + }, + "zIndex": Object { + "appBar": 1100, + "drawer": 1200, + "mobileStepper": 1000, + "modal": 1300, + "snackbar": 1400, + "tooltip": 1500, + }, + } + } + title="" > - test pipeline version name1 - </a> - </Link> + <RootRef + rootRef={[Function]} + > + <span + aria-describedby={null} + className="" + onBlur={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="" + > + <Description + description="" + forceInline={true} + > + <Markdown + options={ + Object { + "forceInline": true, + "namedCodesToUnicode": Object { + "amp": "&", + "apos": "'", + "gt": ">", + "lt": "<", + "nbsp": " ", + "quot": "“", + }, + "overrides": Object { + "a": Object { + "component": [Function], + }, + }, + "slugify": [Function], + } + } + > + <span + key="outer" + /> + </Markdown> + </Description> + </span> + </RootRef> + <Popper + anchorEl={ + <span + class="" + title="" + > + <span /> + </span> + } + className="MuiTooltip-popper-88" + disablePortal={false} + id={null} + open={false} + placement="bottom-start" + transition={true} + /> + </Tooltip> + </WithStyles(Tooltip)> </div> <div className="cell" - key="1" + key="2" style={ Object { - "width": "33.33333333333333%", + "width": "20%", } } > @@ -3224,13 +5653,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <WithFormControlContext(Select) classes={ Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", } } input={ @@ -3247,13 +5676,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre autoWidth={false} classes={ Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", } } displayEmpty={false} @@ -3316,13 +5745,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", }, "displayEmpty": false, "multiple": false, @@ -3340,19 +5769,19 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <Input classes={ Object { - "disabled": "MuiInput-disabled-110", - "error": "MuiInput-error-112", - "focused": "MuiInput-focused-109", - "formControl": "MuiInput-formControl-108", - "fullWidth": "MuiInput-fullWidth-114", - "input": "MuiInput-input-115", - "inputMarginDense": "MuiInput-inputMarginDense-116", - "inputMultiline": "MuiInput-inputMultiline-117", - "inputType": "MuiInput-inputType-118", - "inputTypeSearch": "MuiInput-inputTypeSearch-119", - "multiline": "MuiInput-multiline-113", - "root": "MuiInput-root-107", - "underline": "MuiInput-underline-111", + "disabled": "MuiInput-disabled-111", + "error": "MuiInput-error-113", + "focused": "MuiInput-focused-110", + "formControl": "MuiInput-formControl-109", + "fullWidth": "MuiInput-fullWidth-115", + "input": "MuiInput-input-116", + "inputMarginDense": "MuiInput-inputMarginDense-117", + "inputMultiline": "MuiInput-inputMultiline-118", + "inputType": "MuiInput-inputType-119", + "inputTypeSearch": "MuiInput-inputTypeSearch-120", + "multiline": "MuiInput-multiline-114", + "root": "MuiInput-root-108", + "underline": "MuiInput-underline-112", } } disableUnderline={true} @@ -3386,13 +5815,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", }, "displayEmpty": false, "multiple": false, @@ -3410,18 +5839,18 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <WithStyles(WithFormControlContext(InputBase)) classes={ Object { - "disabled": "MuiInput-disabled-110", - "error": "MuiInput-error-112", - "focused": "MuiInput-focused-109", - "formControl": "MuiInput-formControl-108", - "fullWidth": "MuiInput-fullWidth-114", - "input": "MuiInput-input-115", - "inputMarginDense": "MuiInput-inputMarginDense-116", - "inputMultiline": "MuiInput-inputMultiline-117", - "inputType": "MuiInput-inputType-118", - "inputTypeSearch": "MuiInput-inputTypeSearch-119", - "multiline": "MuiInput-multiline-113", - "root": "MuiInput-root-107", + "disabled": "MuiInput-disabled-111", + "error": "MuiInput-error-113", + "focused": "MuiInput-focused-110", + "formControl": "MuiInput-formControl-109", + "fullWidth": "MuiInput-fullWidth-115", + "input": "MuiInput-input-116", + "inputMarginDense": "MuiInput-inputMarginDense-117", + "inputMultiline": "MuiInput-inputMultiline-118", + "inputType": "MuiInput-inputType-119", + "inputTypeSearch": "MuiInput-inputTypeSearch-120", + "multiline": "MuiInput-multiline-114", + "root": "MuiInput-root-108", "underline": null, } } @@ -3456,13 +5885,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", }, "displayEmpty": false, "multiple": false, @@ -3484,21 +5913,21 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre Object { "adornedEnd": "MuiInputBase-adornedEnd-41", "adornedStart": "MuiInputBase-adornedStart-40", - "disabled": "MuiInputBase-disabled-39 MuiInput-disabled-110", - "error": "MuiInputBase-error-42 MuiInput-error-112", - "focused": "MuiInputBase-focused-38 MuiInput-focused-109", - "formControl": "MuiInputBase-formControl-37 MuiInput-formControl-108", - "fullWidth": "MuiInputBase-fullWidth-45 MuiInput-fullWidth-114", - "input": "MuiInputBase-input-46 MuiInput-input-115", + "disabled": "MuiInputBase-disabled-39 MuiInput-disabled-111", + "error": "MuiInputBase-error-42 MuiInput-error-113", + "focused": "MuiInputBase-focused-38 MuiInput-focused-110", + "formControl": "MuiInputBase-formControl-37 MuiInput-formControl-109", + "fullWidth": "MuiInputBase-fullWidth-45 MuiInput-fullWidth-115", + "input": "MuiInputBase-input-46 MuiInput-input-116", "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-52", "inputAdornedStart": "MuiInputBase-inputAdornedStart-51", - "inputMarginDense": "MuiInputBase-inputMarginDense-47 MuiInput-inputMarginDense-116", - "inputMultiline": "MuiInputBase-inputMultiline-48 MuiInput-inputMultiline-117", - "inputType": "MuiInputBase-inputType-49 MuiInput-inputType-118", - "inputTypeSearch": "MuiInputBase-inputTypeSearch-50 MuiInput-inputTypeSearch-119", + "inputMarginDense": "MuiInputBase-inputMarginDense-47 MuiInput-inputMarginDense-117", + "inputMultiline": "MuiInputBase-inputMultiline-48 MuiInput-inputMultiline-118", + "inputType": "MuiInputBase-inputType-49 MuiInput-inputType-119", + "inputTypeSearch": "MuiInputBase-inputTypeSearch-50 MuiInput-inputTypeSearch-120", "marginDense": "MuiInputBase-marginDense-43", - "multiline": "MuiInputBase-multiline-44 MuiInput-multiline-113", - "root": "MuiInputBase-root-36 MuiInput-root-107", + "multiline": "MuiInputBase-multiline-44 MuiInput-multiline-114", + "root": "MuiInputBase-root-36 MuiInput-root-108", } } fullWidth={false} @@ -3532,13 +5961,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", }, "displayEmpty": false, "multiple": false, @@ -3560,21 +5989,21 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre Object { "adornedEnd": "MuiInputBase-adornedEnd-41", "adornedStart": "MuiInputBase-adornedStart-40", - "disabled": "MuiInputBase-disabled-39 MuiInput-disabled-110", - "error": "MuiInputBase-error-42 MuiInput-error-112", - "focused": "MuiInputBase-focused-38 MuiInput-focused-109", - "formControl": "MuiInputBase-formControl-37 MuiInput-formControl-108", - "fullWidth": "MuiInputBase-fullWidth-45 MuiInput-fullWidth-114", - "input": "MuiInputBase-input-46 MuiInput-input-115", + "disabled": "MuiInputBase-disabled-39 MuiInput-disabled-111", + "error": "MuiInputBase-error-42 MuiInput-error-113", + "focused": "MuiInputBase-focused-38 MuiInput-focused-110", + "formControl": "MuiInputBase-formControl-37 MuiInput-formControl-109", + "fullWidth": "MuiInputBase-fullWidth-45 MuiInput-fullWidth-115", + "input": "MuiInputBase-input-46 MuiInput-input-116", "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-52", "inputAdornedStart": "MuiInputBase-inputAdornedStart-51", - "inputMarginDense": "MuiInputBase-inputMarginDense-47 MuiInput-inputMarginDense-116", - "inputMultiline": "MuiInputBase-inputMultiline-48 MuiInput-inputMultiline-117", - "inputType": "MuiInputBase-inputType-49 MuiInput-inputType-118", - "inputTypeSearch": "MuiInputBase-inputTypeSearch-50 MuiInput-inputTypeSearch-119", + "inputMarginDense": "MuiInputBase-inputMarginDense-47 MuiInput-inputMarginDense-117", + "inputMultiline": "MuiInputBase-inputMultiline-48 MuiInput-inputMultiline-118", + "inputType": "MuiInputBase-inputType-49 MuiInput-inputType-119", + "inputTypeSearch": "MuiInputBase-inputTypeSearch-50 MuiInput-inputTypeSearch-120", "marginDense": "MuiInputBase-marginDense-43", - "multiline": "MuiInputBase-multiline-44 MuiInput-multiline-113", - "root": "MuiInputBase-root-36 MuiInput-root-107", + "multiline": "MuiInputBase-multiline-44 MuiInput-multiline-114", + "root": "MuiInputBase-root-36 MuiInput-root-108", } } fullWidth={false} @@ -3608,13 +6037,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", }, "displayEmpty": false, "multiple": false, @@ -3648,23 +6077,23 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre value={10} > <div - className="MuiInputBase-root-36 MuiInput-root-107 MuiInputBase-formControl-37 MuiInput-formControl-108" + className="MuiInputBase-root-36 MuiInput-root-108 MuiInputBase-formControl-37 MuiInput-formControl-109" onClick={[Function]} > <SelectInput IconComponent={[Function]} aria-invalid={false} autoWidth={false} - className="MuiInputBase-input-46 MuiInput-input-115" + className="MuiInputBase-input-46 MuiInput-input-116" classes={ Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", } } disabled={false} @@ -3679,12 +6108,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre variant="standard" > <div - className="MuiSelect-root-100" + className="MuiSelect-root-101" > <div aria-haspopup="true" aria-pressed="false" - className="MuiSelect-select-101 MuiSelect-selectMenu-104 MuiInputBase-input-46 MuiInput-input-115" + className="MuiSelect-select-102 MuiSelect-selectMenu-105 MuiInputBase-input-46 MuiInput-input-116" onBlur={[Function]} onClick={[Function]} onFocus={[Function]} @@ -3699,27 +6128,27 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre value={10} /> <pure(ArrowDropDown) - className="MuiSelect-icon-106" + className="MuiSelect-icon-107" > <ArrowDropDown - className="MuiSelect-icon-106" + className="MuiSelect-icon-107" > <WithStyles(SvgIcon) - className="MuiSelect-icon-106" + className="MuiSelect-icon-107" > <SvgIcon - className="MuiSelect-icon-106" + className="MuiSelect-icon-107" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -3729,7 +6158,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiSelect-icon-106" + className="MuiSvgIcon-root-60 MuiSelect-icon-107" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -3745,6 +6174,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <WithStyles(Menu) MenuListProps={ Object { + "disableListWrap": true, "role": "listbox", } } @@ -3759,7 +6189,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-101 MuiSelect-selectMenu-104 MuiInputBase-input-46 MuiInput-input-115" + class="MuiSelect-select-102 MuiSelect-selectMenu-105 MuiInputBase-input-46 MuiInput-input-116" role="button" tabindex="0" > @@ -3773,6 +6203,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <Menu MenuListProps={ Object { + "disableListWrap": true, "role": "listbox", } } @@ -3787,7 +6218,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-101 MuiSelect-selectMenu-104 MuiInputBase-input-46 MuiInput-input-115" + class="MuiSelect-select-102 MuiSelect-selectMenu-105 MuiInputBase-input-46 MuiInput-input-116" role="button" tabindex="0" > @@ -3796,7 +6227,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre } classes={ Object { - "paper": "MuiMenu-paper-120", + "paper": "MuiMenu-paper-121", } } disableAutoFocusItem={false} @@ -4001,7 +6432,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -4171,7 +6602,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre PaperProps={ Object { "classes": Object { - "root": "MuiMenu-paper-120", + "root": "MuiMenu-paper-121", }, "style": Object { "minWidth": null, @@ -4182,7 +6613,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-101 MuiSelect-selectMenu-104 MuiInputBase-input-46 MuiInput-input-115" + class="MuiSelect-select-102 MuiSelect-selectMenu-105 MuiInputBase-input-46 MuiInput-input-116" role="button" tabindex="0" > @@ -4212,7 +6643,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre PaperProps={ Object { "classes": Object { - "root": "MuiMenu-paper-120", + "root": "MuiMenu-paper-121", }, "style": Object { "minWidth": null, @@ -4224,7 +6655,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-101 MuiSelect-selectMenu-104 MuiInputBase-input-46 MuiInput-input-115" + class="MuiSelect-select-102 MuiSelect-selectMenu-105 MuiInputBase-input-46 MuiInput-input-116" role="button" tabindex="0" > @@ -4240,7 +6671,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre anchorReference="anchorEl" classes={ Object { - "paper": "MuiPopover-paper-121", + "paper": "MuiPopover-paper-122", } } elevation={8} @@ -4278,10 +6709,11 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre } classes={ Object { - "hidden": "MuiModal-hidden-123", - "root": "MuiModal-root-122", + "hidden": "MuiModal-hidden-124", + "root": "MuiModal-root-123", } } + closeAfterTransition={false} container={<body />} disableAutoFocus={false} disableBackdropClick={false} @@ -4330,12 +6762,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <IconButton classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-79", - "colorPrimary": "MuiIconButton-colorPrimary-80", - "colorSecondary": "MuiIconButton-colorSecondary-81", - "disabled": "MuiIconButton-disabled-82", - "label": "MuiIconButton-label-83", - "root": "MuiIconButton-root-78", + "colorInherit": "MuiIconButton-colorInherit-80", + "colorPrimary": "MuiIconButton-colorPrimary-81", + "colorSecondary": "MuiIconButton-colorSecondary-82", + "disabled": "MuiIconButton-disabled-83", + "label": "MuiIconButton-label-84", + "root": "MuiIconButton-root-79", } } color="default" @@ -4344,19 +6776,19 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-78 MuiIconButton-disabled-82" + className="MuiIconButton-root-79 MuiIconButton-disabled-83" disabled={true} focusRipple={true} onClick={[Function]} > <ButtonBase centerRipple={true} - className="MuiIconButton-root-78 MuiIconButton-disabled-82" + className="MuiIconButton-root-79 MuiIconButton-disabled-83" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="button" @@ -4369,7 +6801,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre type="button" > <button - className="MuiButtonBase-root-84 MuiButtonBase-disabled-85 MuiIconButton-root-78 MuiIconButton-disabled-82" + className="MuiButtonBase-root-85 MuiButtonBase-disabled-86 MuiIconButton-root-79 MuiIconButton-disabled-83" disabled={true} onBlur={[Function]} onClick={[Function]} @@ -4387,7 +6819,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre type="button" > <span - className="MuiIconButton-label-83" + className="MuiIconButton-label-84" > <pure(ChevronLeftIcon)> <ChevronLeftIcon> @@ -4395,15 +6827,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -4413,7 +6845,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <svg aria-hidden="true" - className="MuiSvgIcon-root-59" + className="MuiSvgIcon-root-60" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -4443,12 +6875,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <IconButton classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-79", - "colorPrimary": "MuiIconButton-colorPrimary-80", - "colorSecondary": "MuiIconButton-colorSecondary-81", - "disabled": "MuiIconButton-disabled-82", - "label": "MuiIconButton-label-83", - "root": "MuiIconButton-root-78", + "colorInherit": "MuiIconButton-colorInherit-80", + "colorPrimary": "MuiIconButton-colorPrimary-81", + "colorSecondary": "MuiIconButton-colorSecondary-82", + "disabled": "MuiIconButton-disabled-83", + "label": "MuiIconButton-label-84", + "root": "MuiIconButton-root-79", } } color="default" @@ -4457,19 +6889,19 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-78 MuiIconButton-disabled-82" + className="MuiIconButton-root-79 MuiIconButton-disabled-83" disabled={true} focusRipple={true} onClick={[Function]} > <ButtonBase centerRipple={true} - className="MuiIconButton-root-78 MuiIconButton-disabled-82" + className="MuiIconButton-root-79 MuiIconButton-disabled-83" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="button" @@ -4482,7 +6914,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre type="button" > <button - className="MuiButtonBase-root-84 MuiButtonBase-disabled-85 MuiIconButton-root-78 MuiIconButton-disabled-82" + className="MuiButtonBase-root-85 MuiButtonBase-disabled-86 MuiIconButton-root-79 MuiIconButton-disabled-83" disabled={true} onBlur={[Function]} onClick={[Function]} @@ -4500,7 +6932,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre type="button" > <span - className="MuiIconButton-label-83" + className="MuiIconButton-label-84" > <pure(ChevronRightIcon)> <ChevronRightIcon> @@ -4508,15 +6940,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -4526,7 +6958,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by cre > <svg aria-hidden="true" - className="MuiSvgIcon-root-59" + className="MuiSvgIcon-root-60" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -4574,10 +7006,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip Array [ Object { "customRenderer": [Function], - "flex": 2, + "flex": 1, "label": "Version name", "sortKey": "name", }, + Object { + "customRenderer": [Function], + "flex": 3, + "label": "Description", + }, Object { "flex": 1, "label": "Uploaded on", @@ -4594,6 +7031,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip "id": "test-pipeline-version-id0", "otherFields": Array [ "test pipeline version name0", + undefined, "-", ], }, @@ -4601,6 +7039,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip "id": "test-pipeline-version-id1", "otherFields": Array [ "test pipeline version name1", + undefined, "-", ], }, @@ -4608,6 +7047,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip "id": "test-pipeline-version-id2", "otherFields": Array [ "test pipeline version name2", + undefined, "-", ], }, @@ -4632,7 +7072,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -4643,7 +7083,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -4669,7 +7109,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -4680,7 +7120,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -4717,10 +7157,10 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="filterBox" classes={ Object { - "fullWidth": "MuiFormControl-fullWidth-144", - "marginDense": "MuiFormControl-marginDense-143", - "marginNormal": "MuiFormControl-marginNormal-142", - "root": "MuiFormControl-root-141", + "fullWidth": "MuiFormControl-fullWidth-145", + "marginDense": "MuiFormControl-marginDense-144", + "marginNormal": "MuiFormControl-marginNormal-143", + "root": "MuiFormControl-root-142", } } component="div" @@ -4740,7 +7180,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip variant="outlined" > <div - className="MuiFormControl-root-141 filterBox" + className="MuiFormControl-root-142 filterBox" spellCheck={false} style={ Object { @@ -4761,17 +7201,17 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <WithFormControlContext(InputLabel) classes={ Object { - "animated": "MuiInputLabel-animated-153", - "disabled": "MuiInputLabel-disabled-147", - "error": "MuiInputLabel-error-148", - "filled": "MuiInputLabel-filled-154", - "focused": "MuiInputLabel-focused-146", - "formControl": "MuiInputLabel-formControl-150", - "marginDense": "MuiInputLabel-marginDense-151", - "outlined": "MuiInputLabel-outlined-155", - "required": "MuiInputLabel-required-149", - "root": "MuiInputLabel-root-145 noMargin", - "shrink": "MuiInputLabel-shrink-152", + "animated": "MuiInputLabel-animated-154", + "disabled": "MuiInputLabel-disabled-148", + "error": "MuiInputLabel-error-149", + "filled": "MuiInputLabel-filled-155", + "focused": "MuiInputLabel-focused-147", + "formControl": "MuiInputLabel-formControl-151", + "marginDense": "MuiInputLabel-marginDense-152", + "outlined": "MuiInputLabel-outlined-156", + "required": "MuiInputLabel-required-150", + "root": "MuiInputLabel-root-146 noMargin", + "shrink": "MuiInputLabel-shrink-153", } } htmlFor="tableFilterBox" @@ -4779,17 +7219,17 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <InputLabel classes={ Object { - "animated": "MuiInputLabel-animated-153", - "disabled": "MuiInputLabel-disabled-147", - "error": "MuiInputLabel-error-148", - "filled": "MuiInputLabel-filled-154", - "focused": "MuiInputLabel-focused-146", - "formControl": "MuiInputLabel-formControl-150", - "marginDense": "MuiInputLabel-marginDense-151", - "outlined": "MuiInputLabel-outlined-155", - "required": "MuiInputLabel-required-149", - "root": "MuiInputLabel-root-145 noMargin", - "shrink": "MuiInputLabel-shrink-152", + "animated": "MuiInputLabel-animated-154", + "disabled": "MuiInputLabel-disabled-148", + "error": "MuiInputLabel-error-149", + "filled": "MuiInputLabel-filled-155", + "focused": "MuiInputLabel-focused-147", + "formControl": "MuiInputLabel-formControl-151", + "marginDense": "MuiInputLabel-marginDense-152", + "outlined": "MuiInputLabel-outlined-156", + "required": "MuiInputLabel-required-150", + "root": "MuiInputLabel-root-146 noMargin", + "shrink": "MuiInputLabel-shrink-153", } } disableAnimation={false} @@ -4812,45 +7252,45 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } > <WithStyles(WithFormControlContext(FormLabel)) - className="MuiInputLabel-root-145 noMargin MuiInputLabel-formControl-150 MuiInputLabel-animated-153 MuiInputLabel-shrink-152 MuiInputLabel-outlined-155" + className="MuiInputLabel-root-146 noMargin MuiInputLabel-formControl-151 MuiInputLabel-animated-154 MuiInputLabel-shrink-153 MuiInputLabel-outlined-156" classes={ Object { - "disabled": "MuiInputLabel-disabled-147", - "error": "MuiInputLabel-error-148", - "focused": "MuiInputLabel-focused-146", - "required": "MuiInputLabel-required-149", + "disabled": "MuiInputLabel-disabled-148", + "error": "MuiInputLabel-error-149", + "focused": "MuiInputLabel-focused-147", + "required": "MuiInputLabel-required-150", } } data-shrink={true} htmlFor="tableFilterBox" > <WithFormControlContext(FormLabel) - className="MuiInputLabel-root-145 noMargin MuiInputLabel-formControl-150 MuiInputLabel-animated-153 MuiInputLabel-shrink-152 MuiInputLabel-outlined-155" + className="MuiInputLabel-root-146 noMargin MuiInputLabel-formControl-151 MuiInputLabel-animated-154 MuiInputLabel-shrink-153 MuiInputLabel-outlined-156" classes={ Object { - "asterisk": "MuiFormLabel-asterisk-162", - "disabled": "MuiFormLabel-disabled-158 MuiInputLabel-disabled-147", - "error": "MuiFormLabel-error-159 MuiInputLabel-error-148", - "filled": "MuiFormLabel-filled-160", - "focused": "MuiFormLabel-focused-157 MuiInputLabel-focused-146", - "required": "MuiFormLabel-required-161 MuiInputLabel-required-149", - "root": "MuiFormLabel-root-156", + "asterisk": "MuiFormLabel-asterisk-163", + "disabled": "MuiFormLabel-disabled-159 MuiInputLabel-disabled-148", + "error": "MuiFormLabel-error-160 MuiInputLabel-error-149", + "filled": "MuiFormLabel-filled-161", + "focused": "MuiFormLabel-focused-158 MuiInputLabel-focused-147", + "required": "MuiFormLabel-required-162 MuiInputLabel-required-150", + "root": "MuiFormLabel-root-157", } } data-shrink={true} htmlFor="tableFilterBox" > <FormLabel - className="MuiInputLabel-root-145 noMargin MuiInputLabel-formControl-150 MuiInputLabel-animated-153 MuiInputLabel-shrink-152 MuiInputLabel-outlined-155" + className="MuiInputLabel-root-146 noMargin MuiInputLabel-formControl-151 MuiInputLabel-animated-154 MuiInputLabel-shrink-153 MuiInputLabel-outlined-156" classes={ Object { - "asterisk": "MuiFormLabel-asterisk-162", - "disabled": "MuiFormLabel-disabled-158 MuiInputLabel-disabled-147", - "error": "MuiFormLabel-error-159 MuiInputLabel-error-148", - "filled": "MuiFormLabel-filled-160", - "focused": "MuiFormLabel-focused-157 MuiInputLabel-focused-146", - "required": "MuiFormLabel-required-161 MuiInputLabel-required-149", - "root": "MuiFormLabel-root-156", + "asterisk": "MuiFormLabel-asterisk-163", + "disabled": "MuiFormLabel-disabled-159 MuiInputLabel-disabled-148", + "error": "MuiFormLabel-error-160 MuiInputLabel-error-149", + "filled": "MuiFormLabel-filled-161", + "focused": "MuiFormLabel-focused-158 MuiInputLabel-focused-147", + "required": "MuiFormLabel-required-162 MuiInputLabel-required-150", + "root": "MuiFormLabel-root-157", } } component="label" @@ -4874,7 +7314,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } > <label - className="MuiFormLabel-root-156 MuiInputLabel-root-145 noMargin MuiInputLabel-formControl-150 MuiInputLabel-animated-153 MuiInputLabel-shrink-152 MuiInputLabel-outlined-155" + className="MuiFormLabel-root-157 MuiInputLabel-root-146 noMargin MuiInputLabel-formControl-151 MuiInputLabel-animated-154 MuiInputLabel-shrink-153 MuiInputLabel-outlined-156" data-shrink={true} htmlFor="tableFilterBox" > @@ -4897,7 +7337,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip labelWidth={0} onChange={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -4908,33 +7348,33 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } value="" > <OutlinedInput classes={ Object { - "adornedEnd": "MuiOutlinedInput-adornedEnd-167", - "adornedStart": "MuiOutlinedInput-adornedStart-166", - "disabled": "MuiOutlinedInput-disabled-165", - "error": "MuiOutlinedInput-error-168", - "focused": "MuiOutlinedInput-focused-164", - "input": "MuiOutlinedInput-input-171", - "inputAdornedEnd": "MuiOutlinedInput-inputAdornedEnd-175", - "inputAdornedStart": "MuiOutlinedInput-inputAdornedStart-174", - "inputMarginDense": "MuiOutlinedInput-inputMarginDense-172", - "inputMultiline": "MuiOutlinedInput-inputMultiline-173", - "multiline": "MuiOutlinedInput-multiline-169", - "notchedOutline": "MuiOutlinedInput-notchedOutline-170 filterBorderRadius", - "root": "MuiOutlinedInput-root-163 noLeftPadding", + "adornedEnd": "MuiOutlinedInput-adornedEnd-168", + "adornedStart": "MuiOutlinedInput-adornedStart-167", + "disabled": "MuiOutlinedInput-disabled-166", + "error": "MuiOutlinedInput-error-169", + "focused": "MuiOutlinedInput-focused-165", + "input": "MuiOutlinedInput-input-172", + "inputAdornedEnd": "MuiOutlinedInput-inputAdornedEnd-176", + "inputAdornedStart": "MuiOutlinedInput-inputAdornedStart-175", + "inputMarginDense": "MuiOutlinedInput-inputMarginDense-173", + "inputMultiline": "MuiOutlinedInput-inputMultiline-174", + "multiline": "MuiOutlinedInput-multiline-170", + "notchedOutline": "MuiOutlinedInput-notchedOutline-171 filterBorderRadius", + "root": "MuiOutlinedInput-root-164 noLeftPadding", } } id="tableFilterBox" labelWidth={0} onChange={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -4945,26 +7385,26 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } value="" > <WithStyles(WithFormControlContext(InputBase)) classes={ Object { - "adornedEnd": "MuiOutlinedInput-adornedEnd-167", - "adornedStart": "MuiOutlinedInput-adornedStart-166", - "disabled": "MuiOutlinedInput-disabled-165", - "error": "MuiOutlinedInput-error-168", - "focused": "MuiOutlinedInput-focused-164", - "input": "MuiOutlinedInput-input-171", - "inputAdornedEnd": "MuiOutlinedInput-inputAdornedEnd-175", - "inputAdornedStart": "MuiOutlinedInput-inputAdornedStart-174", - "inputMarginDense": "MuiOutlinedInput-inputMarginDense-172", - "inputMultiline": "MuiOutlinedInput-inputMultiline-173", - "multiline": "MuiOutlinedInput-multiline-169", + "adornedEnd": "MuiOutlinedInput-adornedEnd-168", + "adornedStart": "MuiOutlinedInput-adornedStart-167", + "disabled": "MuiOutlinedInput-disabled-166", + "error": "MuiOutlinedInput-error-169", + "focused": "MuiOutlinedInput-focused-165", + "input": "MuiOutlinedInput-input-172", + "inputAdornedEnd": "MuiOutlinedInput-inputAdornedEnd-176", + "inputAdornedStart": "MuiOutlinedInput-inputAdornedStart-175", + "inputMarginDense": "MuiOutlinedInput-inputMarginDense-173", + "inputMultiline": "MuiOutlinedInput-inputMultiline-174", + "multiline": "MuiOutlinedInput-multiline-170", "notchedOutline": null, - "root": "MuiOutlinedInput-root-163 noLeftPadding", + "root": "MuiOutlinedInput-root-164 noLeftPadding", } } fullWidth={false} @@ -4974,7 +7414,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip onChange={[Function]} renderPrefix={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -4985,7 +7425,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } type="text" value="" @@ -4993,23 +7433,23 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <WithFormControlContext(InputBase) classes={ Object { - "adornedEnd": "MuiInputBase-adornedEnd-181 MuiOutlinedInput-adornedEnd-167", - "adornedStart": "MuiInputBase-adornedStart-180 MuiOutlinedInput-adornedStart-166", - "disabled": "MuiInputBase-disabled-179 MuiOutlinedInput-disabled-165", - "error": "MuiInputBase-error-182 MuiOutlinedInput-error-168", - "focused": "MuiInputBase-focused-178 MuiOutlinedInput-focused-164", - "formControl": "MuiInputBase-formControl-177", - "fullWidth": "MuiInputBase-fullWidth-185", - "input": "MuiInputBase-input-186 MuiOutlinedInput-input-171", - "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-192 MuiOutlinedInput-inputAdornedEnd-175", - "inputAdornedStart": "MuiInputBase-inputAdornedStart-191 MuiOutlinedInput-inputAdornedStart-174", - "inputMarginDense": "MuiInputBase-inputMarginDense-187 MuiOutlinedInput-inputMarginDense-172", - "inputMultiline": "MuiInputBase-inputMultiline-188 MuiOutlinedInput-inputMultiline-173", - "inputType": "MuiInputBase-inputType-189", - "inputTypeSearch": "MuiInputBase-inputTypeSearch-190", - "marginDense": "MuiInputBase-marginDense-183", - "multiline": "MuiInputBase-multiline-184 MuiOutlinedInput-multiline-169", - "root": "MuiInputBase-root-176 MuiOutlinedInput-root-163 noLeftPadding", + "adornedEnd": "MuiInputBase-adornedEnd-182 MuiOutlinedInput-adornedEnd-168", + "adornedStart": "MuiInputBase-adornedStart-181 MuiOutlinedInput-adornedStart-167", + "disabled": "MuiInputBase-disabled-180 MuiOutlinedInput-disabled-166", + "error": "MuiInputBase-error-183 MuiOutlinedInput-error-169", + "focused": "MuiInputBase-focused-179 MuiOutlinedInput-focused-165", + "formControl": "MuiInputBase-formControl-178", + "fullWidth": "MuiInputBase-fullWidth-186", + "input": "MuiInputBase-input-187 MuiOutlinedInput-input-172", + "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-193 MuiOutlinedInput-inputAdornedEnd-176", + "inputAdornedStart": "MuiInputBase-inputAdornedStart-192 MuiOutlinedInput-inputAdornedStart-175", + "inputMarginDense": "MuiInputBase-inputMarginDense-188 MuiOutlinedInput-inputMarginDense-173", + "inputMultiline": "MuiInputBase-inputMultiline-189 MuiOutlinedInput-inputMultiline-174", + "inputType": "MuiInputBase-inputType-190", + "inputTypeSearch": "MuiInputBase-inputTypeSearch-191", + "marginDense": "MuiInputBase-marginDense-184", + "multiline": "MuiInputBase-multiline-185 MuiOutlinedInput-multiline-170", + "root": "MuiInputBase-root-177 MuiOutlinedInput-root-164 noLeftPadding", } } fullWidth={false} @@ -5019,7 +7459,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip onChange={[Function]} renderPrefix={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -5030,7 +7470,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } type="text" value="" @@ -5038,23 +7478,23 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <InputBase classes={ Object { - "adornedEnd": "MuiInputBase-adornedEnd-181 MuiOutlinedInput-adornedEnd-167", - "adornedStart": "MuiInputBase-adornedStart-180 MuiOutlinedInput-adornedStart-166", - "disabled": "MuiInputBase-disabled-179 MuiOutlinedInput-disabled-165", - "error": "MuiInputBase-error-182 MuiOutlinedInput-error-168", - "focused": "MuiInputBase-focused-178 MuiOutlinedInput-focused-164", - "formControl": "MuiInputBase-formControl-177", - "fullWidth": "MuiInputBase-fullWidth-185", - "input": "MuiInputBase-input-186 MuiOutlinedInput-input-171", - "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-192 MuiOutlinedInput-inputAdornedEnd-175", - "inputAdornedStart": "MuiInputBase-inputAdornedStart-191 MuiOutlinedInput-inputAdornedStart-174", - "inputMarginDense": "MuiInputBase-inputMarginDense-187 MuiOutlinedInput-inputMarginDense-172", - "inputMultiline": "MuiInputBase-inputMultiline-188 MuiOutlinedInput-inputMultiline-173", - "inputType": "MuiInputBase-inputType-189", - "inputTypeSearch": "MuiInputBase-inputTypeSearch-190", - "marginDense": "MuiInputBase-marginDense-183", - "multiline": "MuiInputBase-multiline-184 MuiOutlinedInput-multiline-169", - "root": "MuiInputBase-root-176 MuiOutlinedInput-root-163 noLeftPadding", + "adornedEnd": "MuiInputBase-adornedEnd-182 MuiOutlinedInput-adornedEnd-168", + "adornedStart": "MuiInputBase-adornedStart-181 MuiOutlinedInput-adornedStart-167", + "disabled": "MuiInputBase-disabled-180 MuiOutlinedInput-disabled-166", + "error": "MuiInputBase-error-183 MuiOutlinedInput-error-169", + "focused": "MuiInputBase-focused-179 MuiOutlinedInput-focused-165", + "formControl": "MuiInputBase-formControl-178", + "fullWidth": "MuiInputBase-fullWidth-186", + "input": "MuiInputBase-input-187 MuiOutlinedInput-input-172", + "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-193 MuiOutlinedInput-inputAdornedEnd-176", + "inputAdornedStart": "MuiInputBase-inputAdornedStart-192 MuiOutlinedInput-inputAdornedStart-175", + "inputMarginDense": "MuiInputBase-inputMarginDense-188 MuiOutlinedInput-inputMarginDense-173", + "inputMultiline": "MuiInputBase-inputMultiline-189 MuiOutlinedInput-inputMultiline-174", + "inputType": "MuiInputBase-inputType-190", + "inputTypeSearch": "MuiInputBase-inputTypeSearch-191", + "marginDense": "MuiInputBase-marginDense-184", + "multiline": "MuiInputBase-multiline-185 MuiOutlinedInput-multiline-170", + "root": "MuiInputBase-root-177 MuiOutlinedInput-root-164 noLeftPadding", } } fullWidth={false} @@ -5080,7 +7520,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip onChange={[Function]} renderPrefix={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -5091,26 +7531,26 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } type="text" value="" > <div - className="MuiInputBase-root-176 MuiOutlinedInput-root-163 noLeftPadding MuiInputBase-formControl-177 MuiInputBase-adornedStart-180 MuiOutlinedInput-adornedStart-166" + className="MuiInputBase-root-177 MuiOutlinedInput-root-164 noLeftPadding MuiInputBase-formControl-178 MuiInputBase-adornedStart-181 MuiOutlinedInput-adornedStart-167" onClick={[Function]} > <WithStyles(NotchedOutline) - className="MuiOutlinedInput-notchedOutline-170 filterBorderRadius" + className="MuiOutlinedInput-notchedOutline-171 filterBorderRadius" labelWidth={0} notched={true} > <NotchedOutline - className="MuiOutlinedInput-notchedOutline-170 filterBorderRadius" + className="MuiOutlinedInput-notchedOutline-171 filterBorderRadius" classes={ Object { - "legend": "MuiPrivateNotchedOutline-legend-194", - "root": "MuiPrivateNotchedOutline-root-193", + "legend": "MuiPrivateNotchedOutline-legend-195", + "root": "MuiPrivateNotchedOutline-root-194", } } labelWidth={0} @@ -5313,7 +7753,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -5480,7 +7920,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <fieldset aria-hidden={true} - className="MuiPrivateNotchedOutline-root-193 MuiOutlinedInput-notchedOutline-170 filterBorderRadius" + className="MuiPrivateNotchedOutline-root-194 MuiOutlinedInput-notchedOutline-171 filterBorderRadius" style={ Object { "paddingLeft": 8, @@ -5488,7 +7928,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } > <legend - className="MuiPrivateNotchedOutline-legend-194" + className="MuiPrivateNotchedOutline-legend-195" style={ Object { "width": 0, @@ -5506,34 +7946,56 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip </fieldset> </NotchedOutline> </WithStyles(NotchedOutline)> - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > - <InputAdornment + <WithFormControlContext(InputAdornment) classes={ Object { - "filled": "MuiInputAdornment-filled-196", - "positionEnd": "MuiInputAdornment-positionEnd-198", - "positionStart": "MuiInputAdornment-positionStart-197", - "root": "MuiInputAdornment-root-195", + "disablePointerEvents": "MuiInputAdornment-disablePointerEvents-200", + "filled": "MuiInputAdornment-filled-197", + "positionEnd": "MuiInputAdornment-positionEnd-199", + "positionStart": "MuiInputAdornment-positionStart-198", + "root": "MuiInputAdornment-root-196", } } - component="div" - disableTypography={false} position="end" > - <div - className="MuiInputAdornment-root-195 MuiInputAdornment-positionEnd-198" - > - <pure(FilterListIcon) - style={ - Object { - "color": "#80868b", - "paddingRight": 16, - } + <InputAdornment + classes={ + Object { + "disablePointerEvents": "MuiInputAdornment-disablePointerEvents-200", + "filled": "MuiInputAdornment-filled-197", + "positionEnd": "MuiInputAdornment-positionEnd-199", + "positionStart": "MuiInputAdornment-positionStart-198", + "root": "MuiInputAdornment-root-196", + } + } + component="div" + disablePointerEvents={false} + disableTypography={false} + muiFormControl={ + Object { + "adornedStart": true, + "disabled": false, + "error": false, + "filled": false, + "focused": false, + "margin": "none", + "onBlur": [Function], + "onEmpty": [Function], + "onFilled": [Function], + "onFocus": [Function], + "required": false, + "variant": "outlined", } + } + position="end" + > + <div + className="MuiInputAdornment-root-196 MuiInputAdornment-positionEnd-199" > - <FilterListIcon + <pure(FilterListIcon) style={ Object { "color": "#80868b", @@ -5541,7 +8003,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } } > - <WithStyles(SvgIcon) + <FilterListIcon style={ Object { "color": "#80868b", @@ -5549,36 +8011,31 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } } > - <SvgIcon - classes={ - Object { - "colorAction": "MuiSvgIcon-colorAction-202", - "colorDisabled": "MuiSvgIcon-colorDisabled-204", - "colorError": "MuiSvgIcon-colorError-203", - "colorPrimary": "MuiSvgIcon-colorPrimary-200", - "colorSecondary": "MuiSvgIcon-colorSecondary-201", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-205", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-207", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-206", - "root": "MuiSvgIcon-root-199", - } - } - color="inherit" - component="svg" - fontSize="default" + <WithStyles(SvgIcon) style={ Object { "color": "#80868b", "paddingRight": 16, } } - viewBox="0 0 24 24" > - <svg - aria-hidden="true" - className="MuiSvgIcon-root-199" - focusable="false" - role="presentation" + <SvgIcon + classes={ + Object { + "colorAction": "MuiSvgIcon-colorAction-204", + "colorDisabled": "MuiSvgIcon-colorDisabled-206", + "colorError": "MuiSvgIcon-colorError-205", + "colorPrimary": "MuiSvgIcon-colorPrimary-202", + "colorSecondary": "MuiSvgIcon-colorSecondary-203", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-207", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-209", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-208", + "root": "MuiSvgIcon-root-201", + } + } + color="inherit" + component="svg" + fontSize="default" style={ Object { "color": "#80868b", @@ -5587,24 +8044,38 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } viewBox="0 0 24 24" > - <path - d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z" - /> - <path - d="M0 0h24v24H0z" - fill="none" - /> - </svg> - </SvgIcon> - </WithStyles(SvgIcon)> - </FilterListIcon> - </pure(FilterListIcon)> - </div> - </InputAdornment> - </WithStyles(InputAdornment)> + <svg + aria-hidden="true" + className="MuiSvgIcon-root-201" + focusable="false" + role="presentation" + style={ + Object { + "color": "#80868b", + "paddingRight": 16, + } + } + viewBox="0 0 24 24" + > + <path + d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z" + /> + <path + d="M0 0h24v24H0z" + fill="none" + /> + </svg> + </SvgIcon> + </WithStyles(SvgIcon)> + </FilterListIcon> + </pure(FilterListIcon)> + </div> + </InputAdornment> + </WithFormControlContext(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> <input aria-invalid={false} - className="MuiInputBase-input-186 MuiOutlinedInput-input-171 MuiInputBase-inputAdornedStart-191 MuiOutlinedInput-inputAdornedStart-174" + className="MuiInputBase-input-187 MuiOutlinedInput-input-172 MuiInputBase-inputAdornedStart-192 MuiOutlinedInput-inputAdornedStart-175" disabled={false} id="tableFilterBox" onBlur={[Function]} @@ -5630,287 +8101,873 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="header" > <div - className="columnName cell selectionToggle" + className="columnName cell selectionToggle" + > + <WithStyles(Checkbox) + checked={false} + color="primary" + indeterminate={false} + onChange={[Function]} + > + <Checkbox + checked={false} + checkedIcon={<pure(CheckBox) />} + classes={ + Object { + "checked": "MuiCheckbox-checked-211", + "colorPrimary": "MuiCheckbox-colorPrimary-214", + "colorSecondary": "MuiCheckbox-colorSecondary-215", + "disabled": "MuiCheckbox-disabled-212", + "indeterminate": "MuiCheckbox-indeterminate-213", + "root": "MuiCheckbox-root-210", + } + } + color="primary" + icon={<pure(CheckBoxOutlineBlank) />} + indeterminate={false} + indeterminateIcon={<pure(IndeterminateCheckBox) />} + onChange={[Function]} + > + <WithStyles(WithFormControlContext(SwitchBase)) + checked={false} + checkedIcon={<pure(CheckBox) />} + className="" + classes={ + Object { + "checked": "MuiCheckbox-checked-211", + "disabled": "MuiCheckbox-disabled-212", + "root": "MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214", + } + } + icon={<pure(CheckBoxOutlineBlank) />} + inputProps={ + Object { + "data-indeterminate": false, + } + } + onChange={[Function]} + type="checkbox" + > + <WithFormControlContext(SwitchBase) + checked={false} + checkedIcon={<pure(CheckBox) />} + className="" + classes={ + Object { + "checked": "MuiPrivateSwitchBase-checked-217 MuiCheckbox-checked-211", + "disabled": "MuiPrivateSwitchBase-disabled-218 MuiCheckbox-disabled-212", + "input": "MuiPrivateSwitchBase-input-219", + "root": "MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214", + } + } + icon={<pure(CheckBoxOutlineBlank) />} + inputProps={ + Object { + "data-indeterminate": false, + } + } + onChange={[Function]} + type="checkbox" + > + <SwitchBase + checked={false} + checkedIcon={<pure(CheckBox) />} + className="" + classes={ + Object { + "checked": "MuiPrivateSwitchBase-checked-217 MuiCheckbox-checked-211", + "disabled": "MuiPrivateSwitchBase-disabled-218 MuiCheckbox-disabled-212", + "input": "MuiPrivateSwitchBase-input-219", + "root": "MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214", + } + } + icon={<pure(CheckBoxOutlineBlank) />} + inputProps={ + Object { + "data-indeterminate": false, + } + } + onChange={[Function]} + type="checkbox" + > + <WithStyles(IconButton) + className="MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" + component="span" + onBlur={[Function]} + onFocus={[Function]} + tabIndex={null} + > + <IconButton + className="MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" + classes={ + Object { + "colorInherit": "MuiIconButton-colorInherit-221", + "colorPrimary": "MuiIconButton-colorPrimary-222", + "colorSecondary": "MuiIconButton-colorSecondary-223", + "disabled": "MuiIconButton-disabled-224", + "label": "MuiIconButton-label-225", + "root": "MuiIconButton-root-220", + } + } + color="default" + component="span" + disabled={false} + onBlur={[Function]} + onFocus={[Function]} + tabIndex={null} + > + <WithStyles(ButtonBase) + centerRipple={true} + className="MuiIconButton-root-220 MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" + component="span" + disabled={false} + focusRipple={true} + onBlur={[Function]} + onFocus={[Function]} + tabIndex={null} + > + <ButtonBase + centerRipple={true} + className="MuiIconButton-root-220 MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" + classes={ + Object { + "disabled": "MuiButtonBase-disabled-227", + "focusVisible": "MuiButtonBase-focusVisible-228", + "root": "MuiButtonBase-root-226", + } + } + component="span" + disableRipple={false} + disableTouchRipple={false} + disabled={false} + focusRipple={true} + onBlur={[Function]} + onFocus={[Function]} + tabIndex={null} + type="button" + > + <span + className="MuiButtonBase-root-226 MuiIconButton-root-220 MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" + onBlur={[Function]} + onContextMenu={[Function]} + onFocus={[Function]} + onKeyDown={[Function]} + onKeyUp={[Function]} + onMouseDown={[Function]} + onMouseLeave={[Function]} + onMouseUp={[Function]} + onTouchEnd={[Function]} + onTouchMove={[Function]} + onTouchStart={[Function]} + tabIndex={null} + > + <span + className="MuiIconButton-label-225" + > + <pure(CheckBoxOutlineBlank)> + <CheckBoxOutlineBlank> + <WithStyles(SvgIcon)> + <SvgIcon + classes={ + Object { + "colorAction": "MuiSvgIcon-colorAction-204", + "colorDisabled": "MuiSvgIcon-colorDisabled-206", + "colorError": "MuiSvgIcon-colorError-205", + "colorPrimary": "MuiSvgIcon-colorPrimary-202", + "colorSecondary": "MuiSvgIcon-colorSecondary-203", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-207", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-209", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-208", + "root": "MuiSvgIcon-root-201", + } + } + color="inherit" + component="svg" + fontSize="default" + viewBox="0 0 24 24" + > + <svg + aria-hidden="true" + className="MuiSvgIcon-root-201" + focusable="false" + role="presentation" + viewBox="0 0 24 24" + > + <path + d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" + /> + </svg> + </SvgIcon> + </WithStyles(SvgIcon)> + </CheckBoxOutlineBlank> + </pure(CheckBoxOutlineBlank)> + <input + checked={false} + className="MuiPrivateSwitchBase-input-219" + data-indeterminate={false} + onChange={[Function]} + type="checkbox" + /> + </span> + <NoSsr + defer={false} + fallback={null} + > + <WithStyles(TouchRipple) + center={true} + innerRef={[Function]} + > + <TouchRipple + center={true} + classes={ + Object { + "child": "MuiTouchRipple-child-270", + "childLeaving": "MuiTouchRipple-childLeaving-271", + "childPulsate": "MuiTouchRipple-childPulsate-272", + "ripple": "MuiTouchRipple-ripple-267", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-269", + "rippleVisible": "MuiTouchRipple-rippleVisible-268", + "root": "MuiTouchRipple-root-266", + } + } + > + <TransitionGroup + childFactory={[Function]} + className="MuiTouchRipple-root-266" + component="span" + enter={true} + exit={true} + > + <span + className="MuiTouchRipple-root-266" + /> + </TransitionGroup> + </TouchRipple> + </WithStyles(TouchRipple)> + </NoSsr> + </span> + </ButtonBase> + </WithStyles(ButtonBase)> + </IconButton> + </WithStyles(IconButton)> + </SwitchBase> + </WithFormControlContext(SwitchBase)> + </WithStyles(WithFormControlContext(SwitchBase))> + </Checkbox> + </WithStyles(Checkbox)> + </div> + <div + className="columnName" + key="0" + style={ + Object { + "width": "20%", + } + } + title="Version name" > - <WithStyles(Checkbox) - checked={false} - color="primary" - indeterminate={false} - onChange={[Function]} + <WithStyles(Tooltip) + enterDelay={300} + title="Sort" > - <Checkbox - checked={false} - checkedIcon={<pure(CheckBox) />} + <Tooltip + TransitionComponent={[Function]} classes={ Object { - "checked": "MuiCheckbox-checked-209", - "colorPrimary": "MuiCheckbox-colorPrimary-212", - "colorSecondary": "MuiCheckbox-colorSecondary-213", - "disabled": "MuiCheckbox-disabled-210", - "indeterminate": "MuiCheckbox-indeterminate-211", - "root": "MuiCheckbox-root-208", + "popper": "MuiTooltip-popper-229", + "popperInteractive": "MuiTooltip-popperInteractive-230", + "tooltip": "MuiTooltip-tooltip-231", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-236", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-233", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-234", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-235", + "touch": "MuiTooltip-touch-232", + } + } + disableFocusListener={false} + disableHoverListener={false} + disableTouchListener={false} + enterDelay={300} + enterTouchDelay={1000} + interactive={false} + leaveDelay={0} + leaveTouchDelay={1500} + placement="bottom" + theme={ + Object { + "breakpoints": Object { + "between": [Function], + "down": [Function], + "keys": Array [ + "xs", + "sm", + "md", + "lg", + "xl", + ], + "only": [Function], + "up": [Function], + "values": Object { + "lg": 1280, + "md": 960, + "sm": 600, + "xl": 1920, + "xs": 0, + }, + "width": [Function], + }, + "direction": "ltr", + "mixins": Object { + "gutters": [Function], + "toolbar": Object { + "@media (min-width:0px) and (orientation: landscape)": Object { + "minHeight": 48, + }, + "@media (min-width:600px)": Object { + "minHeight": 64, + }, + "minHeight": 56, + }, + }, + "overrides": Object {}, + "palette": Object { + "action": Object { + "active": "rgba(0, 0, 0, 0.54)", + "disabled": "rgba(0, 0, 0, 0.26)", + "disabledBackground": "rgba(0, 0, 0, 0.12)", + "hover": "rgba(0, 0, 0, 0.08)", + "hoverOpacity": 0.08, + "selected": "rgba(0, 0, 0, 0.14)", + }, + "augmentColor": [Function], + "background": Object { + "default": "#fafafa", + "paper": "#fff", + }, + "common": Object { + "black": "#000", + "white": "#fff", + }, + "contrastThreshold": 3, + "divider": "rgba(0, 0, 0, 0.12)", + "error": Object { + "contrastText": "#fff", + "dark": "#d32f2f", + "light": "#e57373", + "main": "#f44336", + }, + "getContrastText": [Function], + "grey": Object { + "100": "#f5f5f5", + "200": "#eeeeee", + "300": "#e0e0e0", + "400": "#bdbdbd", + "50": "#fafafa", + "500": "#9e9e9e", + "600": "#757575", + "700": "#616161", + "800": "#424242", + "900": "#212121", + "A100": "#d5d5d5", + "A200": "#aaaaaa", + "A400": "#303030", + "A700": "#616161", + }, + "primary": Object { + "contrastText": "#fff", + "dark": "#303f9f", + "light": "#7986cb", + "main": "#3f51b5", + }, + "secondary": Object { + "contrastText": "#fff", + "dark": "#c51162", + "light": "#ff4081", + "main": "#f50057", + }, + "text": Object { + "disabled": "rgba(0, 0, 0, 0.38)", + "hint": "rgba(0, 0, 0, 0.38)", + "primary": "rgba(0, 0, 0, 0.87)", + "secondary": "rgba(0, 0, 0, 0.54)", + }, + "tonalOffset": 0.2, + "type": "light", + }, + "props": Object {}, + "shadows": Array [ + "none", + "0px 1px 3px 0px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12)", + "0px 1px 5px 0px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12)", + "0px 1px 8px 0px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12)", + "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)", + "0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)", + "0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)", + "0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)", + "0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)", + "0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)", + "0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)", + "0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)", + "0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)", + "0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)", + "0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)", + "0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)", + "0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)", + "0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)", + "0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)", + ], + "shape": Object { + "borderRadius": 4, + }, + "spacing": Object { + "unit": 8, + }, + "transitions": Object { + "create": [Function], + "duration": Object { + "complex": 375, + "enteringScreen": 225, + "leavingScreen": 195, + "short": 250, + "shorter": 200, + "shortest": 150, + "standard": 300, + }, + "easing": Object { + "easeIn": "cubic-bezier(0.4, 0, 1, 1)", + "easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)", + "easeOut": "cubic-bezier(0.0, 0, 0.2, 1)", + "sharp": "cubic-bezier(0.4, 0, 0.6, 1)", + }, + "getAutoHeightDuration": [Function], + }, + "typography": Object { + "body1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "lineHeight": "1.46429em", + }, + "body1Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.5, + }, + "body2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "lineHeight": "1.71429em", + }, + "body2Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "letterSpacing": "0.01071em", + "lineHeight": 1.5, + }, + "button": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "textTransform": "uppercase", + }, + "buttonNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.02857em", + "lineHeight": 1.75, + "textTransform": "uppercase", + }, + "caption": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "lineHeight": "1.375em", + }, + "captionNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.03333em", + "lineHeight": 1.66, + }, + "display1": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "lineHeight": "1.20588em", + }, + "display2": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.8125rem", + "fontWeight": 400, + "lineHeight": "1.13333em", + "marginLeft": "-.02em", + }, + "display3": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.5rem", + "fontWeight": 400, + "letterSpacing": "-.02em", + "lineHeight": "1.30357em", + "marginLeft": "-.02em", + }, + "display4": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "7rem", + "fontWeight": 300, + "letterSpacing": "-.04em", + "lineHeight": "1.14286em", + "marginLeft": "-.04em", + }, + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": 14, + "fontWeightLight": 300, + "fontWeightMedium": 500, + "fontWeightRegular": 400, + "h1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "6rem", + "fontWeight": 300, + "letterSpacing": "-0.01562em", + "lineHeight": 1, + }, + "h2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.75rem", + "fontWeight": 300, + "letterSpacing": "-0.00833em", + "lineHeight": 1, + }, + "h3": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.04, + }, + "h4": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "letterSpacing": "0.00735em", + "lineHeight": 1.17, + }, + "h5": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.33, + }, + "h6": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.25rem", + "fontWeight": 500, + "letterSpacing": "0.0075em", + "lineHeight": 1.6, + }, + "headline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "lineHeight": "1.35417em", + }, + "overline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.08333em", + "lineHeight": 2.66, + "textTransform": "uppercase", + }, + "pxToRem": [Function], + "round": [Function], + "subheading": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "lineHeight": "1.5em", + }, + "subtitle1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.75, + }, + "subtitle2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.00714em", + "lineHeight": 1.57, + }, + "title": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.3125rem", + "fontWeight": 500, + "lineHeight": "1.16667em", + }, + "useNextVariants": false, + }, + "zIndex": Object { + "appBar": 1100, + "drawer": 1200, + "mobileStepper": 1000, + "modal": 1300, + "snackbar": 1400, + "tooltip": 1500, + }, } } - color="primary" - icon={<pure(CheckBoxOutlineBlank) />} - indeterminate={false} - indeterminateIcon={<pure(IndeterminateCheckBox) />} - onChange={[Function]} + title="Sort" > - <WithStyles(WithFormControlContext(SwitchBase)) - checked={false} - checkedIcon={<pure(CheckBox) />} - className="" - classes={ - Object { - "checked": "MuiCheckbox-checked-209", - "disabled": "MuiCheckbox-disabled-210", - "root": "MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212", - } - } - icon={<pure(CheckBoxOutlineBlank) />} - inputProps={ - Object { - "data-indeterminate": false, - } - } - onChange={[Function]} - type="checkbox" + <RootRef + rootRef={[Function]} > - <WithFormControlContext(SwitchBase) - checked={false} - checkedIcon={<pure(CheckBox) />} - className="" - classes={ - Object { - "checked": "MuiPrivateSwitchBase-checked-215 MuiCheckbox-checked-209", - "disabled": "MuiPrivateSwitchBase-disabled-216 MuiCheckbox-disabled-210", - "input": "MuiPrivateSwitchBase-input-217", - "root": "MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212", - } - } - icon={<pure(CheckBoxOutlineBlank) />} - inputProps={ - Object { - "data-indeterminate": false, - } - } - onChange={[Function]} - type="checkbox" + <WithStyles(TableSortLabel) + active={false} + aria-describedby={null} + className="ellipsis" + direction="desc" + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="Sort" > - <SwitchBase - checked={false} - checkedIcon={<pure(CheckBox) />} - className="" + <TableSortLabel + IconComponent={[Function]} + active={false} + aria-describedby={null} + className="ellipsis" classes={ Object { - "checked": "MuiPrivateSwitchBase-checked-215 MuiCheckbox-checked-209", - "disabled": "MuiPrivateSwitchBase-disabled-216 MuiCheckbox-disabled-210", - "input": "MuiPrivateSwitchBase-input-217", - "root": "MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212", - } - } - icon={<pure(CheckBoxOutlineBlank) />} - inputProps={ - Object { - "data-indeterminate": false, + "active": "MuiTableSortLabel-active-238", + "icon": "MuiTableSortLabel-icon-239", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-241", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-240", + "root": "MuiTableSortLabel-root-237", } } - onChange={[Function]} - type="checkbox" + direction="desc" + hideSortIcon={false} + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="Sort" > - <WithStyles(IconButton) - className="MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + <WithStyles(ButtonBase) + aria-describedby={null} + className="MuiTableSortLabel-root-237 ellipsis" component="span" + disableRipple={true} onBlur={[Function]} + onClick={[Function]} onFocus={[Function]} - tabIndex={null} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="Sort" > - <IconButton - className="MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + <ButtonBase + aria-describedby={null} + centerRipple={false} + className="MuiTableSortLabel-root-237 ellipsis" classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-219", - "colorPrimary": "MuiIconButton-colorPrimary-220", - "colorSecondary": "MuiIconButton-colorSecondary-221", - "disabled": "MuiIconButton-disabled-222", - "label": "MuiIconButton-label-223", - "root": "MuiIconButton-root-218", + "disabled": "MuiButtonBase-disabled-227", + "focusVisible": "MuiButtonBase-focusVisible-228", + "root": "MuiButtonBase-root-226", } } - color="default" component="span" - disabled={false} + disableRipple={true} + disableTouchRipple={false} + focusRipple={false} onBlur={[Function]} + onClick={[Function]} onFocus={[Function]} - tabIndex={null} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + tabIndex="0" + title="Sort" + type="button" > - <WithStyles(ButtonBase) - centerRipple={true} - className="MuiIconButton-root-218 MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" - component="span" - disabled={false} - focusRipple={true} + <span + aria-describedby={null} + className="MuiButtonBase-root-226 MuiTableSortLabel-root-237 ellipsis" onBlur={[Function]} + onClick={[Function]} + onContextMenu={[Function]} onFocus={[Function]} - tabIndex={null} + onKeyDown={[Function]} + onKeyUp={[Function]} + onMouseDown={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onMouseUp={[Function]} + onTouchEnd={[Function]} + onTouchMove={[Function]} + onTouchStart={[Function]} + role="button" + tabIndex="0" + title="Sort" > - <ButtonBase - centerRipple={true} - className="MuiIconButton-root-218 MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" - classes={ - Object { - "disabled": "MuiButtonBase-disabled-225", - "focusVisible": "MuiButtonBase-focusVisible-226", - "root": "MuiButtonBase-root-224", - } - } - component="span" - disableRipple={false} - disableTouchRipple={false} - disabled={false} - focusRipple={true} - onBlur={[Function]} - onFocus={[Function]} - tabIndex={null} - type="button" + Version name + <pure(ArrowDownward) + className="MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" > - <span - className="MuiButtonBase-root-224 MuiIconButton-root-218 MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" - onBlur={[Function]} - onContextMenu={[Function]} - onFocus={[Function]} - onKeyDown={[Function]} - onKeyUp={[Function]} - onMouseDown={[Function]} - onMouseLeave={[Function]} - onMouseUp={[Function]} - onTouchEnd={[Function]} - onTouchMove={[Function]} - onTouchStart={[Function]} - tabIndex={null} + <ArrowDownward + className="MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" > - <span - className="MuiIconButton-label-223" - > - <pure(CheckBoxOutlineBlank)> - <CheckBoxOutlineBlank> - <WithStyles(SvgIcon)> - <SvgIcon - classes={ - Object { - "colorAction": "MuiSvgIcon-colorAction-202", - "colorDisabled": "MuiSvgIcon-colorDisabled-204", - "colorError": "MuiSvgIcon-colorError-203", - "colorPrimary": "MuiSvgIcon-colorPrimary-200", - "colorSecondary": "MuiSvgIcon-colorSecondary-201", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-205", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-207", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-206", - "root": "MuiSvgIcon-root-199", - } - } - color="inherit" - component="svg" - fontSize="default" - viewBox="0 0 24 24" - > - <svg - aria-hidden="true" - className="MuiSvgIcon-root-199" - focusable="false" - role="presentation" - viewBox="0 0 24 24" - > - <path - d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" - /> - </svg> - </SvgIcon> - </WithStyles(SvgIcon)> - </CheckBoxOutlineBlank> - </pure(CheckBoxOutlineBlank)> - <input - checked={false} - className="MuiPrivateSwitchBase-input-217" - data-indeterminate={false} - onChange={[Function]} - type="checkbox" - /> - </span> - <NoSsr - defer={false} - fallback={null} + <WithStyles(SvgIcon) + className="MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" > - <WithStyles(TouchRipple) - center={true} - innerRef={[Function]} - > - <TouchRipple - center={true} - classes={ - Object { - "child": "MuiTouchRipple-child-268", - "childLeaving": "MuiTouchRipple-childLeaving-269", - "childPulsate": "MuiTouchRipple-childPulsate-270", - "ripple": "MuiTouchRipple-ripple-265", - "ripplePulsate": "MuiTouchRipple-ripplePulsate-267", - "rippleVisible": "MuiTouchRipple-rippleVisible-266", - "root": "MuiTouchRipple-root-264", - } + <SvgIcon + className="MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" + classes={ + Object { + "colorAction": "MuiSvgIcon-colorAction-204", + "colorDisabled": "MuiSvgIcon-colorDisabled-206", + "colorError": "MuiSvgIcon-colorError-205", + "colorPrimary": "MuiSvgIcon-colorPrimary-202", + "colorSecondary": "MuiSvgIcon-colorSecondary-203", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-207", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-209", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-208", + "root": "MuiSvgIcon-root-201", } + } + color="inherit" + component="svg" + fontSize="default" + viewBox="0 0 24 24" + > + <svg + aria-hidden="true" + className="MuiSvgIcon-root-201 MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" + focusable="false" + role="presentation" + viewBox="0 0 24 24" > - <TransitionGroup - childFactory={[Function]} - className="MuiTouchRipple-root-264" - component="span" - enter={true} - exit={true} - > - <span - className="MuiTouchRipple-root-264" - /> - </TransitionGroup> - </TouchRipple> - </WithStyles(TouchRipple)> - </NoSsr> - </span> - </ButtonBase> - </WithStyles(ButtonBase)> - </IconButton> - </WithStyles(IconButton)> - </SwitchBase> - </WithFormControlContext(SwitchBase)> - </WithStyles(WithFormControlContext(SwitchBase))> - </Checkbox> - </WithStyles(Checkbox)> + <path + d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" + /> + </svg> + </SvgIcon> + </WithStyles(SvgIcon)> + </ArrowDownward> + </pure(ArrowDownward)> + </span> + </ButtonBase> + </WithStyles(ButtonBase)> + </TableSortLabel> + </WithStyles(TableSortLabel)> + </RootRef> + <Popper + anchorEl={ + <span + class="MuiButtonBase-root-226 MuiTableSortLabel-root-237 ellipsis" + role="button" + tabindex="0" + title="Sort" + > + Version name + <svg + aria-hidden="true" + class="MuiSvgIcon-root-201 MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" + focusable="false" + role="presentation" + viewBox="0 0 24 24" + > + <path + d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" + /> + </svg> + </span> + } + className="MuiTooltip-popper-229" + disablePortal={false} + id={null} + open={false} + placement="bottom" + transition={true} + /> + </Tooltip> + </WithStyles(Tooltip)> </div> <div className="columnName" - key="0" + key="1" style={ Object { - "width": "66.66666666666666%", + "width": "60%", } } - title="Version name" + title="Description" > <WithStyles(Tooltip) enterDelay={300} - title="Sort" + title="Cannot sort by this column" > <Tooltip TransitionComponent={[Function]} classes={ Object { - "popper": "MuiTooltip-popper-227", - "popperInteractive": "MuiTooltip-popperInteractive-228", - "tooltip": "MuiTooltip-tooltip-229", - "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-234", - "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-231", - "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-232", - "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-233", - "touch": "MuiTooltip-touch-230", + "popper": "MuiTooltip-popper-229", + "popperInteractive": "MuiTooltip-popperInteractive-230", + "tooltip": "MuiTooltip-tooltip-231", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-236", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-233", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-234", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-235", + "touch": "MuiTooltip-touch-232", } } disableFocusListener={false} @@ -6120,7 +9177,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -6284,7 +9341,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip }, } } - title="Sort" + title="Cannot sort by this column" > <RootRef rootRef={[Function]} @@ -6293,7 +9350,6 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip active={false} aria-describedby={null} className="ellipsis" - direction="desc" onBlur={[Function]} onClick={[Function]} onFocus={[Function]} @@ -6301,7 +9357,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip onMouseOver={[Function]} onTouchEnd={[Function]} onTouchStart={[Function]} - title="Sort" + title="Cannot sort by this column" > <TableSortLabel IconComponent={[Function]} @@ -6310,11 +9366,11 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="ellipsis" classes={ Object { - "active": "MuiTableSortLabel-active-236", - "icon": "MuiTableSortLabel-icon-237", - "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-239", - "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-238", - "root": "MuiTableSortLabel-root-235", + "active": "MuiTableSortLabel-active-238", + "icon": "MuiTableSortLabel-icon-239", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-241", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-240", + "root": "MuiTableSortLabel-root-237", } } direction="desc" @@ -6326,11 +9382,11 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip onMouseOver={[Function]} onTouchEnd={[Function]} onTouchStart={[Function]} - title="Sort" + title="Cannot sort by this column" > <WithStyles(ButtonBase) aria-describedby={null} - className="MuiTableSortLabel-root-235 ellipsis" + className="MuiTableSortLabel-root-237 ellipsis" component="span" disableRipple={true} onBlur={[Function]} @@ -6340,17 +9396,17 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip onMouseOver={[Function]} onTouchEnd={[Function]} onTouchStart={[Function]} - title="Sort" + title="Cannot sort by this column" > <ButtonBase aria-describedby={null} centerRipple={false} - className="MuiTableSortLabel-root-235 ellipsis" + className="MuiTableSortLabel-root-237 ellipsis" classes={ Object { - "disabled": "MuiButtonBase-disabled-225", - "focusVisible": "MuiButtonBase-focusVisible-226", - "root": "MuiButtonBase-root-224", + "disabled": "MuiButtonBase-disabled-227", + "focusVisible": "MuiButtonBase-focusVisible-228", + "root": "MuiButtonBase-root-226", } } component="span" @@ -6365,12 +9421,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip onTouchEnd={[Function]} onTouchStart={[Function]} tabIndex="0" - title="Sort" + title="Cannot sort by this column" type="button" > <span aria-describedby={null} - className="MuiButtonBase-root-224 MuiTableSortLabel-root-235 ellipsis" + className="MuiButtonBase-root-226 MuiTableSortLabel-root-237 ellipsis" onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} @@ -6386,31 +9442,31 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip onTouchStart={[Function]} role="button" tabIndex="0" - title="Sort" + title="Cannot sort by this column" > - Version name + Description <pure(ArrowDownward) - className="MuiTableSortLabel-icon-237 MuiTableSortLabel-iconDirectionDesc-238" + className="MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" > <ArrowDownward - className="MuiTableSortLabel-icon-237 MuiTableSortLabel-iconDirectionDesc-238" + className="MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" > <WithStyles(SvgIcon) - className="MuiTableSortLabel-icon-237 MuiTableSortLabel-iconDirectionDesc-238" + className="MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" > <SvgIcon - className="MuiTableSortLabel-icon-237 MuiTableSortLabel-iconDirectionDesc-238" + className="MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-202", - "colorDisabled": "MuiSvgIcon-colorDisabled-204", - "colorError": "MuiSvgIcon-colorError-203", - "colorPrimary": "MuiSvgIcon-colorPrimary-200", - "colorSecondary": "MuiSvgIcon-colorSecondary-201", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-205", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-207", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-206", - "root": "MuiSvgIcon-root-199", + "colorAction": "MuiSvgIcon-colorAction-204", + "colorDisabled": "MuiSvgIcon-colorDisabled-206", + "colorError": "MuiSvgIcon-colorError-205", + "colorPrimary": "MuiSvgIcon-colorPrimary-202", + "colorSecondary": "MuiSvgIcon-colorSecondary-203", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-207", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-209", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-208", + "root": "MuiSvgIcon-root-201", } } color="inherit" @@ -6420,7 +9476,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <svg aria-hidden="true" - className="MuiSvgIcon-root-199 MuiTableSortLabel-icon-237 MuiTableSortLabel-iconDirectionDesc-238" + className="MuiSvgIcon-root-201 MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -6442,15 +9498,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <Popper anchorEl={ <span - class="MuiButtonBase-root-224 MuiTableSortLabel-root-235 ellipsis" + class="MuiButtonBase-root-226 MuiTableSortLabel-root-237 ellipsis" role="button" tabindex="0" - title="Sort" + title="Cannot sort by this column" > - Version name + Description <svg aria-hidden="true" - class="MuiSvgIcon-root-199 MuiTableSortLabel-icon-237 MuiTableSortLabel-iconDirectionDesc-238" + class="MuiSvgIcon-root-201 MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -6461,7 +9517,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip </svg> </span> } - className="MuiTooltip-popper-227" + className="MuiTooltip-popper-229" disablePortal={false} id={null} open={false} @@ -6473,10 +9529,10 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip </div> <div className="columnName" - key="1" + key="2" style={ Object { - "width": "33.33333333333333%", + "width": "20%", } } title="Uploaded on" @@ -6489,14 +9545,14 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip TransitionComponent={[Function]} classes={ Object { - "popper": "MuiTooltip-popper-227", - "popperInteractive": "MuiTooltip-popperInteractive-228", - "tooltip": "MuiTooltip-tooltip-229", - "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-234", - "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-231", - "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-232", - "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-233", - "touch": "MuiTooltip-touch-230", + "popper": "MuiTooltip-popper-229", + "popperInteractive": "MuiTooltip-popperInteractive-230", + "tooltip": "MuiTooltip-tooltip-231", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-236", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-233", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-234", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-235", + "touch": "MuiTooltip-touch-232", } } disableFocusListener={false} @@ -6706,7 +9762,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -6896,11 +9952,11 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="ellipsis" classes={ Object { - "active": "MuiTableSortLabel-active-236", - "icon": "MuiTableSortLabel-icon-237", - "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-239", - "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-238", - "root": "MuiTableSortLabel-root-235", + "active": "MuiTableSortLabel-active-238", + "icon": "MuiTableSortLabel-icon-239", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-241", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-240", + "root": "MuiTableSortLabel-root-237", } } direction="desc" @@ -6916,7 +9972,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <WithStyles(ButtonBase) aria-describedby={null} - className="MuiTableSortLabel-root-235 MuiTableSortLabel-active-236 ellipsis" + className="MuiTableSortLabel-root-237 MuiTableSortLabel-active-238 ellipsis" component="span" disableRipple={true} onBlur={[Function]} @@ -6931,12 +9987,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <ButtonBase aria-describedby={null} centerRipple={false} - className="MuiTableSortLabel-root-235 MuiTableSortLabel-active-236 ellipsis" + className="MuiTableSortLabel-root-237 MuiTableSortLabel-active-238 ellipsis" classes={ Object { - "disabled": "MuiButtonBase-disabled-225", - "focusVisible": "MuiButtonBase-focusVisible-226", - "root": "MuiButtonBase-root-224", + "disabled": "MuiButtonBase-disabled-227", + "focusVisible": "MuiButtonBase-focusVisible-228", + "root": "MuiButtonBase-root-226", } } component="span" @@ -6956,7 +10012,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <span aria-describedby={null} - className="MuiButtonBase-root-224 MuiTableSortLabel-root-235 MuiTableSortLabel-active-236 ellipsis" + className="MuiButtonBase-root-226 MuiTableSortLabel-root-237 MuiTableSortLabel-active-238 ellipsis" onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} @@ -6976,27 +10032,27 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > Uploaded on <pure(ArrowDownward) - className="MuiTableSortLabel-icon-237 MuiTableSortLabel-iconDirectionDesc-238" + className="MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" > <ArrowDownward - className="MuiTableSortLabel-icon-237 MuiTableSortLabel-iconDirectionDesc-238" + className="MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" > <WithStyles(SvgIcon) - className="MuiTableSortLabel-icon-237 MuiTableSortLabel-iconDirectionDesc-238" + className="MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" > <SvgIcon - className="MuiTableSortLabel-icon-237 MuiTableSortLabel-iconDirectionDesc-238" + className="MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-202", - "colorDisabled": "MuiSvgIcon-colorDisabled-204", - "colorError": "MuiSvgIcon-colorError-203", - "colorPrimary": "MuiSvgIcon-colorPrimary-200", - "colorSecondary": "MuiSvgIcon-colorSecondary-201", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-205", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-207", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-206", - "root": "MuiSvgIcon-root-199", + "colorAction": "MuiSvgIcon-colorAction-204", + "colorDisabled": "MuiSvgIcon-colorDisabled-206", + "colorError": "MuiSvgIcon-colorError-205", + "colorPrimary": "MuiSvgIcon-colorPrimary-202", + "colorSecondary": "MuiSvgIcon-colorSecondary-203", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-207", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-209", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-208", + "root": "MuiSvgIcon-root-201", } } color="inherit" @@ -7006,7 +10062,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <svg aria-hidden="true" - className="MuiSvgIcon-root-199 MuiTableSortLabel-icon-237 MuiTableSortLabel-iconDirectionDesc-238" + className="MuiSvgIcon-root-201 MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -7028,7 +10084,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <Popper anchorEl={ <span - class="MuiButtonBase-root-224 MuiTableSortLabel-root-235 MuiTableSortLabel-active-236 ellipsis" + class="MuiButtonBase-root-226 MuiTableSortLabel-root-237 MuiTableSortLabel-active-238 ellipsis" role="button" tabindex="0" title="Sort" @@ -7036,7 +10092,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip Uploaded on <svg aria-hidden="true" - class="MuiSvgIcon-root-199 MuiTableSortLabel-icon-237 MuiTableSortLabel-iconDirectionDesc-238" + class="MuiSvgIcon-root-201 MuiTableSortLabel-icon-239 MuiTableSortLabel-iconDirectionDesc-240" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -7047,7 +10103,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip </svg> </span> } - className="MuiTooltip-popper-227" + className="MuiTooltip-popper-229" disablePortal={false} id={null} open={false} @@ -7089,12 +10145,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip checkedIcon={<pure(CheckBox) />} classes={ Object { - "checked": "MuiCheckbox-checked-209", - "colorPrimary": "MuiCheckbox-colorPrimary-212", - "colorSecondary": "MuiCheckbox-colorSecondary-213", - "disabled": "MuiCheckbox-disabled-210", - "indeterminate": "MuiCheckbox-indeterminate-211", - "root": "MuiCheckbox-root-208", + "checked": "MuiCheckbox-checked-211", + "colorPrimary": "MuiCheckbox-colorPrimary-214", + "colorSecondary": "MuiCheckbox-colorSecondary-215", + "disabled": "MuiCheckbox-disabled-212", + "indeterminate": "MuiCheckbox-indeterminate-213", + "root": "MuiCheckbox-root-210", } } color="primary" @@ -7108,9 +10164,9 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="" classes={ Object { - "checked": "MuiCheckbox-checked-209", - "disabled": "MuiCheckbox-disabled-210", - "root": "MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212", + "checked": "MuiCheckbox-checked-211", + "disabled": "MuiCheckbox-disabled-212", + "root": "MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -7127,10 +10183,10 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="" classes={ Object { - "checked": "MuiPrivateSwitchBase-checked-215 MuiCheckbox-checked-209", - "disabled": "MuiPrivateSwitchBase-disabled-216 MuiCheckbox-disabled-210", - "input": "MuiPrivateSwitchBase-input-217", - "root": "MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212", + "checked": "MuiPrivateSwitchBase-checked-217 MuiCheckbox-checked-211", + "disabled": "MuiPrivateSwitchBase-disabled-218 MuiCheckbox-disabled-212", + "input": "MuiPrivateSwitchBase-input-219", + "root": "MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -7147,10 +10203,10 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="" classes={ Object { - "checked": "MuiPrivateSwitchBase-checked-215 MuiCheckbox-checked-209", - "disabled": "MuiPrivateSwitchBase-disabled-216 MuiCheckbox-disabled-210", - "input": "MuiPrivateSwitchBase-input-217", - "root": "MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212", + "checked": "MuiPrivateSwitchBase-checked-217 MuiCheckbox-checked-211", + "disabled": "MuiPrivateSwitchBase-disabled-218 MuiCheckbox-disabled-212", + "input": "MuiPrivateSwitchBase-input-219", + "root": "MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -7162,22 +10218,22 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip type="checkbox" > <WithStyles(IconButton) - className="MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" component="span" onBlur={[Function]} onFocus={[Function]} tabIndex={null} > <IconButton - className="MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-219", - "colorPrimary": "MuiIconButton-colorPrimary-220", - "colorSecondary": "MuiIconButton-colorSecondary-221", - "disabled": "MuiIconButton-disabled-222", - "label": "MuiIconButton-label-223", - "root": "MuiIconButton-root-218", + "colorInherit": "MuiIconButton-colorInherit-221", + "colorPrimary": "MuiIconButton-colorPrimary-222", + "colorSecondary": "MuiIconButton-colorSecondary-223", + "disabled": "MuiIconButton-disabled-224", + "label": "MuiIconButton-label-225", + "root": "MuiIconButton-root-220", } } color="default" @@ -7189,7 +10245,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-218 MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiIconButton-root-220 MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" component="span" disabled={false} focusRipple={true} @@ -7199,12 +10255,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <ButtonBase centerRipple={true} - className="MuiIconButton-root-218 MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiIconButton-root-220 MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" classes={ Object { - "disabled": "MuiButtonBase-disabled-225", - "focusVisible": "MuiButtonBase-focusVisible-226", - "root": "MuiButtonBase-root-224", + "disabled": "MuiButtonBase-disabled-227", + "focusVisible": "MuiButtonBase-focusVisible-228", + "root": "MuiButtonBase-root-226", } } component="span" @@ -7218,7 +10274,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip type="button" > <span - className="MuiButtonBase-root-224 MuiIconButton-root-218 MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiButtonBase-root-226 MuiIconButton-root-220 MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" onBlur={[Function]} onContextMenu={[Function]} onFocus={[Function]} @@ -7233,7 +10289,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip tabIndex={null} > <span - className="MuiIconButton-label-223" + className="MuiIconButton-label-225" > <pure(CheckBoxOutlineBlank)> <CheckBoxOutlineBlank> @@ -7241,15 +10297,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-202", - "colorDisabled": "MuiSvgIcon-colorDisabled-204", - "colorError": "MuiSvgIcon-colorError-203", - "colorPrimary": "MuiSvgIcon-colorPrimary-200", - "colorSecondary": "MuiSvgIcon-colorSecondary-201", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-205", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-207", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-206", - "root": "MuiSvgIcon-root-199", + "colorAction": "MuiSvgIcon-colorAction-204", + "colorDisabled": "MuiSvgIcon-colorDisabled-206", + "colorError": "MuiSvgIcon-colorError-205", + "colorPrimary": "MuiSvgIcon-colorPrimary-202", + "colorSecondary": "MuiSvgIcon-colorSecondary-203", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-207", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-209", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-208", + "root": "MuiSvgIcon-root-201", } } color="inherit" @@ -7259,7 +10315,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <svg aria-hidden="true" - className="MuiSvgIcon-root-199" + className="MuiSvgIcon-root-201" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -7274,7 +10330,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip </pure(CheckBoxOutlineBlank)> <input checked={false} - className="MuiPrivateSwitchBase-input-217" + className="MuiPrivateSwitchBase-input-219" data-indeterminate={false} onChange={[Function]} type="checkbox" @@ -7292,25 +10348,25 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip center={true} classes={ Object { - "child": "MuiTouchRipple-child-268", - "childLeaving": "MuiTouchRipple-childLeaving-269", - "childPulsate": "MuiTouchRipple-childPulsate-270", - "ripple": "MuiTouchRipple-ripple-265", - "ripplePulsate": "MuiTouchRipple-ripplePulsate-267", - "rippleVisible": "MuiTouchRipple-rippleVisible-266", - "root": "MuiTouchRipple-root-264", + "child": "MuiTouchRipple-child-270", + "childLeaving": "MuiTouchRipple-childLeaving-271", + "childPulsate": "MuiTouchRipple-childPulsate-272", + "ripple": "MuiTouchRipple-ripple-267", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-269", + "rippleVisible": "MuiTouchRipple-rippleVisible-268", + "root": "MuiTouchRipple-root-266", } } > <TransitionGroup childFactory={[Function]} - className="MuiTouchRipple-root-264" + className="MuiTouchRipple-root-266" component="span" enter={true} exit={true} > <span - className="MuiTouchRipple-root-264" + className="MuiTouchRipple-root-266" /> </TransitionGroup> </TouchRipple> @@ -7332,10 +10388,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip Array [ Object { "customRenderer": [Function], - "flex": 2, + "flex": 1, "label": "Version name", "sortKey": "name", }, + Object { + "customRenderer": [Function], + "flex": 3, + "label": "Description", + }, Object { "flex": 1, "label": "Uploaded on", @@ -7348,6 +10409,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip "id": "test-pipeline-version-id0", "otherFields": Array [ "test pipeline version name0", + undefined, "-", ], } @@ -7358,31 +10420,928 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip key="0" style={ Object { - "width": "66.66666666666666%", + "width": "20%", + } + } + > + <WithStyles(Tooltip) + enterDelay={300} + placement="bottom-start" + title="test pipeline version name0" + > + <Tooltip + TransitionComponent={[Function]} + classes={ + Object { + "popper": "MuiTooltip-popper-229", + "popperInteractive": "MuiTooltip-popperInteractive-230", + "tooltip": "MuiTooltip-tooltip-231", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-236", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-233", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-234", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-235", + "touch": "MuiTooltip-touch-232", + } + } + disableFocusListener={false} + disableHoverListener={false} + disableTouchListener={false} + enterDelay={300} + enterTouchDelay={1000} + interactive={false} + leaveDelay={0} + leaveTouchDelay={1500} + placement="bottom-start" + theme={ + Object { + "breakpoints": Object { + "between": [Function], + "down": [Function], + "keys": Array [ + "xs", + "sm", + "md", + "lg", + "xl", + ], + "only": [Function], + "up": [Function], + "values": Object { + "lg": 1280, + "md": 960, + "sm": 600, + "xl": 1920, + "xs": 0, + }, + "width": [Function], + }, + "direction": "ltr", + "mixins": Object { + "gutters": [Function], + "toolbar": Object { + "@media (min-width:0px) and (orientation: landscape)": Object { + "minHeight": 48, + }, + "@media (min-width:600px)": Object { + "minHeight": 64, + }, + "minHeight": 56, + }, + }, + "overrides": Object {}, + "palette": Object { + "action": Object { + "active": "rgba(0, 0, 0, 0.54)", + "disabled": "rgba(0, 0, 0, 0.26)", + "disabledBackground": "rgba(0, 0, 0, 0.12)", + "hover": "rgba(0, 0, 0, 0.08)", + "hoverOpacity": 0.08, + "selected": "rgba(0, 0, 0, 0.14)", + }, + "augmentColor": [Function], + "background": Object { + "default": "#fafafa", + "paper": "#fff", + }, + "common": Object { + "black": "#000", + "white": "#fff", + }, + "contrastThreshold": 3, + "divider": "rgba(0, 0, 0, 0.12)", + "error": Object { + "contrastText": "#fff", + "dark": "#d32f2f", + "light": "#e57373", + "main": "#f44336", + }, + "getContrastText": [Function], + "grey": Object { + "100": "#f5f5f5", + "200": "#eeeeee", + "300": "#e0e0e0", + "400": "#bdbdbd", + "50": "#fafafa", + "500": "#9e9e9e", + "600": "#757575", + "700": "#616161", + "800": "#424242", + "900": "#212121", + "A100": "#d5d5d5", + "A200": "#aaaaaa", + "A400": "#303030", + "A700": "#616161", + }, + "primary": Object { + "contrastText": "#fff", + "dark": "#303f9f", + "light": "#7986cb", + "main": "#3f51b5", + }, + "secondary": Object { + "contrastText": "#fff", + "dark": "#c51162", + "light": "#ff4081", + "main": "#f50057", + }, + "text": Object { + "disabled": "rgba(0, 0, 0, 0.38)", + "hint": "rgba(0, 0, 0, 0.38)", + "primary": "rgba(0, 0, 0, 0.87)", + "secondary": "rgba(0, 0, 0, 0.54)", + }, + "tonalOffset": 0.2, + "type": "light", + }, + "props": Object {}, + "shadows": Array [ + "none", + "0px 1px 3px 0px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12)", + "0px 1px 5px 0px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12)", + "0px 1px 8px 0px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12)", + "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)", + "0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)", + "0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)", + "0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)", + "0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)", + "0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)", + "0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)", + "0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)", + "0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)", + "0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)", + "0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)", + "0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)", + "0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)", + "0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)", + "0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)", + ], + "shape": Object { + "borderRadius": 4, + }, + "spacing": Object { + "unit": 8, + }, + "transitions": Object { + "create": [Function], + "duration": Object { + "complex": 375, + "enteringScreen": 225, + "leavingScreen": 195, + "short": 250, + "shorter": 200, + "shortest": 150, + "standard": 300, + }, + "easing": Object { + "easeIn": "cubic-bezier(0.4, 0, 1, 1)", + "easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)", + "easeOut": "cubic-bezier(0.0, 0, 0.2, 1)", + "sharp": "cubic-bezier(0.4, 0, 0.6, 1)", + }, + "getAutoHeightDuration": [Function], + }, + "typography": Object { + "body1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "lineHeight": "1.46429em", + }, + "body1Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.5, + }, + "body2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "lineHeight": "1.71429em", + }, + "body2Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "letterSpacing": "0.01071em", + "lineHeight": 1.5, + }, + "button": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "textTransform": "uppercase", + }, + "buttonNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.02857em", + "lineHeight": 1.75, + "textTransform": "uppercase", + }, + "caption": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "lineHeight": "1.375em", + }, + "captionNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.03333em", + "lineHeight": 1.66, + }, + "display1": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "lineHeight": "1.20588em", + }, + "display2": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.8125rem", + "fontWeight": 400, + "lineHeight": "1.13333em", + "marginLeft": "-.02em", + }, + "display3": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.5rem", + "fontWeight": 400, + "letterSpacing": "-.02em", + "lineHeight": "1.30357em", + "marginLeft": "-.02em", + }, + "display4": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "7rem", + "fontWeight": 300, + "letterSpacing": "-.04em", + "lineHeight": "1.14286em", + "marginLeft": "-.04em", + }, + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": 14, + "fontWeightLight": 300, + "fontWeightMedium": 500, + "fontWeightRegular": 400, + "h1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "6rem", + "fontWeight": 300, + "letterSpacing": "-0.01562em", + "lineHeight": 1, + }, + "h2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.75rem", + "fontWeight": 300, + "letterSpacing": "-0.00833em", + "lineHeight": 1, + }, + "h3": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.04, + }, + "h4": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "letterSpacing": "0.00735em", + "lineHeight": 1.17, + }, + "h5": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.33, + }, + "h6": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.25rem", + "fontWeight": 500, + "letterSpacing": "0.0075em", + "lineHeight": 1.6, + }, + "headline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "lineHeight": "1.35417em", + }, + "overline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.08333em", + "lineHeight": 2.66, + "textTransform": "uppercase", + }, + "pxToRem": [Function], + "round": [Function], + "subheading": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "lineHeight": "1.5em", + }, + "subtitle1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.75, + }, + "subtitle2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.00714em", + "lineHeight": 1.57, + }, + "title": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.3125rem", + "fontWeight": 500, + "lineHeight": "1.16667em", + }, + "useNextVariants": false, + }, + "zIndex": Object { + "appBar": 1100, + "drawer": 1200, + "mobileStepper": 1000, + "modal": 1300, + "snackbar": 1400, + "tooltip": 1500, + }, + } + } + title="test pipeline version name0" + > + <RootRef + rootRef={[Function]} + > + <Link + aria-describedby={null} + className="link" + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + replace={false} + title="test pipeline version name0" + to="/pipelines/details/pipeline/version/test-pipeline-version-id0?" + > + <a + aria-describedby={null} + className="link" + href="/pipelines/details/pipeline/version/test-pipeline-version-id0" + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="test pipeline version name0" + > + test pipeline version name0 + </a> + </Link> + </RootRef> + <Popper + anchorEl={ + <a + class="link" + href="/pipelines/details/pipeline/version/test-pipeline-version-id0" + title="test pipeline version name0" + > + test pipeline version name0 + </a> + } + className="MuiTooltip-popper-229" + disablePortal={false} + id={null} + open={false} + placement="bottom-start" + transition={true} + /> + </Tooltip> + </WithStyles(Tooltip)> + </div> + <div + className="cell" + key="1" + style={ + Object { + "width": "60%", } } > - <Link - className="link" - onClick={[Function]} - replace={false} - to="/pipelines/details/pipeline/version/test-pipeline-version-id0?" + <WithStyles(Tooltip) + enterDelay={300} + placement="bottom-start" + title="" > - <a - className="link" - href="/pipelines/details/pipeline/version/test-pipeline-version-id0" - onClick={[Function]} + <Tooltip + TransitionComponent={[Function]} + classes={ + Object { + "popper": "MuiTooltip-popper-229", + "popperInteractive": "MuiTooltip-popperInteractive-230", + "tooltip": "MuiTooltip-tooltip-231", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-236", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-233", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-234", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-235", + "touch": "MuiTooltip-touch-232", + } + } + disableFocusListener={false} + disableHoverListener={false} + disableTouchListener={false} + enterDelay={300} + enterTouchDelay={1000} + interactive={false} + leaveDelay={0} + leaveTouchDelay={1500} + placement="bottom-start" + theme={ + Object { + "breakpoints": Object { + "between": [Function], + "down": [Function], + "keys": Array [ + "xs", + "sm", + "md", + "lg", + "xl", + ], + "only": [Function], + "up": [Function], + "values": Object { + "lg": 1280, + "md": 960, + "sm": 600, + "xl": 1920, + "xs": 0, + }, + "width": [Function], + }, + "direction": "ltr", + "mixins": Object { + "gutters": [Function], + "toolbar": Object { + "@media (min-width:0px) and (orientation: landscape)": Object { + "minHeight": 48, + }, + "@media (min-width:600px)": Object { + "minHeight": 64, + }, + "minHeight": 56, + }, + }, + "overrides": Object {}, + "palette": Object { + "action": Object { + "active": "rgba(0, 0, 0, 0.54)", + "disabled": "rgba(0, 0, 0, 0.26)", + "disabledBackground": "rgba(0, 0, 0, 0.12)", + "hover": "rgba(0, 0, 0, 0.08)", + "hoverOpacity": 0.08, + "selected": "rgba(0, 0, 0, 0.14)", + }, + "augmentColor": [Function], + "background": Object { + "default": "#fafafa", + "paper": "#fff", + }, + "common": Object { + "black": "#000", + "white": "#fff", + }, + "contrastThreshold": 3, + "divider": "rgba(0, 0, 0, 0.12)", + "error": Object { + "contrastText": "#fff", + "dark": "#d32f2f", + "light": "#e57373", + "main": "#f44336", + }, + "getContrastText": [Function], + "grey": Object { + "100": "#f5f5f5", + "200": "#eeeeee", + "300": "#e0e0e0", + "400": "#bdbdbd", + "50": "#fafafa", + "500": "#9e9e9e", + "600": "#757575", + "700": "#616161", + "800": "#424242", + "900": "#212121", + "A100": "#d5d5d5", + "A200": "#aaaaaa", + "A400": "#303030", + "A700": "#616161", + }, + "primary": Object { + "contrastText": "#fff", + "dark": "#303f9f", + "light": "#7986cb", + "main": "#3f51b5", + }, + "secondary": Object { + "contrastText": "#fff", + "dark": "#c51162", + "light": "#ff4081", + "main": "#f50057", + }, + "text": Object { + "disabled": "rgba(0, 0, 0, 0.38)", + "hint": "rgba(0, 0, 0, 0.38)", + "primary": "rgba(0, 0, 0, 0.87)", + "secondary": "rgba(0, 0, 0, 0.54)", + }, + "tonalOffset": 0.2, + "type": "light", + }, + "props": Object {}, + "shadows": Array [ + "none", + "0px 1px 3px 0px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12)", + "0px 1px 5px 0px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12)", + "0px 1px 8px 0px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12)", + "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)", + "0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)", + "0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)", + "0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)", + "0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)", + "0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)", + "0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)", + "0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)", + "0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)", + "0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)", + "0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)", + "0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)", + "0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)", + "0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)", + "0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)", + ], + "shape": Object { + "borderRadius": 4, + }, + "spacing": Object { + "unit": 8, + }, + "transitions": Object { + "create": [Function], + "duration": Object { + "complex": 375, + "enteringScreen": 225, + "leavingScreen": 195, + "short": 250, + "shorter": 200, + "shortest": 150, + "standard": 300, + }, + "easing": Object { + "easeIn": "cubic-bezier(0.4, 0, 1, 1)", + "easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)", + "easeOut": "cubic-bezier(0.0, 0, 0.2, 1)", + "sharp": "cubic-bezier(0.4, 0, 0.6, 1)", + }, + "getAutoHeightDuration": [Function], + }, + "typography": Object { + "body1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "lineHeight": "1.46429em", + }, + "body1Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.5, + }, + "body2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "lineHeight": "1.71429em", + }, + "body2Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "letterSpacing": "0.01071em", + "lineHeight": 1.5, + }, + "button": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "textTransform": "uppercase", + }, + "buttonNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.02857em", + "lineHeight": 1.75, + "textTransform": "uppercase", + }, + "caption": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "lineHeight": "1.375em", + }, + "captionNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.03333em", + "lineHeight": 1.66, + }, + "display1": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "lineHeight": "1.20588em", + }, + "display2": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.8125rem", + "fontWeight": 400, + "lineHeight": "1.13333em", + "marginLeft": "-.02em", + }, + "display3": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.5rem", + "fontWeight": 400, + "letterSpacing": "-.02em", + "lineHeight": "1.30357em", + "marginLeft": "-.02em", + }, + "display4": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "7rem", + "fontWeight": 300, + "letterSpacing": "-.04em", + "lineHeight": "1.14286em", + "marginLeft": "-.04em", + }, + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": 14, + "fontWeightLight": 300, + "fontWeightMedium": 500, + "fontWeightRegular": 400, + "h1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "6rem", + "fontWeight": 300, + "letterSpacing": "-0.01562em", + "lineHeight": 1, + }, + "h2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.75rem", + "fontWeight": 300, + "letterSpacing": "-0.00833em", + "lineHeight": 1, + }, + "h3": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.04, + }, + "h4": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "letterSpacing": "0.00735em", + "lineHeight": 1.17, + }, + "h5": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.33, + }, + "h6": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.25rem", + "fontWeight": 500, + "letterSpacing": "0.0075em", + "lineHeight": 1.6, + }, + "headline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "lineHeight": "1.35417em", + }, + "overline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.08333em", + "lineHeight": 2.66, + "textTransform": "uppercase", + }, + "pxToRem": [Function], + "round": [Function], + "subheading": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "lineHeight": "1.5em", + }, + "subtitle1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.75, + }, + "subtitle2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.00714em", + "lineHeight": 1.57, + }, + "title": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.3125rem", + "fontWeight": 500, + "lineHeight": "1.16667em", + }, + "useNextVariants": false, + }, + "zIndex": Object { + "appBar": 1100, + "drawer": 1200, + "mobileStepper": 1000, + "modal": 1300, + "snackbar": 1400, + "tooltip": 1500, + }, + } + } + title="" > - test pipeline version name0 - </a> - </Link> + <RootRef + rootRef={[Function]} + > + <span + aria-describedby={null} + className="" + onBlur={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="" + > + <Description + description="" + forceInline={true} + > + <Markdown + options={ + Object { + "forceInline": true, + "namedCodesToUnicode": Object { + "amp": "&", + "apos": "'", + "gt": ">", + "lt": "<", + "nbsp": " ", + "quot": "“", + }, + "overrides": Object { + "a": Object { + "component": [Function], + }, + }, + "slugify": [Function], + } + } + > + <span + key="outer" + /> + </Markdown> + </Description> + </span> + </RootRef> + <Popper + anchorEl={ + <span + class="" + title="" + > + <span /> + </span> + } + className="MuiTooltip-popper-229" + disablePortal={false} + id={null} + open={false} + placement="bottom-start" + transition={true} + /> + </Tooltip> + </WithStyles(Tooltip)> </div> <div className="cell" - key="1" + key="2" style={ Object { - "width": "33.33333333333333%", + "width": "20%", } } > @@ -7414,12 +11373,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip checkedIcon={<pure(CheckBox) />} classes={ Object { - "checked": "MuiCheckbox-checked-209", - "colorPrimary": "MuiCheckbox-colorPrimary-212", - "colorSecondary": "MuiCheckbox-colorSecondary-213", - "disabled": "MuiCheckbox-disabled-210", - "indeterminate": "MuiCheckbox-indeterminate-211", - "root": "MuiCheckbox-root-208", + "checked": "MuiCheckbox-checked-211", + "colorPrimary": "MuiCheckbox-colorPrimary-214", + "colorSecondary": "MuiCheckbox-colorSecondary-215", + "disabled": "MuiCheckbox-disabled-212", + "indeterminate": "MuiCheckbox-indeterminate-213", + "root": "MuiCheckbox-root-210", } } color="primary" @@ -7433,9 +11392,9 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="" classes={ Object { - "checked": "MuiCheckbox-checked-209", - "disabled": "MuiCheckbox-disabled-210", - "root": "MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212", + "checked": "MuiCheckbox-checked-211", + "disabled": "MuiCheckbox-disabled-212", + "root": "MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -7452,10 +11411,10 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="" classes={ Object { - "checked": "MuiPrivateSwitchBase-checked-215 MuiCheckbox-checked-209", - "disabled": "MuiPrivateSwitchBase-disabled-216 MuiCheckbox-disabled-210", - "input": "MuiPrivateSwitchBase-input-217", - "root": "MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212", + "checked": "MuiPrivateSwitchBase-checked-217 MuiCheckbox-checked-211", + "disabled": "MuiPrivateSwitchBase-disabled-218 MuiCheckbox-disabled-212", + "input": "MuiPrivateSwitchBase-input-219", + "root": "MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -7472,10 +11431,10 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="" classes={ Object { - "checked": "MuiPrivateSwitchBase-checked-215 MuiCheckbox-checked-209", - "disabled": "MuiPrivateSwitchBase-disabled-216 MuiCheckbox-disabled-210", - "input": "MuiPrivateSwitchBase-input-217", - "root": "MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212", + "checked": "MuiPrivateSwitchBase-checked-217 MuiCheckbox-checked-211", + "disabled": "MuiPrivateSwitchBase-disabled-218 MuiCheckbox-disabled-212", + "input": "MuiPrivateSwitchBase-input-219", + "root": "MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -7487,22 +11446,22 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip type="checkbox" > <WithStyles(IconButton) - className="MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" component="span" onBlur={[Function]} onFocus={[Function]} tabIndex={null} > <IconButton - className="MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-219", - "colorPrimary": "MuiIconButton-colorPrimary-220", - "colorSecondary": "MuiIconButton-colorSecondary-221", - "disabled": "MuiIconButton-disabled-222", - "label": "MuiIconButton-label-223", - "root": "MuiIconButton-root-218", + "colorInherit": "MuiIconButton-colorInherit-221", + "colorPrimary": "MuiIconButton-colorPrimary-222", + "colorSecondary": "MuiIconButton-colorSecondary-223", + "disabled": "MuiIconButton-disabled-224", + "label": "MuiIconButton-label-225", + "root": "MuiIconButton-root-220", } } color="default" @@ -7514,7 +11473,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-218 MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiIconButton-root-220 MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" component="span" disabled={false} focusRipple={true} @@ -7524,12 +11483,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <ButtonBase centerRipple={true} - className="MuiIconButton-root-218 MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiIconButton-root-220 MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" classes={ Object { - "disabled": "MuiButtonBase-disabled-225", - "focusVisible": "MuiButtonBase-focusVisible-226", - "root": "MuiButtonBase-root-224", + "disabled": "MuiButtonBase-disabled-227", + "focusVisible": "MuiButtonBase-focusVisible-228", + "root": "MuiButtonBase-root-226", } } component="span" @@ -7543,7 +11502,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip type="button" > <span - className="MuiButtonBase-root-224 MuiIconButton-root-218 MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiButtonBase-root-226 MuiIconButton-root-220 MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" onBlur={[Function]} onContextMenu={[Function]} onFocus={[Function]} @@ -7558,7 +11517,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip tabIndex={null} > <span - className="MuiIconButton-label-223" + className="MuiIconButton-label-225" > <pure(CheckBoxOutlineBlank)> <CheckBoxOutlineBlank> @@ -7566,15 +11525,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-202", - "colorDisabled": "MuiSvgIcon-colorDisabled-204", - "colorError": "MuiSvgIcon-colorError-203", - "colorPrimary": "MuiSvgIcon-colorPrimary-200", - "colorSecondary": "MuiSvgIcon-colorSecondary-201", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-205", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-207", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-206", - "root": "MuiSvgIcon-root-199", + "colorAction": "MuiSvgIcon-colorAction-204", + "colorDisabled": "MuiSvgIcon-colorDisabled-206", + "colorError": "MuiSvgIcon-colorError-205", + "colorPrimary": "MuiSvgIcon-colorPrimary-202", + "colorSecondary": "MuiSvgIcon-colorSecondary-203", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-207", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-209", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-208", + "root": "MuiSvgIcon-root-201", } } color="inherit" @@ -7584,7 +11543,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <svg aria-hidden="true" - className="MuiSvgIcon-root-199" + className="MuiSvgIcon-root-201" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -7599,7 +11558,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip </pure(CheckBoxOutlineBlank)> <input checked={false} - className="MuiPrivateSwitchBase-input-217" + className="MuiPrivateSwitchBase-input-219" data-indeterminate={false} onChange={[Function]} type="checkbox" @@ -7617,25 +11576,25 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip center={true} classes={ Object { - "child": "MuiTouchRipple-child-268", - "childLeaving": "MuiTouchRipple-childLeaving-269", - "childPulsate": "MuiTouchRipple-childPulsate-270", - "ripple": "MuiTouchRipple-ripple-265", - "ripplePulsate": "MuiTouchRipple-ripplePulsate-267", - "rippleVisible": "MuiTouchRipple-rippleVisible-266", - "root": "MuiTouchRipple-root-264", + "child": "MuiTouchRipple-child-270", + "childLeaving": "MuiTouchRipple-childLeaving-271", + "childPulsate": "MuiTouchRipple-childPulsate-272", + "ripple": "MuiTouchRipple-ripple-267", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-269", + "rippleVisible": "MuiTouchRipple-rippleVisible-268", + "root": "MuiTouchRipple-root-266", } } > <TransitionGroup childFactory={[Function]} - className="MuiTouchRipple-root-264" + className="MuiTouchRipple-root-266" component="span" enter={true} exit={true} > <span - className="MuiTouchRipple-root-264" + className="MuiTouchRipple-root-266" /> </TransitionGroup> </TouchRipple> @@ -7657,10 +11616,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip Array [ Object { "customRenderer": [Function], - "flex": 2, + "flex": 1, "label": "Version name", "sortKey": "name", }, + Object { + "customRenderer": [Function], + "flex": 3, + "label": "Description", + }, Object { "flex": 1, "label": "Uploaded on", @@ -7673,6 +11637,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip "id": "test-pipeline-version-id1", "otherFields": Array [ "test pipeline version name1", + undefined, "-", ], } @@ -7683,31 +11648,928 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip key="0" style={ Object { - "width": "66.66666666666666%", + "width": "20%", } } > - <Link - className="link" - onClick={[Function]} - replace={false} - to="/pipelines/details/pipeline/version/test-pipeline-version-id1?" + <WithStyles(Tooltip) + enterDelay={300} + placement="bottom-start" + title="test pipeline version name1" > - <a - className="link" - href="/pipelines/details/pipeline/version/test-pipeline-version-id1" - onClick={[Function]} + <Tooltip + TransitionComponent={[Function]} + classes={ + Object { + "popper": "MuiTooltip-popper-229", + "popperInteractive": "MuiTooltip-popperInteractive-230", + "tooltip": "MuiTooltip-tooltip-231", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-236", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-233", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-234", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-235", + "touch": "MuiTooltip-touch-232", + } + } + disableFocusListener={false} + disableHoverListener={false} + disableTouchListener={false} + enterDelay={300} + enterTouchDelay={1000} + interactive={false} + leaveDelay={0} + leaveTouchDelay={1500} + placement="bottom-start" + theme={ + Object { + "breakpoints": Object { + "between": [Function], + "down": [Function], + "keys": Array [ + "xs", + "sm", + "md", + "lg", + "xl", + ], + "only": [Function], + "up": [Function], + "values": Object { + "lg": 1280, + "md": 960, + "sm": 600, + "xl": 1920, + "xs": 0, + }, + "width": [Function], + }, + "direction": "ltr", + "mixins": Object { + "gutters": [Function], + "toolbar": Object { + "@media (min-width:0px) and (orientation: landscape)": Object { + "minHeight": 48, + }, + "@media (min-width:600px)": Object { + "minHeight": 64, + }, + "minHeight": 56, + }, + }, + "overrides": Object {}, + "palette": Object { + "action": Object { + "active": "rgba(0, 0, 0, 0.54)", + "disabled": "rgba(0, 0, 0, 0.26)", + "disabledBackground": "rgba(0, 0, 0, 0.12)", + "hover": "rgba(0, 0, 0, 0.08)", + "hoverOpacity": 0.08, + "selected": "rgba(0, 0, 0, 0.14)", + }, + "augmentColor": [Function], + "background": Object { + "default": "#fafafa", + "paper": "#fff", + }, + "common": Object { + "black": "#000", + "white": "#fff", + }, + "contrastThreshold": 3, + "divider": "rgba(0, 0, 0, 0.12)", + "error": Object { + "contrastText": "#fff", + "dark": "#d32f2f", + "light": "#e57373", + "main": "#f44336", + }, + "getContrastText": [Function], + "grey": Object { + "100": "#f5f5f5", + "200": "#eeeeee", + "300": "#e0e0e0", + "400": "#bdbdbd", + "50": "#fafafa", + "500": "#9e9e9e", + "600": "#757575", + "700": "#616161", + "800": "#424242", + "900": "#212121", + "A100": "#d5d5d5", + "A200": "#aaaaaa", + "A400": "#303030", + "A700": "#616161", + }, + "primary": Object { + "contrastText": "#fff", + "dark": "#303f9f", + "light": "#7986cb", + "main": "#3f51b5", + }, + "secondary": Object { + "contrastText": "#fff", + "dark": "#c51162", + "light": "#ff4081", + "main": "#f50057", + }, + "text": Object { + "disabled": "rgba(0, 0, 0, 0.38)", + "hint": "rgba(0, 0, 0, 0.38)", + "primary": "rgba(0, 0, 0, 0.87)", + "secondary": "rgba(0, 0, 0, 0.54)", + }, + "tonalOffset": 0.2, + "type": "light", + }, + "props": Object {}, + "shadows": Array [ + "none", + "0px 1px 3px 0px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12)", + "0px 1px 5px 0px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12)", + "0px 1px 8px 0px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12)", + "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)", + "0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)", + "0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)", + "0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)", + "0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)", + "0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)", + "0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)", + "0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)", + "0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)", + "0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)", + "0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)", + "0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)", + "0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)", + "0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)", + "0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)", + ], + "shape": Object { + "borderRadius": 4, + }, + "spacing": Object { + "unit": 8, + }, + "transitions": Object { + "create": [Function], + "duration": Object { + "complex": 375, + "enteringScreen": 225, + "leavingScreen": 195, + "short": 250, + "shorter": 200, + "shortest": 150, + "standard": 300, + }, + "easing": Object { + "easeIn": "cubic-bezier(0.4, 0, 1, 1)", + "easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)", + "easeOut": "cubic-bezier(0.0, 0, 0.2, 1)", + "sharp": "cubic-bezier(0.4, 0, 0.6, 1)", + }, + "getAutoHeightDuration": [Function], + }, + "typography": Object { + "body1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "lineHeight": "1.46429em", + }, + "body1Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.5, + }, + "body2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "lineHeight": "1.71429em", + }, + "body2Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "letterSpacing": "0.01071em", + "lineHeight": 1.5, + }, + "button": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "textTransform": "uppercase", + }, + "buttonNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.02857em", + "lineHeight": 1.75, + "textTransform": "uppercase", + }, + "caption": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "lineHeight": "1.375em", + }, + "captionNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.03333em", + "lineHeight": 1.66, + }, + "display1": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "lineHeight": "1.20588em", + }, + "display2": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.8125rem", + "fontWeight": 400, + "lineHeight": "1.13333em", + "marginLeft": "-.02em", + }, + "display3": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.5rem", + "fontWeight": 400, + "letterSpacing": "-.02em", + "lineHeight": "1.30357em", + "marginLeft": "-.02em", + }, + "display4": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "7rem", + "fontWeight": 300, + "letterSpacing": "-.04em", + "lineHeight": "1.14286em", + "marginLeft": "-.04em", + }, + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": 14, + "fontWeightLight": 300, + "fontWeightMedium": 500, + "fontWeightRegular": 400, + "h1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "6rem", + "fontWeight": 300, + "letterSpacing": "-0.01562em", + "lineHeight": 1, + }, + "h2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.75rem", + "fontWeight": 300, + "letterSpacing": "-0.00833em", + "lineHeight": 1, + }, + "h3": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.04, + }, + "h4": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "letterSpacing": "0.00735em", + "lineHeight": 1.17, + }, + "h5": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.33, + }, + "h6": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.25rem", + "fontWeight": 500, + "letterSpacing": "0.0075em", + "lineHeight": 1.6, + }, + "headline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "lineHeight": "1.35417em", + }, + "overline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.08333em", + "lineHeight": 2.66, + "textTransform": "uppercase", + }, + "pxToRem": [Function], + "round": [Function], + "subheading": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "lineHeight": "1.5em", + }, + "subtitle1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.75, + }, + "subtitle2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.00714em", + "lineHeight": 1.57, + }, + "title": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.3125rem", + "fontWeight": 500, + "lineHeight": "1.16667em", + }, + "useNextVariants": false, + }, + "zIndex": Object { + "appBar": 1100, + "drawer": 1200, + "mobileStepper": 1000, + "modal": 1300, + "snackbar": 1400, + "tooltip": 1500, + }, + } + } + title="test pipeline version name1" > - test pipeline version name1 - </a> - </Link> + <RootRef + rootRef={[Function]} + > + <Link + aria-describedby={null} + className="link" + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + replace={false} + title="test pipeline version name1" + to="/pipelines/details/pipeline/version/test-pipeline-version-id1?" + > + <a + aria-describedby={null} + className="link" + href="/pipelines/details/pipeline/version/test-pipeline-version-id1" + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="test pipeline version name1" + > + test pipeline version name1 + </a> + </Link> + </RootRef> + <Popper + anchorEl={ + <a + class="link" + href="/pipelines/details/pipeline/version/test-pipeline-version-id1" + title="test pipeline version name1" + > + test pipeline version name1 + </a> + } + className="MuiTooltip-popper-229" + disablePortal={false} + id={null} + open={false} + placement="bottom-start" + transition={true} + /> + </Tooltip> + </WithStyles(Tooltip)> </div> <div className="cell" key="1" style={ Object { - "width": "33.33333333333333%", + "width": "60%", + } + } + > + <WithStyles(Tooltip) + enterDelay={300} + placement="bottom-start" + title="" + > + <Tooltip + TransitionComponent={[Function]} + classes={ + Object { + "popper": "MuiTooltip-popper-229", + "popperInteractive": "MuiTooltip-popperInteractive-230", + "tooltip": "MuiTooltip-tooltip-231", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-236", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-233", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-234", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-235", + "touch": "MuiTooltip-touch-232", + } + } + disableFocusListener={false} + disableHoverListener={false} + disableTouchListener={false} + enterDelay={300} + enterTouchDelay={1000} + interactive={false} + leaveDelay={0} + leaveTouchDelay={1500} + placement="bottom-start" + theme={ + Object { + "breakpoints": Object { + "between": [Function], + "down": [Function], + "keys": Array [ + "xs", + "sm", + "md", + "lg", + "xl", + ], + "only": [Function], + "up": [Function], + "values": Object { + "lg": 1280, + "md": 960, + "sm": 600, + "xl": 1920, + "xs": 0, + }, + "width": [Function], + }, + "direction": "ltr", + "mixins": Object { + "gutters": [Function], + "toolbar": Object { + "@media (min-width:0px) and (orientation: landscape)": Object { + "minHeight": 48, + }, + "@media (min-width:600px)": Object { + "minHeight": 64, + }, + "minHeight": 56, + }, + }, + "overrides": Object {}, + "palette": Object { + "action": Object { + "active": "rgba(0, 0, 0, 0.54)", + "disabled": "rgba(0, 0, 0, 0.26)", + "disabledBackground": "rgba(0, 0, 0, 0.12)", + "hover": "rgba(0, 0, 0, 0.08)", + "hoverOpacity": 0.08, + "selected": "rgba(0, 0, 0, 0.14)", + }, + "augmentColor": [Function], + "background": Object { + "default": "#fafafa", + "paper": "#fff", + }, + "common": Object { + "black": "#000", + "white": "#fff", + }, + "contrastThreshold": 3, + "divider": "rgba(0, 0, 0, 0.12)", + "error": Object { + "contrastText": "#fff", + "dark": "#d32f2f", + "light": "#e57373", + "main": "#f44336", + }, + "getContrastText": [Function], + "grey": Object { + "100": "#f5f5f5", + "200": "#eeeeee", + "300": "#e0e0e0", + "400": "#bdbdbd", + "50": "#fafafa", + "500": "#9e9e9e", + "600": "#757575", + "700": "#616161", + "800": "#424242", + "900": "#212121", + "A100": "#d5d5d5", + "A200": "#aaaaaa", + "A400": "#303030", + "A700": "#616161", + }, + "primary": Object { + "contrastText": "#fff", + "dark": "#303f9f", + "light": "#7986cb", + "main": "#3f51b5", + }, + "secondary": Object { + "contrastText": "#fff", + "dark": "#c51162", + "light": "#ff4081", + "main": "#f50057", + }, + "text": Object { + "disabled": "rgba(0, 0, 0, 0.38)", + "hint": "rgba(0, 0, 0, 0.38)", + "primary": "rgba(0, 0, 0, 0.87)", + "secondary": "rgba(0, 0, 0, 0.54)", + }, + "tonalOffset": 0.2, + "type": "light", + }, + "props": Object {}, + "shadows": Array [ + "none", + "0px 1px 3px 0px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12)", + "0px 1px 5px 0px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12)", + "0px 1px 8px 0px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12)", + "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)", + "0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)", + "0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)", + "0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)", + "0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)", + "0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)", + "0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)", + "0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)", + "0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)", + "0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)", + "0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)", + "0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)", + "0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)", + "0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)", + "0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)", + ], + "shape": Object { + "borderRadius": 4, + }, + "spacing": Object { + "unit": 8, + }, + "transitions": Object { + "create": [Function], + "duration": Object { + "complex": 375, + "enteringScreen": 225, + "leavingScreen": 195, + "short": 250, + "shorter": 200, + "shortest": 150, + "standard": 300, + }, + "easing": Object { + "easeIn": "cubic-bezier(0.4, 0, 1, 1)", + "easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)", + "easeOut": "cubic-bezier(0.0, 0, 0.2, 1)", + "sharp": "cubic-bezier(0.4, 0, 0.6, 1)", + }, + "getAutoHeightDuration": [Function], + }, + "typography": Object { + "body1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "lineHeight": "1.46429em", + }, + "body1Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.5, + }, + "body2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "lineHeight": "1.71429em", + }, + "body2Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "letterSpacing": "0.01071em", + "lineHeight": 1.5, + }, + "button": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "textTransform": "uppercase", + }, + "buttonNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.02857em", + "lineHeight": 1.75, + "textTransform": "uppercase", + }, + "caption": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "lineHeight": "1.375em", + }, + "captionNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.03333em", + "lineHeight": 1.66, + }, + "display1": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "lineHeight": "1.20588em", + }, + "display2": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.8125rem", + "fontWeight": 400, + "lineHeight": "1.13333em", + "marginLeft": "-.02em", + }, + "display3": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.5rem", + "fontWeight": 400, + "letterSpacing": "-.02em", + "lineHeight": "1.30357em", + "marginLeft": "-.02em", + }, + "display4": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "7rem", + "fontWeight": 300, + "letterSpacing": "-.04em", + "lineHeight": "1.14286em", + "marginLeft": "-.04em", + }, + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": 14, + "fontWeightLight": 300, + "fontWeightMedium": 500, + "fontWeightRegular": 400, + "h1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "6rem", + "fontWeight": 300, + "letterSpacing": "-0.01562em", + "lineHeight": 1, + }, + "h2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.75rem", + "fontWeight": 300, + "letterSpacing": "-0.00833em", + "lineHeight": 1, + }, + "h3": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.04, + }, + "h4": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "letterSpacing": "0.00735em", + "lineHeight": 1.17, + }, + "h5": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.33, + }, + "h6": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.25rem", + "fontWeight": 500, + "letterSpacing": "0.0075em", + "lineHeight": 1.6, + }, + "headline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "lineHeight": "1.35417em", + }, + "overline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.08333em", + "lineHeight": 2.66, + "textTransform": "uppercase", + }, + "pxToRem": [Function], + "round": [Function], + "subheading": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "lineHeight": "1.5em", + }, + "subtitle1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.75, + }, + "subtitle2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.00714em", + "lineHeight": 1.57, + }, + "title": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.3125rem", + "fontWeight": 500, + "lineHeight": "1.16667em", + }, + "useNextVariants": false, + }, + "zIndex": Object { + "appBar": 1100, + "drawer": 1200, + "mobileStepper": 1000, + "modal": 1300, + "snackbar": 1400, + "tooltip": 1500, + }, + } + } + title="" + > + <RootRef + rootRef={[Function]} + > + <span + aria-describedby={null} + className="" + onBlur={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="" + > + <Description + description="" + forceInline={true} + > + <Markdown + options={ + Object { + "forceInline": true, + "namedCodesToUnicode": Object { + "amp": "&", + "apos": "'", + "gt": ">", + "lt": "<", + "nbsp": " ", + "quot": "“", + }, + "overrides": Object { + "a": Object { + "component": [Function], + }, + }, + "slugify": [Function], + } + } + > + <span + key="outer" + /> + </Markdown> + </Description> + </span> + </RootRef> + <Popper + anchorEl={ + <span + class="" + title="" + > + <span /> + </span> + } + className="MuiTooltip-popper-229" + disablePortal={false} + id={null} + open={false} + placement="bottom-start" + transition={true} + /> + </Tooltip> + </WithStyles(Tooltip)> + </div> + <div + className="cell" + key="2" + style={ + Object { + "width": "20%", } } > @@ -7739,12 +12601,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip checkedIcon={<pure(CheckBox) />} classes={ Object { - "checked": "MuiCheckbox-checked-209", - "colorPrimary": "MuiCheckbox-colorPrimary-212", - "colorSecondary": "MuiCheckbox-colorSecondary-213", - "disabled": "MuiCheckbox-disabled-210", - "indeterminate": "MuiCheckbox-indeterminate-211", - "root": "MuiCheckbox-root-208", + "checked": "MuiCheckbox-checked-211", + "colorPrimary": "MuiCheckbox-colorPrimary-214", + "colorSecondary": "MuiCheckbox-colorSecondary-215", + "disabled": "MuiCheckbox-disabled-212", + "indeterminate": "MuiCheckbox-indeterminate-213", + "root": "MuiCheckbox-root-210", } } color="primary" @@ -7758,9 +12620,9 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="" classes={ Object { - "checked": "MuiCheckbox-checked-209", - "disabled": "MuiCheckbox-disabled-210", - "root": "MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212", + "checked": "MuiCheckbox-checked-211", + "disabled": "MuiCheckbox-disabled-212", + "root": "MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -7777,10 +12639,10 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="" classes={ Object { - "checked": "MuiPrivateSwitchBase-checked-215 MuiCheckbox-checked-209", - "disabled": "MuiPrivateSwitchBase-disabled-216 MuiCheckbox-disabled-210", - "input": "MuiPrivateSwitchBase-input-217", - "root": "MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212", + "checked": "MuiPrivateSwitchBase-checked-217 MuiCheckbox-checked-211", + "disabled": "MuiPrivateSwitchBase-disabled-218 MuiCheckbox-disabled-212", + "input": "MuiPrivateSwitchBase-input-219", + "root": "MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -7797,10 +12659,10 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="" classes={ Object { - "checked": "MuiPrivateSwitchBase-checked-215 MuiCheckbox-checked-209", - "disabled": "MuiPrivateSwitchBase-disabled-216 MuiCheckbox-disabled-210", - "input": "MuiPrivateSwitchBase-input-217", - "root": "MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212", + "checked": "MuiPrivateSwitchBase-checked-217 MuiCheckbox-checked-211", + "disabled": "MuiPrivateSwitchBase-disabled-218 MuiCheckbox-disabled-212", + "input": "MuiPrivateSwitchBase-input-219", + "root": "MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -7812,22 +12674,22 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip type="checkbox" > <WithStyles(IconButton) - className="MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" component="span" onBlur={[Function]} onFocus={[Function]} tabIndex={null} > <IconButton - className="MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-219", - "colorPrimary": "MuiIconButton-colorPrimary-220", - "colorSecondary": "MuiIconButton-colorSecondary-221", - "disabled": "MuiIconButton-disabled-222", - "label": "MuiIconButton-label-223", - "root": "MuiIconButton-root-218", + "colorInherit": "MuiIconButton-colorInherit-221", + "colorPrimary": "MuiIconButton-colorPrimary-222", + "colorSecondary": "MuiIconButton-colorSecondary-223", + "disabled": "MuiIconButton-disabled-224", + "label": "MuiIconButton-label-225", + "root": "MuiIconButton-root-220", } } color="default" @@ -7839,7 +12701,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-218 MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiIconButton-root-220 MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" component="span" disabled={false} focusRipple={true} @@ -7849,12 +12711,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <ButtonBase centerRipple={true} - className="MuiIconButton-root-218 MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiIconButton-root-220 MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" classes={ Object { - "disabled": "MuiButtonBase-disabled-225", - "focusVisible": "MuiButtonBase-focusVisible-226", - "root": "MuiButtonBase-root-224", + "disabled": "MuiButtonBase-disabled-227", + "focusVisible": "MuiButtonBase-focusVisible-228", + "root": "MuiButtonBase-root-226", } } component="span" @@ -7868,7 +12730,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip type="button" > <span - className="MuiButtonBase-root-224 MuiIconButton-root-218 MuiPrivateSwitchBase-root-214 MuiCheckbox-root-208 MuiCheckbox-colorPrimary-212" + className="MuiButtonBase-root-226 MuiIconButton-root-220 MuiPrivateSwitchBase-root-216 MuiCheckbox-root-210 MuiCheckbox-colorPrimary-214" onBlur={[Function]} onContextMenu={[Function]} onFocus={[Function]} @@ -7883,7 +12745,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip tabIndex={null} > <span - className="MuiIconButton-label-223" + className="MuiIconButton-label-225" > <pure(CheckBoxOutlineBlank)> <CheckBoxOutlineBlank> @@ -7891,15 +12753,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-202", - "colorDisabled": "MuiSvgIcon-colorDisabled-204", - "colorError": "MuiSvgIcon-colorError-203", - "colorPrimary": "MuiSvgIcon-colorPrimary-200", - "colorSecondary": "MuiSvgIcon-colorSecondary-201", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-205", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-207", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-206", - "root": "MuiSvgIcon-root-199", + "colorAction": "MuiSvgIcon-colorAction-204", + "colorDisabled": "MuiSvgIcon-colorDisabled-206", + "colorError": "MuiSvgIcon-colorError-205", + "colorPrimary": "MuiSvgIcon-colorPrimary-202", + "colorSecondary": "MuiSvgIcon-colorSecondary-203", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-207", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-209", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-208", + "root": "MuiSvgIcon-root-201", } } color="inherit" @@ -7909,7 +12771,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <svg aria-hidden="true" - className="MuiSvgIcon-root-199" + className="MuiSvgIcon-root-201" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -7924,7 +12786,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip </pure(CheckBoxOutlineBlank)> <input checked={false} - className="MuiPrivateSwitchBase-input-217" + className="MuiPrivateSwitchBase-input-219" data-indeterminate={false} onChange={[Function]} type="checkbox" @@ -7942,25 +12804,25 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip center={true} classes={ Object { - "child": "MuiTouchRipple-child-268", - "childLeaving": "MuiTouchRipple-childLeaving-269", - "childPulsate": "MuiTouchRipple-childPulsate-270", - "ripple": "MuiTouchRipple-ripple-265", - "ripplePulsate": "MuiTouchRipple-ripplePulsate-267", - "rippleVisible": "MuiTouchRipple-rippleVisible-266", - "root": "MuiTouchRipple-root-264", + "child": "MuiTouchRipple-child-270", + "childLeaving": "MuiTouchRipple-childLeaving-271", + "childPulsate": "MuiTouchRipple-childPulsate-272", + "ripple": "MuiTouchRipple-ripple-267", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-269", + "rippleVisible": "MuiTouchRipple-rippleVisible-268", + "root": "MuiTouchRipple-root-266", } } > <TransitionGroup childFactory={[Function]} - className="MuiTouchRipple-root-264" + className="MuiTouchRipple-root-266" component="span" enter={true} exit={true} > <span - className="MuiTouchRipple-root-264" + className="MuiTouchRipple-root-266" /> </TransitionGroup> </TouchRipple> @@ -7982,10 +12844,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip Array [ Object { "customRenderer": [Function], - "flex": 2, + "flex": 1, "label": "Version name", "sortKey": "name", }, + Object { + "customRenderer": [Function], + "flex": 3, + "label": "Description", + }, Object { "flex": 1, "label": "Uploaded on", @@ -7998,6 +12865,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip "id": "test-pipeline-version-id2", "otherFields": Array [ "test pipeline version name2", + undefined, "-", ], } @@ -8008,31 +12876,928 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip key="0" style={ Object { - "width": "66.66666666666666%", + "width": "20%", } } > - <Link - className="link" - onClick={[Function]} - replace={false} - to="/pipelines/details/pipeline/version/test-pipeline-version-id2?" + <WithStyles(Tooltip) + enterDelay={300} + placement="bottom-start" + title="test pipeline version name2" > - <a - className="link" - href="/pipelines/details/pipeline/version/test-pipeline-version-id2" - onClick={[Function]} + <Tooltip + TransitionComponent={[Function]} + classes={ + Object { + "popper": "MuiTooltip-popper-229", + "popperInteractive": "MuiTooltip-popperInteractive-230", + "tooltip": "MuiTooltip-tooltip-231", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-236", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-233", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-234", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-235", + "touch": "MuiTooltip-touch-232", + } + } + disableFocusListener={false} + disableHoverListener={false} + disableTouchListener={false} + enterDelay={300} + enterTouchDelay={1000} + interactive={false} + leaveDelay={0} + leaveTouchDelay={1500} + placement="bottom-start" + theme={ + Object { + "breakpoints": Object { + "between": [Function], + "down": [Function], + "keys": Array [ + "xs", + "sm", + "md", + "lg", + "xl", + ], + "only": [Function], + "up": [Function], + "values": Object { + "lg": 1280, + "md": 960, + "sm": 600, + "xl": 1920, + "xs": 0, + }, + "width": [Function], + }, + "direction": "ltr", + "mixins": Object { + "gutters": [Function], + "toolbar": Object { + "@media (min-width:0px) and (orientation: landscape)": Object { + "minHeight": 48, + }, + "@media (min-width:600px)": Object { + "minHeight": 64, + }, + "minHeight": 56, + }, + }, + "overrides": Object {}, + "palette": Object { + "action": Object { + "active": "rgba(0, 0, 0, 0.54)", + "disabled": "rgba(0, 0, 0, 0.26)", + "disabledBackground": "rgba(0, 0, 0, 0.12)", + "hover": "rgba(0, 0, 0, 0.08)", + "hoverOpacity": 0.08, + "selected": "rgba(0, 0, 0, 0.14)", + }, + "augmentColor": [Function], + "background": Object { + "default": "#fafafa", + "paper": "#fff", + }, + "common": Object { + "black": "#000", + "white": "#fff", + }, + "contrastThreshold": 3, + "divider": "rgba(0, 0, 0, 0.12)", + "error": Object { + "contrastText": "#fff", + "dark": "#d32f2f", + "light": "#e57373", + "main": "#f44336", + }, + "getContrastText": [Function], + "grey": Object { + "100": "#f5f5f5", + "200": "#eeeeee", + "300": "#e0e0e0", + "400": "#bdbdbd", + "50": "#fafafa", + "500": "#9e9e9e", + "600": "#757575", + "700": "#616161", + "800": "#424242", + "900": "#212121", + "A100": "#d5d5d5", + "A200": "#aaaaaa", + "A400": "#303030", + "A700": "#616161", + }, + "primary": Object { + "contrastText": "#fff", + "dark": "#303f9f", + "light": "#7986cb", + "main": "#3f51b5", + }, + "secondary": Object { + "contrastText": "#fff", + "dark": "#c51162", + "light": "#ff4081", + "main": "#f50057", + }, + "text": Object { + "disabled": "rgba(0, 0, 0, 0.38)", + "hint": "rgba(0, 0, 0, 0.38)", + "primary": "rgba(0, 0, 0, 0.87)", + "secondary": "rgba(0, 0, 0, 0.54)", + }, + "tonalOffset": 0.2, + "type": "light", + }, + "props": Object {}, + "shadows": Array [ + "none", + "0px 1px 3px 0px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12)", + "0px 1px 5px 0px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12)", + "0px 1px 8px 0px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12)", + "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)", + "0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)", + "0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)", + "0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)", + "0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)", + "0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)", + "0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)", + "0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)", + "0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)", + "0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)", + "0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)", + "0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)", + "0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)", + "0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)", + "0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)", + ], + "shape": Object { + "borderRadius": 4, + }, + "spacing": Object { + "unit": 8, + }, + "transitions": Object { + "create": [Function], + "duration": Object { + "complex": 375, + "enteringScreen": 225, + "leavingScreen": 195, + "short": 250, + "shorter": 200, + "shortest": 150, + "standard": 300, + }, + "easing": Object { + "easeIn": "cubic-bezier(0.4, 0, 1, 1)", + "easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)", + "easeOut": "cubic-bezier(0.0, 0, 0.2, 1)", + "sharp": "cubic-bezier(0.4, 0, 0.6, 1)", + }, + "getAutoHeightDuration": [Function], + }, + "typography": Object { + "body1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "lineHeight": "1.46429em", + }, + "body1Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.5, + }, + "body2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "lineHeight": "1.71429em", + }, + "body2Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "letterSpacing": "0.01071em", + "lineHeight": 1.5, + }, + "button": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "textTransform": "uppercase", + }, + "buttonNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.02857em", + "lineHeight": 1.75, + "textTransform": "uppercase", + }, + "caption": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "lineHeight": "1.375em", + }, + "captionNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.03333em", + "lineHeight": 1.66, + }, + "display1": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "lineHeight": "1.20588em", + }, + "display2": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.8125rem", + "fontWeight": 400, + "lineHeight": "1.13333em", + "marginLeft": "-.02em", + }, + "display3": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.5rem", + "fontWeight": 400, + "letterSpacing": "-.02em", + "lineHeight": "1.30357em", + "marginLeft": "-.02em", + }, + "display4": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "7rem", + "fontWeight": 300, + "letterSpacing": "-.04em", + "lineHeight": "1.14286em", + "marginLeft": "-.04em", + }, + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": 14, + "fontWeightLight": 300, + "fontWeightMedium": 500, + "fontWeightRegular": 400, + "h1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "6rem", + "fontWeight": 300, + "letterSpacing": "-0.01562em", + "lineHeight": 1, + }, + "h2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.75rem", + "fontWeight": 300, + "letterSpacing": "-0.00833em", + "lineHeight": 1, + }, + "h3": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.04, + }, + "h4": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "letterSpacing": "0.00735em", + "lineHeight": 1.17, + }, + "h5": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.33, + }, + "h6": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.25rem", + "fontWeight": 500, + "letterSpacing": "0.0075em", + "lineHeight": 1.6, + }, + "headline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "lineHeight": "1.35417em", + }, + "overline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.08333em", + "lineHeight": 2.66, + "textTransform": "uppercase", + }, + "pxToRem": [Function], + "round": [Function], + "subheading": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "lineHeight": "1.5em", + }, + "subtitle1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.75, + }, + "subtitle2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.00714em", + "lineHeight": 1.57, + }, + "title": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.3125rem", + "fontWeight": 500, + "lineHeight": "1.16667em", + }, + "useNextVariants": false, + }, + "zIndex": Object { + "appBar": 1100, + "drawer": 1200, + "mobileStepper": 1000, + "modal": 1300, + "snackbar": 1400, + "tooltip": 1500, + }, + } + } + title="test pipeline version name2" > - test pipeline version name2 - </a> - </Link> + <RootRef + rootRef={[Function]} + > + <Link + aria-describedby={null} + className="link" + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + replace={false} + title="test pipeline version name2" + to="/pipelines/details/pipeline/version/test-pipeline-version-id2?" + > + <a + aria-describedby={null} + className="link" + href="/pipelines/details/pipeline/version/test-pipeline-version-id2" + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="test pipeline version name2" + > + test pipeline version name2 + </a> + </Link> + </RootRef> + <Popper + anchorEl={ + <a + class="link" + href="/pipelines/details/pipeline/version/test-pipeline-version-id2" + title="test pipeline version name2" + > + test pipeline version name2 + </a> + } + className="MuiTooltip-popper-229" + disablePortal={false} + id={null} + open={false} + placement="bottom-start" + transition={true} + /> + </Tooltip> + </WithStyles(Tooltip)> </div> <div className="cell" key="1" style={ Object { - "width": "33.33333333333333%", + "width": "60%", + } + } + > + <WithStyles(Tooltip) + enterDelay={300} + placement="bottom-start" + title="" + > + <Tooltip + TransitionComponent={[Function]} + classes={ + Object { + "popper": "MuiTooltip-popper-229", + "popperInteractive": "MuiTooltip-popperInteractive-230", + "tooltip": "MuiTooltip-tooltip-231", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-236", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-233", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-234", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-235", + "touch": "MuiTooltip-touch-232", + } + } + disableFocusListener={false} + disableHoverListener={false} + disableTouchListener={false} + enterDelay={300} + enterTouchDelay={1000} + interactive={false} + leaveDelay={0} + leaveTouchDelay={1500} + placement="bottom-start" + theme={ + Object { + "breakpoints": Object { + "between": [Function], + "down": [Function], + "keys": Array [ + "xs", + "sm", + "md", + "lg", + "xl", + ], + "only": [Function], + "up": [Function], + "values": Object { + "lg": 1280, + "md": 960, + "sm": 600, + "xl": 1920, + "xs": 0, + }, + "width": [Function], + }, + "direction": "ltr", + "mixins": Object { + "gutters": [Function], + "toolbar": Object { + "@media (min-width:0px) and (orientation: landscape)": Object { + "minHeight": 48, + }, + "@media (min-width:600px)": Object { + "minHeight": 64, + }, + "minHeight": 56, + }, + }, + "overrides": Object {}, + "palette": Object { + "action": Object { + "active": "rgba(0, 0, 0, 0.54)", + "disabled": "rgba(0, 0, 0, 0.26)", + "disabledBackground": "rgba(0, 0, 0, 0.12)", + "hover": "rgba(0, 0, 0, 0.08)", + "hoverOpacity": 0.08, + "selected": "rgba(0, 0, 0, 0.14)", + }, + "augmentColor": [Function], + "background": Object { + "default": "#fafafa", + "paper": "#fff", + }, + "common": Object { + "black": "#000", + "white": "#fff", + }, + "contrastThreshold": 3, + "divider": "rgba(0, 0, 0, 0.12)", + "error": Object { + "contrastText": "#fff", + "dark": "#d32f2f", + "light": "#e57373", + "main": "#f44336", + }, + "getContrastText": [Function], + "grey": Object { + "100": "#f5f5f5", + "200": "#eeeeee", + "300": "#e0e0e0", + "400": "#bdbdbd", + "50": "#fafafa", + "500": "#9e9e9e", + "600": "#757575", + "700": "#616161", + "800": "#424242", + "900": "#212121", + "A100": "#d5d5d5", + "A200": "#aaaaaa", + "A400": "#303030", + "A700": "#616161", + }, + "primary": Object { + "contrastText": "#fff", + "dark": "#303f9f", + "light": "#7986cb", + "main": "#3f51b5", + }, + "secondary": Object { + "contrastText": "#fff", + "dark": "#c51162", + "light": "#ff4081", + "main": "#f50057", + }, + "text": Object { + "disabled": "rgba(0, 0, 0, 0.38)", + "hint": "rgba(0, 0, 0, 0.38)", + "primary": "rgba(0, 0, 0, 0.87)", + "secondary": "rgba(0, 0, 0, 0.54)", + }, + "tonalOffset": 0.2, + "type": "light", + }, + "props": Object {}, + "shadows": Array [ + "none", + "0px 1px 3px 0px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12)", + "0px 1px 5px 0px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12)", + "0px 1px 8px 0px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12)", + "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)", + "0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)", + "0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)", + "0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)", + "0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)", + "0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)", + "0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)", + "0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)", + "0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)", + "0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)", + "0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)", + "0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)", + "0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)", + "0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)", + "0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)", + "0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)", + "0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)", + "0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)", + ], + "shape": Object { + "borderRadius": 4, + }, + "spacing": Object { + "unit": 8, + }, + "transitions": Object { + "create": [Function], + "duration": Object { + "complex": 375, + "enteringScreen": 225, + "leavingScreen": 195, + "short": 250, + "shorter": 200, + "shortest": 150, + "standard": 300, + }, + "easing": Object { + "easeIn": "cubic-bezier(0.4, 0, 1, 1)", + "easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)", + "easeOut": "cubic-bezier(0.0, 0, 0.2, 1)", + "sharp": "cubic-bezier(0.4, 0, 0.6, 1)", + }, + "getAutoHeightDuration": [Function], + }, + "typography": Object { + "body1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "lineHeight": "1.46429em", + }, + "body1Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.5, + }, + "body2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "lineHeight": "1.71429em", + }, + "body2Next": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 400, + "letterSpacing": "0.01071em", + "lineHeight": 1.5, + }, + "button": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "textTransform": "uppercase", + }, + "buttonNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.02857em", + "lineHeight": 1.75, + "textTransform": "uppercase", + }, + "caption": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "lineHeight": "1.375em", + }, + "captionNext": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.03333em", + "lineHeight": 1.66, + }, + "display1": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "lineHeight": "1.20588em", + }, + "display2": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.8125rem", + "fontWeight": 400, + "lineHeight": "1.13333em", + "marginLeft": "-.02em", + }, + "display3": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.5rem", + "fontWeight": 400, + "letterSpacing": "-.02em", + "lineHeight": "1.30357em", + "marginLeft": "-.02em", + }, + "display4": Object { + "color": "rgba(0, 0, 0, 0.54)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "7rem", + "fontWeight": 300, + "letterSpacing": "-.04em", + "lineHeight": "1.14286em", + "marginLeft": "-.04em", + }, + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": 14, + "fontWeightLight": 300, + "fontWeightMedium": 500, + "fontWeightRegular": 400, + "h1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "6rem", + "fontWeight": 300, + "letterSpacing": "-0.01562em", + "lineHeight": 1, + }, + "h2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3.75rem", + "fontWeight": 300, + "letterSpacing": "-0.00833em", + "lineHeight": 1, + }, + "h3": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "3rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.04, + }, + "h4": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "2.125rem", + "fontWeight": 400, + "letterSpacing": "0.00735em", + "lineHeight": 1.17, + }, + "h5": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "letterSpacing": "0em", + "lineHeight": 1.33, + }, + "h6": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.25rem", + "fontWeight": 500, + "letterSpacing": "0.0075em", + "lineHeight": 1.6, + }, + "headline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.5rem", + "fontWeight": 400, + "lineHeight": "1.35417em", + }, + "overline": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.75rem", + "fontWeight": 400, + "letterSpacing": "0.08333em", + "lineHeight": 2.66, + "textTransform": "uppercase", + }, + "pxToRem": [Function], + "round": [Function], + "subheading": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "lineHeight": "1.5em", + }, + "subtitle1": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": "0.00938em", + "lineHeight": 1.75, + }, + "subtitle2": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "0.875rem", + "fontWeight": 500, + "letterSpacing": "0.00714em", + "lineHeight": 1.57, + }, + "title": Object { + "color": "rgba(0, 0, 0, 0.87)", + "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif", + "fontSize": "1.3125rem", + "fontWeight": 500, + "lineHeight": "1.16667em", + }, + "useNextVariants": false, + }, + "zIndex": Object { + "appBar": 1100, + "drawer": 1200, + "mobileStepper": 1000, + "modal": 1300, + "snackbar": 1400, + "tooltip": 1500, + }, + } + } + title="" + > + <RootRef + rootRef={[Function]} + > + <span + aria-describedby={null} + className="" + onBlur={[Function]} + onFocus={[Function]} + onMouseLeave={[Function]} + onMouseOver={[Function]} + onTouchEnd={[Function]} + onTouchStart={[Function]} + title="" + > + <Description + description="" + forceInline={true} + > + <Markdown + options={ + Object { + "forceInline": true, + "namedCodesToUnicode": Object { + "amp": "&", + "apos": "'", + "gt": ">", + "lt": "<", + "nbsp": " ", + "quot": "“", + }, + "overrides": Object { + "a": Object { + "component": [Function], + }, + }, + "slugify": [Function], + } + } + > + <span + key="outer" + /> + </Markdown> + </Description> + </span> + </RootRef> + <Popper + anchorEl={ + <span + class="" + title="" + > + <span /> + </span> + } + className="MuiTooltip-popper-229" + disablePortal={false} + id={null} + open={false} + placement="bottom-start" + transition={true} + /> + </Tooltip> + </WithStyles(Tooltip)> + </div> + <div + className="cell" + key="2" + style={ + Object { + "width": "20%", } } > @@ -8082,10 +13847,10 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip className="rowsPerPage" classes={ Object { - "fullWidth": "MuiFormControl-fullWidth-144", - "marginDense": "MuiFormControl-marginDense-143", - "marginNormal": "MuiFormControl-marginNormal-142", - "root": "MuiFormControl-root-141 verticalAlignInitial", + "fullWidth": "MuiFormControl-fullWidth-145", + "marginDense": "MuiFormControl-marginDense-144", + "marginNormal": "MuiFormControl-marginNormal-143", + "root": "MuiFormControl-root-142 verticalAlignInitial", } } component="div" @@ -8097,7 +13862,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip variant="standard" > <div - className="MuiFormControl-root-141 verticalAlignInitial rowsPerPage" + className="MuiFormControl-root-142 verticalAlignInitial rowsPerPage" > <WithStyles(WithFormControlContext(Select)) input={ @@ -8112,13 +13877,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <WithFormControlContext(Select) classes={ Object { - "disabled": "MuiSelect-disabled-245", - "filled": "MuiSelect-filled-242", - "icon": "MuiSelect-icon-246", - "outlined": "MuiSelect-outlined-243", - "root": "MuiSelect-root-240", - "select": "MuiSelect-select-241", - "selectMenu": "MuiSelect-selectMenu-244", + "disabled": "MuiSelect-disabled-247", + "filled": "MuiSelect-filled-244", + "icon": "MuiSelect-icon-248", + "outlined": "MuiSelect-outlined-245", + "root": "MuiSelect-root-242", + "select": "MuiSelect-select-243", + "selectMenu": "MuiSelect-selectMenu-246", } } input={ @@ -8135,13 +13900,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip autoWidth={false} classes={ Object { - "disabled": "MuiSelect-disabled-245", - "filled": "MuiSelect-filled-242", - "icon": "MuiSelect-icon-246", - "outlined": "MuiSelect-outlined-243", - "root": "MuiSelect-root-240", - "select": "MuiSelect-select-241", - "selectMenu": "MuiSelect-selectMenu-244", + "disabled": "MuiSelect-disabled-247", + "filled": "MuiSelect-filled-244", + "icon": "MuiSelect-icon-248", + "outlined": "MuiSelect-outlined-245", + "root": "MuiSelect-root-242", + "select": "MuiSelect-select-243", + "selectMenu": "MuiSelect-selectMenu-246", } } displayEmpty={false} @@ -8204,13 +13969,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-245", - "filled": "MuiSelect-filled-242", - "icon": "MuiSelect-icon-246", - "outlined": "MuiSelect-outlined-243", - "root": "MuiSelect-root-240", - "select": "MuiSelect-select-241", - "selectMenu": "MuiSelect-selectMenu-244", + "disabled": "MuiSelect-disabled-247", + "filled": "MuiSelect-filled-244", + "icon": "MuiSelect-icon-248", + "outlined": "MuiSelect-outlined-245", + "root": "MuiSelect-root-242", + "select": "MuiSelect-select-243", + "selectMenu": "MuiSelect-selectMenu-246", }, "displayEmpty": false, "multiple": false, @@ -8228,19 +13993,19 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <Input classes={ Object { - "disabled": "MuiInput-disabled-250", - "error": "MuiInput-error-252", - "focused": "MuiInput-focused-249", - "formControl": "MuiInput-formControl-248", - "fullWidth": "MuiInput-fullWidth-254", - "input": "MuiInput-input-255", - "inputMarginDense": "MuiInput-inputMarginDense-256", - "inputMultiline": "MuiInput-inputMultiline-257", - "inputType": "MuiInput-inputType-258", - "inputTypeSearch": "MuiInput-inputTypeSearch-259", - "multiline": "MuiInput-multiline-253", - "root": "MuiInput-root-247", - "underline": "MuiInput-underline-251", + "disabled": "MuiInput-disabled-252", + "error": "MuiInput-error-254", + "focused": "MuiInput-focused-251", + "formControl": "MuiInput-formControl-250", + "fullWidth": "MuiInput-fullWidth-256", + "input": "MuiInput-input-257", + "inputMarginDense": "MuiInput-inputMarginDense-258", + "inputMultiline": "MuiInput-inputMultiline-259", + "inputType": "MuiInput-inputType-260", + "inputTypeSearch": "MuiInput-inputTypeSearch-261", + "multiline": "MuiInput-multiline-255", + "root": "MuiInput-root-249", + "underline": "MuiInput-underline-253", } } disableUnderline={true} @@ -8274,13 +14039,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-245", - "filled": "MuiSelect-filled-242", - "icon": "MuiSelect-icon-246", - "outlined": "MuiSelect-outlined-243", - "root": "MuiSelect-root-240", - "select": "MuiSelect-select-241", - "selectMenu": "MuiSelect-selectMenu-244", + "disabled": "MuiSelect-disabled-247", + "filled": "MuiSelect-filled-244", + "icon": "MuiSelect-icon-248", + "outlined": "MuiSelect-outlined-245", + "root": "MuiSelect-root-242", + "select": "MuiSelect-select-243", + "selectMenu": "MuiSelect-selectMenu-246", }, "displayEmpty": false, "multiple": false, @@ -8298,18 +14063,18 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <WithStyles(WithFormControlContext(InputBase)) classes={ Object { - "disabled": "MuiInput-disabled-250", - "error": "MuiInput-error-252", - "focused": "MuiInput-focused-249", - "formControl": "MuiInput-formControl-248", - "fullWidth": "MuiInput-fullWidth-254", - "input": "MuiInput-input-255", - "inputMarginDense": "MuiInput-inputMarginDense-256", - "inputMultiline": "MuiInput-inputMultiline-257", - "inputType": "MuiInput-inputType-258", - "inputTypeSearch": "MuiInput-inputTypeSearch-259", - "multiline": "MuiInput-multiline-253", - "root": "MuiInput-root-247", + "disabled": "MuiInput-disabled-252", + "error": "MuiInput-error-254", + "focused": "MuiInput-focused-251", + "formControl": "MuiInput-formControl-250", + "fullWidth": "MuiInput-fullWidth-256", + "input": "MuiInput-input-257", + "inputMarginDense": "MuiInput-inputMarginDense-258", + "inputMultiline": "MuiInput-inputMultiline-259", + "inputType": "MuiInput-inputType-260", + "inputTypeSearch": "MuiInput-inputTypeSearch-261", + "multiline": "MuiInput-multiline-255", + "root": "MuiInput-root-249", "underline": null, } } @@ -8344,13 +14109,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-245", - "filled": "MuiSelect-filled-242", - "icon": "MuiSelect-icon-246", - "outlined": "MuiSelect-outlined-243", - "root": "MuiSelect-root-240", - "select": "MuiSelect-select-241", - "selectMenu": "MuiSelect-selectMenu-244", + "disabled": "MuiSelect-disabled-247", + "filled": "MuiSelect-filled-244", + "icon": "MuiSelect-icon-248", + "outlined": "MuiSelect-outlined-245", + "root": "MuiSelect-root-242", + "select": "MuiSelect-select-243", + "selectMenu": "MuiSelect-selectMenu-246", }, "displayEmpty": false, "multiple": false, @@ -8370,23 +14135,23 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <WithFormControlContext(InputBase) classes={ Object { - "adornedEnd": "MuiInputBase-adornedEnd-181", - "adornedStart": "MuiInputBase-adornedStart-180", - "disabled": "MuiInputBase-disabled-179 MuiInput-disabled-250", - "error": "MuiInputBase-error-182 MuiInput-error-252", - "focused": "MuiInputBase-focused-178 MuiInput-focused-249", - "formControl": "MuiInputBase-formControl-177 MuiInput-formControl-248", - "fullWidth": "MuiInputBase-fullWidth-185 MuiInput-fullWidth-254", - "input": "MuiInputBase-input-186 MuiInput-input-255", - "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-192", - "inputAdornedStart": "MuiInputBase-inputAdornedStart-191", - "inputMarginDense": "MuiInputBase-inputMarginDense-187 MuiInput-inputMarginDense-256", - "inputMultiline": "MuiInputBase-inputMultiline-188 MuiInput-inputMultiline-257", - "inputType": "MuiInputBase-inputType-189 MuiInput-inputType-258", - "inputTypeSearch": "MuiInputBase-inputTypeSearch-190 MuiInput-inputTypeSearch-259", - "marginDense": "MuiInputBase-marginDense-183", - "multiline": "MuiInputBase-multiline-184 MuiInput-multiline-253", - "root": "MuiInputBase-root-176 MuiInput-root-247", + "adornedEnd": "MuiInputBase-adornedEnd-182", + "adornedStart": "MuiInputBase-adornedStart-181", + "disabled": "MuiInputBase-disabled-180 MuiInput-disabled-252", + "error": "MuiInputBase-error-183 MuiInput-error-254", + "focused": "MuiInputBase-focused-179 MuiInput-focused-251", + "formControl": "MuiInputBase-formControl-178 MuiInput-formControl-250", + "fullWidth": "MuiInputBase-fullWidth-186 MuiInput-fullWidth-256", + "input": "MuiInputBase-input-187 MuiInput-input-257", + "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-193", + "inputAdornedStart": "MuiInputBase-inputAdornedStart-192", + "inputMarginDense": "MuiInputBase-inputMarginDense-188 MuiInput-inputMarginDense-258", + "inputMultiline": "MuiInputBase-inputMultiline-189 MuiInput-inputMultiline-259", + "inputType": "MuiInputBase-inputType-190 MuiInput-inputType-260", + "inputTypeSearch": "MuiInputBase-inputTypeSearch-191 MuiInput-inputTypeSearch-261", + "marginDense": "MuiInputBase-marginDense-184", + "multiline": "MuiInputBase-multiline-185 MuiInput-multiline-255", + "root": "MuiInputBase-root-177 MuiInput-root-249", } } fullWidth={false} @@ -8420,13 +14185,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-245", - "filled": "MuiSelect-filled-242", - "icon": "MuiSelect-icon-246", - "outlined": "MuiSelect-outlined-243", - "root": "MuiSelect-root-240", - "select": "MuiSelect-select-241", - "selectMenu": "MuiSelect-selectMenu-244", + "disabled": "MuiSelect-disabled-247", + "filled": "MuiSelect-filled-244", + "icon": "MuiSelect-icon-248", + "outlined": "MuiSelect-outlined-245", + "root": "MuiSelect-root-242", + "select": "MuiSelect-select-243", + "selectMenu": "MuiSelect-selectMenu-246", }, "displayEmpty": false, "multiple": false, @@ -8446,23 +14211,23 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <InputBase classes={ Object { - "adornedEnd": "MuiInputBase-adornedEnd-181", - "adornedStart": "MuiInputBase-adornedStart-180", - "disabled": "MuiInputBase-disabled-179 MuiInput-disabled-250", - "error": "MuiInputBase-error-182 MuiInput-error-252", - "focused": "MuiInputBase-focused-178 MuiInput-focused-249", - "formControl": "MuiInputBase-formControl-177 MuiInput-formControl-248", - "fullWidth": "MuiInputBase-fullWidth-185 MuiInput-fullWidth-254", - "input": "MuiInputBase-input-186 MuiInput-input-255", - "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-192", - "inputAdornedStart": "MuiInputBase-inputAdornedStart-191", - "inputMarginDense": "MuiInputBase-inputMarginDense-187 MuiInput-inputMarginDense-256", - "inputMultiline": "MuiInputBase-inputMultiline-188 MuiInput-inputMultiline-257", - "inputType": "MuiInputBase-inputType-189 MuiInput-inputType-258", - "inputTypeSearch": "MuiInputBase-inputTypeSearch-190 MuiInput-inputTypeSearch-259", - "marginDense": "MuiInputBase-marginDense-183", - "multiline": "MuiInputBase-multiline-184 MuiInput-multiline-253", - "root": "MuiInputBase-root-176 MuiInput-root-247", + "adornedEnd": "MuiInputBase-adornedEnd-182", + "adornedStart": "MuiInputBase-adornedStart-181", + "disabled": "MuiInputBase-disabled-180 MuiInput-disabled-252", + "error": "MuiInputBase-error-183 MuiInput-error-254", + "focused": "MuiInputBase-focused-179 MuiInput-focused-251", + "formControl": "MuiInputBase-formControl-178 MuiInput-formControl-250", + "fullWidth": "MuiInputBase-fullWidth-186 MuiInput-fullWidth-256", + "input": "MuiInputBase-input-187 MuiInput-input-257", + "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-193", + "inputAdornedStart": "MuiInputBase-inputAdornedStart-192", + "inputMarginDense": "MuiInputBase-inputMarginDense-188 MuiInput-inputMarginDense-258", + "inputMultiline": "MuiInputBase-inputMultiline-189 MuiInput-inputMultiline-259", + "inputType": "MuiInputBase-inputType-190 MuiInput-inputType-260", + "inputTypeSearch": "MuiInputBase-inputTypeSearch-191 MuiInput-inputTypeSearch-261", + "marginDense": "MuiInputBase-marginDense-184", + "multiline": "MuiInputBase-multiline-185 MuiInput-multiline-255", + "root": "MuiInputBase-root-177 MuiInput-root-249", } } fullWidth={false} @@ -8496,13 +14261,13 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-245", - "filled": "MuiSelect-filled-242", - "icon": "MuiSelect-icon-246", - "outlined": "MuiSelect-outlined-243", - "root": "MuiSelect-root-240", - "select": "MuiSelect-select-241", - "selectMenu": "MuiSelect-selectMenu-244", + "disabled": "MuiSelect-disabled-247", + "filled": "MuiSelect-filled-244", + "icon": "MuiSelect-icon-248", + "outlined": "MuiSelect-outlined-245", + "root": "MuiSelect-root-242", + "select": "MuiSelect-select-243", + "selectMenu": "MuiSelect-selectMenu-246", }, "displayEmpty": false, "multiple": false, @@ -8536,23 +14301,23 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip value={10} > <div - className="MuiInputBase-root-176 MuiInput-root-247 MuiInputBase-formControl-177 MuiInput-formControl-248" + className="MuiInputBase-root-177 MuiInput-root-249 MuiInputBase-formControl-178 MuiInput-formControl-250" onClick={[Function]} > <SelectInput IconComponent={[Function]} aria-invalid={false} autoWidth={false} - className="MuiInputBase-input-186 MuiInput-input-255" + className="MuiInputBase-input-187 MuiInput-input-257" classes={ Object { - "disabled": "MuiSelect-disabled-245", - "filled": "MuiSelect-filled-242", - "icon": "MuiSelect-icon-246", - "outlined": "MuiSelect-outlined-243", - "root": "MuiSelect-root-240", - "select": "MuiSelect-select-241", - "selectMenu": "MuiSelect-selectMenu-244", + "disabled": "MuiSelect-disabled-247", + "filled": "MuiSelect-filled-244", + "icon": "MuiSelect-icon-248", + "outlined": "MuiSelect-outlined-245", + "root": "MuiSelect-root-242", + "select": "MuiSelect-select-243", + "selectMenu": "MuiSelect-selectMenu-246", } } disabled={false} @@ -8567,12 +14332,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip variant="standard" > <div - className="MuiSelect-root-240" + className="MuiSelect-root-242" > <div aria-haspopup="true" aria-pressed="false" - className="MuiSelect-select-241 MuiSelect-selectMenu-244 MuiInputBase-input-186 MuiInput-input-255" + className="MuiSelect-select-243 MuiSelect-selectMenu-246 MuiInputBase-input-187 MuiInput-input-257" onBlur={[Function]} onClick={[Function]} onFocus={[Function]} @@ -8587,27 +14352,27 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip value={10} /> <pure(ArrowDropDown) - className="MuiSelect-icon-246" + className="MuiSelect-icon-248" > <ArrowDropDown - className="MuiSelect-icon-246" + className="MuiSelect-icon-248" > <WithStyles(SvgIcon) - className="MuiSelect-icon-246" + className="MuiSelect-icon-248" > <SvgIcon - className="MuiSelect-icon-246" + className="MuiSelect-icon-248" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-202", - "colorDisabled": "MuiSvgIcon-colorDisabled-204", - "colorError": "MuiSvgIcon-colorError-203", - "colorPrimary": "MuiSvgIcon-colorPrimary-200", - "colorSecondary": "MuiSvgIcon-colorSecondary-201", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-205", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-207", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-206", - "root": "MuiSvgIcon-root-199", + "colorAction": "MuiSvgIcon-colorAction-204", + "colorDisabled": "MuiSvgIcon-colorDisabled-206", + "colorError": "MuiSvgIcon-colorError-205", + "colorPrimary": "MuiSvgIcon-colorPrimary-202", + "colorSecondary": "MuiSvgIcon-colorSecondary-203", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-207", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-209", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-208", + "root": "MuiSvgIcon-root-201", } } color="inherit" @@ -8617,7 +14382,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <svg aria-hidden="true" - className="MuiSvgIcon-root-199 MuiSelect-icon-246" + className="MuiSvgIcon-root-201 MuiSelect-icon-248" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -8633,6 +14398,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <WithStyles(Menu) MenuListProps={ Object { + "disableListWrap": true, "role": "listbox", } } @@ -8647,7 +14413,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-241 MuiSelect-selectMenu-244 MuiInputBase-input-186 MuiInput-input-255" + class="MuiSelect-select-243 MuiSelect-selectMenu-246 MuiInputBase-input-187 MuiInput-input-257" role="button" tabindex="0" > @@ -8661,6 +14427,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <Menu MenuListProps={ Object { + "disableListWrap": true, "role": "listbox", } } @@ -8675,7 +14442,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-241 MuiSelect-selectMenu-244 MuiInputBase-input-186 MuiInput-input-255" + class="MuiSelect-select-243 MuiSelect-selectMenu-246 MuiInputBase-input-187 MuiInput-input-257" role="button" tabindex="0" > @@ -8684,7 +14451,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } classes={ Object { - "paper": "MuiMenu-paper-260", + "paper": "MuiMenu-paper-262", } } disableAutoFocusItem={false} @@ -8889,7 +14656,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -9059,7 +14826,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip PaperProps={ Object { "classes": Object { - "root": "MuiMenu-paper-260", + "root": "MuiMenu-paper-262", }, "style": Object { "minWidth": null, @@ -9070,7 +14837,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-241 MuiSelect-selectMenu-244 MuiInputBase-input-186 MuiInput-input-255" + class="MuiSelect-select-243 MuiSelect-selectMenu-246 MuiInputBase-input-187 MuiInput-input-257" role="button" tabindex="0" > @@ -9100,7 +14867,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip PaperProps={ Object { "classes": Object { - "root": "MuiMenu-paper-260", + "root": "MuiMenu-paper-262", }, "style": Object { "minWidth": null, @@ -9112,7 +14879,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-241 MuiSelect-selectMenu-244 MuiInputBase-input-186 MuiInput-input-255" + class="MuiSelect-select-243 MuiSelect-selectMenu-246 MuiInputBase-input-187 MuiInput-input-257" role="button" tabindex="0" > @@ -9128,7 +14895,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip anchorReference="anchorEl" classes={ Object { - "paper": "MuiPopover-paper-261", + "paper": "MuiPopover-paper-263", } } elevation={8} @@ -9166,10 +14933,11 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip } classes={ Object { - "hidden": "MuiModal-hidden-263", - "root": "MuiModal-root-262", + "hidden": "MuiModal-hidden-265", + "root": "MuiModal-root-264", } } + closeAfterTransition={false} container={<body />} disableAutoFocus={false} disableBackdropClick={false} @@ -9218,12 +14986,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <IconButton classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-219", - "colorPrimary": "MuiIconButton-colorPrimary-220", - "colorSecondary": "MuiIconButton-colorSecondary-221", - "disabled": "MuiIconButton-disabled-222", - "label": "MuiIconButton-label-223", - "root": "MuiIconButton-root-218", + "colorInherit": "MuiIconButton-colorInherit-221", + "colorPrimary": "MuiIconButton-colorPrimary-222", + "colorSecondary": "MuiIconButton-colorSecondary-223", + "disabled": "MuiIconButton-disabled-224", + "label": "MuiIconButton-label-225", + "root": "MuiIconButton-root-220", } } color="default" @@ -9232,19 +15000,19 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-218 MuiIconButton-disabled-222" + className="MuiIconButton-root-220 MuiIconButton-disabled-224" disabled={true} focusRipple={true} onClick={[Function]} > <ButtonBase centerRipple={true} - className="MuiIconButton-root-218 MuiIconButton-disabled-222" + className="MuiIconButton-root-220 MuiIconButton-disabled-224" classes={ Object { - "disabled": "MuiButtonBase-disabled-225", - "focusVisible": "MuiButtonBase-focusVisible-226", - "root": "MuiButtonBase-root-224", + "disabled": "MuiButtonBase-disabled-227", + "focusVisible": "MuiButtonBase-focusVisible-228", + "root": "MuiButtonBase-root-226", } } component="button" @@ -9257,7 +15025,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip type="button" > <button - className="MuiButtonBase-root-224 MuiButtonBase-disabled-225 MuiIconButton-root-218 MuiIconButton-disabled-222" + className="MuiButtonBase-root-226 MuiButtonBase-disabled-227 MuiIconButton-root-220 MuiIconButton-disabled-224" disabled={true} onBlur={[Function]} onClick={[Function]} @@ -9275,7 +15043,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip type="button" > <span - className="MuiIconButton-label-223" + className="MuiIconButton-label-225" > <pure(ChevronLeftIcon)> <ChevronLeftIcon> @@ -9283,15 +15051,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-202", - "colorDisabled": "MuiSvgIcon-colorDisabled-204", - "colorError": "MuiSvgIcon-colorError-203", - "colorPrimary": "MuiSvgIcon-colorPrimary-200", - "colorSecondary": "MuiSvgIcon-colorSecondary-201", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-205", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-207", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-206", - "root": "MuiSvgIcon-root-199", + "colorAction": "MuiSvgIcon-colorAction-204", + "colorDisabled": "MuiSvgIcon-colorDisabled-206", + "colorError": "MuiSvgIcon-colorError-205", + "colorPrimary": "MuiSvgIcon-colorPrimary-202", + "colorSecondary": "MuiSvgIcon-colorSecondary-203", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-207", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-209", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-208", + "root": "MuiSvgIcon-root-201", } } color="inherit" @@ -9301,7 +15069,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <svg aria-hidden="true" - className="MuiSvgIcon-root-199" + className="MuiSvgIcon-root-201" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -9331,12 +15099,12 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <IconButton classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-219", - "colorPrimary": "MuiIconButton-colorPrimary-220", - "colorSecondary": "MuiIconButton-colorSecondary-221", - "disabled": "MuiIconButton-disabled-222", - "label": "MuiIconButton-label-223", - "root": "MuiIconButton-root-218", + "colorInherit": "MuiIconButton-colorInherit-221", + "colorPrimary": "MuiIconButton-colorPrimary-222", + "colorSecondary": "MuiIconButton-colorSecondary-223", + "disabled": "MuiIconButton-disabled-224", + "label": "MuiIconButton-label-225", + "root": "MuiIconButton-root-220", } } color="default" @@ -9345,19 +15113,19 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-218 MuiIconButton-disabled-222" + className="MuiIconButton-root-220 MuiIconButton-disabled-224" disabled={true} focusRipple={true} onClick={[Function]} > <ButtonBase centerRipple={true} - className="MuiIconButton-root-218 MuiIconButton-disabled-222" + className="MuiIconButton-root-220 MuiIconButton-disabled-224" classes={ Object { - "disabled": "MuiButtonBase-disabled-225", - "focusVisible": "MuiButtonBase-focusVisible-226", - "root": "MuiButtonBase-root-224", + "disabled": "MuiButtonBase-disabled-227", + "focusVisible": "MuiButtonBase-focusVisible-228", + "root": "MuiButtonBase-root-226", } } component="button" @@ -9370,7 +15138,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip type="button" > <button - className="MuiButtonBase-root-224 MuiButtonBase-disabled-225 MuiIconButton-root-218 MuiIconButton-disabled-222" + className="MuiButtonBase-root-226 MuiButtonBase-disabled-227 MuiIconButton-root-220 MuiIconButton-disabled-224" disabled={true} onBlur={[Function]} onClick={[Function]} @@ -9388,7 +15156,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip type="button" > <span - className="MuiIconButton-label-223" + className="MuiIconButton-label-225" > <pure(ChevronRightIcon)> <ChevronRightIcon> @@ -9396,15 +15164,15 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-202", - "colorDisabled": "MuiSvgIcon-colorDisabled-204", - "colorError": "MuiSvgIcon-colorError-203", - "colorPrimary": "MuiSvgIcon-colorPrimary-200", - "colorSecondary": "MuiSvgIcon-colorSecondary-201", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-205", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-207", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-206", - "root": "MuiSvgIcon-root-199", + "colorAction": "MuiSvgIcon-colorAction-204", + "colorDisabled": "MuiSvgIcon-colorDisabled-206", + "colorError": "MuiSvgIcon-colorError-205", + "colorPrimary": "MuiSvgIcon-colorPrimary-202", + "colorSecondary": "MuiSvgIcon-colorSecondary-203", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-207", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-209", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-208", + "root": "MuiSvgIcon-root-201", } } color="inherit" @@ -9414,7 +15182,7 @@ exports[`PipelineVersionList calls Apis to list pipeline versions, sorted by pip > <svg aria-hidden="true" - className="MuiSvgIcon-root-199" + className="MuiSvgIcon-root-201" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -9451,10 +15219,57 @@ exports[`PipelineVersionList renders a list of one pipeline version 1`] = ` Array [ Object { "customRenderer": [Function], - "flex": 2, + "flex": 1, + "label": "Version name", + "sortKey": "name", + }, + Object { + "customRenderer": [Function], + "flex": 3, + "label": "Description", + }, + Object { + "flex": 1, + "label": "Uploaded on", + "sortKey": "created_at", + }, + ] + } + emptyMessage="No pipeline versions found." + initialSortColumn="created_at" + reload={[Function]} + rows={ + Array [ + Object { + "id": undefined, + "otherFields": Array [ + "pipelineversion1", + undefined, + "9/22/2018, 11:05:48 AM", + ], + }, + ] + } + /> +</div> +`; + +exports[`PipelineVersionList renders a list of one pipeline version with description 1`] = ` +<div> + <CustomTable + columns={ + Array [ + Object { + "customRenderer": [Function], + "flex": 1, "label": "Version name", "sortKey": "name", }, + Object { + "customRenderer": [Function], + "flex": 3, + "label": "Description", + }, Object { "flex": 1, "label": "Uploaded on", @@ -9471,6 +15286,7 @@ exports[`PipelineVersionList renders a list of one pipeline version 1`] = ` "id": undefined, "otherFields": Array [ "pipelineversion1", + "pipelineversion1 description", "9/22/2018, 11:05:48 AM", ], }, @@ -9487,10 +15303,15 @@ exports[`PipelineVersionList renders a list of one pipeline version with error 1 Array [ Object { "customRenderer": [Function], - "flex": 2, + "flex": 1, "label": "Version name", "sortKey": "name", }, + Object { + "customRenderer": [Function], + "flex": 3, + "label": "Description", + }, Object { "flex": 1, "label": "Uploaded on", @@ -9507,6 +15328,7 @@ exports[`PipelineVersionList renders a list of one pipeline version with error 1 "id": undefined, "otherFields": Array [ "pipeline1", + undefined, "9/22/2018, 11:05:48 AM", ], }, @@ -9523,10 +15345,15 @@ exports[`PipelineVersionList renders a list of one pipeline version without crea Array [ Object { "customRenderer": [Function], - "flex": 2, + "flex": 1, "label": "Version name", "sortKey": "name", }, + Object { + "customRenderer": [Function], + "flex": 3, + "label": "Description", + }, Object { "flex": 1, "label": "Uploaded on", @@ -9549,10 +15376,15 @@ exports[`PipelineVersionList renders an empty list with empty state message 1`] Array [ Object { "customRenderer": [Function], - "flex": 2, + "flex": 1, "label": "Version name", "sortKey": "name", }, + Object { + "customRenderer": [Function], + "flex": 3, + "label": "Description", + }, Object { "flex": 1, "label": "Uploaded on", diff --git a/frontend/src/pages/__snapshots__/RecurringRunsManager.test.tsx.snap b/frontend/src/pages/__snapshots__/RecurringRunsManager.test.tsx.snap index 02d6ce1064..561e67b1c3 100644 --- a/frontend/src/pages/__snapshots__/RecurringRunsManager.test.tsx.snap +++ b/frontend/src/pages/__snapshots__/RecurringRunsManager.test.tsx.snap @@ -75,32 +75,32 @@ exports[`RecurringRunsManager reloads the list of runs after enable/disabling 1` className="root" classes={ Object { - "colorInherit": "MuiButton-colorInherit-836", - "contained": "MuiButton-contained-826", - "containedPrimary": "MuiButton-containedPrimary-827", - "containedSecondary": "MuiButton-containedSecondary-828", - "disabled": "MuiButton-disabled-835", - "extendedFab": "MuiButton-extendedFab-833", - "fab": "MuiButton-fab-832", - "flat": "MuiButton-flat-820", - "flatPrimary": "MuiButton-flatPrimary-821", - "flatSecondary": "MuiButton-flatSecondary-822", - "focusVisible": "MuiButton-focusVisible-834", - "fullWidth": "MuiButton-fullWidth-840", - "label": "MuiButton-label-816", - "mini": "MuiButton-mini-837", - "outlined": "MuiButton-outlined-823", - "outlinedPrimary": "MuiButton-outlinedPrimary-824", - "outlinedSecondary": "MuiButton-outlinedSecondary-825", - "raised": "MuiButton-raised-829", - "raisedPrimary": "MuiButton-raisedPrimary-830", - "raisedSecondary": "MuiButton-raisedSecondary-831", - "root": "MuiButton-root-815", - "sizeLarge": "MuiButton-sizeLarge-839", - "sizeSmall": "MuiButton-sizeSmall-838", - "text": "MuiButton-text-817", - "textPrimary": "MuiButton-textPrimary-818", - "textSecondary": "MuiButton-textSecondary-819", + "colorInherit": "MuiButton-colorInherit-841", + "contained": "MuiButton-contained-831", + "containedPrimary": "MuiButton-containedPrimary-832", + "containedSecondary": "MuiButton-containedSecondary-833", + "disabled": "MuiButton-disabled-840", + "extendedFab": "MuiButton-extendedFab-838", + "fab": "MuiButton-fab-837", + "flat": "MuiButton-flat-825", + "flatPrimary": "MuiButton-flatPrimary-826", + "flatSecondary": "MuiButton-flatSecondary-827", + "focusVisible": "MuiButton-focusVisible-839", + "fullWidth": "MuiButton-fullWidth-845", + "label": "MuiButton-label-821", + "mini": "MuiButton-mini-842", + "outlined": "MuiButton-outlined-828", + "outlinedPrimary": "MuiButton-outlinedPrimary-829", + "outlinedSecondary": "MuiButton-outlinedSecondary-830", + "raised": "MuiButton-raised-834", + "raisedPrimary": "MuiButton-raisedPrimary-835", + "raisedSecondary": "MuiButton-raisedSecondary-836", + "root": "MuiButton-root-820", + "sizeLarge": "MuiButton-sizeLarge-844", + "sizeSmall": "MuiButton-sizeSmall-843", + "text": "MuiButton-text-822", + "textPrimary": "MuiButton-textPrimary-823", + "textSecondary": "MuiButton-textSecondary-824", } } color="primary" @@ -115,22 +115,22 @@ exports[`RecurringRunsManager reloads the list of runs after enable/disabling 1` variant="text" > <WithStyles(ButtonBase) - className="MuiButton-root-815 MuiButton-text-817 MuiButton-textPrimary-818 MuiButton-flat-820 MuiButton-flatPrimary-821 root" + className="MuiButton-root-820 MuiButton-text-822 MuiButton-textPrimary-823 MuiButton-flat-825 MuiButton-flatPrimary-826 root" component="button" disabled={false} focusRipple={true} - focusVisibleClassName="MuiButton-focusVisible-834" + focusVisibleClassName="MuiButton-focusVisible-839" onClick={[Function]} type="button" > <ButtonBase centerRipple={false} - className="MuiButton-root-815 MuiButton-text-817 MuiButton-textPrimary-818 MuiButton-flat-820 MuiButton-flatPrimary-821 root" + className="MuiButton-root-820 MuiButton-text-822 MuiButton-textPrimary-823 MuiButton-flat-825 MuiButton-flatPrimary-826 root" classes={ Object { - "disabled": "MuiButtonBase-disabled-766", - "focusVisible": "MuiButtonBase-focusVisible-767", - "root": "MuiButtonBase-root-765", + "disabled": "MuiButtonBase-disabled-771", + "focusVisible": "MuiButtonBase-focusVisible-772", + "root": "MuiButtonBase-root-770", } } component="button" @@ -138,13 +138,13 @@ exports[`RecurringRunsManager reloads the list of runs after enable/disabling 1` disableTouchRipple={false} disabled={false} focusRipple={true} - focusVisibleClassName="MuiButton-focusVisible-834" + focusVisibleClassName="MuiButton-focusVisible-839" onClick={[Function]} tabIndex="0" type="button" > <button - className="MuiButtonBase-root-765 MuiButton-root-815 MuiButton-text-817 MuiButton-textPrimary-818 MuiButton-flat-820 MuiButton-flatPrimary-821 root" + className="MuiButtonBase-root-770 MuiButton-root-820 MuiButton-text-822 MuiButton-textPrimary-823 MuiButton-flat-825 MuiButton-flatPrimary-826 root" disabled={false} onBlur={[Function]} onClick={[Function]} @@ -162,7 +162,7 @@ exports[`RecurringRunsManager reloads the list of runs after enable/disabling 1` type="button" > <span - className="MuiButton-label-816" + className="MuiButton-label-821" > <span> Enabled @@ -180,25 +180,25 @@ exports[`RecurringRunsManager reloads the list of runs after enable/disabling 1` center={false} classes={ Object { - "child": "MuiTouchRipple-child-812", - "childLeaving": "MuiTouchRipple-childLeaving-813", - "childPulsate": "MuiTouchRipple-childPulsate-814", - "ripple": "MuiTouchRipple-ripple-809", - "ripplePulsate": "MuiTouchRipple-ripplePulsate-811", - "rippleVisible": "MuiTouchRipple-rippleVisible-810", - "root": "MuiTouchRipple-root-808", + "child": "MuiTouchRipple-child-817", + "childLeaving": "MuiTouchRipple-childLeaving-818", + "childPulsate": "MuiTouchRipple-childPulsate-819", + "ripple": "MuiTouchRipple-ripple-814", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-816", + "rippleVisible": "MuiTouchRipple-rippleVisible-815", + "root": "MuiTouchRipple-root-813", } } > <TransitionGroup childFactory={[Function]} - className="MuiTouchRipple-root-808" + className="MuiTouchRipple-root-813" component="span" enter={true} exit={true} > <span - className="MuiTouchRipple-root-808" + className="MuiTouchRipple-root-813" /> </TransitionGroup> </TouchRipple> @@ -215,32 +215,32 @@ exports[`RecurringRunsManager renders a disable button if the run is enabled, cl className="root" classes={ Object { - "colorInherit": "MuiButton-colorInherit-308", - "contained": "MuiButton-contained-298", - "containedPrimary": "MuiButton-containedPrimary-299", - "containedSecondary": "MuiButton-containedSecondary-300", - "disabled": "MuiButton-disabled-307", - "extendedFab": "MuiButton-extendedFab-305", - "fab": "MuiButton-fab-304", - "flat": "MuiButton-flat-292", - "flatPrimary": "MuiButton-flatPrimary-293", - "flatSecondary": "MuiButton-flatSecondary-294", - "focusVisible": "MuiButton-focusVisible-306", - "fullWidth": "MuiButton-fullWidth-312", - "label": "MuiButton-label-288", - "mini": "MuiButton-mini-309", - "outlined": "MuiButton-outlined-295", - "outlinedPrimary": "MuiButton-outlinedPrimary-296", - "outlinedSecondary": "MuiButton-outlinedSecondary-297", - "raised": "MuiButton-raised-301", - "raisedPrimary": "MuiButton-raisedPrimary-302", - "raisedSecondary": "MuiButton-raisedSecondary-303", - "root": "MuiButton-root-287", - "sizeLarge": "MuiButton-sizeLarge-311", - "sizeSmall": "MuiButton-sizeSmall-310", - "text": "MuiButton-text-289", - "textPrimary": "MuiButton-textPrimary-290", - "textSecondary": "MuiButton-textSecondary-291", + "colorInherit": "MuiButton-colorInherit-310", + "contained": "MuiButton-contained-300", + "containedPrimary": "MuiButton-containedPrimary-301", + "containedSecondary": "MuiButton-containedSecondary-302", + "disabled": "MuiButton-disabled-309", + "extendedFab": "MuiButton-extendedFab-307", + "fab": "MuiButton-fab-306", + "flat": "MuiButton-flat-294", + "flatPrimary": "MuiButton-flatPrimary-295", + "flatSecondary": "MuiButton-flatSecondary-296", + "focusVisible": "MuiButton-focusVisible-308", + "fullWidth": "MuiButton-fullWidth-314", + "label": "MuiButton-label-290", + "mini": "MuiButton-mini-311", + "outlined": "MuiButton-outlined-297", + "outlinedPrimary": "MuiButton-outlinedPrimary-298", + "outlinedSecondary": "MuiButton-outlinedSecondary-299", + "raised": "MuiButton-raised-303", + "raisedPrimary": "MuiButton-raisedPrimary-304", + "raisedSecondary": "MuiButton-raisedSecondary-305", + "root": "MuiButton-root-289", + "sizeLarge": "MuiButton-sizeLarge-313", + "sizeSmall": "MuiButton-sizeSmall-312", + "text": "MuiButton-text-291", + "textPrimary": "MuiButton-textPrimary-292", + "textSecondary": "MuiButton-textSecondary-293", } } color="primary" @@ -255,22 +255,22 @@ exports[`RecurringRunsManager renders a disable button if the run is enabled, cl variant="text" > <WithStyles(ButtonBase) - className="MuiButton-root-287 MuiButton-text-289 MuiButton-textPrimary-290 MuiButton-flat-292 MuiButton-flatPrimary-293 root" + className="MuiButton-root-289 MuiButton-text-291 MuiButton-textPrimary-292 MuiButton-flat-294 MuiButton-flatPrimary-295 root" component="button" disabled={false} focusRipple={true} - focusVisibleClassName="MuiButton-focusVisible-306" + focusVisibleClassName="MuiButton-focusVisible-308" onClick={[Function]} type="button" > <ButtonBase centerRipple={false} - className="MuiButton-root-287 MuiButton-text-289 MuiButton-textPrimary-290 MuiButton-flat-292 MuiButton-flatPrimary-293 root" + className="MuiButton-root-289 MuiButton-text-291 MuiButton-textPrimary-292 MuiButton-flat-294 MuiButton-flatPrimary-295 root" classes={ Object { - "disabled": "MuiButtonBase-disabled-238", - "focusVisible": "MuiButtonBase-focusVisible-239", - "root": "MuiButtonBase-root-237", + "disabled": "MuiButtonBase-disabled-240", + "focusVisible": "MuiButtonBase-focusVisible-241", + "root": "MuiButtonBase-root-239", } } component="button" @@ -278,13 +278,13 @@ exports[`RecurringRunsManager renders a disable button if the run is enabled, cl disableTouchRipple={false} disabled={false} focusRipple={true} - focusVisibleClassName="MuiButton-focusVisible-306" + focusVisibleClassName="MuiButton-focusVisible-308" onClick={[Function]} tabIndex="0" type="button" > <button - className="MuiButtonBase-root-237 MuiButton-root-287 MuiButton-text-289 MuiButton-textPrimary-290 MuiButton-flat-292 MuiButton-flatPrimary-293 root" + className="MuiButtonBase-root-239 MuiButton-root-289 MuiButton-text-291 MuiButton-textPrimary-292 MuiButton-flat-294 MuiButton-flatPrimary-295 root" disabled={false} onBlur={[Function]} onClick={[Function]} @@ -302,7 +302,7 @@ exports[`RecurringRunsManager renders a disable button if the run is enabled, cl type="button" > <span - className="MuiButton-label-288" + className="MuiButton-label-290" > <span> Enabled @@ -320,25 +320,25 @@ exports[`RecurringRunsManager renders a disable button if the run is enabled, cl center={false} classes={ Object { - "child": "MuiTouchRipple-child-284", - "childLeaving": "MuiTouchRipple-childLeaving-285", - "childPulsate": "MuiTouchRipple-childPulsate-286", - "ripple": "MuiTouchRipple-ripple-281", - "ripplePulsate": "MuiTouchRipple-ripplePulsate-283", - "rippleVisible": "MuiTouchRipple-rippleVisible-282", - "root": "MuiTouchRipple-root-280", + "child": "MuiTouchRipple-child-286", + "childLeaving": "MuiTouchRipple-childLeaving-287", + "childPulsate": "MuiTouchRipple-childPulsate-288", + "ripple": "MuiTouchRipple-ripple-283", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-285", + "rippleVisible": "MuiTouchRipple-rippleVisible-284", + "root": "MuiTouchRipple-root-282", } } > <TransitionGroup childFactory={[Function]} - className="MuiTouchRipple-root-280" + className="MuiTouchRipple-root-282" component="span" enter={true} exit={true} > <span - className="MuiTouchRipple-root-280" + className="MuiTouchRipple-root-282" /> </TransitionGroup> </TouchRipple> @@ -355,32 +355,32 @@ exports[`RecurringRunsManager renders an enable button if the run is disabled, c className="root" classes={ Object { - "colorInherit": "MuiButton-colorInherit-484", - "contained": "MuiButton-contained-474", - "containedPrimary": "MuiButton-containedPrimary-475", - "containedSecondary": "MuiButton-containedSecondary-476", - "disabled": "MuiButton-disabled-483", - "extendedFab": "MuiButton-extendedFab-481", - "fab": "MuiButton-fab-480", - "flat": "MuiButton-flat-468", - "flatPrimary": "MuiButton-flatPrimary-469", - "flatSecondary": "MuiButton-flatSecondary-470", - "focusVisible": "MuiButton-focusVisible-482", - "fullWidth": "MuiButton-fullWidth-488", - "label": "MuiButton-label-464", - "mini": "MuiButton-mini-485", - "outlined": "MuiButton-outlined-471", - "outlinedPrimary": "MuiButton-outlinedPrimary-472", - "outlinedSecondary": "MuiButton-outlinedSecondary-473", - "raised": "MuiButton-raised-477", - "raisedPrimary": "MuiButton-raisedPrimary-478", - "raisedSecondary": "MuiButton-raisedSecondary-479", - "root": "MuiButton-root-463", - "sizeLarge": "MuiButton-sizeLarge-487", - "sizeSmall": "MuiButton-sizeSmall-486", - "text": "MuiButton-text-465", - "textPrimary": "MuiButton-textPrimary-466", - "textSecondary": "MuiButton-textSecondary-467", + "colorInherit": "MuiButton-colorInherit-487", + "contained": "MuiButton-contained-477", + "containedPrimary": "MuiButton-containedPrimary-478", + "containedSecondary": "MuiButton-containedSecondary-479", + "disabled": "MuiButton-disabled-486", + "extendedFab": "MuiButton-extendedFab-484", + "fab": "MuiButton-fab-483", + "flat": "MuiButton-flat-471", + "flatPrimary": "MuiButton-flatPrimary-472", + "flatSecondary": "MuiButton-flatSecondary-473", + "focusVisible": "MuiButton-focusVisible-485", + "fullWidth": "MuiButton-fullWidth-491", + "label": "MuiButton-label-467", + "mini": "MuiButton-mini-488", + "outlined": "MuiButton-outlined-474", + "outlinedPrimary": "MuiButton-outlinedPrimary-475", + "outlinedSecondary": "MuiButton-outlinedSecondary-476", + "raised": "MuiButton-raised-480", + "raisedPrimary": "MuiButton-raisedPrimary-481", + "raisedSecondary": "MuiButton-raisedSecondary-482", + "root": "MuiButton-root-466", + "sizeLarge": "MuiButton-sizeLarge-490", + "sizeSmall": "MuiButton-sizeSmall-489", + "text": "MuiButton-text-468", + "textPrimary": "MuiButton-textPrimary-469", + "textSecondary": "MuiButton-textSecondary-470", } } color="secondary" @@ -395,22 +395,22 @@ exports[`RecurringRunsManager renders an enable button if the run is disabled, c variant="text" > <WithStyles(ButtonBase) - className="MuiButton-root-463 MuiButton-text-465 MuiButton-textSecondary-467 MuiButton-flat-468 MuiButton-flatSecondary-470 root" + className="MuiButton-root-466 MuiButton-text-468 MuiButton-textSecondary-470 MuiButton-flat-471 MuiButton-flatSecondary-473 root" component="button" disabled={false} focusRipple={true} - focusVisibleClassName="MuiButton-focusVisible-482" + focusVisibleClassName="MuiButton-focusVisible-485" onClick={[Function]} type="button" > <ButtonBase centerRipple={false} - className="MuiButton-root-463 MuiButton-text-465 MuiButton-textSecondary-467 MuiButton-flat-468 MuiButton-flatSecondary-470 root" + className="MuiButton-root-466 MuiButton-text-468 MuiButton-textSecondary-470 MuiButton-flat-471 MuiButton-flatSecondary-473 root" classes={ Object { - "disabled": "MuiButtonBase-disabled-414", - "focusVisible": "MuiButtonBase-focusVisible-415", - "root": "MuiButtonBase-root-413", + "disabled": "MuiButtonBase-disabled-417", + "focusVisible": "MuiButtonBase-focusVisible-418", + "root": "MuiButtonBase-root-416", } } component="button" @@ -418,13 +418,13 @@ exports[`RecurringRunsManager renders an enable button if the run is disabled, c disableTouchRipple={false} disabled={false} focusRipple={true} - focusVisibleClassName="MuiButton-focusVisible-482" + focusVisibleClassName="MuiButton-focusVisible-485" onClick={[Function]} tabIndex="0" type="button" > <button - className="MuiButtonBase-root-413 MuiButton-root-463 MuiButton-text-465 MuiButton-textSecondary-467 MuiButton-flat-468 MuiButton-flatSecondary-470 root" + className="MuiButtonBase-root-416 MuiButton-root-466 MuiButton-text-468 MuiButton-textSecondary-470 MuiButton-flat-471 MuiButton-flatSecondary-473 root" disabled={false} onBlur={[Function]} onClick={[Function]} @@ -442,7 +442,7 @@ exports[`RecurringRunsManager renders an enable button if the run is disabled, c type="button" > <span - className="MuiButton-label-464" + className="MuiButton-label-467" > <span> Disabled @@ -460,25 +460,25 @@ exports[`RecurringRunsManager renders an enable button if the run is disabled, c center={false} classes={ Object { - "child": "MuiTouchRipple-child-460", - "childLeaving": "MuiTouchRipple-childLeaving-461", - "childPulsate": "MuiTouchRipple-childPulsate-462", - "ripple": "MuiTouchRipple-ripple-457", - "ripplePulsate": "MuiTouchRipple-ripplePulsate-459", - "rippleVisible": "MuiTouchRipple-rippleVisible-458", - "root": "MuiTouchRipple-root-456", + "child": "MuiTouchRipple-child-463", + "childLeaving": "MuiTouchRipple-childLeaving-464", + "childPulsate": "MuiTouchRipple-childPulsate-465", + "ripple": "MuiTouchRipple-ripple-460", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-462", + "rippleVisible": "MuiTouchRipple-rippleVisible-461", + "root": "MuiTouchRipple-root-459", } } > <TransitionGroup childFactory={[Function]} - className="MuiTouchRipple-root-456" + className="MuiTouchRipple-root-459" component="span" enter={true} exit={true} > <span - className="MuiTouchRipple-root-456" + className="MuiTouchRipple-root-459" /> </TransitionGroup> </TouchRipple> @@ -495,32 +495,32 @@ exports[`RecurringRunsManager renders an enable button if the run's enabled fiel className="root" classes={ Object { - "colorInherit": "MuiButton-colorInherit-660", - "contained": "MuiButton-contained-650", - "containedPrimary": "MuiButton-containedPrimary-651", - "containedSecondary": "MuiButton-containedSecondary-652", - "disabled": "MuiButton-disabled-659", - "extendedFab": "MuiButton-extendedFab-657", - "fab": "MuiButton-fab-656", - "flat": "MuiButton-flat-644", - "flatPrimary": "MuiButton-flatPrimary-645", - "flatSecondary": "MuiButton-flatSecondary-646", - "focusVisible": "MuiButton-focusVisible-658", - "fullWidth": "MuiButton-fullWidth-664", - "label": "MuiButton-label-640", - "mini": "MuiButton-mini-661", - "outlined": "MuiButton-outlined-647", - "outlinedPrimary": "MuiButton-outlinedPrimary-648", - "outlinedSecondary": "MuiButton-outlinedSecondary-649", - "raised": "MuiButton-raised-653", - "raisedPrimary": "MuiButton-raisedPrimary-654", - "raisedSecondary": "MuiButton-raisedSecondary-655", - "root": "MuiButton-root-639", - "sizeLarge": "MuiButton-sizeLarge-663", - "sizeSmall": "MuiButton-sizeSmall-662", - "text": "MuiButton-text-641", - "textPrimary": "MuiButton-textPrimary-642", - "textSecondary": "MuiButton-textSecondary-643", + "colorInherit": "MuiButton-colorInherit-664", + "contained": "MuiButton-contained-654", + "containedPrimary": "MuiButton-containedPrimary-655", + "containedSecondary": "MuiButton-containedSecondary-656", + "disabled": "MuiButton-disabled-663", + "extendedFab": "MuiButton-extendedFab-661", + "fab": "MuiButton-fab-660", + "flat": "MuiButton-flat-648", + "flatPrimary": "MuiButton-flatPrimary-649", + "flatSecondary": "MuiButton-flatSecondary-650", + "focusVisible": "MuiButton-focusVisible-662", + "fullWidth": "MuiButton-fullWidth-668", + "label": "MuiButton-label-644", + "mini": "MuiButton-mini-665", + "outlined": "MuiButton-outlined-651", + "outlinedPrimary": "MuiButton-outlinedPrimary-652", + "outlinedSecondary": "MuiButton-outlinedSecondary-653", + "raised": "MuiButton-raised-657", + "raisedPrimary": "MuiButton-raisedPrimary-658", + "raisedSecondary": "MuiButton-raisedSecondary-659", + "root": "MuiButton-root-643", + "sizeLarge": "MuiButton-sizeLarge-667", + "sizeSmall": "MuiButton-sizeSmall-666", + "text": "MuiButton-text-645", + "textPrimary": "MuiButton-textPrimary-646", + "textSecondary": "MuiButton-textSecondary-647", } } color="secondary" @@ -535,22 +535,22 @@ exports[`RecurringRunsManager renders an enable button if the run's enabled fiel variant="text" > <WithStyles(ButtonBase) - className="MuiButton-root-639 MuiButton-text-641 MuiButton-textSecondary-643 MuiButton-flat-644 MuiButton-flatSecondary-646 root" + className="MuiButton-root-643 MuiButton-text-645 MuiButton-textSecondary-647 MuiButton-flat-648 MuiButton-flatSecondary-650 root" component="button" disabled={false} focusRipple={true} - focusVisibleClassName="MuiButton-focusVisible-658" + focusVisibleClassName="MuiButton-focusVisible-662" onClick={[Function]} type="button" > <ButtonBase centerRipple={false} - className="MuiButton-root-639 MuiButton-text-641 MuiButton-textSecondary-643 MuiButton-flat-644 MuiButton-flatSecondary-646 root" + className="MuiButton-root-643 MuiButton-text-645 MuiButton-textSecondary-647 MuiButton-flat-648 MuiButton-flatSecondary-650 root" classes={ Object { - "disabled": "MuiButtonBase-disabled-590", - "focusVisible": "MuiButtonBase-focusVisible-591", - "root": "MuiButtonBase-root-589", + "disabled": "MuiButtonBase-disabled-594", + "focusVisible": "MuiButtonBase-focusVisible-595", + "root": "MuiButtonBase-root-593", } } component="button" @@ -558,13 +558,13 @@ exports[`RecurringRunsManager renders an enable button if the run's enabled fiel disableTouchRipple={false} disabled={false} focusRipple={true} - focusVisibleClassName="MuiButton-focusVisible-658" + focusVisibleClassName="MuiButton-focusVisible-662" onClick={[Function]} tabIndex="0" type="button" > <button - className="MuiButtonBase-root-589 MuiButton-root-639 MuiButton-text-641 MuiButton-textSecondary-643 MuiButton-flat-644 MuiButton-flatSecondary-646 root" + className="MuiButtonBase-root-593 MuiButton-root-643 MuiButton-text-645 MuiButton-textSecondary-647 MuiButton-flat-648 MuiButton-flatSecondary-650 root" disabled={false} onBlur={[Function]} onClick={[Function]} @@ -582,7 +582,7 @@ exports[`RecurringRunsManager renders an enable button if the run's enabled fiel type="button" > <span - className="MuiButton-label-640" + className="MuiButton-label-644" > <span> Disabled @@ -600,25 +600,25 @@ exports[`RecurringRunsManager renders an enable button if the run's enabled fiel center={false} classes={ Object { - "child": "MuiTouchRipple-child-636", - "childLeaving": "MuiTouchRipple-childLeaving-637", - "childPulsate": "MuiTouchRipple-childPulsate-638", - "ripple": "MuiTouchRipple-ripple-633", - "ripplePulsate": "MuiTouchRipple-ripplePulsate-635", - "rippleVisible": "MuiTouchRipple-rippleVisible-634", - "root": "MuiTouchRipple-root-632", + "child": "MuiTouchRipple-child-640", + "childLeaving": "MuiTouchRipple-childLeaving-641", + "childPulsate": "MuiTouchRipple-childPulsate-642", + "ripple": "MuiTouchRipple-ripple-637", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-639", + "rippleVisible": "MuiTouchRipple-rippleVisible-638", + "root": "MuiTouchRipple-root-636", } } > <TransitionGroup childFactory={[Function]} - className="MuiTouchRipple-root-632" + className="MuiTouchRipple-root-636" component="span" enter={true} exit={true} > <span - className="MuiTouchRipple-root-632" + className="MuiTouchRipple-root-636" /> </TransitionGroup> </TouchRipple> diff --git a/frontend/src/pages/__snapshots__/RunDetails.test.tsx.snap b/frontend/src/pages/__snapshots__/RunDetails.test.tsx.snap index d9b32129d5..e05aeb0987 100644 --- a/frontend/src/pages/__snapshots__/RunDetails.test.tsx.snap +++ b/frontend/src/pages/__snapshots__/RunDetails.test.tsx.snap @@ -574,17 +574,17 @@ exports[`RunDetails logs tab does not load logs if clicked node status is skippe > <MD2Tabs onSwitch={[Function]} - selectedTab={5} + selectedTab={4} tabs={ Array [ "Input/Output", "Visualizations", - "ML Metadata", "Details", "Volumes", "Logs", "Pod", "Events", + "ML Metadata", ] } /> @@ -682,17 +682,17 @@ exports[`RunDetails logs tab keeps side pane open and on same tab when logs chan > <MD2Tabs onSwitch={[Function]} - selectedTab={5} + selectedTab={4} tabs={ Array [ "Input/Output", "Visualizations", - "ML Metadata", "Details", "Volumes", "Logs", "Pod", "Events", + "ML Metadata", ] } /> @@ -806,17 +806,17 @@ exports[`RunDetails logs tab loads and shows logs in side pane 1`] = ` > <MD2Tabs onSwitch={[Function]} - selectedTab={5} + selectedTab={4} tabs={ Array [ "Input/Output", "Visualizations", - "ML Metadata", "Details", "Volumes", "Logs", "Pod", "Events", + "ML Metadata", ] } /> @@ -930,17 +930,17 @@ exports[`RunDetails logs tab switches to logs tab in side pane 1`] = ` > <MD2Tabs onSwitch={[Function]} - selectedTab={5} + selectedTab={4} tabs={ Array [ "Input/Output", "Visualizations", - "ML Metadata", "Details", "Volumes", "Logs", "Pod", "Events", + "ML Metadata", ] } /> @@ -1059,12 +1059,12 @@ exports[`RunDetails opens side panel when graph node is clicked 1`] = ` Array [ "Input/Output", "Visualizations", - "ML Metadata", "Details", "Volumes", "Logs", "Pod", "Events", + "ML Metadata", ] } /> @@ -1599,12 +1599,12 @@ exports[`RunDetails switches to inputs/outputs tab in side pane 1`] = ` Array [ "Input/Output", "Visualizations", - "ML Metadata", "Details", "Volumes", "Logs", "Pod", "Events", + "ML Metadata", ] } /> @@ -1762,12 +1762,12 @@ exports[`RunDetails switches to manifest tab in side pane 1`] = ` Array [ "Input/Output", "Visualizations", - "ML Metadata", "Details", "Volumes", "Logs", "Pod", "Events", + "ML Metadata", ] } /> @@ -1914,17 +1914,17 @@ exports[`RunDetails switches to volumes tab in side pane 1`] = ` > <MD2Tabs onSwitch={[Function]} - selectedTab={4} + selectedTab={3} tabs={ Array [ "Input/Output", "Visualizations", - "ML Metadata", "Details", "Volumes", "Logs", "Pod", "Events", + "ML Metadata", ] } /> diff --git a/frontend/src/pages/__snapshots__/RunList.test.tsx.snap b/frontend/src/pages/__snapshots__/RunList.test.tsx.snap index 2d88ba6f4f..9a9aaebbfb 100644 --- a/frontend/src/pages/__snapshots__/RunList.test.tsx.snap +++ b/frontend/src/pages/__snapshots__/RunList.test.tsx.snap @@ -750,7 +750,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -761,7 +761,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -787,7 +787,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` "notchedOutline": "filterBorderRadius", "root": "noLeftPadding", }, - "startAdornment": <WithStyles(InputAdornment) + "startAdornment": <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -798,7 +798,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)>, + </WithStyles(WithFormControlContext(InputAdornment))>, } } className="filterBox" @@ -1015,7 +1015,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` labelWidth={0} onChange={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -1026,7 +1026,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } value="" > @@ -1052,7 +1052,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` labelWidth={0} onChange={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -1063,7 +1063,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } value="" > @@ -1092,7 +1092,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` onChange={[Function]} renderPrefix={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -1103,7 +1103,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } type="text" value="" @@ -1137,7 +1137,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` onChange={[Function]} renderPrefix={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -1148,7 +1148,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } type="text" value="" @@ -1198,7 +1198,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` onChange={[Function]} renderPrefix={[Function]} startAdornment={ - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > <pure(FilterListIcon) @@ -1209,7 +1209,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` } } /> - </WithStyles(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> } type="text" value="" @@ -1431,7 +1431,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -1624,34 +1624,56 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </fieldset> </NotchedOutline> </WithStyles(NotchedOutline)> - <WithStyles(InputAdornment) + <WithStyles(WithFormControlContext(InputAdornment)) position="end" > - <InputAdornment + <WithFormControlContext(InputAdornment) classes={ Object { + "disablePointerEvents": "MuiInputAdornment-disablePointerEvents-59", "filled": "MuiInputAdornment-filled-56", "positionEnd": "MuiInputAdornment-positionEnd-58", "positionStart": "MuiInputAdornment-positionStart-57", "root": "MuiInputAdornment-root-55", } } - component="div" - disableTypography={false} position="end" > - <div - className="MuiInputAdornment-root-55 MuiInputAdornment-positionEnd-58" - > - <pure(FilterListIcon) - style={ - Object { - "color": "#80868b", - "paddingRight": 16, - } + <InputAdornment + classes={ + Object { + "disablePointerEvents": "MuiInputAdornment-disablePointerEvents-59", + "filled": "MuiInputAdornment-filled-56", + "positionEnd": "MuiInputAdornment-positionEnd-58", + "positionStart": "MuiInputAdornment-positionStart-57", + "root": "MuiInputAdornment-root-55", } + } + component="div" + disablePointerEvents={false} + disableTypography={false} + muiFormControl={ + Object { + "adornedStart": true, + "disabled": false, + "error": false, + "filled": false, + "focused": false, + "margin": "none", + "onBlur": [Function], + "onEmpty": [Function], + "onFilled": [Function], + "onFocus": [Function], + "required": false, + "variant": "outlined", + } + } + position="end" + > + <div + className="MuiInputAdornment-root-55 MuiInputAdornment-positionEnd-58" > - <FilterListIcon + <pure(FilterListIcon) style={ Object { "color": "#80868b", @@ -1659,7 +1681,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` } } > - <WithStyles(SvgIcon) + <FilterListIcon style={ Object { "color": "#80868b", @@ -1667,36 +1689,31 @@ exports[`RunList reloads the run when refresh is called 1`] = ` } } > - <SvgIcon - classes={ - Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", - } - } - color="inherit" - component="svg" - fontSize="default" + <WithStyles(SvgIcon) style={ Object { "color": "#80868b", "paddingRight": 16, } } - viewBox="0 0 24 24" > - <svg - aria-hidden="true" - className="MuiSvgIcon-root-59" - focusable="false" - role="presentation" + <SvgIcon + classes={ + Object { + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", + } + } + color="inherit" + component="svg" + fontSize="default" style={ Object { "color": "#80868b", @@ -1705,21 +1722,35 @@ exports[`RunList reloads the run when refresh is called 1`] = ` } viewBox="0 0 24 24" > - <path - d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z" - /> - <path - d="M0 0h24v24H0z" - fill="none" - /> - </svg> - </SvgIcon> - </WithStyles(SvgIcon)> - </FilterListIcon> - </pure(FilterListIcon)> - </div> - </InputAdornment> - </WithStyles(InputAdornment)> + <svg + aria-hidden="true" + className="MuiSvgIcon-root-60" + focusable="false" + role="presentation" + style={ + Object { + "color": "#80868b", + "paddingRight": 16, + } + } + viewBox="0 0 24 24" + > + <path + d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z" + /> + <path + d="M0 0h24v24H0z" + fill="none" + /> + </svg> + </SvgIcon> + </WithStyles(SvgIcon)> + </FilterListIcon> + </pure(FilterListIcon)> + </div> + </InputAdornment> + </WithFormControlContext(InputAdornment)> + </WithStyles(WithFormControlContext(InputAdornment))> <input aria-invalid={false} className="MuiInputBase-input-46 MuiOutlinedInput-input-31 MuiInputBase-inputAdornedStart-51 MuiOutlinedInput-inputAdornedStart-34" @@ -1761,12 +1792,12 @@ exports[`RunList reloads the run when refresh is called 1`] = ` checkedIcon={<pure(CheckBox) />} classes={ Object { - "checked": "MuiCheckbox-checked-69", - "colorPrimary": "MuiCheckbox-colorPrimary-72", - "colorSecondary": "MuiCheckbox-colorSecondary-73", - "disabled": "MuiCheckbox-disabled-70", - "indeterminate": "MuiCheckbox-indeterminate-71", - "root": "MuiCheckbox-root-68", + "checked": "MuiCheckbox-checked-70", + "colorPrimary": "MuiCheckbox-colorPrimary-73", + "colorSecondary": "MuiCheckbox-colorSecondary-74", + "disabled": "MuiCheckbox-disabled-71", + "indeterminate": "MuiCheckbox-indeterminate-72", + "root": "MuiCheckbox-root-69", } } color="primary" @@ -1781,9 +1812,9 @@ exports[`RunList reloads the run when refresh is called 1`] = ` className="" classes={ Object { - "checked": "MuiCheckbox-checked-69", - "disabled": "MuiCheckbox-disabled-70", - "root": "MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72", + "checked": "MuiCheckbox-checked-70", + "disabled": "MuiCheckbox-disabled-71", + "root": "MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -1801,10 +1832,10 @@ exports[`RunList reloads the run when refresh is called 1`] = ` className="" classes={ Object { - "checked": "MuiPrivateSwitchBase-checked-75 MuiCheckbox-checked-69", - "disabled": "MuiPrivateSwitchBase-disabled-76 MuiCheckbox-disabled-70", - "input": "MuiPrivateSwitchBase-input-77", - "root": "MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72", + "checked": "MuiPrivateSwitchBase-checked-76 MuiCheckbox-checked-70", + "disabled": "MuiPrivateSwitchBase-disabled-77 MuiCheckbox-disabled-71", + "input": "MuiPrivateSwitchBase-input-78", + "root": "MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -1822,10 +1853,10 @@ exports[`RunList reloads the run when refresh is called 1`] = ` className="" classes={ Object { - "checked": "MuiPrivateSwitchBase-checked-75 MuiCheckbox-checked-69", - "disabled": "MuiPrivateSwitchBase-disabled-76 MuiCheckbox-disabled-70", - "input": "MuiPrivateSwitchBase-input-77", - "root": "MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72", + "checked": "MuiPrivateSwitchBase-checked-76 MuiCheckbox-checked-70", + "disabled": "MuiPrivateSwitchBase-disabled-77 MuiCheckbox-disabled-71", + "input": "MuiPrivateSwitchBase-input-78", + "root": "MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73", } } icon={<pure(CheckBoxOutlineBlank) />} @@ -1838,22 +1869,22 @@ exports[`RunList reloads the run when refresh is called 1`] = ` type="checkbox" > <WithStyles(IconButton) - className="MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" component="span" onBlur={[Function]} onFocus={[Function]} tabIndex={null} > <IconButton - className="MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-79", - "colorPrimary": "MuiIconButton-colorPrimary-80", - "colorSecondary": "MuiIconButton-colorSecondary-81", - "disabled": "MuiIconButton-disabled-82", - "label": "MuiIconButton-label-83", - "root": "MuiIconButton-root-78", + "colorInherit": "MuiIconButton-colorInherit-80", + "colorPrimary": "MuiIconButton-colorPrimary-81", + "colorSecondary": "MuiIconButton-colorSecondary-82", + "disabled": "MuiIconButton-disabled-83", + "label": "MuiIconButton-label-84", + "root": "MuiIconButton-root-79", } } color="default" @@ -1865,7 +1896,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-78 MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiIconButton-root-79 MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" component="span" disabled={false} focusRipple={true} @@ -1875,12 +1906,12 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <ButtonBase centerRipple={true} - className="MuiIconButton-root-78 MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiIconButton-root-79 MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="span" @@ -1894,7 +1925,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` type="button" > <span - className="MuiButtonBase-root-84 MuiIconButton-root-78 MuiPrivateSwitchBase-root-74 MuiCheckbox-root-68 MuiCheckbox-colorPrimary-72" + className="MuiButtonBase-root-85 MuiIconButton-root-79 MuiPrivateSwitchBase-root-75 MuiCheckbox-root-69 MuiCheckbox-colorPrimary-73" onBlur={[Function]} onContextMenu={[Function]} onFocus={[Function]} @@ -1909,7 +1940,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` tabIndex={null} > <span - className="MuiIconButton-label-83" + className="MuiIconButton-label-84" > <pure(CheckBoxOutlineBlank)> <CheckBoxOutlineBlank> @@ -1917,15 +1948,15 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -1935,7 +1966,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59" + className="MuiSvgIcon-root-60" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -1950,7 +1981,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </pure(CheckBoxOutlineBlank)> <input checked={false} - className="MuiPrivateSwitchBase-input-77" + className="MuiPrivateSwitchBase-input-78" data-indeterminate={false} onChange={[Function]} type="checkbox" @@ -1968,25 +1999,25 @@ exports[`RunList reloads the run when refresh is called 1`] = ` center={true} classes={ Object { - "child": "MuiTouchRipple-child-128", - "childLeaving": "MuiTouchRipple-childLeaving-129", - "childPulsate": "MuiTouchRipple-childPulsate-130", - "ripple": "MuiTouchRipple-ripple-125", - "ripplePulsate": "MuiTouchRipple-ripplePulsate-127", - "rippleVisible": "MuiTouchRipple-rippleVisible-126", - "root": "MuiTouchRipple-root-124", + "child": "MuiTouchRipple-child-129", + "childLeaving": "MuiTouchRipple-childLeaving-130", + "childPulsate": "MuiTouchRipple-childPulsate-131", + "ripple": "MuiTouchRipple-ripple-126", + "ripplePulsate": "MuiTouchRipple-ripplePulsate-128", + "rippleVisible": "MuiTouchRipple-rippleVisible-127", + "root": "MuiTouchRipple-root-125", } } > <TransitionGroup childFactory={[Function]} - className="MuiTouchRipple-root-124" + className="MuiTouchRipple-root-125" component="span" enter={true} exit={true} > <span - className="MuiTouchRipple-root-124" + className="MuiTouchRipple-root-125" /> </TransitionGroup> </TouchRipple> @@ -2021,14 +2052,14 @@ exports[`RunList reloads the run when refresh is called 1`] = ` TransitionComponent={[Function]} classes={ Object { - "popper": "MuiTooltip-popper-87", - "popperInteractive": "MuiTooltip-popperInteractive-88", - "tooltip": "MuiTooltip-tooltip-89", - "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-94", - "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-91", - "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-92", - "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-93", - "touch": "MuiTooltip-touch-90", + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", } } disableFocusListener={false} @@ -2238,7 +2269,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -2428,11 +2459,11 @@ exports[`RunList reloads the run when refresh is called 1`] = ` className="ellipsis" classes={ Object { - "active": "MuiTableSortLabel-active-96", - "icon": "MuiTableSortLabel-icon-97", - "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-99", - "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-98", - "root": "MuiTableSortLabel-root-95", + "active": "MuiTableSortLabel-active-97", + "icon": "MuiTableSortLabel-icon-98", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-100", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-99", + "root": "MuiTableSortLabel-root-96", } } direction="desc" @@ -2448,7 +2479,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <WithStyles(ButtonBase) aria-describedby={null} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" component="span" disableRipple={true} onBlur={[Function]} @@ -2463,12 +2494,12 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <ButtonBase aria-describedby={null} centerRipple={false} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="span" @@ -2488,7 +2519,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <span aria-describedby={null} - className="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + className="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} @@ -2508,27 +2539,27 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > Run name <pure(ArrowDownward) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <ArrowDownward - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <WithStyles(SvgIcon) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <SvgIcon - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -2538,7 +2569,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -2560,7 +2591,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <Popper anchorEl={ <span - class="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + class="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" role="button" tabindex="0" title="Sort" @@ -2568,7 +2599,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` Run name <svg aria-hidden="true" - class="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + class="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -2579,7 +2610,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </svg> </span> } - className="MuiTooltip-popper-87" + className="MuiTooltip-popper-88" disablePortal={false} id={null} open={false} @@ -2607,14 +2638,14 @@ exports[`RunList reloads the run when refresh is called 1`] = ` TransitionComponent={[Function]} classes={ Object { - "popper": "MuiTooltip-popper-87", - "popperInteractive": "MuiTooltip-popperInteractive-88", - "tooltip": "MuiTooltip-tooltip-89", - "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-94", - "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-91", - "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-92", - "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-93", - "touch": "MuiTooltip-touch-90", + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", } } disableFocusListener={false} @@ -2824,7 +2855,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -3013,11 +3044,11 @@ exports[`RunList reloads the run when refresh is called 1`] = ` className="ellipsis" classes={ Object { - "active": "MuiTableSortLabel-active-96", - "icon": "MuiTableSortLabel-icon-97", - "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-99", - "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-98", - "root": "MuiTableSortLabel-root-95", + "active": "MuiTableSortLabel-active-97", + "icon": "MuiTableSortLabel-icon-98", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-100", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-99", + "root": "MuiTableSortLabel-root-96", } } direction="desc" @@ -3033,7 +3064,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <WithStyles(ButtonBase) aria-describedby={null} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" component="span" disableRipple={true} onBlur={[Function]} @@ -3048,12 +3079,12 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <ButtonBase aria-describedby={null} centerRipple={false} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="span" @@ -3073,7 +3104,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <span aria-describedby={null} - className="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + className="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} @@ -3093,27 +3124,27 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > Status <pure(ArrowDownward) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <ArrowDownward - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <WithStyles(SvgIcon) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <SvgIcon - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -3123,7 +3154,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -3145,7 +3176,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <Popper anchorEl={ <span - class="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + class="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" role="button" tabindex="0" title="Cannot sort by this column" @@ -3153,7 +3184,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` Status <svg aria-hidden="true" - class="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + class="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -3164,7 +3195,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </svg> </span> } - className="MuiTooltip-popper-87" + className="MuiTooltip-popper-88" disablePortal={false} id={null} open={false} @@ -3192,14 +3223,14 @@ exports[`RunList reloads the run when refresh is called 1`] = ` TransitionComponent={[Function]} classes={ Object { - "popper": "MuiTooltip-popper-87", - "popperInteractive": "MuiTooltip-popperInteractive-88", - "tooltip": "MuiTooltip-tooltip-89", - "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-94", - "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-91", - "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-92", - "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-93", - "touch": "MuiTooltip-touch-90", + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", } } disableFocusListener={false} @@ -3409,7 +3440,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -3598,11 +3629,11 @@ exports[`RunList reloads the run when refresh is called 1`] = ` className="ellipsis" classes={ Object { - "active": "MuiTableSortLabel-active-96", - "icon": "MuiTableSortLabel-icon-97", - "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-99", - "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-98", - "root": "MuiTableSortLabel-root-95", + "active": "MuiTableSortLabel-active-97", + "icon": "MuiTableSortLabel-icon-98", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-100", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-99", + "root": "MuiTableSortLabel-root-96", } } direction="desc" @@ -3618,7 +3649,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <WithStyles(ButtonBase) aria-describedby={null} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" component="span" disableRipple={true} onBlur={[Function]} @@ -3633,12 +3664,12 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <ButtonBase aria-describedby={null} centerRipple={false} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="span" @@ -3658,7 +3689,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <span aria-describedby={null} - className="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + className="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} @@ -3678,27 +3709,27 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > Duration <pure(ArrowDownward) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <ArrowDownward - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <WithStyles(SvgIcon) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <SvgIcon - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -3708,7 +3739,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -3730,7 +3761,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <Popper anchorEl={ <span - class="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + class="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" role="button" tabindex="0" title="Cannot sort by this column" @@ -3738,7 +3769,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` Duration <svg aria-hidden="true" - class="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + class="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -3749,7 +3780,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </svg> </span> } - className="MuiTooltip-popper-87" + className="MuiTooltip-popper-88" disablePortal={false} id={null} open={false} @@ -3777,14 +3808,14 @@ exports[`RunList reloads the run when refresh is called 1`] = ` TransitionComponent={[Function]} classes={ Object { - "popper": "MuiTooltip-popper-87", - "popperInteractive": "MuiTooltip-popperInteractive-88", - "tooltip": "MuiTooltip-tooltip-89", - "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-94", - "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-91", - "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-92", - "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-93", - "touch": "MuiTooltip-touch-90", + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", } } disableFocusListener={false} @@ -3994,7 +4025,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -4183,11 +4214,11 @@ exports[`RunList reloads the run when refresh is called 1`] = ` className="ellipsis" classes={ Object { - "active": "MuiTableSortLabel-active-96", - "icon": "MuiTableSortLabel-icon-97", - "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-99", - "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-98", - "root": "MuiTableSortLabel-root-95", + "active": "MuiTableSortLabel-active-97", + "icon": "MuiTableSortLabel-icon-98", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-100", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-99", + "root": "MuiTableSortLabel-root-96", } } direction="desc" @@ -4203,7 +4234,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <WithStyles(ButtonBase) aria-describedby={null} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" component="span" disableRipple={true} onBlur={[Function]} @@ -4218,12 +4249,12 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <ButtonBase aria-describedby={null} centerRipple={false} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="span" @@ -4243,7 +4274,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <span aria-describedby={null} - className="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + className="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} @@ -4263,27 +4294,27 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > Experiment <pure(ArrowDownward) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <ArrowDownward - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <WithStyles(SvgIcon) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <SvgIcon - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -4293,7 +4324,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -4315,7 +4346,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <Popper anchorEl={ <span - class="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + class="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" role="button" tabindex="0" title="Cannot sort by this column" @@ -4323,7 +4354,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` Experiment <svg aria-hidden="true" - class="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + class="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -4334,7 +4365,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </svg> </span> } - className="MuiTooltip-popper-87" + className="MuiTooltip-popper-88" disablePortal={false} id={null} open={false} @@ -4362,14 +4393,14 @@ exports[`RunList reloads the run when refresh is called 1`] = ` TransitionComponent={[Function]} classes={ Object { - "popper": "MuiTooltip-popper-87", - "popperInteractive": "MuiTooltip-popperInteractive-88", - "tooltip": "MuiTooltip-tooltip-89", - "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-94", - "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-91", - "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-92", - "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-93", - "touch": "MuiTooltip-touch-90", + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", } } disableFocusListener={false} @@ -4579,7 +4610,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -4768,11 +4799,11 @@ exports[`RunList reloads the run when refresh is called 1`] = ` className="ellipsis" classes={ Object { - "active": "MuiTableSortLabel-active-96", - "icon": "MuiTableSortLabel-icon-97", - "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-99", - "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-98", - "root": "MuiTableSortLabel-root-95", + "active": "MuiTableSortLabel-active-97", + "icon": "MuiTableSortLabel-icon-98", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-100", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-99", + "root": "MuiTableSortLabel-root-96", } } direction="desc" @@ -4788,7 +4819,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <WithStyles(ButtonBase) aria-describedby={null} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" component="span" disableRipple={true} onBlur={[Function]} @@ -4803,12 +4834,12 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <ButtonBase aria-describedby={null} centerRipple={false} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="span" @@ -4828,7 +4859,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <span aria-describedby={null} - className="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + className="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} @@ -4848,27 +4879,27 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > Pipeline Version <pure(ArrowDownward) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <ArrowDownward - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <WithStyles(SvgIcon) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <SvgIcon - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -4878,7 +4909,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -4900,7 +4931,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <Popper anchorEl={ <span - class="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + class="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" role="button" tabindex="0" title="Cannot sort by this column" @@ -4908,7 +4939,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` Pipeline Version <svg aria-hidden="true" - class="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + class="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -4919,7 +4950,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </svg> </span> } - className="MuiTooltip-popper-87" + className="MuiTooltip-popper-88" disablePortal={false} id={null} open={false} @@ -4947,14 +4978,14 @@ exports[`RunList reloads the run when refresh is called 1`] = ` TransitionComponent={[Function]} classes={ Object { - "popper": "MuiTooltip-popper-87", - "popperInteractive": "MuiTooltip-popperInteractive-88", - "tooltip": "MuiTooltip-tooltip-89", - "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-94", - "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-91", - "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-92", - "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-93", - "touch": "MuiTooltip-touch-90", + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", } } disableFocusListener={false} @@ -5164,7 +5195,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -5353,11 +5384,11 @@ exports[`RunList reloads the run when refresh is called 1`] = ` className="ellipsis" classes={ Object { - "active": "MuiTableSortLabel-active-96", - "icon": "MuiTableSortLabel-icon-97", - "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-99", - "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-98", - "root": "MuiTableSortLabel-root-95", + "active": "MuiTableSortLabel-active-97", + "icon": "MuiTableSortLabel-icon-98", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-100", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-99", + "root": "MuiTableSortLabel-root-96", } } direction="desc" @@ -5373,7 +5404,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <WithStyles(ButtonBase) aria-describedby={null} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" component="span" disableRipple={true} onBlur={[Function]} @@ -5388,12 +5419,12 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <ButtonBase aria-describedby={null} centerRipple={false} - className="MuiTableSortLabel-root-95 ellipsis" + className="MuiTableSortLabel-root-96 ellipsis" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="span" @@ -5413,7 +5444,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <span aria-describedby={null} - className="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + className="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} @@ -5433,27 +5464,27 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > Recurring Run <pure(ArrowDownward) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <ArrowDownward - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <WithStyles(SvgIcon) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <SvgIcon - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -5463,7 +5494,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -5485,7 +5516,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <Popper anchorEl={ <span - class="MuiButtonBase-root-84 MuiTableSortLabel-root-95 ellipsis" + class="MuiButtonBase-root-85 MuiTableSortLabel-root-96 ellipsis" role="button" tabindex="0" title="Cannot sort by this column" @@ -5493,7 +5524,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` Recurring Run <svg aria-hidden="true" - class="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + class="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -5504,7 +5535,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </svg> </span> } - className="MuiTooltip-popper-87" + className="MuiTooltip-popper-88" disablePortal={false} id={null} open={false} @@ -5532,14 +5563,14 @@ exports[`RunList reloads the run when refresh is called 1`] = ` TransitionComponent={[Function]} classes={ Object { - "popper": "MuiTooltip-popper-87", - "popperInteractive": "MuiTooltip-popperInteractive-88", - "tooltip": "MuiTooltip-tooltip-89", - "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-94", - "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-91", - "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-92", - "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-93", - "touch": "MuiTooltip-touch-90", + "popper": "MuiTooltip-popper-88", + "popperInteractive": "MuiTooltip-popperInteractive-89", + "tooltip": "MuiTooltip-tooltip-90", + "tooltipPlacementBottom": "MuiTooltip-tooltipPlacementBottom-95", + "tooltipPlacementLeft": "MuiTooltip-tooltipPlacementLeft-92", + "tooltipPlacementRight": "MuiTooltip-tooltipPlacementRight-93", + "tooltipPlacementTop": "MuiTooltip-tooltipPlacementTop-94", + "touch": "MuiTooltip-touch-91", } } disableFocusListener={false} @@ -5749,7 +5780,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -5939,11 +5970,11 @@ exports[`RunList reloads the run when refresh is called 1`] = ` className="ellipsis" classes={ Object { - "active": "MuiTableSortLabel-active-96", - "icon": "MuiTableSortLabel-icon-97", - "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-99", - "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-98", - "root": "MuiTableSortLabel-root-95", + "active": "MuiTableSortLabel-active-97", + "icon": "MuiTableSortLabel-icon-98", + "iconDirectionAsc": "MuiTableSortLabel-iconDirectionAsc-100", + "iconDirectionDesc": "MuiTableSortLabel-iconDirectionDesc-99", + "root": "MuiTableSortLabel-root-96", } } direction="desc" @@ -5959,7 +5990,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <WithStyles(ButtonBase) aria-describedby={null} - className="MuiTableSortLabel-root-95 MuiTableSortLabel-active-96 ellipsis" + className="MuiTableSortLabel-root-96 MuiTableSortLabel-active-97 ellipsis" component="span" disableRipple={true} onBlur={[Function]} @@ -5974,12 +6005,12 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <ButtonBase aria-describedby={null} centerRipple={false} - className="MuiTableSortLabel-root-95 MuiTableSortLabel-active-96 ellipsis" + className="MuiTableSortLabel-root-96 MuiTableSortLabel-active-97 ellipsis" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="span" @@ -5999,7 +6030,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <span aria-describedby={null} - className="MuiButtonBase-root-84 MuiTableSortLabel-root-95 MuiTableSortLabel-active-96 ellipsis" + className="MuiButtonBase-root-85 MuiTableSortLabel-root-96 MuiTableSortLabel-active-97 ellipsis" onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} @@ -6019,27 +6050,27 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > Start time <pure(ArrowDownward) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <ArrowDownward - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <WithStyles(SvgIcon) - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" > <SvgIcon - className="MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -6049,7 +6080,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + className="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -6071,7 +6102,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <Popper anchorEl={ <span - class="MuiButtonBase-root-84 MuiTableSortLabel-root-95 MuiTableSortLabel-active-96 ellipsis" + class="MuiButtonBase-root-85 MuiTableSortLabel-root-96 MuiTableSortLabel-active-97 ellipsis" role="button" tabindex="0" title="Sort" @@ -6079,7 +6110,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` Start time <svg aria-hidden="true" - class="MuiSvgIcon-root-59 MuiTableSortLabel-icon-97 MuiTableSortLabel-iconDirectionDesc-98" + class="MuiSvgIcon-root-60 MuiTableSortLabel-icon-98 MuiTableSortLabel-iconDirectionDesc-99" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -6090,7 +6121,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </svg> </span> } - className="MuiTooltip-popper-87" + className="MuiTooltip-popper-88" disablePortal={false} id={null} open={false} @@ -6185,13 +6216,13 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <WithFormControlContext(Select) classes={ Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", } } input={ @@ -6208,13 +6239,13 @@ exports[`RunList reloads the run when refresh is called 1`] = ` autoWidth={false} classes={ Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", } } displayEmpty={false} @@ -6277,13 +6308,13 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", }, "displayEmpty": false, "multiple": false, @@ -6301,19 +6332,19 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <Input classes={ Object { - "disabled": "MuiInput-disabled-110", - "error": "MuiInput-error-112", - "focused": "MuiInput-focused-109", - "formControl": "MuiInput-formControl-108", - "fullWidth": "MuiInput-fullWidth-114", - "input": "MuiInput-input-115", - "inputMarginDense": "MuiInput-inputMarginDense-116", - "inputMultiline": "MuiInput-inputMultiline-117", - "inputType": "MuiInput-inputType-118", - "inputTypeSearch": "MuiInput-inputTypeSearch-119", - "multiline": "MuiInput-multiline-113", - "root": "MuiInput-root-107", - "underline": "MuiInput-underline-111", + "disabled": "MuiInput-disabled-111", + "error": "MuiInput-error-113", + "focused": "MuiInput-focused-110", + "formControl": "MuiInput-formControl-109", + "fullWidth": "MuiInput-fullWidth-115", + "input": "MuiInput-input-116", + "inputMarginDense": "MuiInput-inputMarginDense-117", + "inputMultiline": "MuiInput-inputMultiline-118", + "inputType": "MuiInput-inputType-119", + "inputTypeSearch": "MuiInput-inputTypeSearch-120", + "multiline": "MuiInput-multiline-114", + "root": "MuiInput-root-108", + "underline": "MuiInput-underline-112", } } disableUnderline={true} @@ -6347,13 +6378,13 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", }, "displayEmpty": false, "multiple": false, @@ -6371,18 +6402,18 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <WithStyles(WithFormControlContext(InputBase)) classes={ Object { - "disabled": "MuiInput-disabled-110", - "error": "MuiInput-error-112", - "focused": "MuiInput-focused-109", - "formControl": "MuiInput-formControl-108", - "fullWidth": "MuiInput-fullWidth-114", - "input": "MuiInput-input-115", - "inputMarginDense": "MuiInput-inputMarginDense-116", - "inputMultiline": "MuiInput-inputMultiline-117", - "inputType": "MuiInput-inputType-118", - "inputTypeSearch": "MuiInput-inputTypeSearch-119", - "multiline": "MuiInput-multiline-113", - "root": "MuiInput-root-107", + "disabled": "MuiInput-disabled-111", + "error": "MuiInput-error-113", + "focused": "MuiInput-focused-110", + "formControl": "MuiInput-formControl-109", + "fullWidth": "MuiInput-fullWidth-115", + "input": "MuiInput-input-116", + "inputMarginDense": "MuiInput-inputMarginDense-117", + "inputMultiline": "MuiInput-inputMultiline-118", + "inputType": "MuiInput-inputType-119", + "inputTypeSearch": "MuiInput-inputTypeSearch-120", + "multiline": "MuiInput-multiline-114", + "root": "MuiInput-root-108", "underline": null, } } @@ -6417,13 +6448,13 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", }, "displayEmpty": false, "multiple": false, @@ -6445,21 +6476,21 @@ exports[`RunList reloads the run when refresh is called 1`] = ` Object { "adornedEnd": "MuiInputBase-adornedEnd-41", "adornedStart": "MuiInputBase-adornedStart-40", - "disabled": "MuiInputBase-disabled-39 MuiInput-disabled-110", - "error": "MuiInputBase-error-42 MuiInput-error-112", - "focused": "MuiInputBase-focused-38 MuiInput-focused-109", - "formControl": "MuiInputBase-formControl-37 MuiInput-formControl-108", - "fullWidth": "MuiInputBase-fullWidth-45 MuiInput-fullWidth-114", - "input": "MuiInputBase-input-46 MuiInput-input-115", + "disabled": "MuiInputBase-disabled-39 MuiInput-disabled-111", + "error": "MuiInputBase-error-42 MuiInput-error-113", + "focused": "MuiInputBase-focused-38 MuiInput-focused-110", + "formControl": "MuiInputBase-formControl-37 MuiInput-formControl-109", + "fullWidth": "MuiInputBase-fullWidth-45 MuiInput-fullWidth-115", + "input": "MuiInputBase-input-46 MuiInput-input-116", "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-52", "inputAdornedStart": "MuiInputBase-inputAdornedStart-51", - "inputMarginDense": "MuiInputBase-inputMarginDense-47 MuiInput-inputMarginDense-116", - "inputMultiline": "MuiInputBase-inputMultiline-48 MuiInput-inputMultiline-117", - "inputType": "MuiInputBase-inputType-49 MuiInput-inputType-118", - "inputTypeSearch": "MuiInputBase-inputTypeSearch-50 MuiInput-inputTypeSearch-119", + "inputMarginDense": "MuiInputBase-inputMarginDense-47 MuiInput-inputMarginDense-117", + "inputMultiline": "MuiInputBase-inputMultiline-48 MuiInput-inputMultiline-118", + "inputType": "MuiInputBase-inputType-49 MuiInput-inputType-119", + "inputTypeSearch": "MuiInputBase-inputTypeSearch-50 MuiInput-inputTypeSearch-120", "marginDense": "MuiInputBase-marginDense-43", - "multiline": "MuiInputBase-multiline-44 MuiInput-multiline-113", - "root": "MuiInputBase-root-36 MuiInput-root-107", + "multiline": "MuiInputBase-multiline-44 MuiInput-multiline-114", + "root": "MuiInputBase-root-36 MuiInput-root-108", } } fullWidth={false} @@ -6493,13 +6524,13 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", }, "displayEmpty": false, "multiple": false, @@ -6521,21 +6552,21 @@ exports[`RunList reloads the run when refresh is called 1`] = ` Object { "adornedEnd": "MuiInputBase-adornedEnd-41", "adornedStart": "MuiInputBase-adornedStart-40", - "disabled": "MuiInputBase-disabled-39 MuiInput-disabled-110", - "error": "MuiInputBase-error-42 MuiInput-error-112", - "focused": "MuiInputBase-focused-38 MuiInput-focused-109", - "formControl": "MuiInputBase-formControl-37 MuiInput-formControl-108", - "fullWidth": "MuiInputBase-fullWidth-45 MuiInput-fullWidth-114", - "input": "MuiInputBase-input-46 MuiInput-input-115", + "disabled": "MuiInputBase-disabled-39 MuiInput-disabled-111", + "error": "MuiInputBase-error-42 MuiInput-error-113", + "focused": "MuiInputBase-focused-38 MuiInput-focused-110", + "formControl": "MuiInputBase-formControl-37 MuiInput-formControl-109", + "fullWidth": "MuiInputBase-fullWidth-45 MuiInput-fullWidth-115", + "input": "MuiInputBase-input-46 MuiInput-input-116", "inputAdornedEnd": "MuiInputBase-inputAdornedEnd-52", "inputAdornedStart": "MuiInputBase-inputAdornedStart-51", - "inputMarginDense": "MuiInputBase-inputMarginDense-47 MuiInput-inputMarginDense-116", - "inputMultiline": "MuiInputBase-inputMultiline-48 MuiInput-inputMultiline-117", - "inputType": "MuiInputBase-inputType-49 MuiInput-inputType-118", - "inputTypeSearch": "MuiInputBase-inputTypeSearch-50 MuiInput-inputTypeSearch-119", + "inputMarginDense": "MuiInputBase-inputMarginDense-47 MuiInput-inputMarginDense-117", + "inputMultiline": "MuiInputBase-inputMultiline-48 MuiInput-inputMultiline-118", + "inputType": "MuiInputBase-inputType-49 MuiInput-inputType-119", + "inputTypeSearch": "MuiInputBase-inputTypeSearch-50 MuiInput-inputTypeSearch-120", "marginDense": "MuiInputBase-marginDense-43", - "multiline": "MuiInputBase-multiline-44 MuiInput-multiline-113", - "root": "MuiInputBase-root-36 MuiInput-root-107", + "multiline": "MuiInputBase-multiline-44 MuiInput-multiline-114", + "root": "MuiInputBase-root-36 MuiInput-root-108", } } fullWidth={false} @@ -6569,13 +6600,13 @@ exports[`RunList reloads the run when refresh is called 1`] = ` </WithStyles(MenuItem)>, ], "classes": Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", }, "displayEmpty": false, "multiple": false, @@ -6609,23 +6640,23 @@ exports[`RunList reloads the run when refresh is called 1`] = ` value={10} > <div - className="MuiInputBase-root-36 MuiInput-root-107 MuiInputBase-formControl-37 MuiInput-formControl-108" + className="MuiInputBase-root-36 MuiInput-root-108 MuiInputBase-formControl-37 MuiInput-formControl-109" onClick={[Function]} > <SelectInput IconComponent={[Function]} aria-invalid={false} autoWidth={false} - className="MuiInputBase-input-46 MuiInput-input-115" + className="MuiInputBase-input-46 MuiInput-input-116" classes={ Object { - "disabled": "MuiSelect-disabled-105", - "filled": "MuiSelect-filled-102", - "icon": "MuiSelect-icon-106", - "outlined": "MuiSelect-outlined-103", - "root": "MuiSelect-root-100", - "select": "MuiSelect-select-101", - "selectMenu": "MuiSelect-selectMenu-104", + "disabled": "MuiSelect-disabled-106", + "filled": "MuiSelect-filled-103", + "icon": "MuiSelect-icon-107", + "outlined": "MuiSelect-outlined-104", + "root": "MuiSelect-root-101", + "select": "MuiSelect-select-102", + "selectMenu": "MuiSelect-selectMenu-105", } } disabled={false} @@ -6640,12 +6671,12 @@ exports[`RunList reloads the run when refresh is called 1`] = ` variant="standard" > <div - className="MuiSelect-root-100" + className="MuiSelect-root-101" > <div aria-haspopup="true" aria-pressed="false" - className="MuiSelect-select-101 MuiSelect-selectMenu-104 MuiInputBase-input-46 MuiInput-input-115" + className="MuiSelect-select-102 MuiSelect-selectMenu-105 MuiInputBase-input-46 MuiInput-input-116" onBlur={[Function]} onClick={[Function]} onFocus={[Function]} @@ -6660,27 +6691,27 @@ exports[`RunList reloads the run when refresh is called 1`] = ` value={10} /> <pure(ArrowDropDown) - className="MuiSelect-icon-106" + className="MuiSelect-icon-107" > <ArrowDropDown - className="MuiSelect-icon-106" + className="MuiSelect-icon-107" > <WithStyles(SvgIcon) - className="MuiSelect-icon-106" + className="MuiSelect-icon-107" > <SvgIcon - className="MuiSelect-icon-106" + className="MuiSelect-icon-107" classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -6690,7 +6721,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59 MuiSelect-icon-106" + className="MuiSvgIcon-root-60 MuiSelect-icon-107" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -6706,6 +6737,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <WithStyles(Menu) MenuListProps={ Object { + "disableListWrap": true, "role": "listbox", } } @@ -6720,7 +6752,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-101 MuiSelect-selectMenu-104 MuiInputBase-input-46 MuiInput-input-115" + class="MuiSelect-select-102 MuiSelect-selectMenu-105 MuiInputBase-input-46 MuiInput-input-116" role="button" tabindex="0" > @@ -6734,6 +6766,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <Menu MenuListProps={ Object { + "disableListWrap": true, "role": "listbox", } } @@ -6748,7 +6781,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-101 MuiSelect-selectMenu-104 MuiInputBase-input-46 MuiInput-input-115" + class="MuiSelect-select-102 MuiSelect-selectMenu-105 MuiInputBase-input-46 MuiInput-input-116" role="button" tabindex="0" > @@ -6757,7 +6790,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` } classes={ Object { - "paper": "MuiMenu-paper-120", + "paper": "MuiMenu-paper-121", } } disableAutoFocusItem={false} @@ -6962,7 +6995,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -7132,7 +7165,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` PaperProps={ Object { "classes": Object { - "root": "MuiMenu-paper-120", + "root": "MuiMenu-paper-121", }, "style": Object { "minWidth": null, @@ -7143,7 +7176,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-101 MuiSelect-selectMenu-104 MuiInputBase-input-46 MuiInput-input-115" + class="MuiSelect-select-102 MuiSelect-selectMenu-105 MuiInputBase-input-46 MuiInput-input-116" role="button" tabindex="0" > @@ -7173,7 +7206,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` PaperProps={ Object { "classes": Object { - "root": "MuiMenu-paper-120", + "root": "MuiMenu-paper-121", }, "style": Object { "minWidth": null, @@ -7185,7 +7218,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <div aria-haspopup="true" aria-pressed="false" - class="MuiSelect-select-101 MuiSelect-selectMenu-104 MuiInputBase-input-46 MuiInput-input-115" + class="MuiSelect-select-102 MuiSelect-selectMenu-105 MuiInputBase-input-46 MuiInput-input-116" role="button" tabindex="0" > @@ -7201,7 +7234,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` anchorReference="anchorEl" classes={ Object { - "paper": "MuiPopover-paper-121", + "paper": "MuiPopover-paper-122", } } elevation={8} @@ -7239,10 +7272,11 @@ exports[`RunList reloads the run when refresh is called 1`] = ` } classes={ Object { - "hidden": "MuiModal-hidden-123", - "root": "MuiModal-root-122", + "hidden": "MuiModal-hidden-124", + "root": "MuiModal-root-123", } } + closeAfterTransition={false} container={<body />} disableAutoFocus={false} disableBackdropClick={false} @@ -7291,12 +7325,12 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <IconButton classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-79", - "colorPrimary": "MuiIconButton-colorPrimary-80", - "colorSecondary": "MuiIconButton-colorSecondary-81", - "disabled": "MuiIconButton-disabled-82", - "label": "MuiIconButton-label-83", - "root": "MuiIconButton-root-78", + "colorInherit": "MuiIconButton-colorInherit-80", + "colorPrimary": "MuiIconButton-colorPrimary-81", + "colorSecondary": "MuiIconButton-colorSecondary-82", + "disabled": "MuiIconButton-disabled-83", + "label": "MuiIconButton-label-84", + "root": "MuiIconButton-root-79", } } color="default" @@ -7305,19 +7339,19 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-78 MuiIconButton-disabled-82" + className="MuiIconButton-root-79 MuiIconButton-disabled-83" disabled={true} focusRipple={true} onClick={[Function]} > <ButtonBase centerRipple={true} - className="MuiIconButton-root-78 MuiIconButton-disabled-82" + className="MuiIconButton-root-79 MuiIconButton-disabled-83" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="button" @@ -7330,7 +7364,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` type="button" > <button - className="MuiButtonBase-root-84 MuiButtonBase-disabled-85 MuiIconButton-root-78 MuiIconButton-disabled-82" + className="MuiButtonBase-root-85 MuiButtonBase-disabled-86 MuiIconButton-root-79 MuiIconButton-disabled-83" disabled={true} onBlur={[Function]} onClick={[Function]} @@ -7348,7 +7382,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` type="button" > <span - className="MuiIconButton-label-83" + className="MuiIconButton-label-84" > <pure(ChevronLeftIcon)> <ChevronLeftIcon> @@ -7356,15 +7390,15 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -7374,7 +7408,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59" + className="MuiSvgIcon-root-60" focusable="false" role="presentation" viewBox="0 0 24 24" @@ -7404,12 +7438,12 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <IconButton classes={ Object { - "colorInherit": "MuiIconButton-colorInherit-79", - "colorPrimary": "MuiIconButton-colorPrimary-80", - "colorSecondary": "MuiIconButton-colorSecondary-81", - "disabled": "MuiIconButton-disabled-82", - "label": "MuiIconButton-label-83", - "root": "MuiIconButton-root-78", + "colorInherit": "MuiIconButton-colorInherit-80", + "colorPrimary": "MuiIconButton-colorPrimary-81", + "colorSecondary": "MuiIconButton-colorSecondary-82", + "disabled": "MuiIconButton-disabled-83", + "label": "MuiIconButton-label-84", + "root": "MuiIconButton-root-79", } } color="default" @@ -7418,19 +7452,19 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <WithStyles(ButtonBase) centerRipple={true} - className="MuiIconButton-root-78 MuiIconButton-disabled-82" + className="MuiIconButton-root-79 MuiIconButton-disabled-83" disabled={true} focusRipple={true} onClick={[Function]} > <ButtonBase centerRipple={true} - className="MuiIconButton-root-78 MuiIconButton-disabled-82" + className="MuiIconButton-root-79 MuiIconButton-disabled-83" classes={ Object { - "disabled": "MuiButtonBase-disabled-85", - "focusVisible": "MuiButtonBase-focusVisible-86", - "root": "MuiButtonBase-root-84", + "disabled": "MuiButtonBase-disabled-86", + "focusVisible": "MuiButtonBase-focusVisible-87", + "root": "MuiButtonBase-root-85", } } component="button" @@ -7443,7 +7477,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` type="button" > <button - className="MuiButtonBase-root-84 MuiButtonBase-disabled-85 MuiIconButton-root-78 MuiIconButton-disabled-82" + className="MuiButtonBase-root-85 MuiButtonBase-disabled-86 MuiIconButton-root-79 MuiIconButton-disabled-83" disabled={true} onBlur={[Function]} onClick={[Function]} @@ -7461,7 +7495,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` type="button" > <span - className="MuiIconButton-label-83" + className="MuiIconButton-label-84" > <pure(ChevronRightIcon)> <ChevronRightIcon> @@ -7469,15 +7503,15 @@ exports[`RunList reloads the run when refresh is called 1`] = ` <SvgIcon classes={ Object { - "colorAction": "MuiSvgIcon-colorAction-62", - "colorDisabled": "MuiSvgIcon-colorDisabled-64", - "colorError": "MuiSvgIcon-colorError-63", - "colorPrimary": "MuiSvgIcon-colorPrimary-60", - "colorSecondary": "MuiSvgIcon-colorSecondary-61", - "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-65", - "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-67", - "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-66", - "root": "MuiSvgIcon-root-59", + "colorAction": "MuiSvgIcon-colorAction-63", + "colorDisabled": "MuiSvgIcon-colorDisabled-65", + "colorError": "MuiSvgIcon-colorError-64", + "colorPrimary": "MuiSvgIcon-colorPrimary-61", + "colorSecondary": "MuiSvgIcon-colorSecondary-62", + "fontSizeInherit": "MuiSvgIcon-fontSizeInherit-66", + "fontSizeLarge": "MuiSvgIcon-fontSizeLarge-68", + "fontSizeSmall": "MuiSvgIcon-fontSizeSmall-67", + "root": "MuiSvgIcon-root-60", } } color="inherit" @@ -7487,7 +7521,7 @@ exports[`RunList reloads the run when refresh is called 1`] = ` > <svg aria-hidden="true" - className="MuiSvgIcon-root-59" + className="MuiSvgIcon-root-60" focusable="false" role="presentation" viewBox="0 0 24 24" diff --git a/frontend/src/pages/__snapshots__/Status.test.tsx.snap b/frontend/src/pages/__snapshots__/Status.test.tsx.snap index 697cc2782e..d3a9b65f14 100644 --- a/frontend/src/pages/__snapshots__/Status.test.tsx.snap +++ b/frontend/src/pages/__snapshots__/Status.test.tsx.snap @@ -222,7 +222,7 @@ exports[`Status statusToIcon displays start and end dates if both are provided 1 "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -645,7 +645,7 @@ exports[`Status statusToIcon does not display a end date if none was provided 1` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -1064,7 +1064,7 @@ exports[`Status statusToIcon does not display a start date if none was provided "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -1483,7 +1483,7 @@ exports[`Status statusToIcon does not display any dates if neither was provided "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -1898,7 +1898,7 @@ exports[`Status statusToIcon handles an undefined phase 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -2313,7 +2313,7 @@ exports[`Status statusToIcon handles an unknown phase 1`] = ` "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -2728,7 +2728,7 @@ exports[`Status statusToIcon renders an icon with tooltip for phase: CACHED 1`] "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -3143,7 +3143,7 @@ exports[`Status statusToIcon renders an icon with tooltip for phase: ERROR 1`] = "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -3558,7 +3558,7 @@ exports[`Status statusToIcon renders an icon with tooltip for phase: FAILED 1`] "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -3973,7 +3973,7 @@ exports[`Status statusToIcon renders an icon with tooltip for phase: OMITTED 1`] "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -4388,7 +4388,7 @@ exports[`Status statusToIcon renders an icon with tooltip for phase: PENDING 1`] "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -4803,7 +4803,7 @@ exports[`Status statusToIcon renders an icon with tooltip for phase: RUNNING 1`] "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -5218,7 +5218,7 @@ exports[`Status statusToIcon renders an icon with tooltip for phase: SKIPPED 1`] "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -5633,7 +5633,7 @@ exports[`Status statusToIcon renders an icon with tooltip for phase: SUCCEEDED 1 "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -6048,7 +6048,7 @@ exports[`Status statusToIcon renders an icon with tooltip for phase: TERMINATED "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -6463,7 +6463,7 @@ exports[`Status statusToIcon renders an icon with tooltip for phase: TERMINATING "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { @@ -6878,7 +6878,7 @@ exports[`Status statusToIcon renders an icon with tooltip for phase: UNKNOWN 1`] "fontSize": "0.875rem", "fontWeight": 500, "letterSpacing": "0.02857em", - "lineHeight": 1.5, + "lineHeight": 1.75, "textTransform": "uppercase", }, "caption": Object { diff --git a/frontend/src/pages/v2/StaticCanvas.tsx b/frontend/src/pages/v2/StaticCanvas.tsx new file mode 100644 index 0000000000..19939ba9bc --- /dev/null +++ b/frontend/src/pages/v2/StaticCanvas.tsx @@ -0,0 +1,57 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import ReactFlow, { + Background, + Controls, + Elements, + MiniMap, + OnLoadParams, + ReactFlowProvider, +} from 'react-flow-renderer'; +import { color } from 'src/Css'; +import { NODE_TYPES } from 'src/lib/v2/StaticFlow'; + +export interface StaticCanvasProps { + elements: Elements; +} + +const StaticCanvas = ({ elements }: StaticCanvasProps) => { + const onLoad = (reactFlowInstance: OnLoadParams) => { + reactFlowInstance.fitView(); + }; + + return ( + <div data-testid='StaticCanvas' style={{ width: '100%', height: '100%' }}> + <ReactFlowProvider> + <ReactFlow + style={{ background: color.lightGrey }} + elements={elements} + snapToGrid={true} + onLoad={onLoad} + nodeTypes={NODE_TYPES} + edgeTypes={{}} + > + <MiniMap /> + <Controls /> + <Background /> + </ReactFlow> + </ReactFlowProvider> + </div> + ); +}; +export default StaticCanvas; diff --git a/frontend/src/react-app-env.d.ts b/frontend/src/react-app-env.d.ts index 7b9ca47d3b..8cf24c6afd 100644 --- a/frontend/src/react-app-env.d.ts +++ b/frontend/src/react-app-env.d.ts @@ -1,5 +1,5 @@ /** - * Copyright 2021 Google LLC + * Copyright 2021 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/setupTests.ts b/frontend/src/setupTests.ts index fe1c307847..d7a9509c6a 100644 --- a/frontend/src/setupTests.ts +++ b/frontend/src/setupTests.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 Google LLC + * Copyright 2018 The Kubeflow Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/frontend/src/stories/Button.stories.tsx b/frontend/src/stories/Button.stories.tsx new file mode 100644 index 0000000000..d026f55a26 --- /dev/null +++ b/frontend/src/stories/Button.stories.tsx @@ -0,0 +1,37 @@ +import React from 'react'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; + +import { Button } from './Button'; + +export default { + title: 'Example/Button', + component: Button, + argTypes: { + backgroundColor: { control: 'color' }, + }, +} as ComponentMeta<typeof Button>; + +const Template: ComponentStory<typeof Button> = args => <Button {...args} />; + +export const Primary = Template.bind({}); +Primary.args = { + primary: true, + label: 'Button', +}; + +export const Secondary = Template.bind({}); +Secondary.args = { + label: 'Button', +}; + +export const Large = Template.bind({}); +Large.args = { + size: 'large', + label: 'Button', +}; + +export const Small = Template.bind({}); +Small.args = { + size: 'small', + label: 'Button', +}; diff --git a/frontend/src/stories/Button.tsx b/frontend/src/stories/Button.tsx new file mode 100644 index 0000000000..7fcdd4f1ee --- /dev/null +++ b/frontend/src/stories/Button.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import './button.css'; + +interface ButtonProps { + /** + * Is this the principal call to action on the page? + */ + primary?: boolean; + /** + * What background color to use + */ + backgroundColor?: string; + /** + * How large should the button be? + */ + size?: 'small' | 'medium' | 'large'; + /** + * Button contents + */ + label: string; + /** + * Optional click handler + */ + onClick?: () => void; +} + +/** + * Primary UI component for user interaction + */ +export const Button = ({ + primary = false, + size = 'medium', + backgroundColor, + label, + ...props +}: ButtonProps) => { + const mode = primary ? 'storybook-button--primary' : 'storybook-button--secondary'; + return ( + <button + type='button' + className={['storybook-button', `storybook-button--${size}`, mode].join(' ')} + style={{ backgroundColor }} + {...props} + > + {label} + </button> + ); +}; diff --git a/frontend/src/stories/Header.stories.tsx b/frontend/src/stories/Header.stories.tsx new file mode 100644 index 0000000000..883eb94fbe --- /dev/null +++ b/frontend/src/stories/Header.stories.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; + +import { Header } from './Header'; + +export default { + title: 'Example/Header', + component: Header, +} as ComponentMeta<typeof Header>; + +const Template: ComponentStory<typeof Header> = args => <Header {...args} />; + +export const LoggedIn = Template.bind({}); +LoggedIn.args = { + user: {}, +}; + +export const LoggedOut = Template.bind({}); +LoggedOut.args = {}; diff --git a/frontend/src/stories/Header.tsx b/frontend/src/stories/Header.tsx new file mode 100644 index 0000000000..d96a07c6c7 --- /dev/null +++ b/frontend/src/stories/Header.tsx @@ -0,0 +1,47 @@ +import React from 'react'; + +import { Button } from './Button'; +import './header.css'; + +interface HeaderProps { + user?: {}; + onLogin: () => void; + onLogout: () => void; + onCreateAccount: () => void; +} + +export const Header = ({ user, onLogin, onLogout, onCreateAccount }: HeaderProps) => ( + <header> + <div className='wrapper'> + <div> + <svg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'> + <g fill='none' fillRule='evenodd'> + <path + d='M10 0h12a10 10 0 0110 10v12a10 10 0 01-10 10H10A10 10 0 010 22V10A10 10 0 0110 0z' + fill='#FFF' + /> + <path + d='M5.3 10.6l10.4 6v11.1l-10.4-6v-11zm11.4-6.2l9.7 5.5-9.7 5.6V4.4z' + fill='#555AB9' + /> + <path + d='M27.2 10.6v11.2l-10.5 6V16.5l10.5-6zM15.7 4.4v11L6 10l9.7-5.5z' + fill='#91BAF8' + /> + </g> + </svg> + <h1>Acme</h1> + </div> + <div> + {user ? ( + <Button size='small' onClick={onLogout} label='Log out' /> + ) : ( + <> + <Button size='small' onClick={onLogin} label='Log in' /> + <Button primary size='small' onClick={onCreateAccount} label='Sign up' /> + </> + )} + </div> + </div> + </header> +); diff --git a/frontend/src/stories/Introduction.stories.mdx b/frontend/src/stories/Introduction.stories.mdx new file mode 100644 index 0000000000..348d2759f9 --- /dev/null +++ b/frontend/src/stories/Introduction.stories.mdx @@ -0,0 +1,211 @@ +import { Meta } from '@storybook/addon-docs'; +import Code from './assets/code-brackets.svg'; +import Colors from './assets/colors.svg'; +import Comments from './assets/comments.svg'; +import Direction from './assets/direction.svg'; +import Flow from './assets/flow.svg'; +import Plugin from './assets/plugin.svg'; +import Repo from './assets/repo.svg'; +import StackAlt from './assets/stackalt.svg'; + +<Meta title="Example/Introduction" /> + +<style>{` + .subheading { + --mediumdark: '#999999'; + font-weight: 900; + font-size: 13px; + color: #999; + letter-spacing: 6px; + line-height: 24px; + text-transform: uppercase; + margin-bottom: 12px; + margin-top: 40px; + } + + .link-list { + display: grid; + grid-template-columns: 1fr; + grid-template-rows: 1fr 1fr; + row-gap: 10px; + } + + @media (min-width: 620px) { + .link-list { + row-gap: 20px; + column-gap: 20px; + grid-template-columns: 1fr 1fr; + } + } + + @media all and (-ms-high-contrast:none) { + .link-list { + display: -ms-grid; + -ms-grid-columns: 1fr 1fr; + -ms-grid-rows: 1fr 1fr; + } + } + + .link-item { + display: block; + padding: 20px 30px 20px 15px; + border: 1px solid #00000010; + border-radius: 5px; + transition: background 150ms ease-out, border 150ms ease-out, transform 150ms ease-out; + color: #333333; + display: flex; + align-items: flex-start; + } + + .link-item:hover { + border-color: #1EA7FD50; + transform: translate3d(0, -3px, 0); + box-shadow: rgba(0, 0, 0, 0.08) 0 3px 10px 0; + } + + .link-item:active { + border-color: #1EA7FD; + transform: translate3d(0, 0, 0); + } + + .link-item strong { + font-weight: 700; + display: block; + margin-bottom: 2px; + } + + .link-item img { + height: 40px; + width: 40px; + margin-right: 15px; + flex: none; + } + + .link-item span { + font-size: 14px; + line-height: 20px; + } + + .tip { + display: inline-block; + border-radius: 1em; + font-size: 11px; + line-height: 12px; + font-weight: 700; + background: #E7FDD8; + color: #66BF3C; + padding: 4px 12px; + margin-right: 10px; + vertical-align: top; + } + + .tip-wrapper { + font-size: 13px; + line-height: 20px; + margin-top: 40px; + margin-bottom: 40px; + } + + .tip-wrapper code { + font-size: 12px; + display: inline-block; + } + + +`}</style> + +# Welcome to Storybook + +Storybook helps you build UI components in isolation from your app's business logic, data, and context. +That makes it easy to develop hard-to-reach states. Save these UI states as **stories** to revisit during development, testing, or QA. + +Browse example stories now by navigating to them in the sidebar. +View their code in the `src/stories` directory to learn how they work. +We recommend building UIs with a [**component-driven**](https://componentdriven.org) process starting with atomic components and ending with pages. + +<div className="subheading">Configure</div> + +<div className="link-list"> + <a + className="link-item" + href="https://storybook.js.org/docs/react/addons/addon-types" + target="_blank" + > + <img src={Plugin} alt="plugin" /> + <span> + <strong>Presets for popular tools</strong> + Easy setup for TypeScript, SCSS and more. + </span> + </a> + <a + className="link-item" + href="https://storybook.js.org/docs/react/configure/webpack" + target="_blank" + > + <img src={StackAlt} alt="Build" /> + <span> + <strong>Build configuration</strong> + How to customize webpack and Babel + </span> + </a> + <a + className="link-item" + href="https://storybook.js.org/docs/react/configure/styling-and-css" + target="_blank" + > + <img src={Colors} alt="colors" /> + <span> + <strong>Styling</strong> + How to load and configure CSS libraries + </span> + </a> + <a + className="link-item" + href="https://storybook.js.org/docs/react/get-started/setup#configure-storybook-for-your-stack" + target="_blank" + > + <img src={Flow} alt="flow" /> + <span> + <strong>Data</strong> + Providers and mocking for data libraries + </span> + </a> +</div> + +<div className="subheading">Learn</div> + +<div className="link-list"> + <a className="link-item" href="https://storybook.js.org/docs" target="_blank"> + <img src={Repo} alt="repo" /> + <span> + <strong>Storybook documentation</strong> + Configure, customize, and extend + </span> + </a> + <a className="link-item" href="https://storybook.js.org/tutorials/" target="_blank"> + <img src={Direction} alt="direction" /> + <span> + <strong>In-depth guides</strong> + Best practices from leading teams + </span> + </a> + <a className="link-item" href="https://github.com/storybookjs/storybook" target="_blank"> + <img src={Code} alt="code" /> + <span> + <strong>GitHub project</strong> + View the source and add issues + </span> + </a> + <a className="link-item" href="https://discord.gg/storybook" target="_blank"> + <img src={Comments} alt="comments" /> + <span> + <strong>Discord chat</strong> + Chat with maintainers and the community + </span> + </a> +</div> + +<div className="tip-wrapper"> + <span className="tip">Tip</span>Edit the Markdown in{' '} + <code>src/stories/Introduction.stories.mdx</code> +</div> diff --git a/frontend/src/stories/Page.stories.tsx b/frontend/src/stories/Page.stories.tsx new file mode 100644 index 0000000000..d8c133255a --- /dev/null +++ b/frontend/src/stories/Page.stories.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; + +import { Page } from './Page'; +import * as HeaderStories from './Header.stories'; + +export default { + title: 'Example/Page', + component: Page, +} as ComponentMeta<typeof Page>; + +const Template: ComponentStory<typeof Page> = args => <Page {...args} />; + +export const LoggedIn = Template.bind({}); +LoggedIn.args = { + ...HeaderStories.LoggedIn.args, +}; + +export const LoggedOut = Template.bind({}); +LoggedOut.args = { + ...HeaderStories.LoggedOut.args, +}; diff --git a/frontend/src/stories/Page.tsx b/frontend/src/stories/Page.tsx new file mode 100644 index 0000000000..007e395b5b --- /dev/null +++ b/frontend/src/stories/Page.tsx @@ -0,0 +1,67 @@ +import React from 'react'; + +import { Header } from './Header'; +import './page.css'; + +interface PageProps { + user?: {}; + onLogin: () => void; + onLogout: () => void; + onCreateAccount: () => void; +} + +export const Page = ({ user, onLogin, onLogout, onCreateAccount }: PageProps) => ( + <article> + <Header user={user} onLogin={onLogin} onLogout={onLogout} onCreateAccount={onCreateAccount} /> + + <section> + <h2>Pages in Storybook</h2> + <p> + We recommend building UIs with a{' '} + <a href='https://componentdriven.org' target='_blank' rel='noopener noreferrer'> + <strong>component-driven</strong> + </a>{' '} + process starting with atomic components and ending with pages. + </p> + <p> + Render pages with mock data. This makes it easy to build and review page states without + needing to navigate to them in your app. Here are some handy patterns for managing page data + in Storybook: + </p> + <ul> + <li> + Use a higher-level connected component. Storybook helps you compose such data from the + "args" of child component stories + </li> + <li> + Assemble data in the page component from your services. You can mock these services out + using Storybook. + </li> + </ul> + <p> + Get a guided tutorial on component-driven development at{' '} + <a href='https://storybook.js.org/tutorials/' target='_blank' rel='noopener noreferrer'> + Storybook tutorials + </a> + . Read more in the{' '} + <a href='https://storybook.js.org/docs' target='_blank' rel='noopener noreferrer'> + docs + </a> + . + </p> + <div className='tip-wrapper'> + <span className='tip'>Tip</span> Adjust the width of the canvas with the{' '} + <svg width='10' height='10' viewBox='0 0 12 12' xmlns='http://www.w3.org/2000/svg'> + <g fill='none' fillRule='evenodd'> + <path + d='M1.5 5.2h4.8c.3 0 .5.2.5.4v5.1c-.1.2-.3.3-.4.3H1.4a.5.5 0 01-.5-.4V5.7c0-.3.2-.5.5-.5zm0-2.1h6.9c.3 0 .5.2.5.4v7a.5.5 0 01-1 0V4H1.5a.5.5 0 010-1zm0-2.1h9c.3 0 .5.2.5.4v9.1a.5.5 0 01-1 0V2H1.5a.5.5 0 010-1zm4.3 5.2H2V10h3.8V6.2z' + id='a' + fill='#999' + /> + </g> + </svg> + Viewports addon in the toolbar + </div> + </section> + </article> +); diff --git a/frontend/src/stories/assets/code-brackets.svg b/frontend/src/stories/assets/code-brackets.svg new file mode 100644 index 0000000000..73de947760 --- /dev/null +++ b/frontend/src/stories/assets/code-brackets.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" version="1.1" viewBox="0 0 48 48"><title>illustration/code-brackets \ No newline at end of file diff --git a/frontend/src/stories/assets/colors.svg b/frontend/src/stories/assets/colors.svg new file mode 100644 index 0000000000..17d58d516e --- /dev/null +++ b/frontend/src/stories/assets/colors.svg @@ -0,0 +1 @@ +illustration/colors \ No newline at end of file diff --git a/frontend/src/stories/assets/comments.svg b/frontend/src/stories/assets/comments.svg new file mode 100644 index 0000000000..6493a139f5 --- /dev/null +++ b/frontend/src/stories/assets/comments.svg @@ -0,0 +1 @@ +illustration/comments \ No newline at end of file diff --git a/frontend/src/stories/assets/direction.svg b/frontend/src/stories/assets/direction.svg new file mode 100644 index 0000000000..65676ac272 --- /dev/null +++ b/frontend/src/stories/assets/direction.svg @@ -0,0 +1 @@ +illustration/direction \ No newline at end of file diff --git a/frontend/src/stories/assets/flow.svg b/frontend/src/stories/assets/flow.svg new file mode 100644 index 0000000000..8ac27db403 --- /dev/null +++ b/frontend/src/stories/assets/flow.svg @@ -0,0 +1 @@ +illustration/flow \ No newline at end of file diff --git a/frontend/src/stories/assets/plugin.svg b/frontend/src/stories/assets/plugin.svg new file mode 100644 index 0000000000..29e5c690c0 --- /dev/null +++ b/frontend/src/stories/assets/plugin.svg @@ -0,0 +1 @@ +illustration/plugin \ No newline at end of file diff --git a/frontend/src/stories/assets/repo.svg b/frontend/src/stories/assets/repo.svg new file mode 100644 index 0000000000..f386ee902c --- /dev/null +++ b/frontend/src/stories/assets/repo.svg @@ -0,0 +1 @@ +illustration/repo \ No newline at end of file diff --git a/frontend/src/stories/assets/stackalt.svg b/frontend/src/stories/assets/stackalt.svg new file mode 100644 index 0000000000..9b7ad27435 --- /dev/null +++ b/frontend/src/stories/assets/stackalt.svg @@ -0,0 +1 @@ +illustration/stackalt \ No newline at end of file diff --git a/frontend/src/stories/button.css b/frontend/src/stories/button.css new file mode 100644 index 0000000000..dc91dc7637 --- /dev/null +++ b/frontend/src/stories/button.css @@ -0,0 +1,30 @@ +.storybook-button { + font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: 700; + border: 0; + border-radius: 3em; + cursor: pointer; + display: inline-block; + line-height: 1; +} +.storybook-button--primary { + color: white; + background-color: #1ea7fd; +} +.storybook-button--secondary { + color: #333; + background-color: transparent; + box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 0px 1px inset; +} +.storybook-button--small { + font-size: 12px; + padding: 10px 16px; +} +.storybook-button--medium { + font-size: 14px; + padding: 11px 20px; +} +.storybook-button--large { + font-size: 16px; + padding: 12px 24px; +} diff --git a/frontend/src/stories/header.css b/frontend/src/stories/header.css new file mode 100644 index 0000000000..acadc9ec8c --- /dev/null +++ b/frontend/src/stories/header.css @@ -0,0 +1,26 @@ +.wrapper { + font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + padding: 15px 20px; + display: flex; + align-items: center; + justify-content: space-between; +} + +svg { + display: inline-block; + vertical-align: top; +} + +h1 { + font-weight: 900; + font-size: 20px; + line-height: 1; + margin: 6px 0 6px 10px; + display: inline-block; + vertical-align: top; +} + +button + button { + margin-left: 10px; +} diff --git a/frontend/src/stories/page.css b/frontend/src/stories/page.css new file mode 100644 index 0000000000..51c9d099a1 --- /dev/null +++ b/frontend/src/stories/page.css @@ -0,0 +1,69 @@ +section { + font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 24px; + padding: 48px 20px; + margin: 0 auto; + max-width: 600px; + color: #333; +} + +h2 { + font-weight: 900; + font-size: 32px; + line-height: 1; + margin: 0 0 4px; + display: inline-block; + vertical-align: top; +} + +p { + margin: 1em 0; +} + +a { + text-decoration: none; + color: #1ea7fd; +} + +ul { + padding-left: 30px; + margin: 1em 0; +} + +li { + margin-bottom: 8px; +} + +.tip { + display: inline-block; + border-radius: 1em; + font-size: 11px; + line-height: 12px; + font-weight: 700; + background: #e7fdd8; + color: #66bf3c; + padding: 4px 12px; + margin-right: 10px; + vertical-align: top; +} + +.tip-wrapper { + font-size: 13px; + line-height: 20px; + margin-top: 40px; + margin-bottom: 40px; +} + +.tip-wrapper svg { + display: inline-block; + height: 12px; + width: 12px; + margin-right: 4px; + vertical-align: top; + margin-top: 3px; +} + +.tip-wrapper svg path { + fill: #1ea7fd; +} diff --git a/frontend/src/stories/v2/ExecutionNode.css b/frontend/src/stories/v2/ExecutionNode.css new file mode 100644 index 0000000000..9f6c45ef37 --- /dev/null +++ b/frontend/src/stories/v2/ExecutionNode.css @@ -0,0 +1,4 @@ + +button + button { + margin-left: 0px; + } diff --git a/frontend/src/stories/v2/ExecutionNode.stories.tsx b/frontend/src/stories/v2/ExecutionNode.stories.tsx new file mode 100644 index 0000000000..9262140028 --- /dev/null +++ b/frontend/src/stories/v2/ExecutionNode.stories.tsx @@ -0,0 +1,98 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import React from 'react'; +import ReactFlow, { + Background, + Controls, + MiniMap, + OnLoadParams, + ReactFlowProvider, +} from 'react-flow-renderer'; +import ExecutionNodeFailed from 'src/components/graph/ExecutionNodeFailed'; +import ExecutionNodePending from 'src/components/graph/ExecutionNodePending'; +import ExecutionNode from '../../components/graph/ExecutionNode'; +import './ExecutionNode.css'; + +const nodeTypes = { + execution: ExecutionNode, + executionPending: ExecutionNodePending, + executionFailed: ExecutionNodeFailed, +}; + +interface WrappedExecutionNodeProps { + id: string; + label: string; +} + +function WrappedExecutionNode({ id, label }: WrappedExecutionNodeProps) { + const onLoad = (reactFlowInstance: OnLoadParams) => { + reactFlowInstance.fitView(); + }; + + const elements = [ + { + id: id, + type: 'execution', + position: { x: 100, y: 100 }, + data: { label }, + }, + ]; + + return ( +
+ + + + + + + +
+ ); +} + +export default { + title: 'v2/ExecutionNode', + component: WrappedExecutionNode, + argTypes: { + backgroundColor: { control: 'color' }, + }, +} as ComponentMeta; + +const Template: ComponentStory = args => ( + +); + +export const Primary = Template.bind({}); +Primary.args = { + id: 'id', + label: 'This is an ExecutionNode', +}; + +export const Secondary = Template.bind({}); +Secondary.args = { + id: 'id', + label: 'This is an ExecutionNode with long name', +}; diff --git a/frontend/src/tailwind.css b/frontend/src/tailwind.css new file mode 100644 index 0000000000..b5c61c9567 --- /dev/null +++ b/frontend/src/tailwind.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_pb.d.ts b/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_pb.d.ts new file mode 100644 index 0000000000..2d59aff610 --- /dev/null +++ b/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_pb.d.ts @@ -0,0 +1,1231 @@ +import * as jspb from 'google-protobuf' + +import * as google_protobuf_struct_pb from 'google-protobuf/google/protobuf/struct_pb'; + + +export class Value extends jspb.Message { + getIntValue(): number; + setIntValue(value: number): Value; + + getDoubleValue(): number; + setDoubleValue(value: number): Value; + + getStringValue(): string; + setStringValue(value: string): Value; + + getStructValue(): google_protobuf_struct_pb.Struct | undefined; + setStructValue(value?: google_protobuf_struct_pb.Struct): Value; + hasStructValue(): boolean; + clearStructValue(): Value; + + getValueCase(): Value.ValueCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Value.AsObject; + static toObject(includeInstance: boolean, msg: Value): Value.AsObject; + static serializeBinaryToWriter(message: Value, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Value; + static deserializeBinaryFromReader(message: Value, reader: jspb.BinaryReader): Value; +} + +export namespace Value { + export type AsObject = { + intValue: number, + doubleValue: number, + stringValue: string, + structValue?: google_protobuf_struct_pb.Struct.AsObject, + } + + export enum ValueCase { + VALUE_NOT_SET = 0, + INT_VALUE = 1, + DOUBLE_VALUE = 2, + STRING_VALUE = 3, + STRUCT_VALUE = 4, + } +} + +export class Artifact extends jspb.Message { + getId(): number; + setId(value: number): Artifact; + + getName(): string; + setName(value: string): Artifact; + + getTypeId(): number; + setTypeId(value: number): Artifact; + + getType(): string; + setType(value: string): Artifact; + + getUri(): string; + setUri(value: string): Artifact; + + getPropertiesMap(): jspb.Map; + clearPropertiesMap(): Artifact; + + getCustomPropertiesMap(): jspb.Map; + clearCustomPropertiesMap(): Artifact; + + getState(): Artifact.State; + setState(value: Artifact.State): Artifact; + + getCreateTimeSinceEpoch(): number; + setCreateTimeSinceEpoch(value: number): Artifact; + + getLastUpdateTimeSinceEpoch(): number; + setLastUpdateTimeSinceEpoch(value: number): Artifact; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Artifact.AsObject; + static toObject(includeInstance: boolean, msg: Artifact): Artifact.AsObject; + static serializeBinaryToWriter(message: Artifact, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Artifact; + static deserializeBinaryFromReader(message: Artifact, reader: jspb.BinaryReader): Artifact; +} + +export namespace Artifact { + export type AsObject = { + id: number, + name: string, + typeId: number, + type: string, + uri: string, + propertiesMap: Array<[string, Value.AsObject]>, + customPropertiesMap: Array<[string, Value.AsObject]>, + state: Artifact.State, + createTimeSinceEpoch: number, + lastUpdateTimeSinceEpoch: number, + } + + export enum State { + UNKNOWN = 0, + PENDING = 1, + LIVE = 2, + MARKED_FOR_DELETION = 3, + DELETED = 4, + } +} + +export class ArtifactType extends jspb.Message { + getId(): number; + setId(value: number): ArtifactType; + + getName(): string; + setName(value: string): ArtifactType; + + getVersion(): string; + setVersion(value: string): ArtifactType; + + getDescription(): string; + setDescription(value: string): ArtifactType; + + getPropertiesMap(): jspb.Map; + clearPropertiesMap(): ArtifactType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactType.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactType): ArtifactType.AsObject; + static serializeBinaryToWriter(message: ArtifactType, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactType; + static deserializeBinaryFromReader(message: ArtifactType, reader: jspb.BinaryReader): ArtifactType; +} + +export namespace ArtifactType { + export type AsObject = { + id: number, + name: string, + version: string, + description: string, + propertiesMap: Array<[string, PropertyType]>, + } +} + +export class Event extends jspb.Message { + getArtifactId(): number; + setArtifactId(value: number): Event; + + getExecutionId(): number; + setExecutionId(value: number): Event; + + getPath(): Event.Path | undefined; + setPath(value?: Event.Path): Event; + hasPath(): boolean; + clearPath(): Event; + + getType(): Event.Type; + setType(value: Event.Type): Event; + + getMillisecondsSinceEpoch(): number; + setMillisecondsSinceEpoch(value: number): Event; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Event.AsObject; + static toObject(includeInstance: boolean, msg: Event): Event.AsObject; + static serializeBinaryToWriter(message: Event, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Event; + static deserializeBinaryFromReader(message: Event, reader: jspb.BinaryReader): Event; +} + +export namespace Event { + export type AsObject = { + artifactId: number, + executionId: number, + path?: Event.Path.AsObject, + type: Event.Type, + millisecondsSinceEpoch: number, + } + + export class Path extends jspb.Message { + getStepsList(): Array; + setStepsList(value: Array): Path; + clearStepsList(): Path; + addSteps(value?: Event.Path.Step, index?: number): Event.Path.Step; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Path.AsObject; + static toObject(includeInstance: boolean, msg: Path): Path.AsObject; + static serializeBinaryToWriter(message: Path, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Path; + static deserializeBinaryFromReader(message: Path, reader: jspb.BinaryReader): Path; + } + + export namespace Path { + export type AsObject = { + stepsList: Array, + } + + export class Step extends jspb.Message { + getIndex(): number; + setIndex(value: number): Step; + + getKey(): string; + setKey(value: string): Step; + + getValueCase(): Step.ValueCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Step.AsObject; + static toObject(includeInstance: boolean, msg: Step): Step.AsObject; + static serializeBinaryToWriter(message: Step, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Step; + static deserializeBinaryFromReader(message: Step, reader: jspb.BinaryReader): Step; + } + + export namespace Step { + export type AsObject = { + index: number, + key: string, + } + + export enum ValueCase { + VALUE_NOT_SET = 0, + INDEX = 1, + KEY = 2, + } + } + + } + + + export enum Type { + UNKNOWN = 0, + DECLARED_OUTPUT = 1, + DECLARED_INPUT = 2, + INPUT = 3, + OUTPUT = 4, + INTERNAL_INPUT = 5, + INTERNAL_OUTPUT = 6, + } +} + +export class Execution extends jspb.Message { + getId(): number; + setId(value: number): Execution; + + getName(): string; + setName(value: string): Execution; + + getTypeId(): number; + setTypeId(value: number): Execution; + + getType(): string; + setType(value: string): Execution; + + getLastKnownState(): Execution.State; + setLastKnownState(value: Execution.State): Execution; + + getPropertiesMap(): jspb.Map; + clearPropertiesMap(): Execution; + + getCustomPropertiesMap(): jspb.Map; + clearCustomPropertiesMap(): Execution; + + getCreateTimeSinceEpoch(): number; + setCreateTimeSinceEpoch(value: number): Execution; + + getLastUpdateTimeSinceEpoch(): number; + setLastUpdateTimeSinceEpoch(value: number): Execution; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Execution.AsObject; + static toObject(includeInstance: boolean, msg: Execution): Execution.AsObject; + static serializeBinaryToWriter(message: Execution, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Execution; + static deserializeBinaryFromReader(message: Execution, reader: jspb.BinaryReader): Execution; +} + +export namespace Execution { + export type AsObject = { + id: number, + name: string, + typeId: number, + type: string, + lastKnownState: Execution.State, + propertiesMap: Array<[string, Value.AsObject]>, + customPropertiesMap: Array<[string, Value.AsObject]>, + createTimeSinceEpoch: number, + lastUpdateTimeSinceEpoch: number, + } + + export enum State { + UNKNOWN = 0, + NEW = 1, + RUNNING = 2, + COMPLETE = 3, + FAILED = 4, + CACHED = 5, + CANCELED = 6, + } +} + +export class ExecutionType extends jspb.Message { + getId(): number; + setId(value: number): ExecutionType; + + getName(): string; + setName(value: string): ExecutionType; + + getVersion(): string; + setVersion(value: string): ExecutionType; + + getDescription(): string; + setDescription(value: string): ExecutionType; + + getPropertiesMap(): jspb.Map; + clearPropertiesMap(): ExecutionType; + + getInputType(): ArtifactStructType | undefined; + setInputType(value?: ArtifactStructType): ExecutionType; + hasInputType(): boolean; + clearInputType(): ExecutionType; + + getOutputType(): ArtifactStructType | undefined; + setOutputType(value?: ArtifactStructType): ExecutionType; + hasOutputType(): boolean; + clearOutputType(): ExecutionType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ExecutionType.AsObject; + static toObject(includeInstance: boolean, msg: ExecutionType): ExecutionType.AsObject; + static serializeBinaryToWriter(message: ExecutionType, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ExecutionType; + static deserializeBinaryFromReader(message: ExecutionType, reader: jspb.BinaryReader): ExecutionType; +} + +export namespace ExecutionType { + export type AsObject = { + id: number, + name: string, + version: string, + description: string, + propertiesMap: Array<[string, PropertyType]>, + inputType?: ArtifactStructType.AsObject, + outputType?: ArtifactStructType.AsObject, + } +} + +export class ContextType extends jspb.Message { + getId(): number; + setId(value: number): ContextType; + + getName(): string; + setName(value: string): ContextType; + + getVersion(): string; + setVersion(value: string): ContextType; + + getDescription(): string; + setDescription(value: string): ContextType; + + getPropertiesMap(): jspb.Map; + clearPropertiesMap(): ContextType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ContextType.AsObject; + static toObject(includeInstance: boolean, msg: ContextType): ContextType.AsObject; + static serializeBinaryToWriter(message: ContextType, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ContextType; + static deserializeBinaryFromReader(message: ContextType, reader: jspb.BinaryReader): ContextType; +} + +export namespace ContextType { + export type AsObject = { + id: number, + name: string, + version: string, + description: string, + propertiesMap: Array<[string, PropertyType]>, + } +} + +export class Context extends jspb.Message { + getId(): number; + setId(value: number): Context; + + getName(): string; + setName(value: string): Context; + + getTypeId(): number; + setTypeId(value: number): Context; + + getType(): string; + setType(value: string): Context; + + getPropertiesMap(): jspb.Map; + clearPropertiesMap(): Context; + + getCustomPropertiesMap(): jspb.Map; + clearCustomPropertiesMap(): Context; + + getCreateTimeSinceEpoch(): number; + setCreateTimeSinceEpoch(value: number): Context; + + getLastUpdateTimeSinceEpoch(): number; + setLastUpdateTimeSinceEpoch(value: number): Context; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Context.AsObject; + static toObject(includeInstance: boolean, msg: Context): Context.AsObject; + static serializeBinaryToWriter(message: Context, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Context; + static deserializeBinaryFromReader(message: Context, reader: jspb.BinaryReader): Context; +} + +export namespace Context { + export type AsObject = { + id: number, + name: string, + typeId: number, + type: string, + propertiesMap: Array<[string, Value.AsObject]>, + customPropertiesMap: Array<[string, Value.AsObject]>, + createTimeSinceEpoch: number, + lastUpdateTimeSinceEpoch: number, + } +} + +export class Attribution extends jspb.Message { + getArtifactId(): number; + setArtifactId(value: number): Attribution; + + getContextId(): number; + setContextId(value: number): Attribution; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Attribution.AsObject; + static toObject(includeInstance: boolean, msg: Attribution): Attribution.AsObject; + static serializeBinaryToWriter(message: Attribution, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Attribution; + static deserializeBinaryFromReader(message: Attribution, reader: jspb.BinaryReader): Attribution; +} + +export namespace Attribution { + export type AsObject = { + artifactId: number, + contextId: number, + } +} + +export class Association extends jspb.Message { + getExecutionId(): number; + setExecutionId(value: number): Association; + + getContextId(): number; + setContextId(value: number): Association; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Association.AsObject; + static toObject(includeInstance: boolean, msg: Association): Association.AsObject; + static serializeBinaryToWriter(message: Association, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Association; + static deserializeBinaryFromReader(message: Association, reader: jspb.BinaryReader): Association; +} + +export namespace Association { + export type AsObject = { + executionId: number, + contextId: number, + } +} + +export class ParentContext extends jspb.Message { + getChildId(): number; + setChildId(value: number): ParentContext; + + getParentId(): number; + setParentId(value: number): ParentContext; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ParentContext.AsObject; + static toObject(includeInstance: boolean, msg: ParentContext): ParentContext.AsObject; + static serializeBinaryToWriter(message: ParentContext, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ParentContext; + static deserializeBinaryFromReader(message: ParentContext, reader: jspb.BinaryReader): ParentContext; +} + +export namespace ParentContext { + export type AsObject = { + childId: number, + parentId: number, + } +} + +export class LineageGraph extends jspb.Message { + getArtifactTypesList(): Array; + setArtifactTypesList(value: Array): LineageGraph; + clearArtifactTypesList(): LineageGraph; + addArtifactTypes(value?: ArtifactType, index?: number): ArtifactType; + + getExecutionTypesList(): Array; + setExecutionTypesList(value: Array): LineageGraph; + clearExecutionTypesList(): LineageGraph; + addExecutionTypes(value?: ExecutionType, index?: number): ExecutionType; + + getContextTypesList(): Array; + setContextTypesList(value: Array): LineageGraph; + clearContextTypesList(): LineageGraph; + addContextTypes(value?: ContextType, index?: number): ContextType; + + getArtifactsList(): Array; + setArtifactsList(value: Array): LineageGraph; + clearArtifactsList(): LineageGraph; + addArtifacts(value?: Artifact, index?: number): Artifact; + + getExecutionsList(): Array; + setExecutionsList(value: Array): LineageGraph; + clearExecutionsList(): LineageGraph; + addExecutions(value?: Execution, index?: number): Execution; + + getContextsList(): Array; + setContextsList(value: Array): LineageGraph; + clearContextsList(): LineageGraph; + addContexts(value?: Context, index?: number): Context; + + getEventsList(): Array; + setEventsList(value: Array): LineageGraph; + clearEventsList(): LineageGraph; + addEvents(value?: Event, index?: number): Event; + + getAttributionsList(): Array; + setAttributionsList(value: Array): LineageGraph; + clearAttributionsList(): LineageGraph; + addAttributions(value?: Attribution, index?: number): Attribution; + + getAssociationsList(): Array; + setAssociationsList(value: Array): LineageGraph; + clearAssociationsList(): LineageGraph; + addAssociations(value?: Association, index?: number): Association; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): LineageGraph.AsObject; + static toObject(includeInstance: boolean, msg: LineageGraph): LineageGraph.AsObject; + static serializeBinaryToWriter(message: LineageGraph, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): LineageGraph; + static deserializeBinaryFromReader(message: LineageGraph, reader: jspb.BinaryReader): LineageGraph; +} + +export namespace LineageGraph { + export type AsObject = { + artifactTypesList: Array, + executionTypesList: Array, + contextTypesList: Array, + artifactsList: Array, + executionsList: Array, + contextsList: Array, + eventsList: Array, + attributionsList: Array, + associationsList: Array, + } +} + +export class ArtifactStructType extends jspb.Message { + getSimple(): ArtifactType | undefined; + setSimple(value?: ArtifactType): ArtifactStructType; + hasSimple(): boolean; + clearSimple(): ArtifactStructType; + + getUnionType(): UnionArtifactStructType | undefined; + setUnionType(value?: UnionArtifactStructType): ArtifactStructType; + hasUnionType(): boolean; + clearUnionType(): ArtifactStructType; + + getIntersection(): IntersectionArtifactStructType | undefined; + setIntersection(value?: IntersectionArtifactStructType): ArtifactStructType; + hasIntersection(): boolean; + clearIntersection(): ArtifactStructType; + + getList(): ListArtifactStructType | undefined; + setList(value?: ListArtifactStructType): ArtifactStructType; + hasList(): boolean; + clearList(): ArtifactStructType; + + getNone(): NoneArtifactStructType | undefined; + setNone(value?: NoneArtifactStructType): ArtifactStructType; + hasNone(): boolean; + clearNone(): ArtifactStructType; + + getAny(): AnyArtifactStructType | undefined; + setAny(value?: AnyArtifactStructType): ArtifactStructType; + hasAny(): boolean; + clearAny(): ArtifactStructType; + + getTuple(): TupleArtifactStructType | undefined; + setTuple(value?: TupleArtifactStructType): ArtifactStructType; + hasTuple(): boolean; + clearTuple(): ArtifactStructType; + + getDict(): DictArtifactStructType | undefined; + setDict(value?: DictArtifactStructType): ArtifactStructType; + hasDict(): boolean; + clearDict(): ArtifactStructType; + + getKindCase(): ArtifactStructType.KindCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactStructType.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactStructType): ArtifactStructType.AsObject; + static serializeBinaryToWriter(message: ArtifactStructType, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactStructType; + static deserializeBinaryFromReader(message: ArtifactStructType, reader: jspb.BinaryReader): ArtifactStructType; +} + +export namespace ArtifactStructType { + export type AsObject = { + simple?: ArtifactType.AsObject, + unionType?: UnionArtifactStructType.AsObject, + intersection?: IntersectionArtifactStructType.AsObject, + list?: ListArtifactStructType.AsObject, + none?: NoneArtifactStructType.AsObject, + any?: AnyArtifactStructType.AsObject, + tuple?: TupleArtifactStructType.AsObject, + dict?: DictArtifactStructType.AsObject, + } + + export enum KindCase { + KIND_NOT_SET = 0, + SIMPLE = 1, + UNION_TYPE = 2, + INTERSECTION = 3, + LIST = 4, + NONE = 5, + ANY = 6, + TUPLE = 7, + DICT = 8, + } +} + +export class UnionArtifactStructType extends jspb.Message { + getCandidatesList(): Array; + setCandidatesList(value: Array): UnionArtifactStructType; + clearCandidatesList(): UnionArtifactStructType; + addCandidates(value?: ArtifactStructType, index?: number): ArtifactStructType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): UnionArtifactStructType.AsObject; + static toObject(includeInstance: boolean, msg: UnionArtifactStructType): UnionArtifactStructType.AsObject; + static serializeBinaryToWriter(message: UnionArtifactStructType, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): UnionArtifactStructType; + static deserializeBinaryFromReader(message: UnionArtifactStructType, reader: jspb.BinaryReader): UnionArtifactStructType; +} + +export namespace UnionArtifactStructType { + export type AsObject = { + candidatesList: Array, + } +} + +export class IntersectionArtifactStructType extends jspb.Message { + getConstraintsList(): Array; + setConstraintsList(value: Array): IntersectionArtifactStructType; + clearConstraintsList(): IntersectionArtifactStructType; + addConstraints(value?: ArtifactStructType, index?: number): ArtifactStructType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): IntersectionArtifactStructType.AsObject; + static toObject(includeInstance: boolean, msg: IntersectionArtifactStructType): IntersectionArtifactStructType.AsObject; + static serializeBinaryToWriter(message: IntersectionArtifactStructType, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): IntersectionArtifactStructType; + static deserializeBinaryFromReader(message: IntersectionArtifactStructType, reader: jspb.BinaryReader): IntersectionArtifactStructType; +} + +export namespace IntersectionArtifactStructType { + export type AsObject = { + constraintsList: Array, + } +} + +export class ListArtifactStructType extends jspb.Message { + getElement(): ArtifactStructType | undefined; + setElement(value?: ArtifactStructType): ListArtifactStructType; + hasElement(): boolean; + clearElement(): ListArtifactStructType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ListArtifactStructType.AsObject; + static toObject(includeInstance: boolean, msg: ListArtifactStructType): ListArtifactStructType.AsObject; + static serializeBinaryToWriter(message: ListArtifactStructType, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ListArtifactStructType; + static deserializeBinaryFromReader(message: ListArtifactStructType, reader: jspb.BinaryReader): ListArtifactStructType; +} + +export namespace ListArtifactStructType { + export type AsObject = { + element?: ArtifactStructType.AsObject, + } +} + +export class NoneArtifactStructType extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): NoneArtifactStructType.AsObject; + static toObject(includeInstance: boolean, msg: NoneArtifactStructType): NoneArtifactStructType.AsObject; + static serializeBinaryToWriter(message: NoneArtifactStructType, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): NoneArtifactStructType; + static deserializeBinaryFromReader(message: NoneArtifactStructType, reader: jspb.BinaryReader): NoneArtifactStructType; +} + +export namespace NoneArtifactStructType { + export type AsObject = { + } +} + +export class AnyArtifactStructType extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): AnyArtifactStructType.AsObject; + static toObject(includeInstance: boolean, msg: AnyArtifactStructType): AnyArtifactStructType.AsObject; + static serializeBinaryToWriter(message: AnyArtifactStructType, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): AnyArtifactStructType; + static deserializeBinaryFromReader(message: AnyArtifactStructType, reader: jspb.BinaryReader): AnyArtifactStructType; +} + +export namespace AnyArtifactStructType { + export type AsObject = { + } +} + +export class TupleArtifactStructType extends jspb.Message { + getElementsList(): Array; + setElementsList(value: Array): TupleArtifactStructType; + clearElementsList(): TupleArtifactStructType; + addElements(value?: ArtifactStructType, index?: number): ArtifactStructType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): TupleArtifactStructType.AsObject; + static toObject(includeInstance: boolean, msg: TupleArtifactStructType): TupleArtifactStructType.AsObject; + static serializeBinaryToWriter(message: TupleArtifactStructType, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): TupleArtifactStructType; + static deserializeBinaryFromReader(message: TupleArtifactStructType, reader: jspb.BinaryReader): TupleArtifactStructType; +} + +export namespace TupleArtifactStructType { + export type AsObject = { + elementsList: Array, + } +} + +export class DictArtifactStructType extends jspb.Message { + getPropertiesMap(): jspb.Map; + clearPropertiesMap(): DictArtifactStructType; + + getNoneTypeNotRequired(): boolean; + setNoneTypeNotRequired(value: boolean): DictArtifactStructType; + + getExtraPropertiesType(): ArtifactStructType | undefined; + setExtraPropertiesType(value?: ArtifactStructType): DictArtifactStructType; + hasExtraPropertiesType(): boolean; + clearExtraPropertiesType(): DictArtifactStructType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DictArtifactStructType.AsObject; + static toObject(includeInstance: boolean, msg: DictArtifactStructType): DictArtifactStructType.AsObject; + static serializeBinaryToWriter(message: DictArtifactStructType, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DictArtifactStructType; + static deserializeBinaryFromReader(message: DictArtifactStructType, reader: jspb.BinaryReader): DictArtifactStructType; +} + +export namespace DictArtifactStructType { + export type AsObject = { + propertiesMap: Array<[string, ArtifactStructType.AsObject]>, + noneTypeNotRequired: boolean, + extraPropertiesType?: ArtifactStructType.AsObject, + } +} + +export class FakeDatabaseConfig extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): FakeDatabaseConfig.AsObject; + static toObject(includeInstance: boolean, msg: FakeDatabaseConfig): FakeDatabaseConfig.AsObject; + static serializeBinaryToWriter(message: FakeDatabaseConfig, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): FakeDatabaseConfig; + static deserializeBinaryFromReader(message: FakeDatabaseConfig, reader: jspb.BinaryReader): FakeDatabaseConfig; +} + +export namespace FakeDatabaseConfig { + export type AsObject = { + } +} + +export class MySQLDatabaseConfig extends jspb.Message { + getHost(): string; + setHost(value: string): MySQLDatabaseConfig; + + getPort(): number; + setPort(value: number): MySQLDatabaseConfig; + + getDatabase(): string; + setDatabase(value: string): MySQLDatabaseConfig; + + getUser(): string; + setUser(value: string): MySQLDatabaseConfig; + + getPassword(): string; + setPassword(value: string): MySQLDatabaseConfig; + + getSocket(): string; + setSocket(value: string): MySQLDatabaseConfig; + + getSslOptions(): MySQLDatabaseConfig.SSLOptions | undefined; + setSslOptions(value?: MySQLDatabaseConfig.SSLOptions): MySQLDatabaseConfig; + hasSslOptions(): boolean; + clearSslOptions(): MySQLDatabaseConfig; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): MySQLDatabaseConfig.AsObject; + static toObject(includeInstance: boolean, msg: MySQLDatabaseConfig): MySQLDatabaseConfig.AsObject; + static serializeBinaryToWriter(message: MySQLDatabaseConfig, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): MySQLDatabaseConfig; + static deserializeBinaryFromReader(message: MySQLDatabaseConfig, reader: jspb.BinaryReader): MySQLDatabaseConfig; +} + +export namespace MySQLDatabaseConfig { + export type AsObject = { + host: string, + port: number, + database: string, + user: string, + password: string, + socket: string, + sslOptions?: MySQLDatabaseConfig.SSLOptions.AsObject, + } + + export class SSLOptions extends jspb.Message { + getKey(): string; + setKey(value: string): SSLOptions; + + getCert(): string; + setCert(value: string): SSLOptions; + + getCa(): string; + setCa(value: string): SSLOptions; + + getCapath(): string; + setCapath(value: string): SSLOptions; + + getCipher(): string; + setCipher(value: string): SSLOptions; + + getVerifyServerCert(): boolean; + setVerifyServerCert(value: boolean): SSLOptions; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): SSLOptions.AsObject; + static toObject(includeInstance: boolean, msg: SSLOptions): SSLOptions.AsObject; + static serializeBinaryToWriter(message: SSLOptions, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): SSLOptions; + static deserializeBinaryFromReader(message: SSLOptions, reader: jspb.BinaryReader): SSLOptions; + } + + export namespace SSLOptions { + export type AsObject = { + key: string, + cert: string, + ca: string, + capath: string, + cipher: string, + verifyServerCert: boolean, + } + } + +} + +export class SqliteMetadataSourceConfig extends jspb.Message { + getFilenameUri(): string; + setFilenameUri(value: string): SqliteMetadataSourceConfig; + + getConnectionMode(): SqliteMetadataSourceConfig.ConnectionMode; + setConnectionMode(value: SqliteMetadataSourceConfig.ConnectionMode): SqliteMetadataSourceConfig; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): SqliteMetadataSourceConfig.AsObject; + static toObject(includeInstance: boolean, msg: SqliteMetadataSourceConfig): SqliteMetadataSourceConfig.AsObject; + static serializeBinaryToWriter(message: SqliteMetadataSourceConfig, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): SqliteMetadataSourceConfig; + static deserializeBinaryFromReader(message: SqliteMetadataSourceConfig, reader: jspb.BinaryReader): SqliteMetadataSourceConfig; +} + +export namespace SqliteMetadataSourceConfig { + export type AsObject = { + filenameUri: string, + connectionMode: SqliteMetadataSourceConfig.ConnectionMode, + } + + export enum ConnectionMode { + UNKNOWN = 0, + READONLY = 1, + READWRITE = 2, + READWRITE_OPENCREATE = 3, + } +} + +export class MigrationOptions extends jspb.Message { + getEnableUpgradeMigration(): boolean; + setEnableUpgradeMigration(value: boolean): MigrationOptions; + + getDowngradeToSchemaVersion(): number; + setDowngradeToSchemaVersion(value: number): MigrationOptions; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): MigrationOptions.AsObject; + static toObject(includeInstance: boolean, msg: MigrationOptions): MigrationOptions.AsObject; + static serializeBinaryToWriter(message: MigrationOptions, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): MigrationOptions; + static deserializeBinaryFromReader(message: MigrationOptions, reader: jspb.BinaryReader): MigrationOptions; +} + +export namespace MigrationOptions { + export type AsObject = { + enableUpgradeMigration: boolean, + downgradeToSchemaVersion: number, + } +} + +export class RetryOptions extends jspb.Message { + getMaxNumRetries(): number; + setMaxNumRetries(value: number): RetryOptions; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RetryOptions.AsObject; + static toObject(includeInstance: boolean, msg: RetryOptions): RetryOptions.AsObject; + static serializeBinaryToWriter(message: RetryOptions, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RetryOptions; + static deserializeBinaryFromReader(message: RetryOptions, reader: jspb.BinaryReader): RetryOptions; +} + +export namespace RetryOptions { + export type AsObject = { + maxNumRetries: number, + } +} + +export class ConnectionConfig extends jspb.Message { + getFakeDatabase(): FakeDatabaseConfig | undefined; + setFakeDatabase(value?: FakeDatabaseConfig): ConnectionConfig; + hasFakeDatabase(): boolean; + clearFakeDatabase(): ConnectionConfig; + + getMysql(): MySQLDatabaseConfig | undefined; + setMysql(value?: MySQLDatabaseConfig): ConnectionConfig; + hasMysql(): boolean; + clearMysql(): ConnectionConfig; + + getSqlite(): SqliteMetadataSourceConfig | undefined; + setSqlite(value?: SqliteMetadataSourceConfig): ConnectionConfig; + hasSqlite(): boolean; + clearSqlite(): ConnectionConfig; + + getRetryOptions(): RetryOptions | undefined; + setRetryOptions(value?: RetryOptions): ConnectionConfig; + hasRetryOptions(): boolean; + clearRetryOptions(): ConnectionConfig; + + getConfigCase(): ConnectionConfig.ConfigCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ConnectionConfig.AsObject; + static toObject(includeInstance: boolean, msg: ConnectionConfig): ConnectionConfig.AsObject; + static serializeBinaryToWriter(message: ConnectionConfig, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ConnectionConfig; + static deserializeBinaryFromReader(message: ConnectionConfig, reader: jspb.BinaryReader): ConnectionConfig; +} + +export namespace ConnectionConfig { + export type AsObject = { + fakeDatabase?: FakeDatabaseConfig.AsObject, + mysql?: MySQLDatabaseConfig.AsObject, + sqlite?: SqliteMetadataSourceConfig.AsObject, + retryOptions?: RetryOptions.AsObject, + } + + export enum ConfigCase { + CONFIG_NOT_SET = 0, + FAKE_DATABASE = 1, + MYSQL = 2, + SQLITE = 3, + } +} + +export class GrpcChannelArguments extends jspb.Message { + getMaxReceiveMessageLength(): number; + setMaxReceiveMessageLength(value: number): GrpcChannelArguments; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GrpcChannelArguments.AsObject; + static toObject(includeInstance: boolean, msg: GrpcChannelArguments): GrpcChannelArguments.AsObject; + static serializeBinaryToWriter(message: GrpcChannelArguments, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GrpcChannelArguments; + static deserializeBinaryFromReader(message: GrpcChannelArguments, reader: jspb.BinaryReader): GrpcChannelArguments; +} + +export namespace GrpcChannelArguments { + export type AsObject = { + maxReceiveMessageLength: number, + } +} + +export class MetadataStoreClientConfig extends jspb.Message { + getHost(): string; + setHost(value: string): MetadataStoreClientConfig; + + getPort(): number; + setPort(value: number): MetadataStoreClientConfig; + + getSslConfig(): MetadataStoreClientConfig.SSLConfig | undefined; + setSslConfig(value?: MetadataStoreClientConfig.SSLConfig): MetadataStoreClientConfig; + hasSslConfig(): boolean; + clearSslConfig(): MetadataStoreClientConfig; + + getChannelArguments(): GrpcChannelArguments | undefined; + setChannelArguments(value?: GrpcChannelArguments): MetadataStoreClientConfig; + hasChannelArguments(): boolean; + clearChannelArguments(): MetadataStoreClientConfig; + + getClientTimeoutSec(): number; + setClientTimeoutSec(value: number): MetadataStoreClientConfig; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): MetadataStoreClientConfig.AsObject; + static toObject(includeInstance: boolean, msg: MetadataStoreClientConfig): MetadataStoreClientConfig.AsObject; + static serializeBinaryToWriter(message: MetadataStoreClientConfig, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): MetadataStoreClientConfig; + static deserializeBinaryFromReader(message: MetadataStoreClientConfig, reader: jspb.BinaryReader): MetadataStoreClientConfig; +} + +export namespace MetadataStoreClientConfig { + export type AsObject = { + host: string, + port: number, + sslConfig?: MetadataStoreClientConfig.SSLConfig.AsObject, + channelArguments?: GrpcChannelArguments.AsObject, + clientTimeoutSec: number, + } + + export class SSLConfig extends jspb.Message { + getClientKey(): string; + setClientKey(value: string): SSLConfig; + + getServerCert(): string; + setServerCert(value: string): SSLConfig; + + getCustomCa(): string; + setCustomCa(value: string): SSLConfig; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): SSLConfig.AsObject; + static toObject(includeInstance: boolean, msg: SSLConfig): SSLConfig.AsObject; + static serializeBinaryToWriter(message: SSLConfig, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): SSLConfig; + static deserializeBinaryFromReader(message: SSLConfig, reader: jspb.BinaryReader): SSLConfig; + } + + export namespace SSLConfig { + export type AsObject = { + clientKey: string, + serverCert: string, + customCa: string, + } + } + +} + +export class MetadataStoreServerConfig extends jspb.Message { + getConnectionConfig(): ConnectionConfig | undefined; + setConnectionConfig(value?: ConnectionConfig): MetadataStoreServerConfig; + hasConnectionConfig(): boolean; + clearConnectionConfig(): MetadataStoreServerConfig; + + getMigrationOptions(): MigrationOptions | undefined; + setMigrationOptions(value?: MigrationOptions): MetadataStoreServerConfig; + hasMigrationOptions(): boolean; + clearMigrationOptions(): MetadataStoreServerConfig; + + getSslConfig(): MetadataStoreServerConfig.SSLConfig | undefined; + setSslConfig(value?: MetadataStoreServerConfig.SSLConfig): MetadataStoreServerConfig; + hasSslConfig(): boolean; + clearSslConfig(): MetadataStoreServerConfig; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): MetadataStoreServerConfig.AsObject; + static toObject(includeInstance: boolean, msg: MetadataStoreServerConfig): MetadataStoreServerConfig.AsObject; + static serializeBinaryToWriter(message: MetadataStoreServerConfig, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): MetadataStoreServerConfig; + static deserializeBinaryFromReader(message: MetadataStoreServerConfig, reader: jspb.BinaryReader): MetadataStoreServerConfig; +} + +export namespace MetadataStoreServerConfig { + export type AsObject = { + connectionConfig?: ConnectionConfig.AsObject, + migrationOptions?: MigrationOptions.AsObject, + sslConfig?: MetadataStoreServerConfig.SSLConfig.AsObject, + } + + export class SSLConfig extends jspb.Message { + getServerKey(): string; + setServerKey(value: string): SSLConfig; + + getServerCert(): string; + setServerCert(value: string): SSLConfig; + + getCustomCa(): string; + setCustomCa(value: string): SSLConfig; + + getClientVerify(): boolean; + setClientVerify(value: boolean): SSLConfig; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): SSLConfig.AsObject; + static toObject(includeInstance: boolean, msg: SSLConfig): SSLConfig.AsObject; + static serializeBinaryToWriter(message: SSLConfig, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): SSLConfig; + static deserializeBinaryFromReader(message: SSLConfig, reader: jspb.BinaryReader): SSLConfig; + } + + export namespace SSLConfig { + export type AsObject = { + serverKey: string, + serverCert: string, + customCa: string, + clientVerify: boolean, + } + } + +} + +export class ListOperationOptions extends jspb.Message { + getMaxResultSize(): number; + setMaxResultSize(value: number): ListOperationOptions; + + getOrderByField(): ListOperationOptions.OrderByField | undefined; + setOrderByField(value?: ListOperationOptions.OrderByField): ListOperationOptions; + hasOrderByField(): boolean; + clearOrderByField(): ListOperationOptions; + + getNextPageToken(): string; + setNextPageToken(value: string): ListOperationOptions; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ListOperationOptions.AsObject; + static toObject(includeInstance: boolean, msg: ListOperationOptions): ListOperationOptions.AsObject; + static serializeBinaryToWriter(message: ListOperationOptions, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ListOperationOptions; + static deserializeBinaryFromReader(message: ListOperationOptions, reader: jspb.BinaryReader): ListOperationOptions; +} + +export namespace ListOperationOptions { + export type AsObject = { + maxResultSize: number, + orderByField?: ListOperationOptions.OrderByField.AsObject, + nextPageToken: string, + } + + export class OrderByField extends jspb.Message { + getField(): ListOperationOptions.OrderByField.Field; + setField(value: ListOperationOptions.OrderByField.Field): OrderByField; + + getIsAsc(): boolean; + setIsAsc(value: boolean): OrderByField; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): OrderByField.AsObject; + static toObject(includeInstance: boolean, msg: OrderByField): OrderByField.AsObject; + static serializeBinaryToWriter(message: OrderByField, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): OrderByField; + static deserializeBinaryFromReader(message: OrderByField, reader: jspb.BinaryReader): OrderByField; + } + + export namespace OrderByField { + export type AsObject = { + field: ListOperationOptions.OrderByField.Field, + isAsc: boolean, + } + + export enum Field { + FIELD_UNSPECIFIED = 0, + CREATE_TIME = 1, + LAST_UPDATE_TIME = 2, + ID = 3, + } + } + +} + +export class ListOperationNextPageToken extends jspb.Message { + getIdOffset(): number; + setIdOffset(value: number): ListOperationNextPageToken; + + getFieldOffset(): number; + setFieldOffset(value: number): ListOperationNextPageToken; + + getSetOptions(): ListOperationOptions | undefined; + setSetOptions(value?: ListOperationOptions): ListOperationNextPageToken; + hasSetOptions(): boolean; + clearSetOptions(): ListOperationNextPageToken; + + getListedIdsList(): Array; + setListedIdsList(value: Array): ListOperationNextPageToken; + clearListedIdsList(): ListOperationNextPageToken; + addListedIds(value: number, index?: number): ListOperationNextPageToken; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ListOperationNextPageToken.AsObject; + static toObject(includeInstance: boolean, msg: ListOperationNextPageToken): ListOperationNextPageToken.AsObject; + static serializeBinaryToWriter(message: ListOperationNextPageToken, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ListOperationNextPageToken; + static deserializeBinaryFromReader(message: ListOperationNextPageToken, reader: jspb.BinaryReader): ListOperationNextPageToken; +} + +export namespace ListOperationNextPageToken { + export type AsObject = { + idOffset: number, + fieldOffset: number, + setOptions?: ListOperationOptions.AsObject, + listedIdsList: Array, + } +} + +export enum PropertyType { + UNKNOWN = 0, + INT = 1, + DOUBLE = 2, + STRING = 3, + STRUCT = 4, +} diff --git a/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_pb.js b/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_pb.js new file mode 100644 index 0000000000..7509e2c0d2 --- /dev/null +++ b/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_pb.js @@ -0,0 +1,11150 @@ +// source: ml_metadata/proto/metadata_store.proto +/** + * @fileoverview + * @enhanceable + * @suppress {missingRequire} reports error on implicit type usages. + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +var google_protobuf_struct_pb = require('google-protobuf/google/protobuf/struct_pb.js'); +goog.object.extend(proto, google_protobuf_struct_pb); +goog.exportSymbol('proto.ml_metadata.AnyArtifactStructType', null, global); +goog.exportSymbol('proto.ml_metadata.Artifact', null, global); +goog.exportSymbol('proto.ml_metadata.Artifact.State', null, global); +goog.exportSymbol('proto.ml_metadata.ArtifactStructType', null, global); +goog.exportSymbol('proto.ml_metadata.ArtifactStructType.KindCase', null, global); +goog.exportSymbol('proto.ml_metadata.ArtifactType', null, global); +goog.exportSymbol('proto.ml_metadata.Association', null, global); +goog.exportSymbol('proto.ml_metadata.Attribution', null, global); +goog.exportSymbol('proto.ml_metadata.ConnectionConfig', null, global); +goog.exportSymbol('proto.ml_metadata.ConnectionConfig.ConfigCase', null, global); +goog.exportSymbol('proto.ml_metadata.Context', null, global); +goog.exportSymbol('proto.ml_metadata.ContextType', null, global); +goog.exportSymbol('proto.ml_metadata.DictArtifactStructType', null, global); +goog.exportSymbol('proto.ml_metadata.Event', null, global); +goog.exportSymbol('proto.ml_metadata.Event.Path', null, global); +goog.exportSymbol('proto.ml_metadata.Event.Path.Step', null, global); +goog.exportSymbol('proto.ml_metadata.Event.Path.Step.ValueCase', null, global); +goog.exportSymbol('proto.ml_metadata.Event.Type', null, global); +goog.exportSymbol('proto.ml_metadata.Execution', null, global); +goog.exportSymbol('proto.ml_metadata.Execution.State', null, global); +goog.exportSymbol('proto.ml_metadata.ExecutionType', null, global); +goog.exportSymbol('proto.ml_metadata.FakeDatabaseConfig', null, global); +goog.exportSymbol('proto.ml_metadata.GrpcChannelArguments', null, global); +goog.exportSymbol('proto.ml_metadata.IntersectionArtifactStructType', null, global); +goog.exportSymbol('proto.ml_metadata.LineageGraph', null, global); +goog.exportSymbol('proto.ml_metadata.ListArtifactStructType', null, global); +goog.exportSymbol('proto.ml_metadata.ListOperationNextPageToken', null, global); +goog.exportSymbol('proto.ml_metadata.ListOperationOptions', null, global); +goog.exportSymbol('proto.ml_metadata.ListOperationOptions.OrderByField', null, global); +goog.exportSymbol('proto.ml_metadata.ListOperationOptions.OrderByField.Field', null, global); +goog.exportSymbol('proto.ml_metadata.MetadataStoreClientConfig', null, global); +goog.exportSymbol('proto.ml_metadata.MetadataStoreClientConfig.SSLConfig', null, global); +goog.exportSymbol('proto.ml_metadata.MetadataStoreServerConfig', null, global); +goog.exportSymbol('proto.ml_metadata.MetadataStoreServerConfig.SSLConfig', null, global); +goog.exportSymbol('proto.ml_metadata.MigrationOptions', null, global); +goog.exportSymbol('proto.ml_metadata.MySQLDatabaseConfig', null, global); +goog.exportSymbol('proto.ml_metadata.MySQLDatabaseConfig.SSLOptions', null, global); +goog.exportSymbol('proto.ml_metadata.NoneArtifactStructType', null, global); +goog.exportSymbol('proto.ml_metadata.ParentContext', null, global); +goog.exportSymbol('proto.ml_metadata.PropertyType', null, global); +goog.exportSymbol('proto.ml_metadata.RetryOptions', null, global); +goog.exportSymbol('proto.ml_metadata.SqliteMetadataSourceConfig', null, global); +goog.exportSymbol('proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode', null, global); +goog.exportSymbol('proto.ml_metadata.TupleArtifactStructType', null, global); +goog.exportSymbol('proto.ml_metadata.UnionArtifactStructType', null, global); +goog.exportSymbol('proto.ml_metadata.Value', null, global); +goog.exportSymbol('proto.ml_metadata.Value.ValueCase', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.Value = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_metadata.Value.oneofGroups_); +}; +goog.inherits(proto.ml_metadata.Value, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.Value.displayName = 'proto.ml_metadata.Value'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.Artifact = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.Artifact, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.Artifact.displayName = 'proto.ml_metadata.Artifact'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ArtifactType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.ArtifactType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ArtifactType.displayName = 'proto.ml_metadata.ArtifactType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.Event = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.Event, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.Event.displayName = 'proto.ml_metadata.Event'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.Event.Path = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.Event.Path.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.Event.Path, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.Event.Path.displayName = 'proto.ml_metadata.Event.Path'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.Event.Path.Step = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_metadata.Event.Path.Step.oneofGroups_); +}; +goog.inherits(proto.ml_metadata.Event.Path.Step, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.Event.Path.Step.displayName = 'proto.ml_metadata.Event.Path.Step'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.Execution = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.Execution, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.Execution.displayName = 'proto.ml_metadata.Execution'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ExecutionType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.ExecutionType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ExecutionType.displayName = 'proto.ml_metadata.ExecutionType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ContextType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.ContextType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ContextType.displayName = 'proto.ml_metadata.ContextType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.Context = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.Context, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.Context.displayName = 'proto.ml_metadata.Context'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.Attribution = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.Attribution, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.Attribution.displayName = 'proto.ml_metadata.Attribution'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.Association = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.Association, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.Association.displayName = 'proto.ml_metadata.Association'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ParentContext = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.ParentContext, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ParentContext.displayName = 'proto.ml_metadata.ParentContext'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.LineageGraph = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.LineageGraph.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.LineageGraph, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.LineageGraph.displayName = 'proto.ml_metadata.LineageGraph'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ArtifactStructType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_metadata.ArtifactStructType.oneofGroups_); +}; +goog.inherits(proto.ml_metadata.ArtifactStructType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ArtifactStructType.displayName = 'proto.ml_metadata.ArtifactStructType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.UnionArtifactStructType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.UnionArtifactStructType.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.UnionArtifactStructType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.UnionArtifactStructType.displayName = 'proto.ml_metadata.UnionArtifactStructType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.IntersectionArtifactStructType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.IntersectionArtifactStructType.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.IntersectionArtifactStructType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.IntersectionArtifactStructType.displayName = 'proto.ml_metadata.IntersectionArtifactStructType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ListArtifactStructType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.ListArtifactStructType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ListArtifactStructType.displayName = 'proto.ml_metadata.ListArtifactStructType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.NoneArtifactStructType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.NoneArtifactStructType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.NoneArtifactStructType.displayName = 'proto.ml_metadata.NoneArtifactStructType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.AnyArtifactStructType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.AnyArtifactStructType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.AnyArtifactStructType.displayName = 'proto.ml_metadata.AnyArtifactStructType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.TupleArtifactStructType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.TupleArtifactStructType.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.TupleArtifactStructType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.TupleArtifactStructType.displayName = 'proto.ml_metadata.TupleArtifactStructType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.DictArtifactStructType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.DictArtifactStructType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.DictArtifactStructType.displayName = 'proto.ml_metadata.DictArtifactStructType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.FakeDatabaseConfig = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.FakeDatabaseConfig, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.FakeDatabaseConfig.displayName = 'proto.ml_metadata.FakeDatabaseConfig'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.MySQLDatabaseConfig = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.MySQLDatabaseConfig, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.MySQLDatabaseConfig.displayName = 'proto.ml_metadata.MySQLDatabaseConfig'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.MySQLDatabaseConfig.SSLOptions, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.displayName = 'proto.ml_metadata.MySQLDatabaseConfig.SSLOptions'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.SqliteMetadataSourceConfig = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.SqliteMetadataSourceConfig, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.SqliteMetadataSourceConfig.displayName = 'proto.ml_metadata.SqliteMetadataSourceConfig'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.MigrationOptions = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.MigrationOptions, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.MigrationOptions.displayName = 'proto.ml_metadata.MigrationOptions'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.RetryOptions = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.RetryOptions, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.RetryOptions.displayName = 'proto.ml_metadata.RetryOptions'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ConnectionConfig = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_metadata.ConnectionConfig.oneofGroups_); +}; +goog.inherits(proto.ml_metadata.ConnectionConfig, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ConnectionConfig.displayName = 'proto.ml_metadata.ConnectionConfig'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GrpcChannelArguments = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GrpcChannelArguments, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GrpcChannelArguments.displayName = 'proto.ml_metadata.GrpcChannelArguments'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.MetadataStoreClientConfig = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.MetadataStoreClientConfig, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.MetadataStoreClientConfig.displayName = 'proto.ml_metadata.MetadataStoreClientConfig'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.MetadataStoreClientConfig.SSLConfig, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.displayName = 'proto.ml_metadata.MetadataStoreClientConfig.SSLConfig'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.MetadataStoreServerConfig = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.MetadataStoreServerConfig, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.MetadataStoreServerConfig.displayName = 'proto.ml_metadata.MetadataStoreServerConfig'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.MetadataStoreServerConfig.SSLConfig, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.displayName = 'proto.ml_metadata.MetadataStoreServerConfig.SSLConfig'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ListOperationOptions = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.ListOperationOptions, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ListOperationOptions.displayName = 'proto.ml_metadata.ListOperationOptions'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ListOperationOptions.OrderByField = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.ListOperationOptions.OrderByField, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ListOperationOptions.OrderByField.displayName = 'proto.ml_metadata.ListOperationOptions.OrderByField'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ListOperationNextPageToken = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.ListOperationNextPageToken.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.ListOperationNextPageToken, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ListOperationNextPageToken.displayName = 'proto.ml_metadata.ListOperationNextPageToken'; +} + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.ml_metadata.Value.oneofGroups_ = [[1,2,3,4]]; + +/** + * @enum {number} + */ +proto.ml_metadata.Value.ValueCase = { + VALUE_NOT_SET: 0, + INT_VALUE: 1, + DOUBLE_VALUE: 2, + STRING_VALUE: 3, + STRUCT_VALUE: 4 +}; + +/** + * @return {proto.ml_metadata.Value.ValueCase} + */ +proto.ml_metadata.Value.prototype.getValueCase = function() { + return /** @type {proto.ml_metadata.Value.ValueCase} */(jspb.Message.computeOneofCase(this, proto.ml_metadata.Value.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.Value.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.Value.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.Value} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Value.toObject = function(includeInstance, msg) { + var f, obj = { + intValue: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + doubleValue: (f = jspb.Message.getOptionalFloatingPointField(msg, 2)) == null ? undefined : f, + stringValue: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + structValue: (f = msg.getStructValue()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.Value} + */ +proto.ml_metadata.Value.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.Value; + return proto.ml_metadata.Value.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.Value} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.Value} + */ +proto.ml_metadata.Value.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setIntValue(value); + break; + case 2: + var value = /** @type {number} */ (reader.readDouble()); + msg.setDoubleValue(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setStringValue(value); + break; + case 4: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setStructValue(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.Value.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.Value.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.Value} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Value.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeDouble( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } + f = message.getStructValue(); + if (f != null) { + writer.writeMessage( + 4, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } +}; + + +/** + * optional int64 int_value = 1; + * @return {number} + */ +proto.ml_metadata.Value.prototype.getIntValue = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Value} returns this + */ +proto.ml_metadata.Value.prototype.setIntValue = function(value) { + return jspb.Message.setOneofField(this, 1, proto.ml_metadata.Value.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Value} returns this + */ +proto.ml_metadata.Value.prototype.clearIntValue = function() { + return jspb.Message.setOneofField(this, 1, proto.ml_metadata.Value.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Value.prototype.hasIntValue = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional double double_value = 2; + * @return {number} + */ +proto.ml_metadata.Value.prototype.getDoubleValue = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Value} returns this + */ +proto.ml_metadata.Value.prototype.setDoubleValue = function(value) { + return jspb.Message.setOneofField(this, 2, proto.ml_metadata.Value.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Value} returns this + */ +proto.ml_metadata.Value.prototype.clearDoubleValue = function() { + return jspb.Message.setOneofField(this, 2, proto.ml_metadata.Value.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Value.prototype.hasDoubleValue = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string string_value = 3; + * @return {string} + */ +proto.ml_metadata.Value.prototype.getStringValue = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.Value} returns this + */ +proto.ml_metadata.Value.prototype.setStringValue = function(value) { + return jspb.Message.setOneofField(this, 3, proto.ml_metadata.Value.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Value} returns this + */ +proto.ml_metadata.Value.prototype.clearStringValue = function() { + return jspb.Message.setOneofField(this, 3, proto.ml_metadata.Value.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Value.prototype.hasStringValue = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional google.protobuf.Struct struct_value = 4; + * @return {?proto.google.protobuf.Struct} + */ +proto.ml_metadata.Value.prototype.getStructValue = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 4)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.ml_metadata.Value} returns this +*/ +proto.ml_metadata.Value.prototype.setStructValue = function(value) { + return jspb.Message.setOneofWrapperField(this, 4, proto.ml_metadata.Value.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.Value} returns this + */ +proto.ml_metadata.Value.prototype.clearStructValue = function() { + return this.setStructValue(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Value.prototype.hasStructValue = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.Artifact.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.Artifact.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.Artifact} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Artifact.toObject = function(includeInstance, msg) { + var f, obj = { + id: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + name: (f = jspb.Message.getField(msg, 7)) == null ? undefined : f, + typeId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + type: (f = jspb.Message.getField(msg, 8)) == null ? undefined : f, + uri: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.Value.toObject) : [], + customPropertiesMap: (f = msg.getCustomPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.Value.toObject) : [], + state: (f = jspb.Message.getField(msg, 6)) == null ? undefined : f, + createTimeSinceEpoch: (f = jspb.Message.getField(msg, 9)) == null ? undefined : f, + lastUpdateTimeSinceEpoch: (f = jspb.Message.getField(msg, 10)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.Artifact} + */ +proto.ml_metadata.Artifact.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.Artifact; + return proto.ml_metadata.Artifact.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.Artifact} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.Artifact} + */ +proto.ml_metadata.Artifact.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setId(value); + break; + case 7: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt64()); + msg.setTypeId(value); + break; + case 8: + var value = /** @type {string} */ (reader.readString()); + msg.setType(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setUri(value); + break; + case 4: + var value = msg.getPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.Value.deserializeBinaryFromReader, "", new proto.ml_metadata.Value()); + }); + break; + case 5: + var value = msg.getCustomPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.Value.deserializeBinaryFromReader, "", new proto.ml_metadata.Value()); + }); + break; + case 6: + var value = /** @type {!proto.ml_metadata.Artifact.State} */ (reader.readEnum()); + msg.setState(value); + break; + case 9: + var value = /** @type {number} */ (reader.readInt64()); + msg.setCreateTimeSinceEpoch(value); + break; + case 10: + var value = /** @type {number} */ (reader.readInt64()); + msg.setLastUpdateTimeSinceEpoch(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.Artifact.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.Artifact.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.Artifact} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Artifact.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 7)); + if (f != null) { + writer.writeString( + 7, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeInt64( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeString( + 8, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } + f = message.getPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(4, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.Value.serializeBinaryToWriter); + } + f = message.getCustomPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(5, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.Value.serializeBinaryToWriter); + } + f = /** @type {!proto.ml_metadata.Artifact.State} */ (jspb.Message.getField(message, 6)); + if (f != null) { + writer.writeEnum( + 6, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 9)); + if (f != null) { + writer.writeInt64( + 9, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 10)); + if (f != null) { + writer.writeInt64( + 10, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.ml_metadata.Artifact.State = { + UNKNOWN: 0, + PENDING: 1, + LIVE: 2, + MARKED_FOR_DELETION: 3, + DELETED: 4 +}; + +/** + * optional int64 id = 1; + * @return {number} + */ +proto.ml_metadata.Artifact.prototype.getId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.setId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.clearId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Artifact.prototype.hasId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string name = 7; + * @return {string} + */ +proto.ml_metadata.Artifact.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.setName = function(value) { + return jspb.Message.setField(this, 7, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.clearName = function() { + return jspb.Message.setField(this, 7, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Artifact.prototype.hasName = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * optional int64 type_id = 2; + * @return {number} + */ +proto.ml_metadata.Artifact.prototype.getTypeId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.setTypeId = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.clearTypeId = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Artifact.prototype.hasTypeId = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string type = 8; + * @return {string} + */ +proto.ml_metadata.Artifact.prototype.getType = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 8, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.setType = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.clearType = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Artifact.prototype.hasType = function() { + return jspb.Message.getField(this, 8) != null; +}; + + +/** + * optional string uri = 3; + * @return {string} + */ +proto.ml_metadata.Artifact.prototype.getUri = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.setUri = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.clearUri = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Artifact.prototype.hasUri = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * map properties = 4; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map} + */ +proto.ml_metadata.Artifact.prototype.getPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map} */ ( + jspb.Message.getMapField(this, 4, opt_noLazyCreate, + proto.ml_metadata.Value)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.clearPropertiesMap = function() { + this.getPropertiesMap().clear(); + return this;}; + + +/** + * map custom_properties = 5; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map} + */ +proto.ml_metadata.Artifact.prototype.getCustomPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map} */ ( + jspb.Message.getMapField(this, 5, opt_noLazyCreate, + proto.ml_metadata.Value)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.clearCustomPropertiesMap = function() { + this.getCustomPropertiesMap().clear(); + return this;}; + + +/** + * optional State state = 6; + * @return {!proto.ml_metadata.Artifact.State} + */ +proto.ml_metadata.Artifact.prototype.getState = function() { + return /** @type {!proto.ml_metadata.Artifact.State} */ (jspb.Message.getFieldWithDefault(this, 6, 0)); +}; + + +/** + * @param {!proto.ml_metadata.Artifact.State} value + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.setState = function(value) { + return jspb.Message.setField(this, 6, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.clearState = function() { + return jspb.Message.setField(this, 6, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Artifact.prototype.hasState = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional int64 create_time_since_epoch = 9; + * @return {number} + */ +proto.ml_metadata.Artifact.prototype.getCreateTimeSinceEpoch = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 9, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.setCreateTimeSinceEpoch = function(value) { + return jspb.Message.setField(this, 9, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.clearCreateTimeSinceEpoch = function() { + return jspb.Message.setField(this, 9, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Artifact.prototype.hasCreateTimeSinceEpoch = function() { + return jspb.Message.getField(this, 9) != null; +}; + + +/** + * optional int64 last_update_time_since_epoch = 10; + * @return {number} + */ +proto.ml_metadata.Artifact.prototype.getLastUpdateTimeSinceEpoch = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 10, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.setLastUpdateTimeSinceEpoch = function(value) { + return jspb.Message.setField(this, 10, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Artifact} returns this + */ +proto.ml_metadata.Artifact.prototype.clearLastUpdateTimeSinceEpoch = function() { + return jspb.Message.setField(this, 10, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Artifact.prototype.hasLastUpdateTimeSinceEpoch = function() { + return jspb.Message.getField(this, 10) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ArtifactType.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ArtifactType.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ArtifactType} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ArtifactType.toObject = function(includeInstance, msg) { + var f, obj = { + id: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + name: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + version: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + description: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, undefined) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ArtifactType} + */ +proto.ml_metadata.ArtifactType.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ArtifactType; + return proto.ml_metadata.ArtifactType.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ArtifactType} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ArtifactType} + */ +proto.ml_metadata.ArtifactType.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setId(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setVersion(value); + break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setDescription(value); + break; + case 3: + var value = msg.getPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readEnum, null, "", 0); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ArtifactType.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ArtifactType.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ArtifactType} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ArtifactType.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeString( + 4, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeString( + 5, + f + ); + } + f = message.getPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(3, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeEnum); + } +}; + + +/** + * optional int64 id = 1; + * @return {number} + */ +proto.ml_metadata.ArtifactType.prototype.getId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.ArtifactType} returns this + */ +proto.ml_metadata.ArtifactType.prototype.setId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ArtifactType} returns this + */ +proto.ml_metadata.ArtifactType.prototype.clearId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactType.prototype.hasId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string name = 2; + * @return {string} + */ +proto.ml_metadata.ArtifactType.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.ArtifactType} returns this + */ +proto.ml_metadata.ArtifactType.prototype.setName = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ArtifactType} returns this + */ +proto.ml_metadata.ArtifactType.prototype.clearName = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactType.prototype.hasName = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string version = 4; + * @return {string} + */ +proto.ml_metadata.ArtifactType.prototype.getVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.ArtifactType} returns this + */ +proto.ml_metadata.ArtifactType.prototype.setVersion = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ArtifactType} returns this + */ +proto.ml_metadata.ArtifactType.prototype.clearVersion = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactType.prototype.hasVersion = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional string description = 5; + * @return {string} + */ +proto.ml_metadata.ArtifactType.prototype.getDescription = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.ArtifactType} returns this + */ +proto.ml_metadata.ArtifactType.prototype.setDescription = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ArtifactType} returns this + */ +proto.ml_metadata.ArtifactType.prototype.clearDescription = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactType.prototype.hasDescription = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * map properties = 3; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map} + */ +proto.ml_metadata.ArtifactType.prototype.getPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map} */ ( + jspb.Message.getMapField(this, 3, opt_noLazyCreate, + null)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_metadata.ArtifactType} returns this + */ +proto.ml_metadata.ArtifactType.prototype.clearPropertiesMap = function() { + this.getPropertiesMap().clear(); + return this;}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.Event.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.Event.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.Event} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Event.toObject = function(includeInstance, msg) { + var f, obj = { + artifactId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + executionId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + path: (f = msg.getPath()) && proto.ml_metadata.Event.Path.toObject(includeInstance, f), + type: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + millisecondsSinceEpoch: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.Event} + */ +proto.ml_metadata.Event.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.Event; + return proto.ml_metadata.Event.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.Event} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.Event} + */ +proto.ml_metadata.Event.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setArtifactId(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt64()); + msg.setExecutionId(value); + break; + case 3: + var value = new proto.ml_metadata.Event.Path; + reader.readMessage(value,proto.ml_metadata.Event.Path.deserializeBinaryFromReader); + msg.setPath(value); + break; + case 4: + var value = /** @type {!proto.ml_metadata.Event.Type} */ (reader.readEnum()); + msg.setType(value); + break; + case 5: + var value = /** @type {number} */ (reader.readInt64()); + msg.setMillisecondsSinceEpoch(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.Event.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.Event.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.Event} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Event.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeInt64( + 2, + f + ); + } + f = message.getPath(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.ml_metadata.Event.Path.serializeBinaryToWriter + ); + } + f = /** @type {!proto.ml_metadata.Event.Type} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeEnum( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeInt64( + 5, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.ml_metadata.Event.Type = { + UNKNOWN: 0, + DECLARED_OUTPUT: 1, + DECLARED_INPUT: 2, + INPUT: 3, + OUTPUT: 4, + INTERNAL_INPUT: 5, + INTERNAL_OUTPUT: 6 +}; + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.Event.Path.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.Event.Path.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.Event.Path.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.Event.Path} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Event.Path.toObject = function(includeInstance, msg) { + var f, obj = { + stepsList: jspb.Message.toObjectList(msg.getStepsList(), + proto.ml_metadata.Event.Path.Step.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.Event.Path} + */ +proto.ml_metadata.Event.Path.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.Event.Path; + return proto.ml_metadata.Event.Path.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.Event.Path} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.Event.Path} + */ +proto.ml_metadata.Event.Path.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_metadata.Event.Path.Step; + reader.readMessage(value,proto.ml_metadata.Event.Path.Step.deserializeBinaryFromReader); + msg.addSteps(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.Event.Path.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.Event.Path.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.Event.Path} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Event.Path.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getStepsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.ml_metadata.Event.Path.Step.serializeBinaryToWriter + ); + } +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.ml_metadata.Event.Path.Step.oneofGroups_ = [[1,2]]; + +/** + * @enum {number} + */ +proto.ml_metadata.Event.Path.Step.ValueCase = { + VALUE_NOT_SET: 0, + INDEX: 1, + KEY: 2 +}; + +/** + * @return {proto.ml_metadata.Event.Path.Step.ValueCase} + */ +proto.ml_metadata.Event.Path.Step.prototype.getValueCase = function() { + return /** @type {proto.ml_metadata.Event.Path.Step.ValueCase} */(jspb.Message.computeOneofCase(this, proto.ml_metadata.Event.Path.Step.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.Event.Path.Step.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.Event.Path.Step.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.Event.Path.Step} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Event.Path.Step.toObject = function(includeInstance, msg) { + var f, obj = { + index: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + key: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.Event.Path.Step} + */ +proto.ml_metadata.Event.Path.Step.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.Event.Path.Step; + return proto.ml_metadata.Event.Path.Step.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.Event.Path.Step} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.Event.Path.Step} + */ +proto.ml_metadata.Event.Path.Step.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setIndex(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setKey(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.Event.Path.Step.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.Event.Path.Step.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.Event.Path.Step} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Event.Path.Step.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional int64 index = 1; + * @return {number} + */ +proto.ml_metadata.Event.Path.Step.prototype.getIndex = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Event.Path.Step} returns this + */ +proto.ml_metadata.Event.Path.Step.prototype.setIndex = function(value) { + return jspb.Message.setOneofField(this, 1, proto.ml_metadata.Event.Path.Step.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Event.Path.Step} returns this + */ +proto.ml_metadata.Event.Path.Step.prototype.clearIndex = function() { + return jspb.Message.setOneofField(this, 1, proto.ml_metadata.Event.Path.Step.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Event.Path.Step.prototype.hasIndex = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string key = 2; + * @return {string} + */ +proto.ml_metadata.Event.Path.Step.prototype.getKey = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.Event.Path.Step} returns this + */ +proto.ml_metadata.Event.Path.Step.prototype.setKey = function(value) { + return jspb.Message.setOneofField(this, 2, proto.ml_metadata.Event.Path.Step.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Event.Path.Step} returns this + */ +proto.ml_metadata.Event.Path.Step.prototype.clearKey = function() { + return jspb.Message.setOneofField(this, 2, proto.ml_metadata.Event.Path.Step.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Event.Path.Step.prototype.hasKey = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * repeated Step steps = 1; + * @return {!Array} + */ +proto.ml_metadata.Event.Path.prototype.getStepsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.Event.Path.Step, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.Event.Path} returns this +*/ +proto.ml_metadata.Event.Path.prototype.setStepsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Event.Path.Step=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Event.Path.Step} + */ +proto.ml_metadata.Event.Path.prototype.addSteps = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Event.Path.Step, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.Event.Path} returns this + */ +proto.ml_metadata.Event.Path.prototype.clearStepsList = function() { + return this.setStepsList([]); +}; + + +/** + * optional int64 artifact_id = 1; + * @return {number} + */ +proto.ml_metadata.Event.prototype.getArtifactId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Event} returns this + */ +proto.ml_metadata.Event.prototype.setArtifactId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Event} returns this + */ +proto.ml_metadata.Event.prototype.clearArtifactId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Event.prototype.hasArtifactId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional int64 execution_id = 2; + * @return {number} + */ +proto.ml_metadata.Event.prototype.getExecutionId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Event} returns this + */ +proto.ml_metadata.Event.prototype.setExecutionId = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Event} returns this + */ +proto.ml_metadata.Event.prototype.clearExecutionId = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Event.prototype.hasExecutionId = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional Path path = 3; + * @return {?proto.ml_metadata.Event.Path} + */ +proto.ml_metadata.Event.prototype.getPath = function() { + return /** @type{?proto.ml_metadata.Event.Path} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.Event.Path, 3)); +}; + + +/** + * @param {?proto.ml_metadata.Event.Path|undefined} value + * @return {!proto.ml_metadata.Event} returns this +*/ +proto.ml_metadata.Event.prototype.setPath = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.Event} returns this + */ +proto.ml_metadata.Event.prototype.clearPath = function() { + return this.setPath(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Event.prototype.hasPath = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional Type type = 4; + * @return {!proto.ml_metadata.Event.Type} + */ +proto.ml_metadata.Event.prototype.getType = function() { + return /** @type {!proto.ml_metadata.Event.Type} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {!proto.ml_metadata.Event.Type} value + * @return {!proto.ml_metadata.Event} returns this + */ +proto.ml_metadata.Event.prototype.setType = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Event} returns this + */ +proto.ml_metadata.Event.prototype.clearType = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Event.prototype.hasType = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional int64 milliseconds_since_epoch = 5; + * @return {number} + */ +proto.ml_metadata.Event.prototype.getMillisecondsSinceEpoch = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Event} returns this + */ +proto.ml_metadata.Event.prototype.setMillisecondsSinceEpoch = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Event} returns this + */ +proto.ml_metadata.Event.prototype.clearMillisecondsSinceEpoch = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Event.prototype.hasMillisecondsSinceEpoch = function() { + return jspb.Message.getField(this, 5) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.Execution.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.Execution.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.Execution} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Execution.toObject = function(includeInstance, msg) { + var f, obj = { + id: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + name: (f = jspb.Message.getField(msg, 6)) == null ? undefined : f, + typeId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + type: (f = jspb.Message.getField(msg, 7)) == null ? undefined : f, + lastKnownState: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.Value.toObject) : [], + customPropertiesMap: (f = msg.getCustomPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.Value.toObject) : [], + createTimeSinceEpoch: (f = jspb.Message.getField(msg, 8)) == null ? undefined : f, + lastUpdateTimeSinceEpoch: (f = jspb.Message.getField(msg, 9)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.Execution} + */ +proto.ml_metadata.Execution.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.Execution; + return proto.ml_metadata.Execution.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.Execution} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.Execution} + */ +proto.ml_metadata.Execution.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setId(value); + break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt64()); + msg.setTypeId(value); + break; + case 7: + var value = /** @type {string} */ (reader.readString()); + msg.setType(value); + break; + case 3: + var value = /** @type {!proto.ml_metadata.Execution.State} */ (reader.readEnum()); + msg.setLastKnownState(value); + break; + case 4: + var value = msg.getPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.Value.deserializeBinaryFromReader, "", new proto.ml_metadata.Value()); + }); + break; + case 5: + var value = msg.getCustomPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.Value.deserializeBinaryFromReader, "", new proto.ml_metadata.Value()); + }); + break; + case 8: + var value = /** @type {number} */ (reader.readInt64()); + msg.setCreateTimeSinceEpoch(value); + break; + case 9: + var value = /** @type {number} */ (reader.readInt64()); + msg.setLastUpdateTimeSinceEpoch(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.Execution.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.Execution.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.Execution} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Execution.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 6)); + if (f != null) { + writer.writeString( + 6, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeInt64( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 7)); + if (f != null) { + writer.writeString( + 7, + f + ); + } + f = /** @type {!proto.ml_metadata.Execution.State} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeEnum( + 3, + f + ); + } + f = message.getPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(4, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.Value.serializeBinaryToWriter); + } + f = message.getCustomPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(5, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.Value.serializeBinaryToWriter); + } + f = /** @type {number} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeInt64( + 8, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 9)); + if (f != null) { + writer.writeInt64( + 9, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.ml_metadata.Execution.State = { + UNKNOWN: 0, + NEW: 1, + RUNNING: 2, + COMPLETE: 3, + FAILED: 4, + CACHED: 5, + CANCELED: 6 +}; + +/** + * optional int64 id = 1; + * @return {number} + */ +proto.ml_metadata.Execution.prototype.getId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.setId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.clearId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Execution.prototype.hasId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string name = 6; + * @return {string} + */ +proto.ml_metadata.Execution.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.setName = function(value) { + return jspb.Message.setField(this, 6, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.clearName = function() { + return jspb.Message.setField(this, 6, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Execution.prototype.hasName = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional int64 type_id = 2; + * @return {number} + */ +proto.ml_metadata.Execution.prototype.getTypeId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.setTypeId = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.clearTypeId = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Execution.prototype.hasTypeId = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string type = 7; + * @return {string} + */ +proto.ml_metadata.Execution.prototype.getType = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.setType = function(value) { + return jspb.Message.setField(this, 7, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.clearType = function() { + return jspb.Message.setField(this, 7, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Execution.prototype.hasType = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * optional State last_known_state = 3; + * @return {!proto.ml_metadata.Execution.State} + */ +proto.ml_metadata.Execution.prototype.getLastKnownState = function() { + return /** @type {!proto.ml_metadata.Execution.State} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {!proto.ml_metadata.Execution.State} value + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.setLastKnownState = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.clearLastKnownState = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Execution.prototype.hasLastKnownState = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * map properties = 4; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map} + */ +proto.ml_metadata.Execution.prototype.getPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map} */ ( + jspb.Message.getMapField(this, 4, opt_noLazyCreate, + proto.ml_metadata.Value)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.clearPropertiesMap = function() { + this.getPropertiesMap().clear(); + return this;}; + + +/** + * map custom_properties = 5; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map} + */ +proto.ml_metadata.Execution.prototype.getCustomPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map} */ ( + jspb.Message.getMapField(this, 5, opt_noLazyCreate, + proto.ml_metadata.Value)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.clearCustomPropertiesMap = function() { + this.getCustomPropertiesMap().clear(); + return this;}; + + +/** + * optional int64 create_time_since_epoch = 8; + * @return {number} + */ +proto.ml_metadata.Execution.prototype.getCreateTimeSinceEpoch = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 8, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.setCreateTimeSinceEpoch = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.clearCreateTimeSinceEpoch = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Execution.prototype.hasCreateTimeSinceEpoch = function() { + return jspb.Message.getField(this, 8) != null; +}; + + +/** + * optional int64 last_update_time_since_epoch = 9; + * @return {number} + */ +proto.ml_metadata.Execution.prototype.getLastUpdateTimeSinceEpoch = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 9, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.setLastUpdateTimeSinceEpoch = function(value) { + return jspb.Message.setField(this, 9, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Execution} returns this + */ +proto.ml_metadata.Execution.prototype.clearLastUpdateTimeSinceEpoch = function() { + return jspb.Message.setField(this, 9, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Execution.prototype.hasLastUpdateTimeSinceEpoch = function() { + return jspb.Message.getField(this, 9) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ExecutionType.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ExecutionType.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ExecutionType} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ExecutionType.toObject = function(includeInstance, msg) { + var f, obj = { + id: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + name: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + version: (f = jspb.Message.getField(msg, 6)) == null ? undefined : f, + description: (f = jspb.Message.getField(msg, 7)) == null ? undefined : f, + propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, undefined) : [], + inputType: (f = msg.getInputType()) && proto.ml_metadata.ArtifactStructType.toObject(includeInstance, f), + outputType: (f = msg.getOutputType()) && proto.ml_metadata.ArtifactStructType.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ExecutionType} + */ +proto.ml_metadata.ExecutionType.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ExecutionType; + return proto.ml_metadata.ExecutionType.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ExecutionType} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ExecutionType} + */ +proto.ml_metadata.ExecutionType.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setId(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setVersion(value); + break; + case 7: + var value = /** @type {string} */ (reader.readString()); + msg.setDescription(value); + break; + case 3: + var value = msg.getPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readEnum, null, "", 0); + }); + break; + case 4: + var value = new proto.ml_metadata.ArtifactStructType; + reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader); + msg.setInputType(value); + break; + case 5: + var value = new proto.ml_metadata.ArtifactStructType; + reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader); + msg.setOutputType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ExecutionType.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ExecutionType.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ExecutionType} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ExecutionType.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 6)); + if (f != null) { + writer.writeString( + 6, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 7)); + if (f != null) { + writer.writeString( + 7, + f + ); + } + f = message.getPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(3, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeEnum); + } + f = message.getInputType(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter + ); + } + f = message.getOutputType(); + if (f != null) { + writer.writeMessage( + 5, + f, + proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter + ); + } +}; + + +/** + * optional int64 id = 1; + * @return {number} + */ +proto.ml_metadata.ExecutionType.prototype.getId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.ExecutionType} returns this + */ +proto.ml_metadata.ExecutionType.prototype.setId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ExecutionType} returns this + */ +proto.ml_metadata.ExecutionType.prototype.clearId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ExecutionType.prototype.hasId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string name = 2; + * @return {string} + */ +proto.ml_metadata.ExecutionType.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.ExecutionType} returns this + */ +proto.ml_metadata.ExecutionType.prototype.setName = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ExecutionType} returns this + */ +proto.ml_metadata.ExecutionType.prototype.clearName = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ExecutionType.prototype.hasName = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string version = 6; + * @return {string} + */ +proto.ml_metadata.ExecutionType.prototype.getVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.ExecutionType} returns this + */ +proto.ml_metadata.ExecutionType.prototype.setVersion = function(value) { + return jspb.Message.setField(this, 6, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ExecutionType} returns this + */ +proto.ml_metadata.ExecutionType.prototype.clearVersion = function() { + return jspb.Message.setField(this, 6, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ExecutionType.prototype.hasVersion = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional string description = 7; + * @return {string} + */ +proto.ml_metadata.ExecutionType.prototype.getDescription = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.ExecutionType} returns this + */ +proto.ml_metadata.ExecutionType.prototype.setDescription = function(value) { + return jspb.Message.setField(this, 7, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ExecutionType} returns this + */ +proto.ml_metadata.ExecutionType.prototype.clearDescription = function() { + return jspb.Message.setField(this, 7, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ExecutionType.prototype.hasDescription = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * map properties = 3; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map} + */ +proto.ml_metadata.ExecutionType.prototype.getPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map} */ ( + jspb.Message.getMapField(this, 3, opt_noLazyCreate, + null)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_metadata.ExecutionType} returns this + */ +proto.ml_metadata.ExecutionType.prototype.clearPropertiesMap = function() { + this.getPropertiesMap().clear(); + return this;}; + + +/** + * optional ArtifactStructType input_type = 4; + * @return {?proto.ml_metadata.ArtifactStructType} + */ +proto.ml_metadata.ExecutionType.prototype.getInputType = function() { + return /** @type{?proto.ml_metadata.ArtifactStructType} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.ArtifactStructType, 4)); +}; + + +/** + * @param {?proto.ml_metadata.ArtifactStructType|undefined} value + * @return {!proto.ml_metadata.ExecutionType} returns this +*/ +proto.ml_metadata.ExecutionType.prototype.setInputType = function(value) { + return jspb.Message.setWrapperField(this, 4, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ExecutionType} returns this + */ +proto.ml_metadata.ExecutionType.prototype.clearInputType = function() { + return this.setInputType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ExecutionType.prototype.hasInputType = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional ArtifactStructType output_type = 5; + * @return {?proto.ml_metadata.ArtifactStructType} + */ +proto.ml_metadata.ExecutionType.prototype.getOutputType = function() { + return /** @type{?proto.ml_metadata.ArtifactStructType} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.ArtifactStructType, 5)); +}; + + +/** + * @param {?proto.ml_metadata.ArtifactStructType|undefined} value + * @return {!proto.ml_metadata.ExecutionType} returns this +*/ +proto.ml_metadata.ExecutionType.prototype.setOutputType = function(value) { + return jspb.Message.setWrapperField(this, 5, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ExecutionType} returns this + */ +proto.ml_metadata.ExecutionType.prototype.clearOutputType = function() { + return this.setOutputType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ExecutionType.prototype.hasOutputType = function() { + return jspb.Message.getField(this, 5) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ContextType.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ContextType.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ContextType} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ContextType.toObject = function(includeInstance, msg) { + var f, obj = { + id: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + name: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + version: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + description: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, undefined) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ContextType} + */ +proto.ml_metadata.ContextType.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ContextType; + return proto.ml_metadata.ContextType.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ContextType} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ContextType} + */ +proto.ml_metadata.ContextType.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setId(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setVersion(value); + break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setDescription(value); + break; + case 3: + var value = msg.getPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readEnum, null, "", 0); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ContextType.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ContextType.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ContextType} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ContextType.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeString( + 4, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeString( + 5, + f + ); + } + f = message.getPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(3, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeEnum); + } +}; + + +/** + * optional int64 id = 1; + * @return {number} + */ +proto.ml_metadata.ContextType.prototype.getId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.ContextType} returns this + */ +proto.ml_metadata.ContextType.prototype.setId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ContextType} returns this + */ +proto.ml_metadata.ContextType.prototype.clearId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ContextType.prototype.hasId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string name = 2; + * @return {string} + */ +proto.ml_metadata.ContextType.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.ContextType} returns this + */ +proto.ml_metadata.ContextType.prototype.setName = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ContextType} returns this + */ +proto.ml_metadata.ContextType.prototype.clearName = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ContextType.prototype.hasName = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string version = 4; + * @return {string} + */ +proto.ml_metadata.ContextType.prototype.getVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.ContextType} returns this + */ +proto.ml_metadata.ContextType.prototype.setVersion = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ContextType} returns this + */ +proto.ml_metadata.ContextType.prototype.clearVersion = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ContextType.prototype.hasVersion = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional string description = 5; + * @return {string} + */ +proto.ml_metadata.ContextType.prototype.getDescription = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.ContextType} returns this + */ +proto.ml_metadata.ContextType.prototype.setDescription = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ContextType} returns this + */ +proto.ml_metadata.ContextType.prototype.clearDescription = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ContextType.prototype.hasDescription = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * map properties = 3; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map} + */ +proto.ml_metadata.ContextType.prototype.getPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map} */ ( + jspb.Message.getMapField(this, 3, opt_noLazyCreate, + null)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_metadata.ContextType} returns this + */ +proto.ml_metadata.ContextType.prototype.clearPropertiesMap = function() { + this.getPropertiesMap().clear(); + return this;}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.Context.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.Context.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.Context} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Context.toObject = function(includeInstance, msg) { + var f, obj = { + id: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + name: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + typeId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + type: (f = jspb.Message.getField(msg, 6)) == null ? undefined : f, + propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.Value.toObject) : [], + customPropertiesMap: (f = msg.getCustomPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.Value.toObject) : [], + createTimeSinceEpoch: (f = jspb.Message.getField(msg, 7)) == null ? undefined : f, + lastUpdateTimeSinceEpoch: (f = jspb.Message.getField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.Context} + */ +proto.ml_metadata.Context.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.Context; + return proto.ml_metadata.Context.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.Context} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.Context} + */ +proto.ml_metadata.Context.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setId(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt64()); + msg.setTypeId(value); + break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setType(value); + break; + case 4: + var value = msg.getPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.Value.deserializeBinaryFromReader, "", new proto.ml_metadata.Value()); + }); + break; + case 5: + var value = msg.getCustomPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.Value.deserializeBinaryFromReader, "", new proto.ml_metadata.Value()); + }); + break; + case 7: + var value = /** @type {number} */ (reader.readInt64()); + msg.setCreateTimeSinceEpoch(value); + break; + case 8: + var value = /** @type {number} */ (reader.readInt64()); + msg.setLastUpdateTimeSinceEpoch(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.Context.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.Context.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.Context} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Context.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeInt64( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 6)); + if (f != null) { + writer.writeString( + 6, + f + ); + } + f = message.getPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(4, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.Value.serializeBinaryToWriter); + } + f = message.getCustomPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(5, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.Value.serializeBinaryToWriter); + } + f = /** @type {number} */ (jspb.Message.getField(message, 7)); + if (f != null) { + writer.writeInt64( + 7, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeInt64( + 8, + f + ); + } +}; + + +/** + * optional int64 id = 1; + * @return {number} + */ +proto.ml_metadata.Context.prototype.getId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.setId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.clearId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Context.prototype.hasId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string name = 3; + * @return {string} + */ +proto.ml_metadata.Context.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.setName = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.clearName = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Context.prototype.hasName = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional int64 type_id = 2; + * @return {number} + */ +proto.ml_metadata.Context.prototype.getTypeId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.setTypeId = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.clearTypeId = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Context.prototype.hasTypeId = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string type = 6; + * @return {string} + */ +proto.ml_metadata.Context.prototype.getType = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.setType = function(value) { + return jspb.Message.setField(this, 6, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.clearType = function() { + return jspb.Message.setField(this, 6, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Context.prototype.hasType = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * map properties = 4; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map} + */ +proto.ml_metadata.Context.prototype.getPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map} */ ( + jspb.Message.getMapField(this, 4, opt_noLazyCreate, + proto.ml_metadata.Value)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.clearPropertiesMap = function() { + this.getPropertiesMap().clear(); + return this;}; + + +/** + * map custom_properties = 5; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map} + */ +proto.ml_metadata.Context.prototype.getCustomPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map} */ ( + jspb.Message.getMapField(this, 5, opt_noLazyCreate, + proto.ml_metadata.Value)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.clearCustomPropertiesMap = function() { + this.getCustomPropertiesMap().clear(); + return this;}; + + +/** + * optional int64 create_time_since_epoch = 7; + * @return {number} + */ +proto.ml_metadata.Context.prototype.getCreateTimeSinceEpoch = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.setCreateTimeSinceEpoch = function(value) { + return jspb.Message.setField(this, 7, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.clearCreateTimeSinceEpoch = function() { + return jspb.Message.setField(this, 7, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Context.prototype.hasCreateTimeSinceEpoch = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * optional int64 last_update_time_since_epoch = 8; + * @return {number} + */ +proto.ml_metadata.Context.prototype.getLastUpdateTimeSinceEpoch = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 8, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.setLastUpdateTimeSinceEpoch = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Context} returns this + */ +proto.ml_metadata.Context.prototype.clearLastUpdateTimeSinceEpoch = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Context.prototype.hasLastUpdateTimeSinceEpoch = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.Attribution.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.Attribution.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.Attribution} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Attribution.toObject = function(includeInstance, msg) { + var f, obj = { + artifactId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + contextId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.Attribution} + */ +proto.ml_metadata.Attribution.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.Attribution; + return proto.ml_metadata.Attribution.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.Attribution} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.Attribution} + */ +proto.ml_metadata.Attribution.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setArtifactId(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt64()); + msg.setContextId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.Attribution.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.Attribution.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.Attribution} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Attribution.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeInt64( + 2, + f + ); + } +}; + + +/** + * optional int64 artifact_id = 1; + * @return {number} + */ +proto.ml_metadata.Attribution.prototype.getArtifactId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Attribution} returns this + */ +proto.ml_metadata.Attribution.prototype.setArtifactId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Attribution} returns this + */ +proto.ml_metadata.Attribution.prototype.clearArtifactId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Attribution.prototype.hasArtifactId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional int64 context_id = 2; + * @return {number} + */ +proto.ml_metadata.Attribution.prototype.getContextId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Attribution} returns this + */ +proto.ml_metadata.Attribution.prototype.setContextId = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Attribution} returns this + */ +proto.ml_metadata.Attribution.prototype.clearContextId = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Attribution.prototype.hasContextId = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.Association.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.Association.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.Association} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Association.toObject = function(includeInstance, msg) { + var f, obj = { + executionId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + contextId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.Association} + */ +proto.ml_metadata.Association.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.Association; + return proto.ml_metadata.Association.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.Association} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.Association} + */ +proto.ml_metadata.Association.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setExecutionId(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt64()); + msg.setContextId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.Association.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.Association.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.Association} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.Association.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeInt64( + 2, + f + ); + } +}; + + +/** + * optional int64 execution_id = 1; + * @return {number} + */ +proto.ml_metadata.Association.prototype.getExecutionId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Association} returns this + */ +proto.ml_metadata.Association.prototype.setExecutionId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Association} returns this + */ +proto.ml_metadata.Association.prototype.clearExecutionId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Association.prototype.hasExecutionId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional int64 context_id = 2; + * @return {number} + */ +proto.ml_metadata.Association.prototype.getContextId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.Association} returns this + */ +proto.ml_metadata.Association.prototype.setContextId = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.Association} returns this + */ +proto.ml_metadata.Association.prototype.clearContextId = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.Association.prototype.hasContextId = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ParentContext.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ParentContext.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ParentContext} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ParentContext.toObject = function(includeInstance, msg) { + var f, obj = { + childId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + parentId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ParentContext} + */ +proto.ml_metadata.ParentContext.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ParentContext; + return proto.ml_metadata.ParentContext.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ParentContext} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ParentContext} + */ +proto.ml_metadata.ParentContext.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setChildId(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt64()); + msg.setParentId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ParentContext.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ParentContext.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ParentContext} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ParentContext.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeInt64( + 2, + f + ); + } +}; + + +/** + * optional int64 child_id = 1; + * @return {number} + */ +proto.ml_metadata.ParentContext.prototype.getChildId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.ParentContext} returns this + */ +proto.ml_metadata.ParentContext.prototype.setChildId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ParentContext} returns this + */ +proto.ml_metadata.ParentContext.prototype.clearChildId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ParentContext.prototype.hasChildId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional int64 parent_id = 2; + * @return {number} + */ +proto.ml_metadata.ParentContext.prototype.getParentId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.ParentContext} returns this + */ +proto.ml_metadata.ParentContext.prototype.setParentId = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ParentContext} returns this + */ +proto.ml_metadata.ParentContext.prototype.clearParentId = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ParentContext.prototype.hasParentId = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.LineageGraph.repeatedFields_ = [1,2,3,4,5,6,7,8,9]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.LineageGraph.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.LineageGraph.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.LineageGraph} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.LineageGraph.toObject = function(includeInstance, msg) { + var f, obj = { + artifactTypesList: jspb.Message.toObjectList(msg.getArtifactTypesList(), + proto.ml_metadata.ArtifactType.toObject, includeInstance), + executionTypesList: jspb.Message.toObjectList(msg.getExecutionTypesList(), + proto.ml_metadata.ExecutionType.toObject, includeInstance), + contextTypesList: jspb.Message.toObjectList(msg.getContextTypesList(), + proto.ml_metadata.ContextType.toObject, includeInstance), + artifactsList: jspb.Message.toObjectList(msg.getArtifactsList(), + proto.ml_metadata.Artifact.toObject, includeInstance), + executionsList: jspb.Message.toObjectList(msg.getExecutionsList(), + proto.ml_metadata.Execution.toObject, includeInstance), + contextsList: jspb.Message.toObjectList(msg.getContextsList(), + proto.ml_metadata.Context.toObject, includeInstance), + eventsList: jspb.Message.toObjectList(msg.getEventsList(), + proto.ml_metadata.Event.toObject, includeInstance), + attributionsList: jspb.Message.toObjectList(msg.getAttributionsList(), + proto.ml_metadata.Attribution.toObject, includeInstance), + associationsList: jspb.Message.toObjectList(msg.getAssociationsList(), + proto.ml_metadata.Association.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.LineageGraph} + */ +proto.ml_metadata.LineageGraph.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.LineageGraph; + return proto.ml_metadata.LineageGraph.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.LineageGraph} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.LineageGraph} + */ +proto.ml_metadata.LineageGraph.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_metadata.ArtifactType; + reader.readMessage(value,proto.ml_metadata.ArtifactType.deserializeBinaryFromReader); + msg.addArtifactTypes(value); + break; + case 2: + var value = new proto.ml_metadata.ExecutionType; + reader.readMessage(value,proto.ml_metadata.ExecutionType.deserializeBinaryFromReader); + msg.addExecutionTypes(value); + break; + case 3: + var value = new proto.ml_metadata.ContextType; + reader.readMessage(value,proto.ml_metadata.ContextType.deserializeBinaryFromReader); + msg.addContextTypes(value); + break; + case 4: + var value = new proto.ml_metadata.Artifact; + reader.readMessage(value,proto.ml_metadata.Artifact.deserializeBinaryFromReader); + msg.addArtifacts(value); + break; + case 5: + var value = new proto.ml_metadata.Execution; + reader.readMessage(value,proto.ml_metadata.Execution.deserializeBinaryFromReader); + msg.addExecutions(value); + break; + case 6: + var value = new proto.ml_metadata.Context; + reader.readMessage(value,proto.ml_metadata.Context.deserializeBinaryFromReader); + msg.addContexts(value); + break; + case 7: + var value = new proto.ml_metadata.Event; + reader.readMessage(value,proto.ml_metadata.Event.deserializeBinaryFromReader); + msg.addEvents(value); + break; + case 8: + var value = new proto.ml_metadata.Attribution; + reader.readMessage(value,proto.ml_metadata.Attribution.deserializeBinaryFromReader); + msg.addAttributions(value); + break; + case 9: + var value = new proto.ml_metadata.Association; + reader.readMessage(value,proto.ml_metadata.Association.deserializeBinaryFromReader); + msg.addAssociations(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.LineageGraph.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.LineageGraph.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.LineageGraph} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.LineageGraph.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactTypesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.ml_metadata.ArtifactType.serializeBinaryToWriter + ); + } + f = message.getExecutionTypesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + proto.ml_metadata.ExecutionType.serializeBinaryToWriter + ); + } + f = message.getContextTypesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 3, + f, + proto.ml_metadata.ContextType.serializeBinaryToWriter + ); + } + f = message.getArtifactsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 4, + f, + proto.ml_metadata.Artifact.serializeBinaryToWriter + ); + } + f = message.getExecutionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 5, + f, + proto.ml_metadata.Execution.serializeBinaryToWriter + ); + } + f = message.getContextsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 6, + f, + proto.ml_metadata.Context.serializeBinaryToWriter + ); + } + f = message.getEventsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 7, + f, + proto.ml_metadata.Event.serializeBinaryToWriter + ); + } + f = message.getAttributionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 8, + f, + proto.ml_metadata.Attribution.serializeBinaryToWriter + ); + } + f = message.getAssociationsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 9, + f, + proto.ml_metadata.Association.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ArtifactType artifact_types = 1; + * @return {!Array} + */ +proto.ml_metadata.LineageGraph.prototype.getArtifactTypesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.ArtifactType, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.LineageGraph} returns this +*/ +proto.ml_metadata.LineageGraph.prototype.setArtifactTypesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.ArtifactType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ArtifactType} + */ +proto.ml_metadata.LineageGraph.prototype.addArtifactTypes = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ArtifactType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.LineageGraph} returns this + */ +proto.ml_metadata.LineageGraph.prototype.clearArtifactTypesList = function() { + return this.setArtifactTypesList([]); +}; + + +/** + * repeated ExecutionType execution_types = 2; + * @return {!Array} + */ +proto.ml_metadata.LineageGraph.prototype.getExecutionTypesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.ExecutionType, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.LineageGraph} returns this +*/ +proto.ml_metadata.LineageGraph.prototype.setExecutionTypesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.ml_metadata.ExecutionType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ExecutionType} + */ +proto.ml_metadata.LineageGraph.prototype.addExecutionTypes = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.ml_metadata.ExecutionType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.LineageGraph} returns this + */ +proto.ml_metadata.LineageGraph.prototype.clearExecutionTypesList = function() { + return this.setExecutionTypesList([]); +}; + + +/** + * repeated ContextType context_types = 3; + * @return {!Array} + */ +proto.ml_metadata.LineageGraph.prototype.getContextTypesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.ContextType, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.LineageGraph} returns this +*/ +proto.ml_metadata.LineageGraph.prototype.setContextTypesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 3, value); +}; + + +/** + * @param {!proto.ml_metadata.ContextType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ContextType} + */ +proto.ml_metadata.LineageGraph.prototype.addContextTypes = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.ml_metadata.ContextType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.LineageGraph} returns this + */ +proto.ml_metadata.LineageGraph.prototype.clearContextTypesList = function() { + return this.setContextTypesList([]); +}; + + +/** + * repeated Artifact artifacts = 4; + * @return {!Array} + */ +proto.ml_metadata.LineageGraph.prototype.getArtifactsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.Artifact, 4)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.LineageGraph} returns this +*/ +proto.ml_metadata.LineageGraph.prototype.setArtifactsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 4, value); +}; + + +/** + * @param {!proto.ml_metadata.Artifact=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Artifact} + */ +proto.ml_metadata.LineageGraph.prototype.addArtifacts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 4, opt_value, proto.ml_metadata.Artifact, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.LineageGraph} returns this + */ +proto.ml_metadata.LineageGraph.prototype.clearArtifactsList = function() { + return this.setArtifactsList([]); +}; + + +/** + * repeated Execution executions = 5; + * @return {!Array} + */ +proto.ml_metadata.LineageGraph.prototype.getExecutionsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.Execution, 5)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.LineageGraph} returns this +*/ +proto.ml_metadata.LineageGraph.prototype.setExecutionsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 5, value); +}; + + +/** + * @param {!proto.ml_metadata.Execution=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Execution} + */ +proto.ml_metadata.LineageGraph.prototype.addExecutions = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 5, opt_value, proto.ml_metadata.Execution, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.LineageGraph} returns this + */ +proto.ml_metadata.LineageGraph.prototype.clearExecutionsList = function() { + return this.setExecutionsList([]); +}; + + +/** + * repeated Context contexts = 6; + * @return {!Array} + */ +proto.ml_metadata.LineageGraph.prototype.getContextsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.Context, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.LineageGraph} returns this +*/ +proto.ml_metadata.LineageGraph.prototype.setContextsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 6, value); +}; + + +/** + * @param {!proto.ml_metadata.Context=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Context} + */ +proto.ml_metadata.LineageGraph.prototype.addContexts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 6, opt_value, proto.ml_metadata.Context, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.LineageGraph} returns this + */ +proto.ml_metadata.LineageGraph.prototype.clearContextsList = function() { + return this.setContextsList([]); +}; + + +/** + * repeated Event events = 7; + * @return {!Array} + */ +proto.ml_metadata.LineageGraph.prototype.getEventsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.Event, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.LineageGraph} returns this +*/ +proto.ml_metadata.LineageGraph.prototype.setEventsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 7, value); +}; + + +/** + * @param {!proto.ml_metadata.Event=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Event} + */ +proto.ml_metadata.LineageGraph.prototype.addEvents = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 7, opt_value, proto.ml_metadata.Event, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.LineageGraph} returns this + */ +proto.ml_metadata.LineageGraph.prototype.clearEventsList = function() { + return this.setEventsList([]); +}; + + +/** + * repeated Attribution attributions = 8; + * @return {!Array} + */ +proto.ml_metadata.LineageGraph.prototype.getAttributionsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.Attribution, 8)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.LineageGraph} returns this +*/ +proto.ml_metadata.LineageGraph.prototype.setAttributionsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 8, value); +}; + + +/** + * @param {!proto.ml_metadata.Attribution=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Attribution} + */ +proto.ml_metadata.LineageGraph.prototype.addAttributions = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 8, opt_value, proto.ml_metadata.Attribution, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.LineageGraph} returns this + */ +proto.ml_metadata.LineageGraph.prototype.clearAttributionsList = function() { + return this.setAttributionsList([]); +}; + + +/** + * repeated Association associations = 9; + * @return {!Array} + */ +proto.ml_metadata.LineageGraph.prototype.getAssociationsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.Association, 9)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.LineageGraph} returns this +*/ +proto.ml_metadata.LineageGraph.prototype.setAssociationsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 9, value); +}; + + +/** + * @param {!proto.ml_metadata.Association=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Association} + */ +proto.ml_metadata.LineageGraph.prototype.addAssociations = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 9, opt_value, proto.ml_metadata.Association, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.LineageGraph} returns this + */ +proto.ml_metadata.LineageGraph.prototype.clearAssociationsList = function() { + return this.setAssociationsList([]); +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.ml_metadata.ArtifactStructType.oneofGroups_ = [[1,2,3,4,5,6,7,8]]; + +/** + * @enum {number} + */ +proto.ml_metadata.ArtifactStructType.KindCase = { + KIND_NOT_SET: 0, + SIMPLE: 1, + UNION_TYPE: 2, + INTERSECTION: 3, + LIST: 4, + NONE: 5, + ANY: 6, + TUPLE: 7, + DICT: 8 +}; + +/** + * @return {proto.ml_metadata.ArtifactStructType.KindCase} + */ +proto.ml_metadata.ArtifactStructType.prototype.getKindCase = function() { + return /** @type {proto.ml_metadata.ArtifactStructType.KindCase} */(jspb.Message.computeOneofCase(this, proto.ml_metadata.ArtifactStructType.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ArtifactStructType.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ArtifactStructType.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ArtifactStructType} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ArtifactStructType.toObject = function(includeInstance, msg) { + var f, obj = { + simple: (f = msg.getSimple()) && proto.ml_metadata.ArtifactType.toObject(includeInstance, f), + unionType: (f = msg.getUnionType()) && proto.ml_metadata.UnionArtifactStructType.toObject(includeInstance, f), + intersection: (f = msg.getIntersection()) && proto.ml_metadata.IntersectionArtifactStructType.toObject(includeInstance, f), + list: (f = msg.getList()) && proto.ml_metadata.ListArtifactStructType.toObject(includeInstance, f), + none: (f = msg.getNone()) && proto.ml_metadata.NoneArtifactStructType.toObject(includeInstance, f), + any: (f = msg.getAny()) && proto.ml_metadata.AnyArtifactStructType.toObject(includeInstance, f), + tuple: (f = msg.getTuple()) && proto.ml_metadata.TupleArtifactStructType.toObject(includeInstance, f), + dict: (f = msg.getDict()) && proto.ml_metadata.DictArtifactStructType.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ArtifactStructType} + */ +proto.ml_metadata.ArtifactStructType.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ArtifactStructType; + return proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ArtifactStructType} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ArtifactStructType} + */ +proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_metadata.ArtifactType; + reader.readMessage(value,proto.ml_metadata.ArtifactType.deserializeBinaryFromReader); + msg.setSimple(value); + break; + case 2: + var value = new proto.ml_metadata.UnionArtifactStructType; + reader.readMessage(value,proto.ml_metadata.UnionArtifactStructType.deserializeBinaryFromReader); + msg.setUnionType(value); + break; + case 3: + var value = new proto.ml_metadata.IntersectionArtifactStructType; + reader.readMessage(value,proto.ml_metadata.IntersectionArtifactStructType.deserializeBinaryFromReader); + msg.setIntersection(value); + break; + case 4: + var value = new proto.ml_metadata.ListArtifactStructType; + reader.readMessage(value,proto.ml_metadata.ListArtifactStructType.deserializeBinaryFromReader); + msg.setList(value); + break; + case 5: + var value = new proto.ml_metadata.NoneArtifactStructType; + reader.readMessage(value,proto.ml_metadata.NoneArtifactStructType.deserializeBinaryFromReader); + msg.setNone(value); + break; + case 6: + var value = new proto.ml_metadata.AnyArtifactStructType; + reader.readMessage(value,proto.ml_metadata.AnyArtifactStructType.deserializeBinaryFromReader); + msg.setAny(value); + break; + case 7: + var value = new proto.ml_metadata.TupleArtifactStructType; + reader.readMessage(value,proto.ml_metadata.TupleArtifactStructType.deserializeBinaryFromReader); + msg.setTuple(value); + break; + case 8: + var value = new proto.ml_metadata.DictArtifactStructType; + reader.readMessage(value,proto.ml_metadata.DictArtifactStructType.deserializeBinaryFromReader); + msg.setDict(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ArtifactStructType.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ArtifactStructType} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSimple(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_metadata.ArtifactType.serializeBinaryToWriter + ); + } + f = message.getUnionType(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_metadata.UnionArtifactStructType.serializeBinaryToWriter + ); + } + f = message.getIntersection(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.ml_metadata.IntersectionArtifactStructType.serializeBinaryToWriter + ); + } + f = message.getList(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.ml_metadata.ListArtifactStructType.serializeBinaryToWriter + ); + } + f = message.getNone(); + if (f != null) { + writer.writeMessage( + 5, + f, + proto.ml_metadata.NoneArtifactStructType.serializeBinaryToWriter + ); + } + f = message.getAny(); + if (f != null) { + writer.writeMessage( + 6, + f, + proto.ml_metadata.AnyArtifactStructType.serializeBinaryToWriter + ); + } + f = message.getTuple(); + if (f != null) { + writer.writeMessage( + 7, + f, + proto.ml_metadata.TupleArtifactStructType.serializeBinaryToWriter + ); + } + f = message.getDict(); + if (f != null) { + writer.writeMessage( + 8, + f, + proto.ml_metadata.DictArtifactStructType.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ArtifactType simple = 1; + * @return {?proto.ml_metadata.ArtifactType} + */ +proto.ml_metadata.ArtifactStructType.prototype.getSimple = function() { + return /** @type{?proto.ml_metadata.ArtifactType} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.ArtifactType, 1)); +}; + + +/** + * @param {?proto.ml_metadata.ArtifactType|undefined} value + * @return {!proto.ml_metadata.ArtifactStructType} returns this +*/ +proto.ml_metadata.ArtifactStructType.prototype.setSimple = function(value) { + return jspb.Message.setOneofWrapperField(this, 1, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ArtifactStructType} returns this + */ +proto.ml_metadata.ArtifactStructType.prototype.clearSimple = function() { + return this.setSimple(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactStructType.prototype.hasSimple = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional UnionArtifactStructType union_type = 2; + * @return {?proto.ml_metadata.UnionArtifactStructType} + */ +proto.ml_metadata.ArtifactStructType.prototype.getUnionType = function() { + return /** @type{?proto.ml_metadata.UnionArtifactStructType} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.UnionArtifactStructType, 2)); +}; + + +/** + * @param {?proto.ml_metadata.UnionArtifactStructType|undefined} value + * @return {!proto.ml_metadata.ArtifactStructType} returns this +*/ +proto.ml_metadata.ArtifactStructType.prototype.setUnionType = function(value) { + return jspb.Message.setOneofWrapperField(this, 2, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ArtifactStructType} returns this + */ +proto.ml_metadata.ArtifactStructType.prototype.clearUnionType = function() { + return this.setUnionType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactStructType.prototype.hasUnionType = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional IntersectionArtifactStructType intersection = 3; + * @return {?proto.ml_metadata.IntersectionArtifactStructType} + */ +proto.ml_metadata.ArtifactStructType.prototype.getIntersection = function() { + return /** @type{?proto.ml_metadata.IntersectionArtifactStructType} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.IntersectionArtifactStructType, 3)); +}; + + +/** + * @param {?proto.ml_metadata.IntersectionArtifactStructType|undefined} value + * @return {!proto.ml_metadata.ArtifactStructType} returns this +*/ +proto.ml_metadata.ArtifactStructType.prototype.setIntersection = function(value) { + return jspb.Message.setOneofWrapperField(this, 3, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ArtifactStructType} returns this + */ +proto.ml_metadata.ArtifactStructType.prototype.clearIntersection = function() { + return this.setIntersection(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactStructType.prototype.hasIntersection = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional ListArtifactStructType list = 4; + * @return {?proto.ml_metadata.ListArtifactStructType} + */ +proto.ml_metadata.ArtifactStructType.prototype.getList = function() { + return /** @type{?proto.ml_metadata.ListArtifactStructType} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.ListArtifactStructType, 4)); +}; + + +/** + * @param {?proto.ml_metadata.ListArtifactStructType|undefined} value + * @return {!proto.ml_metadata.ArtifactStructType} returns this +*/ +proto.ml_metadata.ArtifactStructType.prototype.setList = function(value) { + return jspb.Message.setOneofWrapperField(this, 4, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ArtifactStructType} returns this + */ +proto.ml_metadata.ArtifactStructType.prototype.clearList = function() { + return this.setList(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactStructType.prototype.hasList = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional NoneArtifactStructType none = 5; + * @return {?proto.ml_metadata.NoneArtifactStructType} + */ +proto.ml_metadata.ArtifactStructType.prototype.getNone = function() { + return /** @type{?proto.ml_metadata.NoneArtifactStructType} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.NoneArtifactStructType, 5)); +}; + + +/** + * @param {?proto.ml_metadata.NoneArtifactStructType|undefined} value + * @return {!proto.ml_metadata.ArtifactStructType} returns this +*/ +proto.ml_metadata.ArtifactStructType.prototype.setNone = function(value) { + return jspb.Message.setOneofWrapperField(this, 5, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ArtifactStructType} returns this + */ +proto.ml_metadata.ArtifactStructType.prototype.clearNone = function() { + return this.setNone(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactStructType.prototype.hasNone = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional AnyArtifactStructType any = 6; + * @return {?proto.ml_metadata.AnyArtifactStructType} + */ +proto.ml_metadata.ArtifactStructType.prototype.getAny = function() { + return /** @type{?proto.ml_metadata.AnyArtifactStructType} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.AnyArtifactStructType, 6)); +}; + + +/** + * @param {?proto.ml_metadata.AnyArtifactStructType|undefined} value + * @return {!proto.ml_metadata.ArtifactStructType} returns this +*/ +proto.ml_metadata.ArtifactStructType.prototype.setAny = function(value) { + return jspb.Message.setOneofWrapperField(this, 6, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ArtifactStructType} returns this + */ +proto.ml_metadata.ArtifactStructType.prototype.clearAny = function() { + return this.setAny(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactStructType.prototype.hasAny = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional TupleArtifactStructType tuple = 7; + * @return {?proto.ml_metadata.TupleArtifactStructType} + */ +proto.ml_metadata.ArtifactStructType.prototype.getTuple = function() { + return /** @type{?proto.ml_metadata.TupleArtifactStructType} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.TupleArtifactStructType, 7)); +}; + + +/** + * @param {?proto.ml_metadata.TupleArtifactStructType|undefined} value + * @return {!proto.ml_metadata.ArtifactStructType} returns this +*/ +proto.ml_metadata.ArtifactStructType.prototype.setTuple = function(value) { + return jspb.Message.setOneofWrapperField(this, 7, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ArtifactStructType} returns this + */ +proto.ml_metadata.ArtifactStructType.prototype.clearTuple = function() { + return this.setTuple(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactStructType.prototype.hasTuple = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * optional DictArtifactStructType dict = 8; + * @return {?proto.ml_metadata.DictArtifactStructType} + */ +proto.ml_metadata.ArtifactStructType.prototype.getDict = function() { + return /** @type{?proto.ml_metadata.DictArtifactStructType} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.DictArtifactStructType, 8)); +}; + + +/** + * @param {?proto.ml_metadata.DictArtifactStructType|undefined} value + * @return {!proto.ml_metadata.ArtifactStructType} returns this +*/ +proto.ml_metadata.ArtifactStructType.prototype.setDict = function(value) { + return jspb.Message.setOneofWrapperField(this, 8, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ArtifactStructType} returns this + */ +proto.ml_metadata.ArtifactStructType.prototype.clearDict = function() { + return this.setDict(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactStructType.prototype.hasDict = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.UnionArtifactStructType.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.UnionArtifactStructType.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.UnionArtifactStructType.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.UnionArtifactStructType} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.UnionArtifactStructType.toObject = function(includeInstance, msg) { + var f, obj = { + candidatesList: jspb.Message.toObjectList(msg.getCandidatesList(), + proto.ml_metadata.ArtifactStructType.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.UnionArtifactStructType} + */ +proto.ml_metadata.UnionArtifactStructType.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.UnionArtifactStructType; + return proto.ml_metadata.UnionArtifactStructType.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.UnionArtifactStructType} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.UnionArtifactStructType} + */ +proto.ml_metadata.UnionArtifactStructType.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_metadata.ArtifactStructType; + reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader); + msg.addCandidates(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.UnionArtifactStructType.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.UnionArtifactStructType.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.UnionArtifactStructType} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.UnionArtifactStructType.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getCandidatesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ArtifactStructType candidates = 1; + * @return {!Array} + */ +proto.ml_metadata.UnionArtifactStructType.prototype.getCandidatesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.ArtifactStructType, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.UnionArtifactStructType} returns this +*/ +proto.ml_metadata.UnionArtifactStructType.prototype.setCandidatesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.ArtifactStructType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ArtifactStructType} + */ +proto.ml_metadata.UnionArtifactStructType.prototype.addCandidates = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ArtifactStructType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.UnionArtifactStructType} returns this + */ +proto.ml_metadata.UnionArtifactStructType.prototype.clearCandidatesList = function() { + return this.setCandidatesList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.IntersectionArtifactStructType.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.IntersectionArtifactStructType.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.IntersectionArtifactStructType.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.IntersectionArtifactStructType} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.IntersectionArtifactStructType.toObject = function(includeInstance, msg) { + var f, obj = { + constraintsList: jspb.Message.toObjectList(msg.getConstraintsList(), + proto.ml_metadata.ArtifactStructType.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.IntersectionArtifactStructType} + */ +proto.ml_metadata.IntersectionArtifactStructType.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.IntersectionArtifactStructType; + return proto.ml_metadata.IntersectionArtifactStructType.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.IntersectionArtifactStructType} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.IntersectionArtifactStructType} + */ +proto.ml_metadata.IntersectionArtifactStructType.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_metadata.ArtifactStructType; + reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader); + msg.addConstraints(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.IntersectionArtifactStructType.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.IntersectionArtifactStructType.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.IntersectionArtifactStructType} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.IntersectionArtifactStructType.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getConstraintsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ArtifactStructType constraints = 1; + * @return {!Array} + */ +proto.ml_metadata.IntersectionArtifactStructType.prototype.getConstraintsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.ArtifactStructType, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.IntersectionArtifactStructType} returns this +*/ +proto.ml_metadata.IntersectionArtifactStructType.prototype.setConstraintsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.ArtifactStructType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ArtifactStructType} + */ +proto.ml_metadata.IntersectionArtifactStructType.prototype.addConstraints = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ArtifactStructType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.IntersectionArtifactStructType} returns this + */ +proto.ml_metadata.IntersectionArtifactStructType.prototype.clearConstraintsList = function() { + return this.setConstraintsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ListArtifactStructType.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ListArtifactStructType.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ListArtifactStructType} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ListArtifactStructType.toObject = function(includeInstance, msg) { + var f, obj = { + element: (f = msg.getElement()) && proto.ml_metadata.ArtifactStructType.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ListArtifactStructType} + */ +proto.ml_metadata.ListArtifactStructType.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ListArtifactStructType; + return proto.ml_metadata.ListArtifactStructType.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ListArtifactStructType} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ListArtifactStructType} + */ +proto.ml_metadata.ListArtifactStructType.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_metadata.ArtifactStructType; + reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader); + msg.setElement(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ListArtifactStructType.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ListArtifactStructType.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ListArtifactStructType} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ListArtifactStructType.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getElement(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ArtifactStructType element = 1; + * @return {?proto.ml_metadata.ArtifactStructType} + */ +proto.ml_metadata.ListArtifactStructType.prototype.getElement = function() { + return /** @type{?proto.ml_metadata.ArtifactStructType} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.ArtifactStructType, 1)); +}; + + +/** + * @param {?proto.ml_metadata.ArtifactStructType|undefined} value + * @return {!proto.ml_metadata.ListArtifactStructType} returns this +*/ +proto.ml_metadata.ListArtifactStructType.prototype.setElement = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ListArtifactStructType} returns this + */ +proto.ml_metadata.ListArtifactStructType.prototype.clearElement = function() { + return this.setElement(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ListArtifactStructType.prototype.hasElement = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.NoneArtifactStructType.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.NoneArtifactStructType.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.NoneArtifactStructType} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.NoneArtifactStructType.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.NoneArtifactStructType} + */ +proto.ml_metadata.NoneArtifactStructType.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.NoneArtifactStructType; + return proto.ml_metadata.NoneArtifactStructType.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.NoneArtifactStructType} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.NoneArtifactStructType} + */ +proto.ml_metadata.NoneArtifactStructType.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.NoneArtifactStructType.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.NoneArtifactStructType.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.NoneArtifactStructType} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.NoneArtifactStructType.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.AnyArtifactStructType.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.AnyArtifactStructType.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.AnyArtifactStructType} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.AnyArtifactStructType.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.AnyArtifactStructType} + */ +proto.ml_metadata.AnyArtifactStructType.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.AnyArtifactStructType; + return proto.ml_metadata.AnyArtifactStructType.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.AnyArtifactStructType} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.AnyArtifactStructType} + */ +proto.ml_metadata.AnyArtifactStructType.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.AnyArtifactStructType.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.AnyArtifactStructType.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.AnyArtifactStructType} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.AnyArtifactStructType.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.TupleArtifactStructType.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.TupleArtifactStructType.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.TupleArtifactStructType.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.TupleArtifactStructType} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.TupleArtifactStructType.toObject = function(includeInstance, msg) { + var f, obj = { + elementsList: jspb.Message.toObjectList(msg.getElementsList(), + proto.ml_metadata.ArtifactStructType.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.TupleArtifactStructType} + */ +proto.ml_metadata.TupleArtifactStructType.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.TupleArtifactStructType; + return proto.ml_metadata.TupleArtifactStructType.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.TupleArtifactStructType} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.TupleArtifactStructType} + */ +proto.ml_metadata.TupleArtifactStructType.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_metadata.ArtifactStructType; + reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader); + msg.addElements(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.TupleArtifactStructType.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.TupleArtifactStructType.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.TupleArtifactStructType} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.TupleArtifactStructType.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getElementsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ArtifactStructType elements = 1; + * @return {!Array} + */ +proto.ml_metadata.TupleArtifactStructType.prototype.getElementsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.ArtifactStructType, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.TupleArtifactStructType} returns this +*/ +proto.ml_metadata.TupleArtifactStructType.prototype.setElementsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.ArtifactStructType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ArtifactStructType} + */ +proto.ml_metadata.TupleArtifactStructType.prototype.addElements = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ArtifactStructType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.TupleArtifactStructType} returns this + */ +proto.ml_metadata.TupleArtifactStructType.prototype.clearElementsList = function() { + return this.setElementsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.DictArtifactStructType.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.DictArtifactStructType.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.DictArtifactStructType} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.DictArtifactStructType.toObject = function(includeInstance, msg) { + var f, obj = { + propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.ArtifactStructType.toObject) : [], + noneTypeNotRequired: (f = jspb.Message.getBooleanField(msg, 2)) == null ? undefined : f, + extraPropertiesType: (f = msg.getExtraPropertiesType()) && proto.ml_metadata.ArtifactStructType.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.DictArtifactStructType} + */ +proto.ml_metadata.DictArtifactStructType.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.DictArtifactStructType; + return proto.ml_metadata.DictArtifactStructType.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.DictArtifactStructType} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.DictArtifactStructType} + */ +proto.ml_metadata.DictArtifactStructType.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader, "", new proto.ml_metadata.ArtifactStructType()); + }); + break; + case 2: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setNoneTypeNotRequired(value); + break; + case 3: + var value = new proto.ml_metadata.ArtifactStructType; + reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader); + msg.setExtraPropertiesType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.DictArtifactStructType.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.DictArtifactStructType.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.DictArtifactStructType} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.DictArtifactStructType.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeBool( + 2, + f + ); + } + f = message.getExtraPropertiesType(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter + ); + } +}; + + +/** + * map properties = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map} + */ +proto.ml_metadata.DictArtifactStructType.prototype.getPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_metadata.ArtifactStructType)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_metadata.DictArtifactStructType} returns this + */ +proto.ml_metadata.DictArtifactStructType.prototype.clearPropertiesMap = function() { + this.getPropertiesMap().clear(); + return this;}; + + +/** + * optional bool none_type_not_required = 2; + * @return {boolean} + */ +proto.ml_metadata.DictArtifactStructType.prototype.getNoneTypeNotRequired = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.DictArtifactStructType} returns this + */ +proto.ml_metadata.DictArtifactStructType.prototype.setNoneTypeNotRequired = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.DictArtifactStructType} returns this + */ +proto.ml_metadata.DictArtifactStructType.prototype.clearNoneTypeNotRequired = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.DictArtifactStructType.prototype.hasNoneTypeNotRequired = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional ArtifactStructType extra_properties_type = 3; + * @return {?proto.ml_metadata.ArtifactStructType} + */ +proto.ml_metadata.DictArtifactStructType.prototype.getExtraPropertiesType = function() { + return /** @type{?proto.ml_metadata.ArtifactStructType} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.ArtifactStructType, 3)); +}; + + +/** + * @param {?proto.ml_metadata.ArtifactStructType|undefined} value + * @return {!proto.ml_metadata.DictArtifactStructType} returns this +*/ +proto.ml_metadata.DictArtifactStructType.prototype.setExtraPropertiesType = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.DictArtifactStructType} returns this + */ +proto.ml_metadata.DictArtifactStructType.prototype.clearExtraPropertiesType = function() { + return this.setExtraPropertiesType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.DictArtifactStructType.prototype.hasExtraPropertiesType = function() { + return jspb.Message.getField(this, 3) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.FakeDatabaseConfig.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.FakeDatabaseConfig.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.FakeDatabaseConfig} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.FakeDatabaseConfig.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.FakeDatabaseConfig} + */ +proto.ml_metadata.FakeDatabaseConfig.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.FakeDatabaseConfig; + return proto.ml_metadata.FakeDatabaseConfig.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.FakeDatabaseConfig} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.FakeDatabaseConfig} + */ +proto.ml_metadata.FakeDatabaseConfig.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.FakeDatabaseConfig.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.FakeDatabaseConfig.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.FakeDatabaseConfig} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.FakeDatabaseConfig.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.MySQLDatabaseConfig.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.MySQLDatabaseConfig} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MySQLDatabaseConfig.toObject = function(includeInstance, msg) { + var f, obj = { + host: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + port: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + database: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + user: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + password: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + socket: (f = jspb.Message.getField(msg, 6)) == null ? undefined : f, + sslOptions: (f = msg.getSslOptions()) && proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.MySQLDatabaseConfig} + */ +proto.ml_metadata.MySQLDatabaseConfig.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.MySQLDatabaseConfig; + return proto.ml_metadata.MySQLDatabaseConfig.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.MySQLDatabaseConfig} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.MySQLDatabaseConfig} + */ +proto.ml_metadata.MySQLDatabaseConfig.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setHost(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint32()); + msg.setPort(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setDatabase(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setUser(value); + break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setPassword(value); + break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setSocket(value); + break; + case 7: + var value = new proto.ml_metadata.MySQLDatabaseConfig.SSLOptions; + reader.readMessage(value,proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.deserializeBinaryFromReader); + msg.setSslOptions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.MySQLDatabaseConfig.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.MySQLDatabaseConfig} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MySQLDatabaseConfig.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeUint32( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeString( + 4, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeString( + 5, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 6)); + if (f != null) { + writer.writeString( + 6, + f + ); + } + f = message.getSslOptions(); + if (f != null) { + writer.writeMessage( + 7, + f, + proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.toObject = function(includeInstance, msg) { + var f, obj = { + key: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + cert: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + ca: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + capath: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + cipher: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + verifyServerCert: (f = jspb.Message.getBooleanField(msg, 6)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.MySQLDatabaseConfig.SSLOptions; + return proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setKey(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setCert(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setCa(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setCapath(value); + break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setCipher(value); + break; + case 6: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setVerifyServerCert(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeString( + 4, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeString( + 5, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 6)); + if (f != null) { + writer.writeBool( + 6, + f + ); + } +}; + + +/** + * optional string key = 1; + * @return {string} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.getKey = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.setKey = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.clearKey = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.hasKey = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string cert = 2; + * @return {string} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.getCert = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.setCert = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.clearCert = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.hasCert = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string ca = 3; + * @return {string} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.getCa = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.setCa = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.clearCa = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.hasCa = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional string capath = 4; + * @return {string} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.getCapath = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.setCapath = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.clearCapath = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.hasCapath = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional string cipher = 5; + * @return {string} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.getCipher = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.setCipher = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.clearCipher = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.hasCipher = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional bool verify_server_cert = 6; + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.getVerifyServerCert = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 6, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.setVerifyServerCert = function(value) { + return jspb.Message.setField(this, 6, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.clearVerifyServerCert = function() { + return jspb.Message.setField(this, 6, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.SSLOptions.prototype.hasVerifyServerCert = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional string host = 1; + * @return {string} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.getHost = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.setHost = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.clearHost = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.hasHost = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional uint32 port = 2; + * @return {number} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.getPort = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.setPort = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.clearPort = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.hasPort = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string database = 3; + * @return {string} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.getDatabase = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.setDatabase = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.clearDatabase = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.hasDatabase = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional string user = 4; + * @return {string} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.getUser = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.setUser = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.clearUser = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.hasUser = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional string password = 5; + * @return {string} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.getPassword = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.setPassword = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.clearPassword = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.hasPassword = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional string socket = 6; + * @return {string} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.getSocket = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.setSocket = function(value) { + return jspb.Message.setField(this, 6, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.clearSocket = function() { + return jspb.Message.setField(this, 6, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.hasSocket = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional SSLOptions ssl_options = 7; + * @return {?proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.getSslOptions = function() { + return /** @type{?proto.ml_metadata.MySQLDatabaseConfig.SSLOptions} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.MySQLDatabaseConfig.SSLOptions, 7)); +}; + + +/** + * @param {?proto.ml_metadata.MySQLDatabaseConfig.SSLOptions|undefined} value + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this +*/ +proto.ml_metadata.MySQLDatabaseConfig.prototype.setSslOptions = function(value) { + return jspb.Message.setWrapperField(this, 7, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.clearSslOptions = function() { + return this.setSslOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MySQLDatabaseConfig.prototype.hasSslOptions = function() { + return jspb.Message.getField(this, 7) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.SqliteMetadataSourceConfig.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.SqliteMetadataSourceConfig.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.SqliteMetadataSourceConfig} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.SqliteMetadataSourceConfig.toObject = function(includeInstance, msg) { + var f, obj = { + filenameUri: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + connectionMode: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.SqliteMetadataSourceConfig} + */ +proto.ml_metadata.SqliteMetadataSourceConfig.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.SqliteMetadataSourceConfig; + return proto.ml_metadata.SqliteMetadataSourceConfig.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.SqliteMetadataSourceConfig} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.SqliteMetadataSourceConfig} + */ +proto.ml_metadata.SqliteMetadataSourceConfig.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setFilenameUri(value); + break; + case 2: + var value = /** @type {!proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode} */ (reader.readEnum()); + msg.setConnectionMode(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.SqliteMetadataSourceConfig.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.SqliteMetadataSourceConfig.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.SqliteMetadataSourceConfig} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.SqliteMetadataSourceConfig.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {!proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeEnum( + 2, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode = { + UNKNOWN: 0, + READONLY: 1, + READWRITE: 2, + READWRITE_OPENCREATE: 3 +}; + +/** + * optional string filename_uri = 1; + * @return {string} + */ +proto.ml_metadata.SqliteMetadataSourceConfig.prototype.getFilenameUri = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.SqliteMetadataSourceConfig} returns this + */ +proto.ml_metadata.SqliteMetadataSourceConfig.prototype.setFilenameUri = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.SqliteMetadataSourceConfig} returns this + */ +proto.ml_metadata.SqliteMetadataSourceConfig.prototype.clearFilenameUri = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.SqliteMetadataSourceConfig.prototype.hasFilenameUri = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ConnectionMode connection_mode = 2; + * @return {!proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode} + */ +proto.ml_metadata.SqliteMetadataSourceConfig.prototype.getConnectionMode = function() { + return /** @type {!proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {!proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode} value + * @return {!proto.ml_metadata.SqliteMetadataSourceConfig} returns this + */ +proto.ml_metadata.SqliteMetadataSourceConfig.prototype.setConnectionMode = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.SqliteMetadataSourceConfig} returns this + */ +proto.ml_metadata.SqliteMetadataSourceConfig.prototype.clearConnectionMode = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.SqliteMetadataSourceConfig.prototype.hasConnectionMode = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.MigrationOptions.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.MigrationOptions.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.MigrationOptions} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MigrationOptions.toObject = function(includeInstance, msg) { + var f, obj = { + enableUpgradeMigration: (f = jspb.Message.getBooleanField(msg, 3)) == null ? undefined : f, + downgradeToSchemaVersion: jspb.Message.getFieldWithDefault(msg, 2, -1) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.MigrationOptions} + */ +proto.ml_metadata.MigrationOptions.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.MigrationOptions; + return proto.ml_metadata.MigrationOptions.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.MigrationOptions} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.MigrationOptions} + */ +proto.ml_metadata.MigrationOptions.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 3: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setEnableUpgradeMigration(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt64()); + msg.setDowngradeToSchemaVersion(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.MigrationOptions.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.MigrationOptions.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.MigrationOptions} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MigrationOptions.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {boolean} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeBool( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeInt64( + 2, + f + ); + } +}; + + +/** + * optional bool enable_upgrade_migration = 3; + * @return {boolean} + */ +proto.ml_metadata.MigrationOptions.prototype.getEnableUpgradeMigration = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.MigrationOptions} returns this + */ +proto.ml_metadata.MigrationOptions.prototype.setEnableUpgradeMigration = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MigrationOptions} returns this + */ +proto.ml_metadata.MigrationOptions.prototype.clearEnableUpgradeMigration = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MigrationOptions.prototype.hasEnableUpgradeMigration = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional int64 downgrade_to_schema_version = 2; + * @return {number} + */ +proto.ml_metadata.MigrationOptions.prototype.getDowngradeToSchemaVersion = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, -1)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.MigrationOptions} returns this + */ +proto.ml_metadata.MigrationOptions.prototype.setDowngradeToSchemaVersion = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MigrationOptions} returns this + */ +proto.ml_metadata.MigrationOptions.prototype.clearDowngradeToSchemaVersion = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MigrationOptions.prototype.hasDowngradeToSchemaVersion = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.RetryOptions.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.RetryOptions.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.RetryOptions} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.RetryOptions.toObject = function(includeInstance, msg) { + var f, obj = { + maxNumRetries: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.RetryOptions} + */ +proto.ml_metadata.RetryOptions.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.RetryOptions; + return proto.ml_metadata.RetryOptions.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.RetryOptions} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.RetryOptions} + */ +proto.ml_metadata.RetryOptions.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setMaxNumRetries(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.RetryOptions.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.RetryOptions.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.RetryOptions} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.RetryOptions.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } +}; + + +/** + * optional int64 max_num_retries = 1; + * @return {number} + */ +proto.ml_metadata.RetryOptions.prototype.getMaxNumRetries = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.RetryOptions} returns this + */ +proto.ml_metadata.RetryOptions.prototype.setMaxNumRetries = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.RetryOptions} returns this + */ +proto.ml_metadata.RetryOptions.prototype.clearMaxNumRetries = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.RetryOptions.prototype.hasMaxNumRetries = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.ml_metadata.ConnectionConfig.oneofGroups_ = [[1,2,3]]; + +/** + * @enum {number} + */ +proto.ml_metadata.ConnectionConfig.ConfigCase = { + CONFIG_NOT_SET: 0, + FAKE_DATABASE: 1, + MYSQL: 2, + SQLITE: 3 +}; + +/** + * @return {proto.ml_metadata.ConnectionConfig.ConfigCase} + */ +proto.ml_metadata.ConnectionConfig.prototype.getConfigCase = function() { + return /** @type {proto.ml_metadata.ConnectionConfig.ConfigCase} */(jspb.Message.computeOneofCase(this, proto.ml_metadata.ConnectionConfig.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ConnectionConfig.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ConnectionConfig.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ConnectionConfig} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ConnectionConfig.toObject = function(includeInstance, msg) { + var f, obj = { + fakeDatabase: (f = msg.getFakeDatabase()) && proto.ml_metadata.FakeDatabaseConfig.toObject(includeInstance, f), + mysql: (f = msg.getMysql()) && proto.ml_metadata.MySQLDatabaseConfig.toObject(includeInstance, f), + sqlite: (f = msg.getSqlite()) && proto.ml_metadata.SqliteMetadataSourceConfig.toObject(includeInstance, f), + retryOptions: (f = msg.getRetryOptions()) && proto.ml_metadata.RetryOptions.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ConnectionConfig} + */ +proto.ml_metadata.ConnectionConfig.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ConnectionConfig; + return proto.ml_metadata.ConnectionConfig.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ConnectionConfig} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ConnectionConfig} + */ +proto.ml_metadata.ConnectionConfig.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_metadata.FakeDatabaseConfig; + reader.readMessage(value,proto.ml_metadata.FakeDatabaseConfig.deserializeBinaryFromReader); + msg.setFakeDatabase(value); + break; + case 2: + var value = new proto.ml_metadata.MySQLDatabaseConfig; + reader.readMessage(value,proto.ml_metadata.MySQLDatabaseConfig.deserializeBinaryFromReader); + msg.setMysql(value); + break; + case 3: + var value = new proto.ml_metadata.SqliteMetadataSourceConfig; + reader.readMessage(value,proto.ml_metadata.SqliteMetadataSourceConfig.deserializeBinaryFromReader); + msg.setSqlite(value); + break; + case 4: + var value = new proto.ml_metadata.RetryOptions; + reader.readMessage(value,proto.ml_metadata.RetryOptions.deserializeBinaryFromReader); + msg.setRetryOptions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ConnectionConfig.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ConnectionConfig.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ConnectionConfig} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ConnectionConfig.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getFakeDatabase(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_metadata.FakeDatabaseConfig.serializeBinaryToWriter + ); + } + f = message.getMysql(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_metadata.MySQLDatabaseConfig.serializeBinaryToWriter + ); + } + f = message.getSqlite(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.ml_metadata.SqliteMetadataSourceConfig.serializeBinaryToWriter + ); + } + f = message.getRetryOptions(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.ml_metadata.RetryOptions.serializeBinaryToWriter + ); + } +}; + + +/** + * optional FakeDatabaseConfig fake_database = 1; + * @return {?proto.ml_metadata.FakeDatabaseConfig} + */ +proto.ml_metadata.ConnectionConfig.prototype.getFakeDatabase = function() { + return /** @type{?proto.ml_metadata.FakeDatabaseConfig} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.FakeDatabaseConfig, 1)); +}; + + +/** + * @param {?proto.ml_metadata.FakeDatabaseConfig|undefined} value + * @return {!proto.ml_metadata.ConnectionConfig} returns this +*/ +proto.ml_metadata.ConnectionConfig.prototype.setFakeDatabase = function(value) { + return jspb.Message.setOneofWrapperField(this, 1, proto.ml_metadata.ConnectionConfig.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ConnectionConfig} returns this + */ +proto.ml_metadata.ConnectionConfig.prototype.clearFakeDatabase = function() { + return this.setFakeDatabase(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ConnectionConfig.prototype.hasFakeDatabase = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional MySQLDatabaseConfig mysql = 2; + * @return {?proto.ml_metadata.MySQLDatabaseConfig} + */ +proto.ml_metadata.ConnectionConfig.prototype.getMysql = function() { + return /** @type{?proto.ml_metadata.MySQLDatabaseConfig} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.MySQLDatabaseConfig, 2)); +}; + + +/** + * @param {?proto.ml_metadata.MySQLDatabaseConfig|undefined} value + * @return {!proto.ml_metadata.ConnectionConfig} returns this +*/ +proto.ml_metadata.ConnectionConfig.prototype.setMysql = function(value) { + return jspb.Message.setOneofWrapperField(this, 2, proto.ml_metadata.ConnectionConfig.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ConnectionConfig} returns this + */ +proto.ml_metadata.ConnectionConfig.prototype.clearMysql = function() { + return this.setMysql(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ConnectionConfig.prototype.hasMysql = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional SqliteMetadataSourceConfig sqlite = 3; + * @return {?proto.ml_metadata.SqliteMetadataSourceConfig} + */ +proto.ml_metadata.ConnectionConfig.prototype.getSqlite = function() { + return /** @type{?proto.ml_metadata.SqliteMetadataSourceConfig} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.SqliteMetadataSourceConfig, 3)); +}; + + +/** + * @param {?proto.ml_metadata.SqliteMetadataSourceConfig|undefined} value + * @return {!proto.ml_metadata.ConnectionConfig} returns this +*/ +proto.ml_metadata.ConnectionConfig.prototype.setSqlite = function(value) { + return jspb.Message.setOneofWrapperField(this, 3, proto.ml_metadata.ConnectionConfig.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ConnectionConfig} returns this + */ +proto.ml_metadata.ConnectionConfig.prototype.clearSqlite = function() { + return this.setSqlite(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ConnectionConfig.prototype.hasSqlite = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional RetryOptions retry_options = 4; + * @return {?proto.ml_metadata.RetryOptions} + */ +proto.ml_metadata.ConnectionConfig.prototype.getRetryOptions = function() { + return /** @type{?proto.ml_metadata.RetryOptions} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.RetryOptions, 4)); +}; + + +/** + * @param {?proto.ml_metadata.RetryOptions|undefined} value + * @return {!proto.ml_metadata.ConnectionConfig} returns this +*/ +proto.ml_metadata.ConnectionConfig.prototype.setRetryOptions = function(value) { + return jspb.Message.setWrapperField(this, 4, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ConnectionConfig} returns this + */ +proto.ml_metadata.ConnectionConfig.prototype.clearRetryOptions = function() { + return this.setRetryOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ConnectionConfig.prototype.hasRetryOptions = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GrpcChannelArguments.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GrpcChannelArguments.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GrpcChannelArguments} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GrpcChannelArguments.toObject = function(includeInstance, msg) { + var f, obj = { + maxReceiveMessageLength: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GrpcChannelArguments} + */ +proto.ml_metadata.GrpcChannelArguments.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GrpcChannelArguments; + return proto.ml_metadata.GrpcChannelArguments.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GrpcChannelArguments} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GrpcChannelArguments} + */ +proto.ml_metadata.GrpcChannelArguments.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setMaxReceiveMessageLength(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GrpcChannelArguments.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GrpcChannelArguments.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GrpcChannelArguments} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GrpcChannelArguments.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } +}; + + +/** + * optional int64 max_receive_message_length = 1; + * @return {number} + */ +proto.ml_metadata.GrpcChannelArguments.prototype.getMaxReceiveMessageLength = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.GrpcChannelArguments} returns this + */ +proto.ml_metadata.GrpcChannelArguments.prototype.setMaxReceiveMessageLength = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GrpcChannelArguments} returns this + */ +proto.ml_metadata.GrpcChannelArguments.prototype.clearMaxReceiveMessageLength = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GrpcChannelArguments.prototype.hasMaxReceiveMessageLength = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.MetadataStoreClientConfig.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.MetadataStoreClientConfig} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MetadataStoreClientConfig.toObject = function(includeInstance, msg) { + var f, obj = { + host: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + port: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + sslConfig: (f = msg.getSslConfig()) && proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.toObject(includeInstance, f), + channelArguments: (f = msg.getChannelArguments()) && proto.ml_metadata.GrpcChannelArguments.toObject(includeInstance, f), + clientTimeoutSec: (f = jspb.Message.getOptionalFloatingPointField(msg, 5)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.MetadataStoreClientConfig} + */ +proto.ml_metadata.MetadataStoreClientConfig.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.MetadataStoreClientConfig; + return proto.ml_metadata.MetadataStoreClientConfig.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.MetadataStoreClientConfig} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.MetadataStoreClientConfig} + */ +proto.ml_metadata.MetadataStoreClientConfig.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setHost(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint32()); + msg.setPort(value); + break; + case 3: + var value = new proto.ml_metadata.MetadataStoreClientConfig.SSLConfig; + reader.readMessage(value,proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.deserializeBinaryFromReader); + msg.setSslConfig(value); + break; + case 4: + var value = new proto.ml_metadata.GrpcChannelArguments; + reader.readMessage(value,proto.ml_metadata.GrpcChannelArguments.deserializeBinaryFromReader); + msg.setChannelArguments(value); + break; + case 5: + var value = /** @type {number} */ (reader.readDouble()); + msg.setClientTimeoutSec(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.MetadataStoreClientConfig.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.MetadataStoreClientConfig} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MetadataStoreClientConfig.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeUint32( + 2, + f + ); + } + f = message.getSslConfig(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.serializeBinaryToWriter + ); + } + f = message.getChannelArguments(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.ml_metadata.GrpcChannelArguments.serializeBinaryToWriter + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeDouble( + 5, + f + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.MetadataStoreClientConfig.SSLConfig} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.toObject = function(includeInstance, msg) { + var f, obj = { + clientKey: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + serverCert: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + customCa: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.MetadataStoreClientConfig.SSLConfig} + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.MetadataStoreClientConfig.SSLConfig; + return proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.MetadataStoreClientConfig.SSLConfig} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.MetadataStoreClientConfig.SSLConfig} + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setClientKey(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setServerCert(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setCustomCa(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.MetadataStoreClientConfig.SSLConfig} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * optional string client_key = 1; + * @return {string} + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.getClientKey = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MetadataStoreClientConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.setClientKey = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreClientConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.clearClientKey = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.hasClientKey = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string server_cert = 2; + * @return {string} + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.getServerCert = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MetadataStoreClientConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.setServerCert = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreClientConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.clearServerCert = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.hasServerCert = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string custom_ca = 3; + * @return {string} + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.getCustomCa = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MetadataStoreClientConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.setCustomCa = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreClientConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.clearCustomCa = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreClientConfig.SSLConfig.prototype.hasCustomCa = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional string host = 1; + * @return {string} + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.getHost = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MetadataStoreClientConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.setHost = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreClientConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.clearHost = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.hasHost = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional uint32 port = 2; + * @return {number} + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.getPort = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.MetadataStoreClientConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.setPort = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreClientConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.clearPort = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.hasPort = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional SSLConfig ssl_config = 3; + * @return {?proto.ml_metadata.MetadataStoreClientConfig.SSLConfig} + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.getSslConfig = function() { + return /** @type{?proto.ml_metadata.MetadataStoreClientConfig.SSLConfig} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.MetadataStoreClientConfig.SSLConfig, 3)); +}; + + +/** + * @param {?proto.ml_metadata.MetadataStoreClientConfig.SSLConfig|undefined} value + * @return {!proto.ml_metadata.MetadataStoreClientConfig} returns this +*/ +proto.ml_metadata.MetadataStoreClientConfig.prototype.setSslConfig = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreClientConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.clearSslConfig = function() { + return this.setSslConfig(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.hasSslConfig = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional GrpcChannelArguments channel_arguments = 4; + * @return {?proto.ml_metadata.GrpcChannelArguments} + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.getChannelArguments = function() { + return /** @type{?proto.ml_metadata.GrpcChannelArguments} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.GrpcChannelArguments, 4)); +}; + + +/** + * @param {?proto.ml_metadata.GrpcChannelArguments|undefined} value + * @return {!proto.ml_metadata.MetadataStoreClientConfig} returns this +*/ +proto.ml_metadata.MetadataStoreClientConfig.prototype.setChannelArguments = function(value) { + return jspb.Message.setWrapperField(this, 4, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreClientConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.clearChannelArguments = function() { + return this.setChannelArguments(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.hasChannelArguments = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional double client_timeout_sec = 5; + * @return {number} + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.getClientTimeoutSec = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 5, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.MetadataStoreClientConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.setClientTimeoutSec = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreClientConfig} returns this + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.clearClientTimeoutSec = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreClientConfig.prototype.hasClientTimeoutSec = function() { + return jspb.Message.getField(this, 5) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.MetadataStoreServerConfig.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.MetadataStoreServerConfig.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.MetadataStoreServerConfig} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MetadataStoreServerConfig.toObject = function(includeInstance, msg) { + var f, obj = { + connectionConfig: (f = msg.getConnectionConfig()) && proto.ml_metadata.ConnectionConfig.toObject(includeInstance, f), + migrationOptions: (f = msg.getMigrationOptions()) && proto.ml_metadata.MigrationOptions.toObject(includeInstance, f), + sslConfig: (f = msg.getSslConfig()) && proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.MetadataStoreServerConfig} + */ +proto.ml_metadata.MetadataStoreServerConfig.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.MetadataStoreServerConfig; + return proto.ml_metadata.MetadataStoreServerConfig.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.MetadataStoreServerConfig} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.MetadataStoreServerConfig} + */ +proto.ml_metadata.MetadataStoreServerConfig.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_metadata.ConnectionConfig; + reader.readMessage(value,proto.ml_metadata.ConnectionConfig.deserializeBinaryFromReader); + msg.setConnectionConfig(value); + break; + case 3: + var value = new proto.ml_metadata.MigrationOptions; + reader.readMessage(value,proto.ml_metadata.MigrationOptions.deserializeBinaryFromReader); + msg.setMigrationOptions(value); + break; + case 2: + var value = new proto.ml_metadata.MetadataStoreServerConfig.SSLConfig; + reader.readMessage(value,proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.deserializeBinaryFromReader); + msg.setSslConfig(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.MetadataStoreServerConfig.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.MetadataStoreServerConfig.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.MetadataStoreServerConfig} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MetadataStoreServerConfig.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getConnectionConfig(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_metadata.ConnectionConfig.serializeBinaryToWriter + ); + } + f = message.getMigrationOptions(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.ml_metadata.MigrationOptions.serializeBinaryToWriter + ); + } + f = message.getSslConfig(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.toObject = function(includeInstance, msg) { + var f, obj = { + serverKey: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + serverCert: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + customCa: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + clientVerify: (f = jspb.Message.getBooleanField(msg, 4)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.MetadataStoreServerConfig.SSLConfig; + return proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setServerKey(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setServerCert(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setCustomCa(value); + break; + case 4: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setClientVerify(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeBool( + 4, + f + ); + } +}; + + +/** + * optional string server_key = 1; + * @return {string} + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.getServerKey = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.setServerKey = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.clearServerKey = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.hasServerKey = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string server_cert = 2; + * @return {string} + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.getServerCert = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.setServerCert = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.clearServerCert = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.hasServerCert = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string custom_ca = 3; + * @return {string} + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.getCustomCa = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.setCustomCa = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.clearCustomCa = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.hasCustomCa = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional bool client_verify = 4; + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.getClientVerify = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.setClientVerify = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.clearClientVerify = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.hasClientVerify = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional ConnectionConfig connection_config = 1; + * @return {?proto.ml_metadata.ConnectionConfig} + */ +proto.ml_metadata.MetadataStoreServerConfig.prototype.getConnectionConfig = function() { + return /** @type{?proto.ml_metadata.ConnectionConfig} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.ConnectionConfig, 1)); +}; + + +/** + * @param {?proto.ml_metadata.ConnectionConfig|undefined} value + * @return {!proto.ml_metadata.MetadataStoreServerConfig} returns this +*/ +proto.ml_metadata.MetadataStoreServerConfig.prototype.setConnectionConfig = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreServerConfig} returns this + */ +proto.ml_metadata.MetadataStoreServerConfig.prototype.clearConnectionConfig = function() { + return this.setConnectionConfig(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreServerConfig.prototype.hasConnectionConfig = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional MigrationOptions migration_options = 3; + * @return {?proto.ml_metadata.MigrationOptions} + */ +proto.ml_metadata.MetadataStoreServerConfig.prototype.getMigrationOptions = function() { + return /** @type{?proto.ml_metadata.MigrationOptions} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.MigrationOptions, 3)); +}; + + +/** + * @param {?proto.ml_metadata.MigrationOptions|undefined} value + * @return {!proto.ml_metadata.MetadataStoreServerConfig} returns this +*/ +proto.ml_metadata.MetadataStoreServerConfig.prototype.setMigrationOptions = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreServerConfig} returns this + */ +proto.ml_metadata.MetadataStoreServerConfig.prototype.clearMigrationOptions = function() { + return this.setMigrationOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreServerConfig.prototype.hasMigrationOptions = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional SSLConfig ssl_config = 2; + * @return {?proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} + */ +proto.ml_metadata.MetadataStoreServerConfig.prototype.getSslConfig = function() { + return /** @type{?proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.MetadataStoreServerConfig.SSLConfig, 2)); +}; + + +/** + * @param {?proto.ml_metadata.MetadataStoreServerConfig.SSLConfig|undefined} value + * @return {!proto.ml_metadata.MetadataStoreServerConfig} returns this +*/ +proto.ml_metadata.MetadataStoreServerConfig.prototype.setSslConfig = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.MetadataStoreServerConfig} returns this + */ +proto.ml_metadata.MetadataStoreServerConfig.prototype.clearSslConfig = function() { + return this.setSslConfig(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.MetadataStoreServerConfig.prototype.hasSslConfig = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ListOperationOptions.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ListOperationOptions.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ListOperationOptions} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ListOperationOptions.toObject = function(includeInstance, msg) { + var f, obj = { + maxResultSize: jspb.Message.getFieldWithDefault(msg, 1, 20), + orderByField: (f = msg.getOrderByField()) && proto.ml_metadata.ListOperationOptions.OrderByField.toObject(includeInstance, f), + nextPageToken: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ListOperationOptions} + */ +proto.ml_metadata.ListOperationOptions.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ListOperationOptions; + return proto.ml_metadata.ListOperationOptions.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ListOperationOptions} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ListOperationOptions} + */ +proto.ml_metadata.ListOperationOptions.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt32()); + msg.setMaxResultSize(value); + break; + case 2: + var value = new proto.ml_metadata.ListOperationOptions.OrderByField; + reader.readMessage(value,proto.ml_metadata.ListOperationOptions.OrderByField.deserializeBinaryFromReader); + msg.setOrderByField(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setNextPageToken(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ListOperationOptions.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ListOperationOptions.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ListOperationOptions} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ListOperationOptions.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt32( + 1, + f + ); + } + f = message.getOrderByField(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_metadata.ListOperationOptions.OrderByField.serializeBinaryToWriter + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ListOperationOptions.OrderByField.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ListOperationOptions.OrderByField.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ListOperationOptions.OrderByField} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ListOperationOptions.OrderByField.toObject = function(includeInstance, msg) { + var f, obj = { + field: jspb.Message.getFieldWithDefault(msg, 1, 3), + isAsc: jspb.Message.getBooleanFieldWithDefault(msg, 2, true) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ListOperationOptions.OrderByField} + */ +proto.ml_metadata.ListOperationOptions.OrderByField.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ListOperationOptions.OrderByField; + return proto.ml_metadata.ListOperationOptions.OrderByField.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ListOperationOptions.OrderByField} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ListOperationOptions.OrderByField} + */ +proto.ml_metadata.ListOperationOptions.OrderByField.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!proto.ml_metadata.ListOperationOptions.OrderByField.Field} */ (reader.readEnum()); + msg.setField(value); + break; + case 2: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIsAsc(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ListOperationOptions.OrderByField.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ListOperationOptions.OrderByField.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ListOperationOptions.OrderByField} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ListOperationOptions.OrderByField.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {!proto.ml_metadata.ListOperationOptions.OrderByField.Field} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeEnum( + 1, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeBool( + 2, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.ml_metadata.ListOperationOptions.OrderByField.Field = { + FIELD_UNSPECIFIED: 0, + CREATE_TIME: 1, + LAST_UPDATE_TIME: 2, + ID: 3 +}; + +/** + * optional Field field = 1; + * @return {!proto.ml_metadata.ListOperationOptions.OrderByField.Field} + */ +proto.ml_metadata.ListOperationOptions.OrderByField.prototype.getField = function() { + return /** @type {!proto.ml_metadata.ListOperationOptions.OrderByField.Field} */ (jspb.Message.getFieldWithDefault(this, 1, 3)); +}; + + +/** + * @param {!proto.ml_metadata.ListOperationOptions.OrderByField.Field} value + * @return {!proto.ml_metadata.ListOperationOptions.OrderByField} returns this + */ +proto.ml_metadata.ListOperationOptions.OrderByField.prototype.setField = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ListOperationOptions.OrderByField} returns this + */ +proto.ml_metadata.ListOperationOptions.OrderByField.prototype.clearField = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ListOperationOptions.OrderByField.prototype.hasField = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional bool is_asc = 2; + * @return {boolean} + */ +proto.ml_metadata.ListOperationOptions.OrderByField.prototype.getIsAsc = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, true)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.ListOperationOptions.OrderByField} returns this + */ +proto.ml_metadata.ListOperationOptions.OrderByField.prototype.setIsAsc = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ListOperationOptions.OrderByField} returns this + */ +proto.ml_metadata.ListOperationOptions.OrderByField.prototype.clearIsAsc = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ListOperationOptions.OrderByField.prototype.hasIsAsc = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional int32 max_result_size = 1; + * @return {number} + */ +proto.ml_metadata.ListOperationOptions.prototype.getMaxResultSize = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 20)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.ListOperationOptions} returns this + */ +proto.ml_metadata.ListOperationOptions.prototype.setMaxResultSize = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ListOperationOptions} returns this + */ +proto.ml_metadata.ListOperationOptions.prototype.clearMaxResultSize = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ListOperationOptions.prototype.hasMaxResultSize = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional OrderByField order_by_field = 2; + * @return {?proto.ml_metadata.ListOperationOptions.OrderByField} + */ +proto.ml_metadata.ListOperationOptions.prototype.getOrderByField = function() { + return /** @type{?proto.ml_metadata.ListOperationOptions.OrderByField} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.ListOperationOptions.OrderByField, 2)); +}; + + +/** + * @param {?proto.ml_metadata.ListOperationOptions.OrderByField|undefined} value + * @return {!proto.ml_metadata.ListOperationOptions} returns this +*/ +proto.ml_metadata.ListOperationOptions.prototype.setOrderByField = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ListOperationOptions} returns this + */ +proto.ml_metadata.ListOperationOptions.prototype.clearOrderByField = function() { + return this.setOrderByField(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ListOperationOptions.prototype.hasOrderByField = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string next_page_token = 3; + * @return {string} + */ +proto.ml_metadata.ListOperationOptions.prototype.getNextPageToken = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.ListOperationOptions} returns this + */ +proto.ml_metadata.ListOperationOptions.prototype.setNextPageToken = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ListOperationOptions} returns this + */ +proto.ml_metadata.ListOperationOptions.prototype.clearNextPageToken = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ListOperationOptions.prototype.hasNextPageToken = function() { + return jspb.Message.getField(this, 3) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.ListOperationNextPageToken.repeatedFields_ = [4]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ListOperationNextPageToken.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ListOperationNextPageToken} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ListOperationNextPageToken.toObject = function(includeInstance, msg) { + var f, obj = { + idOffset: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + fieldOffset: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + setOptions: (f = msg.getSetOptions()) && proto.ml_metadata.ListOperationOptions.toObject(includeInstance, f), + listedIdsList: (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ListOperationNextPageToken} + */ +proto.ml_metadata.ListOperationNextPageToken.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ListOperationNextPageToken; + return proto.ml_metadata.ListOperationNextPageToken.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ListOperationNextPageToken} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ListOperationNextPageToken} + */ +proto.ml_metadata.ListOperationNextPageToken.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setIdOffset(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt64()); + msg.setFieldOffset(value); + break; + case 3: + var value = new proto.ml_metadata.ListOperationOptions; + reader.readMessage(value,proto.ml_metadata.ListOperationOptions.deserializeBinaryFromReader); + msg.setSetOptions(value); + break; + case 4: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addListedIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ListOperationNextPageToken.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ListOperationNextPageToken} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ListOperationNextPageToken.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeInt64( + 2, + f + ); + } + f = message.getSetOptions(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.ml_metadata.ListOperationOptions.serializeBinaryToWriter + ); + } + f = message.getListedIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 4, + f + ); + } +}; + + +/** + * optional int64 id_offset = 1; + * @return {number} + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.getIdOffset = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.ListOperationNextPageToken} returns this + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.setIdOffset = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ListOperationNextPageToken} returns this + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.clearIdOffset = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.hasIdOffset = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional int64 field_offset = 2; + * @return {number} + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.getFieldOffset = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.ListOperationNextPageToken} returns this + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.setFieldOffset = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.ListOperationNextPageToken} returns this + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.clearFieldOffset = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.hasFieldOffset = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional ListOperationOptions set_options = 3; + * @return {?proto.ml_metadata.ListOperationOptions} + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.getSetOptions = function() { + return /** @type{?proto.ml_metadata.ListOperationOptions} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.ListOperationOptions, 3)); +}; + + +/** + * @param {?proto.ml_metadata.ListOperationOptions|undefined} value + * @return {!proto.ml_metadata.ListOperationNextPageToken} returns this +*/ +proto.ml_metadata.ListOperationNextPageToken.prototype.setSetOptions = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ListOperationNextPageToken} returns this + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.clearSetOptions = function() { + return this.setSetOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.hasSetOptions = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * repeated int64 listed_ids = 4; + * @return {!Array} + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.getListedIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 4)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.ListOperationNextPageToken} returns this + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.setListedIdsList = function(value) { + return jspb.Message.setField(this, 4, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ListOperationNextPageToken} returns this + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.addListedIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 4, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.ListOperationNextPageToken} returns this + */ +proto.ml_metadata.ListOperationNextPageToken.prototype.clearListedIdsList = function() { + return this.setListedIdsList([]); +}; + + +/** + * @enum {number} + */ +proto.ml_metadata.PropertyType = { + UNKNOWN: 0, + INT: 1, + DOUBLE: 2, + STRING: 3, + STRUCT: 4 +}; + +goog.object.extend(exports, proto.ml_metadata); diff --git a/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_service_grpc_web_pb.d.ts b/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_service_grpc_web_pb.d.ts new file mode 100644 index 0000000000..327bd6cc71 --- /dev/null +++ b/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_service_grpc_web_pb.d.ts @@ -0,0 +1,510 @@ +import * as grpcWeb from 'grpc-web'; + +import * as ml_metadata_proto_metadata_store_service_pb from '../../ml_metadata/proto/metadata_store_service_pb'; + + +export class MetadataStoreServiceClient { + constructor (hostname: string, + credentials?: null | { [index: string]: string; }, + options?: null | { [index: string]: any; }); + + putArtifactType( + request: ml_metadata_proto_metadata_store_service_pb.PutArtifactTypeRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.PutArtifactTypeResponse) => void + ): grpcWeb.ClientReadableStream; + + putExecutionType( + request: ml_metadata_proto_metadata_store_service_pb.PutExecutionTypeRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.PutExecutionTypeResponse) => void + ): grpcWeb.ClientReadableStream; + + putContextType( + request: ml_metadata_proto_metadata_store_service_pb.PutContextTypeRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.PutContextTypeResponse) => void + ): grpcWeb.ClientReadableStream; + + putTypes( + request: ml_metadata_proto_metadata_store_service_pb.PutTypesRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.PutTypesResponse) => void + ): grpcWeb.ClientReadableStream; + + putArtifacts( + request: ml_metadata_proto_metadata_store_service_pb.PutArtifactsRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.PutArtifactsResponse) => void + ): grpcWeb.ClientReadableStream; + + putExecutions( + request: ml_metadata_proto_metadata_store_service_pb.PutExecutionsRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.PutExecutionsResponse) => void + ): grpcWeb.ClientReadableStream; + + putEvents( + request: ml_metadata_proto_metadata_store_service_pb.PutEventsRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.PutEventsResponse) => void + ): grpcWeb.ClientReadableStream; + + putExecution( + request: ml_metadata_proto_metadata_store_service_pb.PutExecutionRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.PutExecutionResponse) => void + ): grpcWeb.ClientReadableStream; + + putContexts( + request: ml_metadata_proto_metadata_store_service_pb.PutContextsRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.PutContextsResponse) => void + ): grpcWeb.ClientReadableStream; + + putAttributionsAndAssociations( + request: ml_metadata_proto_metadata_store_service_pb.PutAttributionsAndAssociationsRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.PutAttributionsAndAssociationsResponse) => void + ): grpcWeb.ClientReadableStream; + + putParentContexts( + request: ml_metadata_proto_metadata_store_service_pb.PutParentContextsRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.PutParentContextsResponse) => void + ): grpcWeb.ClientReadableStream; + + getArtifactType( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactTypeRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetArtifactTypeResponse) => void + ): grpcWeb.ClientReadableStream; + + getArtifactTypesByID( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactTypesByIDRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetArtifactTypesByIDResponse) => void + ): grpcWeb.ClientReadableStream; + + getArtifactTypes( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactTypesRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetArtifactTypesResponse) => void + ): grpcWeb.ClientReadableStream; + + getExecutionType( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionTypeRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetExecutionTypeResponse) => void + ): grpcWeb.ClientReadableStream; + + getExecutionTypesByID( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionTypesByIDRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetExecutionTypesByIDResponse) => void + ): grpcWeb.ClientReadableStream; + + getExecutionTypes( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionTypesRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetExecutionTypesResponse) => void + ): grpcWeb.ClientReadableStream; + + getContextType( + request: ml_metadata_proto_metadata_store_service_pb.GetContextTypeRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetContextTypeResponse) => void + ): grpcWeb.ClientReadableStream; + + getContextTypesByID( + request: ml_metadata_proto_metadata_store_service_pb.GetContextTypesByIDRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetContextTypesByIDResponse) => void + ): grpcWeb.ClientReadableStream; + + getContextTypes( + request: ml_metadata_proto_metadata_store_service_pb.GetContextTypesRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetContextTypesResponse) => void + ): grpcWeb.ClientReadableStream; + + getArtifacts( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactsRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetArtifactsResponse) => void + ): grpcWeb.ClientReadableStream; + + getExecutions( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionsRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetExecutionsResponse) => void + ): grpcWeb.ClientReadableStream; + + getContexts( + request: ml_metadata_proto_metadata_store_service_pb.GetContextsRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetContextsResponse) => void + ): grpcWeb.ClientReadableStream; + + getArtifactsByID( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactsByIDRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetArtifactsByIDResponse) => void + ): grpcWeb.ClientReadableStream; + + getExecutionsByID( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionsByIDRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetExecutionsByIDResponse) => void + ): grpcWeb.ClientReadableStream; + + getContextsByID( + request: ml_metadata_proto_metadata_store_service_pb.GetContextsByIDRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetContextsByIDResponse) => void + ): grpcWeb.ClientReadableStream; + + getArtifactsByType( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactsByTypeRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetArtifactsByTypeResponse) => void + ): grpcWeb.ClientReadableStream; + + getExecutionsByType( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionsByTypeRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetExecutionsByTypeResponse) => void + ): grpcWeb.ClientReadableStream; + + getContextsByType( + request: ml_metadata_proto_metadata_store_service_pb.GetContextsByTypeRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetContextsByTypeResponse) => void + ): grpcWeb.ClientReadableStream; + + getArtifactByTypeAndName( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactByTypeAndNameRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetArtifactByTypeAndNameResponse) => void + ): grpcWeb.ClientReadableStream; + + getExecutionByTypeAndName( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionByTypeAndNameRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetExecutionByTypeAndNameResponse) => void + ): grpcWeb.ClientReadableStream; + + getContextByTypeAndName( + request: ml_metadata_proto_metadata_store_service_pb.GetContextByTypeAndNameRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetContextByTypeAndNameResponse) => void + ): grpcWeb.ClientReadableStream; + + getArtifactsByURI( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactsByURIRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetArtifactsByURIResponse) => void + ): grpcWeb.ClientReadableStream; + + getEventsByExecutionIDs( + request: ml_metadata_proto_metadata_store_service_pb.GetEventsByExecutionIDsRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetEventsByExecutionIDsResponse) => void + ): grpcWeb.ClientReadableStream; + + getEventsByArtifactIDs( + request: ml_metadata_proto_metadata_store_service_pb.GetEventsByArtifactIDsRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetEventsByArtifactIDsResponse) => void + ): grpcWeb.ClientReadableStream; + + getContextsByArtifact( + request: ml_metadata_proto_metadata_store_service_pb.GetContextsByArtifactRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetContextsByArtifactResponse) => void + ): grpcWeb.ClientReadableStream; + + getContextsByExecution( + request: ml_metadata_proto_metadata_store_service_pb.GetContextsByExecutionRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetContextsByExecutionResponse) => void + ): grpcWeb.ClientReadableStream; + + getParentContextsByContext( + request: ml_metadata_proto_metadata_store_service_pb.GetParentContextsByContextRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetParentContextsByContextResponse) => void + ): grpcWeb.ClientReadableStream; + + getChildrenContextsByContext( + request: ml_metadata_proto_metadata_store_service_pb.GetChildrenContextsByContextRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetChildrenContextsByContextResponse) => void + ): grpcWeb.ClientReadableStream; + + getArtifactsByContext( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactsByContextRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetArtifactsByContextResponse) => void + ): grpcWeb.ClientReadableStream; + + getExecutionsByContext( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionsByContextRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: ml_metadata_proto_metadata_store_service_pb.GetExecutionsByContextResponse) => void + ): grpcWeb.ClientReadableStream; + +} + +export class MetadataStoreServicePromiseClient { + constructor (hostname: string, + credentials?: null | { [index: string]: string; }, + options?: null | { [index: string]: any; }); + + putArtifactType( + request: ml_metadata_proto_metadata_store_service_pb.PutArtifactTypeRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + putExecutionType( + request: ml_metadata_proto_metadata_store_service_pb.PutExecutionTypeRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + putContextType( + request: ml_metadata_proto_metadata_store_service_pb.PutContextTypeRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + putTypes( + request: ml_metadata_proto_metadata_store_service_pb.PutTypesRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + putArtifacts( + request: ml_metadata_proto_metadata_store_service_pb.PutArtifactsRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + putExecutions( + request: ml_metadata_proto_metadata_store_service_pb.PutExecutionsRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + putEvents( + request: ml_metadata_proto_metadata_store_service_pb.PutEventsRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + putExecution( + request: ml_metadata_proto_metadata_store_service_pb.PutExecutionRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + putContexts( + request: ml_metadata_proto_metadata_store_service_pb.PutContextsRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + putAttributionsAndAssociations( + request: ml_metadata_proto_metadata_store_service_pb.PutAttributionsAndAssociationsRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + putParentContexts( + request: ml_metadata_proto_metadata_store_service_pb.PutParentContextsRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getArtifactType( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactTypeRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getArtifactTypesByID( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactTypesByIDRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getArtifactTypes( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactTypesRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getExecutionType( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionTypeRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getExecutionTypesByID( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionTypesByIDRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getExecutionTypes( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionTypesRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getContextType( + request: ml_metadata_proto_metadata_store_service_pb.GetContextTypeRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getContextTypesByID( + request: ml_metadata_proto_metadata_store_service_pb.GetContextTypesByIDRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getContextTypes( + request: ml_metadata_proto_metadata_store_service_pb.GetContextTypesRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getArtifacts( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactsRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getExecutions( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionsRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getContexts( + request: ml_metadata_proto_metadata_store_service_pb.GetContextsRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getArtifactsByID( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactsByIDRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getExecutionsByID( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionsByIDRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getContextsByID( + request: ml_metadata_proto_metadata_store_service_pb.GetContextsByIDRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getArtifactsByType( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactsByTypeRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getExecutionsByType( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionsByTypeRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getContextsByType( + request: ml_metadata_proto_metadata_store_service_pb.GetContextsByTypeRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getArtifactByTypeAndName( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactByTypeAndNameRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getExecutionByTypeAndName( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionByTypeAndNameRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getContextByTypeAndName( + request: ml_metadata_proto_metadata_store_service_pb.GetContextByTypeAndNameRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getArtifactsByURI( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactsByURIRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getEventsByExecutionIDs( + request: ml_metadata_proto_metadata_store_service_pb.GetEventsByExecutionIDsRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getEventsByArtifactIDs( + request: ml_metadata_proto_metadata_store_service_pb.GetEventsByArtifactIDsRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getContextsByArtifact( + request: ml_metadata_proto_metadata_store_service_pb.GetContextsByArtifactRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getContextsByExecution( + request: ml_metadata_proto_metadata_store_service_pb.GetContextsByExecutionRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getParentContextsByContext( + request: ml_metadata_proto_metadata_store_service_pb.GetParentContextsByContextRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getChildrenContextsByContext( + request: ml_metadata_proto_metadata_store_service_pb.GetChildrenContextsByContextRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getArtifactsByContext( + request: ml_metadata_proto_metadata_store_service_pb.GetArtifactsByContextRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getExecutionsByContext( + request: ml_metadata_proto_metadata_store_service_pb.GetExecutionsByContextRequest, + metadata?: grpcWeb.Metadata + ): Promise; + +} diff --git a/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_service_grpc_web_pb.js b/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_service_grpc_web_pb.js new file mode 100644 index 0000000000..ab1e0b438b --- /dev/null +++ b/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_service_grpc_web_pb.js @@ -0,0 +1,3355 @@ +/** + * @fileoverview gRPC-Web generated client stub for ml_metadata + * @enhanceable + * @public + */ + +// GENERATED CODE -- DO NOT EDIT! + + +/* eslint-disable */ +// @ts-nocheck + + + +const grpc = {}; +grpc.web = require('grpc-web'); + + +var ml_metadata_proto_metadata_store_pb = require('../../ml_metadata/proto/metadata_store_pb.js') +const proto = {}; +proto.ml_metadata = require('./metadata_store_service_pb.js'); + +/** + * @param {string} hostname + * @param {?Object} credentials + * @param {?Object} options + * @constructor + * @struct + * @final + */ +proto.ml_metadata.MetadataStoreServiceClient = + function(hostname, credentials, options) { + if (!options) options = {}; + options['format'] = 'binary'; + + /** + * @private @const {!grpc.web.GrpcWebClientBase} The client + */ + this.client_ = new grpc.web.GrpcWebClientBase(options); + + /** + * @private @const {string} The hostname + */ + this.hostname_ = hostname; + +}; + + +/** + * @param {string} hostname + * @param {?Object} credentials + * @param {?Object} options + * @constructor + * @struct + * @final + */ +proto.ml_metadata.MetadataStoreServicePromiseClient = + function(hostname, credentials, options) { + if (!options) options = {}; + options['format'] = 'binary'; + + /** + * @private @const {!grpc.web.GrpcWebClientBase} The client + */ + this.client_ = new grpc.web.GrpcWebClientBase(options); + + /** + * @private @const {string} The hostname + */ + this.hostname_ = hostname; + +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.PutArtifactTypeRequest, + * !proto.ml_metadata.PutArtifactTypeResponse>} + */ +const methodDescriptor_MetadataStoreService_PutArtifactType = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/PutArtifactType', + grpc.web.MethodType.UNARY, + proto.ml_metadata.PutArtifactTypeRequest, + proto.ml_metadata.PutArtifactTypeResponse, + /** + * @param {!proto.ml_metadata.PutArtifactTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutArtifactTypeResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.PutArtifactTypeRequest, + * !proto.ml_metadata.PutArtifactTypeResponse>} + */ +const methodInfo_MetadataStoreService_PutArtifactType = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.PutArtifactTypeResponse, + /** + * @param {!proto.ml_metadata.PutArtifactTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutArtifactTypeResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.PutArtifactTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.PutArtifactTypeResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.putArtifactType = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutArtifactType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutArtifactType, + callback); +}; + + +/** + * @param {!proto.ml_metadata.PutArtifactTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.putArtifactType = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutArtifactType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutArtifactType); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.PutExecutionTypeRequest, + * !proto.ml_metadata.PutExecutionTypeResponse>} + */ +const methodDescriptor_MetadataStoreService_PutExecutionType = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/PutExecutionType', + grpc.web.MethodType.UNARY, + proto.ml_metadata.PutExecutionTypeRequest, + proto.ml_metadata.PutExecutionTypeResponse, + /** + * @param {!proto.ml_metadata.PutExecutionTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutExecutionTypeResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.PutExecutionTypeRequest, + * !proto.ml_metadata.PutExecutionTypeResponse>} + */ +const methodInfo_MetadataStoreService_PutExecutionType = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.PutExecutionTypeResponse, + /** + * @param {!proto.ml_metadata.PutExecutionTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutExecutionTypeResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.PutExecutionTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.PutExecutionTypeResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.putExecutionType = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutExecutionType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutExecutionType, + callback); +}; + + +/** + * @param {!proto.ml_metadata.PutExecutionTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.putExecutionType = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutExecutionType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutExecutionType); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.PutContextTypeRequest, + * !proto.ml_metadata.PutContextTypeResponse>} + */ +const methodDescriptor_MetadataStoreService_PutContextType = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/PutContextType', + grpc.web.MethodType.UNARY, + proto.ml_metadata.PutContextTypeRequest, + proto.ml_metadata.PutContextTypeResponse, + /** + * @param {!proto.ml_metadata.PutContextTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutContextTypeResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.PutContextTypeRequest, + * !proto.ml_metadata.PutContextTypeResponse>} + */ +const methodInfo_MetadataStoreService_PutContextType = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.PutContextTypeResponse, + /** + * @param {!proto.ml_metadata.PutContextTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutContextTypeResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.PutContextTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.PutContextTypeResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.putContextType = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutContextType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutContextType, + callback); +}; + + +/** + * @param {!proto.ml_metadata.PutContextTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.putContextType = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutContextType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutContextType); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.PutTypesRequest, + * !proto.ml_metadata.PutTypesResponse>} + */ +const methodDescriptor_MetadataStoreService_PutTypes = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/PutTypes', + grpc.web.MethodType.UNARY, + proto.ml_metadata.PutTypesRequest, + proto.ml_metadata.PutTypesResponse, + /** + * @param {!proto.ml_metadata.PutTypesRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutTypesResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.PutTypesRequest, + * !proto.ml_metadata.PutTypesResponse>} + */ +const methodInfo_MetadataStoreService_PutTypes = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.PutTypesResponse, + /** + * @param {!proto.ml_metadata.PutTypesRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutTypesResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.PutTypesRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.PutTypesResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.putTypes = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutTypes', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutTypes, + callback); +}; + + +/** + * @param {!proto.ml_metadata.PutTypesRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.putTypes = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutTypes', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutTypes); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.PutArtifactsRequest, + * !proto.ml_metadata.PutArtifactsResponse>} + */ +const methodDescriptor_MetadataStoreService_PutArtifacts = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/PutArtifacts', + grpc.web.MethodType.UNARY, + proto.ml_metadata.PutArtifactsRequest, + proto.ml_metadata.PutArtifactsResponse, + /** + * @param {!proto.ml_metadata.PutArtifactsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutArtifactsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.PutArtifactsRequest, + * !proto.ml_metadata.PutArtifactsResponse>} + */ +const methodInfo_MetadataStoreService_PutArtifacts = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.PutArtifactsResponse, + /** + * @param {!proto.ml_metadata.PutArtifactsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutArtifactsResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.PutArtifactsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.PutArtifactsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.putArtifacts = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutArtifacts', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutArtifacts, + callback); +}; + + +/** + * @param {!proto.ml_metadata.PutArtifactsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.putArtifacts = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutArtifacts', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutArtifacts); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.PutExecutionsRequest, + * !proto.ml_metadata.PutExecutionsResponse>} + */ +const methodDescriptor_MetadataStoreService_PutExecutions = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/PutExecutions', + grpc.web.MethodType.UNARY, + proto.ml_metadata.PutExecutionsRequest, + proto.ml_metadata.PutExecutionsResponse, + /** + * @param {!proto.ml_metadata.PutExecutionsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutExecutionsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.PutExecutionsRequest, + * !proto.ml_metadata.PutExecutionsResponse>} + */ +const methodInfo_MetadataStoreService_PutExecutions = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.PutExecutionsResponse, + /** + * @param {!proto.ml_metadata.PutExecutionsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutExecutionsResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.PutExecutionsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.PutExecutionsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.putExecutions = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutExecutions', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutExecutions, + callback); +}; + + +/** + * @param {!proto.ml_metadata.PutExecutionsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.putExecutions = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutExecutions', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutExecutions); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.PutEventsRequest, + * !proto.ml_metadata.PutEventsResponse>} + */ +const methodDescriptor_MetadataStoreService_PutEvents = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/PutEvents', + grpc.web.MethodType.UNARY, + proto.ml_metadata.PutEventsRequest, + proto.ml_metadata.PutEventsResponse, + /** + * @param {!proto.ml_metadata.PutEventsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutEventsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.PutEventsRequest, + * !proto.ml_metadata.PutEventsResponse>} + */ +const methodInfo_MetadataStoreService_PutEvents = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.PutEventsResponse, + /** + * @param {!proto.ml_metadata.PutEventsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutEventsResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.PutEventsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.PutEventsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.putEvents = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutEvents', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutEvents, + callback); +}; + + +/** + * @param {!proto.ml_metadata.PutEventsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.putEvents = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutEvents', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutEvents); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.PutExecutionRequest, + * !proto.ml_metadata.PutExecutionResponse>} + */ +const methodDescriptor_MetadataStoreService_PutExecution = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/PutExecution', + grpc.web.MethodType.UNARY, + proto.ml_metadata.PutExecutionRequest, + proto.ml_metadata.PutExecutionResponse, + /** + * @param {!proto.ml_metadata.PutExecutionRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutExecutionResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.PutExecutionRequest, + * !proto.ml_metadata.PutExecutionResponse>} + */ +const methodInfo_MetadataStoreService_PutExecution = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.PutExecutionResponse, + /** + * @param {!proto.ml_metadata.PutExecutionRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutExecutionResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.PutExecutionRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.PutExecutionResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.putExecution = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutExecution', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutExecution, + callback); +}; + + +/** + * @param {!proto.ml_metadata.PutExecutionRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.putExecution = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutExecution', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutExecution); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.PutContextsRequest, + * !proto.ml_metadata.PutContextsResponse>} + */ +const methodDescriptor_MetadataStoreService_PutContexts = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/PutContexts', + grpc.web.MethodType.UNARY, + proto.ml_metadata.PutContextsRequest, + proto.ml_metadata.PutContextsResponse, + /** + * @param {!proto.ml_metadata.PutContextsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutContextsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.PutContextsRequest, + * !proto.ml_metadata.PutContextsResponse>} + */ +const methodInfo_MetadataStoreService_PutContexts = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.PutContextsResponse, + /** + * @param {!proto.ml_metadata.PutContextsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutContextsResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.PutContextsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.PutContextsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.putContexts = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutContexts', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutContexts, + callback); +}; + + +/** + * @param {!proto.ml_metadata.PutContextsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.putContexts = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutContexts', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutContexts); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.PutAttributionsAndAssociationsRequest, + * !proto.ml_metadata.PutAttributionsAndAssociationsResponse>} + */ +const methodDescriptor_MetadataStoreService_PutAttributionsAndAssociations = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/PutAttributionsAndAssociations', + grpc.web.MethodType.UNARY, + proto.ml_metadata.PutAttributionsAndAssociationsRequest, + proto.ml_metadata.PutAttributionsAndAssociationsResponse, + /** + * @param {!proto.ml_metadata.PutAttributionsAndAssociationsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutAttributionsAndAssociationsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.PutAttributionsAndAssociationsRequest, + * !proto.ml_metadata.PutAttributionsAndAssociationsResponse>} + */ +const methodInfo_MetadataStoreService_PutAttributionsAndAssociations = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.PutAttributionsAndAssociationsResponse, + /** + * @param {!proto.ml_metadata.PutAttributionsAndAssociationsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutAttributionsAndAssociationsResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.PutAttributionsAndAssociationsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.PutAttributionsAndAssociationsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.putAttributionsAndAssociations = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutAttributionsAndAssociations', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutAttributionsAndAssociations, + callback); +}; + + +/** + * @param {!proto.ml_metadata.PutAttributionsAndAssociationsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.putAttributionsAndAssociations = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutAttributionsAndAssociations', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutAttributionsAndAssociations); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.PutParentContextsRequest, + * !proto.ml_metadata.PutParentContextsResponse>} + */ +const methodDescriptor_MetadataStoreService_PutParentContexts = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/PutParentContexts', + grpc.web.MethodType.UNARY, + proto.ml_metadata.PutParentContextsRequest, + proto.ml_metadata.PutParentContextsResponse, + /** + * @param {!proto.ml_metadata.PutParentContextsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutParentContextsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.PutParentContextsRequest, + * !proto.ml_metadata.PutParentContextsResponse>} + */ +const methodInfo_MetadataStoreService_PutParentContexts = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.PutParentContextsResponse, + /** + * @param {!proto.ml_metadata.PutParentContextsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.PutParentContextsResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.PutParentContextsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.PutParentContextsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.putParentContexts = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutParentContexts', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutParentContexts, + callback); +}; + + +/** + * @param {!proto.ml_metadata.PutParentContextsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.putParentContexts = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/PutParentContexts', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_PutParentContexts); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetArtifactTypeRequest, + * !proto.ml_metadata.GetArtifactTypeResponse>} + */ +const methodDescriptor_MetadataStoreService_GetArtifactType = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetArtifactType', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetArtifactTypeRequest, + proto.ml_metadata.GetArtifactTypeResponse, + /** + * @param {!proto.ml_metadata.GetArtifactTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactTypeResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetArtifactTypeRequest, + * !proto.ml_metadata.GetArtifactTypeResponse>} + */ +const methodInfo_MetadataStoreService_GetArtifactType = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetArtifactTypeResponse, + /** + * @param {!proto.ml_metadata.GetArtifactTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactTypeResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetArtifactTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetArtifactTypeResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getArtifactType = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactType, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetArtifactTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getArtifactType = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactType); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetArtifactTypesByIDRequest, + * !proto.ml_metadata.GetArtifactTypesByIDResponse>} + */ +const methodDescriptor_MetadataStoreService_GetArtifactTypesByID = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetArtifactTypesByID', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetArtifactTypesByIDRequest, + proto.ml_metadata.GetArtifactTypesByIDResponse, + /** + * @param {!proto.ml_metadata.GetArtifactTypesByIDRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactTypesByIDResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetArtifactTypesByIDRequest, + * !proto.ml_metadata.GetArtifactTypesByIDResponse>} + */ +const methodInfo_MetadataStoreService_GetArtifactTypesByID = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetArtifactTypesByIDResponse, + /** + * @param {!proto.ml_metadata.GetArtifactTypesByIDRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactTypesByIDResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetArtifactTypesByIDRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetArtifactTypesByIDResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getArtifactTypesByID = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactTypesByID', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactTypesByID, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetArtifactTypesByIDRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getArtifactTypesByID = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactTypesByID', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactTypesByID); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetArtifactTypesRequest, + * !proto.ml_metadata.GetArtifactTypesResponse>} + */ +const methodDescriptor_MetadataStoreService_GetArtifactTypes = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetArtifactTypes', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetArtifactTypesRequest, + proto.ml_metadata.GetArtifactTypesResponse, + /** + * @param {!proto.ml_metadata.GetArtifactTypesRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactTypesResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetArtifactTypesRequest, + * !proto.ml_metadata.GetArtifactTypesResponse>} + */ +const methodInfo_MetadataStoreService_GetArtifactTypes = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetArtifactTypesResponse, + /** + * @param {!proto.ml_metadata.GetArtifactTypesRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactTypesResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetArtifactTypesRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetArtifactTypesResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getArtifactTypes = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactTypes', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactTypes, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetArtifactTypesRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getArtifactTypes = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactTypes', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactTypes); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetExecutionTypeRequest, + * !proto.ml_metadata.GetExecutionTypeResponse>} + */ +const methodDescriptor_MetadataStoreService_GetExecutionType = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetExecutionType', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetExecutionTypeRequest, + proto.ml_metadata.GetExecutionTypeResponse, + /** + * @param {!proto.ml_metadata.GetExecutionTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionTypeResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetExecutionTypeRequest, + * !proto.ml_metadata.GetExecutionTypeResponse>} + */ +const methodInfo_MetadataStoreService_GetExecutionType = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetExecutionTypeResponse, + /** + * @param {!proto.ml_metadata.GetExecutionTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionTypeResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetExecutionTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetExecutionTypeResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getExecutionType = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionType, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetExecutionTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getExecutionType = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionType); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetExecutionTypesByIDRequest, + * !proto.ml_metadata.GetExecutionTypesByIDResponse>} + */ +const methodDescriptor_MetadataStoreService_GetExecutionTypesByID = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetExecutionTypesByID', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetExecutionTypesByIDRequest, + proto.ml_metadata.GetExecutionTypesByIDResponse, + /** + * @param {!proto.ml_metadata.GetExecutionTypesByIDRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionTypesByIDResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetExecutionTypesByIDRequest, + * !proto.ml_metadata.GetExecutionTypesByIDResponse>} + */ +const methodInfo_MetadataStoreService_GetExecutionTypesByID = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetExecutionTypesByIDResponse, + /** + * @param {!proto.ml_metadata.GetExecutionTypesByIDRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionTypesByIDResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetExecutionTypesByIDRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetExecutionTypesByIDResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getExecutionTypesByID = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionTypesByID', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionTypesByID, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetExecutionTypesByIDRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getExecutionTypesByID = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionTypesByID', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionTypesByID); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetExecutionTypesRequest, + * !proto.ml_metadata.GetExecutionTypesResponse>} + */ +const methodDescriptor_MetadataStoreService_GetExecutionTypes = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetExecutionTypes', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetExecutionTypesRequest, + proto.ml_metadata.GetExecutionTypesResponse, + /** + * @param {!proto.ml_metadata.GetExecutionTypesRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionTypesResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetExecutionTypesRequest, + * !proto.ml_metadata.GetExecutionTypesResponse>} + */ +const methodInfo_MetadataStoreService_GetExecutionTypes = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetExecutionTypesResponse, + /** + * @param {!proto.ml_metadata.GetExecutionTypesRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionTypesResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetExecutionTypesRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetExecutionTypesResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getExecutionTypes = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionTypes', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionTypes, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetExecutionTypesRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getExecutionTypes = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionTypes', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionTypes); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetContextTypeRequest, + * !proto.ml_metadata.GetContextTypeResponse>} + */ +const methodDescriptor_MetadataStoreService_GetContextType = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetContextType', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetContextTypeRequest, + proto.ml_metadata.GetContextTypeResponse, + /** + * @param {!proto.ml_metadata.GetContextTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextTypeResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetContextTypeRequest, + * !proto.ml_metadata.GetContextTypeResponse>} + */ +const methodInfo_MetadataStoreService_GetContextType = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetContextTypeResponse, + /** + * @param {!proto.ml_metadata.GetContextTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextTypeResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetContextTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetContextTypeResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getContextType = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextType, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetContextTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getContextType = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextType); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetContextTypesByIDRequest, + * !proto.ml_metadata.GetContextTypesByIDResponse>} + */ +const methodDescriptor_MetadataStoreService_GetContextTypesByID = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetContextTypesByID', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetContextTypesByIDRequest, + proto.ml_metadata.GetContextTypesByIDResponse, + /** + * @param {!proto.ml_metadata.GetContextTypesByIDRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextTypesByIDResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetContextTypesByIDRequest, + * !proto.ml_metadata.GetContextTypesByIDResponse>} + */ +const methodInfo_MetadataStoreService_GetContextTypesByID = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetContextTypesByIDResponse, + /** + * @param {!proto.ml_metadata.GetContextTypesByIDRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextTypesByIDResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetContextTypesByIDRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetContextTypesByIDResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getContextTypesByID = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextTypesByID', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextTypesByID, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetContextTypesByIDRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getContextTypesByID = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextTypesByID', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextTypesByID); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetContextTypesRequest, + * !proto.ml_metadata.GetContextTypesResponse>} + */ +const methodDescriptor_MetadataStoreService_GetContextTypes = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetContextTypes', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetContextTypesRequest, + proto.ml_metadata.GetContextTypesResponse, + /** + * @param {!proto.ml_metadata.GetContextTypesRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextTypesResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetContextTypesRequest, + * !proto.ml_metadata.GetContextTypesResponse>} + */ +const methodInfo_MetadataStoreService_GetContextTypes = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetContextTypesResponse, + /** + * @param {!proto.ml_metadata.GetContextTypesRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextTypesResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetContextTypesRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetContextTypesResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getContextTypes = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextTypes', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextTypes, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetContextTypesRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getContextTypes = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextTypes', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextTypes); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetArtifactsRequest, + * !proto.ml_metadata.GetArtifactsResponse>} + */ +const methodDescriptor_MetadataStoreService_GetArtifacts = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetArtifacts', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetArtifactsRequest, + proto.ml_metadata.GetArtifactsResponse, + /** + * @param {!proto.ml_metadata.GetArtifactsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetArtifactsRequest, + * !proto.ml_metadata.GetArtifactsResponse>} + */ +const methodInfo_MetadataStoreService_GetArtifacts = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetArtifactsResponse, + /** + * @param {!proto.ml_metadata.GetArtifactsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactsResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetArtifactsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetArtifactsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getArtifacts = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifacts', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifacts, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetArtifactsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getArtifacts = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifacts', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifacts); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetExecutionsRequest, + * !proto.ml_metadata.GetExecutionsResponse>} + */ +const methodDescriptor_MetadataStoreService_GetExecutions = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetExecutions', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetExecutionsRequest, + proto.ml_metadata.GetExecutionsResponse, + /** + * @param {!proto.ml_metadata.GetExecutionsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetExecutionsRequest, + * !proto.ml_metadata.GetExecutionsResponse>} + */ +const methodInfo_MetadataStoreService_GetExecutions = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetExecutionsResponse, + /** + * @param {!proto.ml_metadata.GetExecutionsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionsResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetExecutionsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetExecutionsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getExecutions = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutions', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutions, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetExecutionsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getExecutions = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutions', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutions); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetContextsRequest, + * !proto.ml_metadata.GetContextsResponse>} + */ +const methodDescriptor_MetadataStoreService_GetContexts = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetContexts', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetContextsRequest, + proto.ml_metadata.GetContextsResponse, + /** + * @param {!proto.ml_metadata.GetContextsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetContextsRequest, + * !proto.ml_metadata.GetContextsResponse>} + */ +const methodInfo_MetadataStoreService_GetContexts = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetContextsResponse, + /** + * @param {!proto.ml_metadata.GetContextsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextsResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetContextsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetContextsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getContexts = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContexts', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContexts, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetContextsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getContexts = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContexts', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContexts); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetArtifactsByIDRequest, + * !proto.ml_metadata.GetArtifactsByIDResponse>} + */ +const methodDescriptor_MetadataStoreService_GetArtifactsByID = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetArtifactsByID', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetArtifactsByIDRequest, + proto.ml_metadata.GetArtifactsByIDResponse, + /** + * @param {!proto.ml_metadata.GetArtifactsByIDRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactsByIDResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetArtifactsByIDRequest, + * !proto.ml_metadata.GetArtifactsByIDResponse>} + */ +const methodInfo_MetadataStoreService_GetArtifactsByID = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetArtifactsByIDResponse, + /** + * @param {!proto.ml_metadata.GetArtifactsByIDRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactsByIDResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetArtifactsByIDRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetArtifactsByIDResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getArtifactsByID = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactsByID', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactsByID, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetArtifactsByIDRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getArtifactsByID = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactsByID', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactsByID); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetExecutionsByIDRequest, + * !proto.ml_metadata.GetExecutionsByIDResponse>} + */ +const methodDescriptor_MetadataStoreService_GetExecutionsByID = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetExecutionsByID', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetExecutionsByIDRequest, + proto.ml_metadata.GetExecutionsByIDResponse, + /** + * @param {!proto.ml_metadata.GetExecutionsByIDRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionsByIDResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetExecutionsByIDRequest, + * !proto.ml_metadata.GetExecutionsByIDResponse>} + */ +const methodInfo_MetadataStoreService_GetExecutionsByID = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetExecutionsByIDResponse, + /** + * @param {!proto.ml_metadata.GetExecutionsByIDRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionsByIDResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetExecutionsByIDRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetExecutionsByIDResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getExecutionsByID = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionsByID', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionsByID, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetExecutionsByIDRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getExecutionsByID = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionsByID', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionsByID); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetContextsByIDRequest, + * !proto.ml_metadata.GetContextsByIDResponse>} + */ +const methodDescriptor_MetadataStoreService_GetContextsByID = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetContextsByID', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetContextsByIDRequest, + proto.ml_metadata.GetContextsByIDResponse, + /** + * @param {!proto.ml_metadata.GetContextsByIDRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextsByIDResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetContextsByIDRequest, + * !proto.ml_metadata.GetContextsByIDResponse>} + */ +const methodInfo_MetadataStoreService_GetContextsByID = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetContextsByIDResponse, + /** + * @param {!proto.ml_metadata.GetContextsByIDRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextsByIDResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetContextsByIDRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetContextsByIDResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getContextsByID = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextsByID', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextsByID, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetContextsByIDRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getContextsByID = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextsByID', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextsByID); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetArtifactsByTypeRequest, + * !proto.ml_metadata.GetArtifactsByTypeResponse>} + */ +const methodDescriptor_MetadataStoreService_GetArtifactsByType = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetArtifactsByType', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetArtifactsByTypeRequest, + proto.ml_metadata.GetArtifactsByTypeResponse, + /** + * @param {!proto.ml_metadata.GetArtifactsByTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactsByTypeResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetArtifactsByTypeRequest, + * !proto.ml_metadata.GetArtifactsByTypeResponse>} + */ +const methodInfo_MetadataStoreService_GetArtifactsByType = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetArtifactsByTypeResponse, + /** + * @param {!proto.ml_metadata.GetArtifactsByTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactsByTypeResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetArtifactsByTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetArtifactsByTypeResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getArtifactsByType = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactsByType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactsByType, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetArtifactsByTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getArtifactsByType = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactsByType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactsByType); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetExecutionsByTypeRequest, + * !proto.ml_metadata.GetExecutionsByTypeResponse>} + */ +const methodDescriptor_MetadataStoreService_GetExecutionsByType = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetExecutionsByType', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetExecutionsByTypeRequest, + proto.ml_metadata.GetExecutionsByTypeResponse, + /** + * @param {!proto.ml_metadata.GetExecutionsByTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionsByTypeResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetExecutionsByTypeRequest, + * !proto.ml_metadata.GetExecutionsByTypeResponse>} + */ +const methodInfo_MetadataStoreService_GetExecutionsByType = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetExecutionsByTypeResponse, + /** + * @param {!proto.ml_metadata.GetExecutionsByTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionsByTypeResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetExecutionsByTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetExecutionsByTypeResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getExecutionsByType = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionsByType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionsByType, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetExecutionsByTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getExecutionsByType = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionsByType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionsByType); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetContextsByTypeRequest, + * !proto.ml_metadata.GetContextsByTypeResponse>} + */ +const methodDescriptor_MetadataStoreService_GetContextsByType = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetContextsByType', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetContextsByTypeRequest, + proto.ml_metadata.GetContextsByTypeResponse, + /** + * @param {!proto.ml_metadata.GetContextsByTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextsByTypeResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetContextsByTypeRequest, + * !proto.ml_metadata.GetContextsByTypeResponse>} + */ +const methodInfo_MetadataStoreService_GetContextsByType = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetContextsByTypeResponse, + /** + * @param {!proto.ml_metadata.GetContextsByTypeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextsByTypeResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetContextsByTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetContextsByTypeResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getContextsByType = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextsByType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextsByType, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetContextsByTypeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getContextsByType = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextsByType', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextsByType); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetArtifactByTypeAndNameRequest, + * !proto.ml_metadata.GetArtifactByTypeAndNameResponse>} + */ +const methodDescriptor_MetadataStoreService_GetArtifactByTypeAndName = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetArtifactByTypeAndName', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetArtifactByTypeAndNameRequest, + proto.ml_metadata.GetArtifactByTypeAndNameResponse, + /** + * @param {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactByTypeAndNameResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetArtifactByTypeAndNameRequest, + * !proto.ml_metadata.GetArtifactByTypeAndNameResponse>} + */ +const methodInfo_MetadataStoreService_GetArtifactByTypeAndName = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetArtifactByTypeAndNameResponse, + /** + * @param {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactByTypeAndNameResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetArtifactByTypeAndNameResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getArtifactByTypeAndName = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactByTypeAndName', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactByTypeAndName, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getArtifactByTypeAndName = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactByTypeAndName', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactByTypeAndName); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetExecutionByTypeAndNameRequest, + * !proto.ml_metadata.GetExecutionByTypeAndNameResponse>} + */ +const methodDescriptor_MetadataStoreService_GetExecutionByTypeAndName = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetExecutionByTypeAndName', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetExecutionByTypeAndNameRequest, + proto.ml_metadata.GetExecutionByTypeAndNameResponse, + /** + * @param {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionByTypeAndNameResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetExecutionByTypeAndNameRequest, + * !proto.ml_metadata.GetExecutionByTypeAndNameResponse>} + */ +const methodInfo_MetadataStoreService_GetExecutionByTypeAndName = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetExecutionByTypeAndNameResponse, + /** + * @param {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionByTypeAndNameResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetExecutionByTypeAndNameResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getExecutionByTypeAndName = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionByTypeAndName', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionByTypeAndName, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getExecutionByTypeAndName = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionByTypeAndName', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionByTypeAndName); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetContextByTypeAndNameRequest, + * !proto.ml_metadata.GetContextByTypeAndNameResponse>} + */ +const methodDescriptor_MetadataStoreService_GetContextByTypeAndName = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetContextByTypeAndName', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetContextByTypeAndNameRequest, + proto.ml_metadata.GetContextByTypeAndNameResponse, + /** + * @param {!proto.ml_metadata.GetContextByTypeAndNameRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextByTypeAndNameResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetContextByTypeAndNameRequest, + * !proto.ml_metadata.GetContextByTypeAndNameResponse>} + */ +const methodInfo_MetadataStoreService_GetContextByTypeAndName = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetContextByTypeAndNameResponse, + /** + * @param {!proto.ml_metadata.GetContextByTypeAndNameRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextByTypeAndNameResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetContextByTypeAndNameRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetContextByTypeAndNameResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getContextByTypeAndName = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextByTypeAndName', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextByTypeAndName, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetContextByTypeAndNameRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getContextByTypeAndName = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextByTypeAndName', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextByTypeAndName); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetArtifactsByURIRequest, + * !proto.ml_metadata.GetArtifactsByURIResponse>} + */ +const methodDescriptor_MetadataStoreService_GetArtifactsByURI = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetArtifactsByURI', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetArtifactsByURIRequest, + proto.ml_metadata.GetArtifactsByURIResponse, + /** + * @param {!proto.ml_metadata.GetArtifactsByURIRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactsByURIResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetArtifactsByURIRequest, + * !proto.ml_metadata.GetArtifactsByURIResponse>} + */ +const methodInfo_MetadataStoreService_GetArtifactsByURI = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetArtifactsByURIResponse, + /** + * @param {!proto.ml_metadata.GetArtifactsByURIRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactsByURIResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetArtifactsByURIRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetArtifactsByURIResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getArtifactsByURI = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactsByURI', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactsByURI, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetArtifactsByURIRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getArtifactsByURI = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactsByURI', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactsByURI); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetEventsByExecutionIDsRequest, + * !proto.ml_metadata.GetEventsByExecutionIDsResponse>} + */ +const methodDescriptor_MetadataStoreService_GetEventsByExecutionIDs = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetEventsByExecutionIDs', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetEventsByExecutionIDsRequest, + proto.ml_metadata.GetEventsByExecutionIDsResponse, + /** + * @param {!proto.ml_metadata.GetEventsByExecutionIDsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetEventsByExecutionIDsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetEventsByExecutionIDsRequest, + * !proto.ml_metadata.GetEventsByExecutionIDsResponse>} + */ +const methodInfo_MetadataStoreService_GetEventsByExecutionIDs = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetEventsByExecutionIDsResponse, + /** + * @param {!proto.ml_metadata.GetEventsByExecutionIDsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetEventsByExecutionIDsResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetEventsByExecutionIDsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetEventsByExecutionIDsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getEventsByExecutionIDs = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetEventsByExecutionIDs', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetEventsByExecutionIDs, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetEventsByExecutionIDsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getEventsByExecutionIDs = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetEventsByExecutionIDs', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetEventsByExecutionIDs); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetEventsByArtifactIDsRequest, + * !proto.ml_metadata.GetEventsByArtifactIDsResponse>} + */ +const methodDescriptor_MetadataStoreService_GetEventsByArtifactIDs = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetEventsByArtifactIDs', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetEventsByArtifactIDsRequest, + proto.ml_metadata.GetEventsByArtifactIDsResponse, + /** + * @param {!proto.ml_metadata.GetEventsByArtifactIDsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetEventsByArtifactIDsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetEventsByArtifactIDsRequest, + * !proto.ml_metadata.GetEventsByArtifactIDsResponse>} + */ +const methodInfo_MetadataStoreService_GetEventsByArtifactIDs = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetEventsByArtifactIDsResponse, + /** + * @param {!proto.ml_metadata.GetEventsByArtifactIDsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetEventsByArtifactIDsResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetEventsByArtifactIDsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetEventsByArtifactIDsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getEventsByArtifactIDs = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetEventsByArtifactIDs', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetEventsByArtifactIDs, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetEventsByArtifactIDsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getEventsByArtifactIDs = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetEventsByArtifactIDs', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetEventsByArtifactIDs); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetContextsByArtifactRequest, + * !proto.ml_metadata.GetContextsByArtifactResponse>} + */ +const methodDescriptor_MetadataStoreService_GetContextsByArtifact = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetContextsByArtifact', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetContextsByArtifactRequest, + proto.ml_metadata.GetContextsByArtifactResponse, + /** + * @param {!proto.ml_metadata.GetContextsByArtifactRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextsByArtifactResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetContextsByArtifactRequest, + * !proto.ml_metadata.GetContextsByArtifactResponse>} + */ +const methodInfo_MetadataStoreService_GetContextsByArtifact = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetContextsByArtifactResponse, + /** + * @param {!proto.ml_metadata.GetContextsByArtifactRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextsByArtifactResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetContextsByArtifactRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetContextsByArtifactResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getContextsByArtifact = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextsByArtifact', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextsByArtifact, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetContextsByArtifactRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getContextsByArtifact = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextsByArtifact', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextsByArtifact); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetContextsByExecutionRequest, + * !proto.ml_metadata.GetContextsByExecutionResponse>} + */ +const methodDescriptor_MetadataStoreService_GetContextsByExecution = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetContextsByExecution', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetContextsByExecutionRequest, + proto.ml_metadata.GetContextsByExecutionResponse, + /** + * @param {!proto.ml_metadata.GetContextsByExecutionRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextsByExecutionResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetContextsByExecutionRequest, + * !proto.ml_metadata.GetContextsByExecutionResponse>} + */ +const methodInfo_MetadataStoreService_GetContextsByExecution = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetContextsByExecutionResponse, + /** + * @param {!proto.ml_metadata.GetContextsByExecutionRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetContextsByExecutionResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetContextsByExecutionRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetContextsByExecutionResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getContextsByExecution = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextsByExecution', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextsByExecution, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetContextsByExecutionRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getContextsByExecution = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetContextsByExecution', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetContextsByExecution); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetParentContextsByContextRequest, + * !proto.ml_metadata.GetParentContextsByContextResponse>} + */ +const methodDescriptor_MetadataStoreService_GetParentContextsByContext = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetParentContextsByContext', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetParentContextsByContextRequest, + proto.ml_metadata.GetParentContextsByContextResponse, + /** + * @param {!proto.ml_metadata.GetParentContextsByContextRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetParentContextsByContextResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetParentContextsByContextRequest, + * !proto.ml_metadata.GetParentContextsByContextResponse>} + */ +const methodInfo_MetadataStoreService_GetParentContextsByContext = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetParentContextsByContextResponse, + /** + * @param {!proto.ml_metadata.GetParentContextsByContextRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetParentContextsByContextResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetParentContextsByContextRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetParentContextsByContextResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getParentContextsByContext = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetParentContextsByContext', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetParentContextsByContext, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetParentContextsByContextRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getParentContextsByContext = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetParentContextsByContext', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetParentContextsByContext); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetChildrenContextsByContextRequest, + * !proto.ml_metadata.GetChildrenContextsByContextResponse>} + */ +const methodDescriptor_MetadataStoreService_GetChildrenContextsByContext = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetChildrenContextsByContext', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetChildrenContextsByContextRequest, + proto.ml_metadata.GetChildrenContextsByContextResponse, + /** + * @param {!proto.ml_metadata.GetChildrenContextsByContextRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetChildrenContextsByContextResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetChildrenContextsByContextRequest, + * !proto.ml_metadata.GetChildrenContextsByContextResponse>} + */ +const methodInfo_MetadataStoreService_GetChildrenContextsByContext = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetChildrenContextsByContextResponse, + /** + * @param {!proto.ml_metadata.GetChildrenContextsByContextRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetChildrenContextsByContextResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetChildrenContextsByContextRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetChildrenContextsByContextResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getChildrenContextsByContext = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetChildrenContextsByContext', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetChildrenContextsByContext, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetChildrenContextsByContextRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getChildrenContextsByContext = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetChildrenContextsByContext', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetChildrenContextsByContext); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetArtifactsByContextRequest, + * !proto.ml_metadata.GetArtifactsByContextResponse>} + */ +const methodDescriptor_MetadataStoreService_GetArtifactsByContext = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetArtifactsByContext', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetArtifactsByContextRequest, + proto.ml_metadata.GetArtifactsByContextResponse, + /** + * @param {!proto.ml_metadata.GetArtifactsByContextRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactsByContextResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetArtifactsByContextRequest, + * !proto.ml_metadata.GetArtifactsByContextResponse>} + */ +const methodInfo_MetadataStoreService_GetArtifactsByContext = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetArtifactsByContextResponse, + /** + * @param {!proto.ml_metadata.GetArtifactsByContextRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetArtifactsByContextResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetArtifactsByContextRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetArtifactsByContextResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getArtifactsByContext = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactsByContext', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactsByContext, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetArtifactsByContextRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getArtifactsByContext = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetArtifactsByContext', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetArtifactsByContext); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.ml_metadata.GetExecutionsByContextRequest, + * !proto.ml_metadata.GetExecutionsByContextResponse>} + */ +const methodDescriptor_MetadataStoreService_GetExecutionsByContext = new grpc.web.MethodDescriptor( + '/ml_metadata.MetadataStoreService/GetExecutionsByContext', + grpc.web.MethodType.UNARY, + proto.ml_metadata.GetExecutionsByContextRequest, + proto.ml_metadata.GetExecutionsByContextResponse, + /** + * @param {!proto.ml_metadata.GetExecutionsByContextRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionsByContextResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.ml_metadata.GetExecutionsByContextRequest, + * !proto.ml_metadata.GetExecutionsByContextResponse>} + */ +const methodInfo_MetadataStoreService_GetExecutionsByContext = new grpc.web.AbstractClientBase.MethodInfo( + proto.ml_metadata.GetExecutionsByContextResponse, + /** + * @param {!proto.ml_metadata.GetExecutionsByContextRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.ml_metadata.GetExecutionsByContextResponse.deserializeBinary +); + + +/** + * @param {!proto.ml_metadata.GetExecutionsByContextRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.ml_metadata.GetExecutionsByContextResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.ml_metadata.MetadataStoreServiceClient.prototype.getExecutionsByContext = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionsByContext', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionsByContext, + callback); +}; + + +/** + * @param {!proto.ml_metadata.GetExecutionsByContextRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.ml_metadata.MetadataStoreServicePromiseClient.prototype.getExecutionsByContext = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/ml_metadata.MetadataStoreService/GetExecutionsByContext', + request, + metadata || {}, + methodDescriptor_MetadataStoreService_GetExecutionsByContext); +}; + + +module.exports = proto.ml_metadata; diff --git a/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_service_pb.d.ts b/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_service_pb.d.ts new file mode 100644 index 0000000000..a2173f4233 --- /dev/null +++ b/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_service_pb.d.ts @@ -0,0 +1,1960 @@ +import * as jspb from 'google-protobuf' + +import * as ml_metadata_proto_metadata_store_pb from '../../ml_metadata/proto/metadata_store_pb'; + + +export class ArtifactAndType extends jspb.Message { + getArtifact(): ml_metadata_proto_metadata_store_pb.Artifact | undefined; + setArtifact(value?: ml_metadata_proto_metadata_store_pb.Artifact): ArtifactAndType; + hasArtifact(): boolean; + clearArtifact(): ArtifactAndType; + + getType(): ml_metadata_proto_metadata_store_pb.ArtifactType | undefined; + setType(value?: ml_metadata_proto_metadata_store_pb.ArtifactType): ArtifactAndType; + hasType(): boolean; + clearType(): ArtifactAndType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactAndType.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactAndType): ArtifactAndType.AsObject; + static serializeBinaryToWriter(message: ArtifactAndType, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactAndType; + static deserializeBinaryFromReader(message: ArtifactAndType, reader: jspb.BinaryReader): ArtifactAndType; +} + +export namespace ArtifactAndType { + export type AsObject = { + artifact?: ml_metadata_proto_metadata_store_pb.Artifact.AsObject, + type?: ml_metadata_proto_metadata_store_pb.ArtifactType.AsObject, + } +} + +export class ArtifactStructMap extends jspb.Message { + getPropertiesMap(): jspb.Map; + clearPropertiesMap(): ArtifactStructMap; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactStructMap.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactStructMap): ArtifactStructMap.AsObject; + static serializeBinaryToWriter(message: ArtifactStructMap, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactStructMap; + static deserializeBinaryFromReader(message: ArtifactStructMap, reader: jspb.BinaryReader): ArtifactStructMap; +} + +export namespace ArtifactStructMap { + export type AsObject = { + propertiesMap: Array<[string, ArtifactStruct.AsObject]>, + } +} + +export class ArtifactStructList extends jspb.Message { + getElementsList(): Array; + setElementsList(value: Array): ArtifactStructList; + clearElementsList(): ArtifactStructList; + addElements(value?: ArtifactStruct, index?: number): ArtifactStruct; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactStructList.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactStructList): ArtifactStructList.AsObject; + static serializeBinaryToWriter(message: ArtifactStructList, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactStructList; + static deserializeBinaryFromReader(message: ArtifactStructList, reader: jspb.BinaryReader): ArtifactStructList; +} + +export namespace ArtifactStructList { + export type AsObject = { + elementsList: Array, + } +} + +export class ArtifactStruct extends jspb.Message { + getArtifact(): ArtifactAndType | undefined; + setArtifact(value?: ArtifactAndType): ArtifactStruct; + hasArtifact(): boolean; + clearArtifact(): ArtifactStruct; + + getMap(): ArtifactStructMap | undefined; + setMap(value?: ArtifactStructMap): ArtifactStruct; + hasMap(): boolean; + clearMap(): ArtifactStruct; + + getList(): ArtifactStructList | undefined; + setList(value?: ArtifactStructList): ArtifactStruct; + hasList(): boolean; + clearList(): ArtifactStruct; + + getValueCase(): ArtifactStruct.ValueCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactStruct.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactStruct): ArtifactStruct.AsObject; + static serializeBinaryToWriter(message: ArtifactStruct, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactStruct; + static deserializeBinaryFromReader(message: ArtifactStruct, reader: jspb.BinaryReader): ArtifactStruct; +} + +export namespace ArtifactStruct { + export type AsObject = { + artifact?: ArtifactAndType.AsObject, + map?: ArtifactStructMap.AsObject, + list?: ArtifactStructList.AsObject, + } + + export enum ValueCase { + VALUE_NOT_SET = 0, + ARTIFACT = 1, + MAP = 2, + LIST = 3, + } +} + +export class PutArtifactsRequest extends jspb.Message { + getArtifactsList(): Array; + setArtifactsList(value: Array): PutArtifactsRequest; + clearArtifactsList(): PutArtifactsRequest; + addArtifacts(value?: ml_metadata_proto_metadata_store_pb.Artifact, index?: number): ml_metadata_proto_metadata_store_pb.Artifact; + + getOptions(): PutArtifactsRequest.Options | undefined; + setOptions(value?: PutArtifactsRequest.Options): PutArtifactsRequest; + hasOptions(): boolean; + clearOptions(): PutArtifactsRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutArtifactsRequest.AsObject; + static toObject(includeInstance: boolean, msg: PutArtifactsRequest): PutArtifactsRequest.AsObject; + static serializeBinaryToWriter(message: PutArtifactsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutArtifactsRequest; + static deserializeBinaryFromReader(message: PutArtifactsRequest, reader: jspb.BinaryReader): PutArtifactsRequest; +} + +export namespace PutArtifactsRequest { + export type AsObject = { + artifactsList: Array, + options?: PutArtifactsRequest.Options.AsObject, + } + + export class Options extends jspb.Message { + getAbortIfLatestUpdatedTimeChanged(): boolean; + setAbortIfLatestUpdatedTimeChanged(value: boolean): Options; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Options.AsObject; + static toObject(includeInstance: boolean, msg: Options): Options.AsObject; + static serializeBinaryToWriter(message: Options, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Options; + static deserializeBinaryFromReader(message: Options, reader: jspb.BinaryReader): Options; + } + + export namespace Options { + export type AsObject = { + abortIfLatestUpdatedTimeChanged: boolean, + } + } + +} + +export class PutArtifactsResponse extends jspb.Message { + getArtifactIdsList(): Array; + setArtifactIdsList(value: Array): PutArtifactsResponse; + clearArtifactIdsList(): PutArtifactsResponse; + addArtifactIds(value: number, index?: number): PutArtifactsResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutArtifactsResponse.AsObject; + static toObject(includeInstance: boolean, msg: PutArtifactsResponse): PutArtifactsResponse.AsObject; + static serializeBinaryToWriter(message: PutArtifactsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutArtifactsResponse; + static deserializeBinaryFromReader(message: PutArtifactsResponse, reader: jspb.BinaryReader): PutArtifactsResponse; +} + +export namespace PutArtifactsResponse { + export type AsObject = { + artifactIdsList: Array, + } +} + +export class PutArtifactTypeRequest extends jspb.Message { + getArtifactType(): ml_metadata_proto_metadata_store_pb.ArtifactType | undefined; + setArtifactType(value?: ml_metadata_proto_metadata_store_pb.ArtifactType): PutArtifactTypeRequest; + hasArtifactType(): boolean; + clearArtifactType(): PutArtifactTypeRequest; + + getCanAddFields(): boolean; + setCanAddFields(value: boolean): PutArtifactTypeRequest; + + getCanOmitFields(): boolean; + setCanOmitFields(value: boolean): PutArtifactTypeRequest; + + getCanDeleteFields(): boolean; + setCanDeleteFields(value: boolean): PutArtifactTypeRequest; + + getAllFieldsMatch(): boolean; + setAllFieldsMatch(value: boolean): PutArtifactTypeRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutArtifactTypeRequest.AsObject; + static toObject(includeInstance: boolean, msg: PutArtifactTypeRequest): PutArtifactTypeRequest.AsObject; + static serializeBinaryToWriter(message: PutArtifactTypeRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutArtifactTypeRequest; + static deserializeBinaryFromReader(message: PutArtifactTypeRequest, reader: jspb.BinaryReader): PutArtifactTypeRequest; +} + +export namespace PutArtifactTypeRequest { + export type AsObject = { + artifactType?: ml_metadata_proto_metadata_store_pb.ArtifactType.AsObject, + canAddFields: boolean, + canOmitFields: boolean, + canDeleteFields: boolean, + allFieldsMatch: boolean, + } +} + +export class PutArtifactTypeResponse extends jspb.Message { + getTypeId(): number; + setTypeId(value: number): PutArtifactTypeResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutArtifactTypeResponse.AsObject; + static toObject(includeInstance: boolean, msg: PutArtifactTypeResponse): PutArtifactTypeResponse.AsObject; + static serializeBinaryToWriter(message: PutArtifactTypeResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutArtifactTypeResponse; + static deserializeBinaryFromReader(message: PutArtifactTypeResponse, reader: jspb.BinaryReader): PutArtifactTypeResponse; +} + +export namespace PutArtifactTypeResponse { + export type AsObject = { + typeId: number, + } +} + +export class PutExecutionsRequest extends jspb.Message { + getExecutionsList(): Array; + setExecutionsList(value: Array): PutExecutionsRequest; + clearExecutionsList(): PutExecutionsRequest; + addExecutions(value?: ml_metadata_proto_metadata_store_pb.Execution, index?: number): ml_metadata_proto_metadata_store_pb.Execution; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutExecutionsRequest.AsObject; + static toObject(includeInstance: boolean, msg: PutExecutionsRequest): PutExecutionsRequest.AsObject; + static serializeBinaryToWriter(message: PutExecutionsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutExecutionsRequest; + static deserializeBinaryFromReader(message: PutExecutionsRequest, reader: jspb.BinaryReader): PutExecutionsRequest; +} + +export namespace PutExecutionsRequest { + export type AsObject = { + executionsList: Array, + } +} + +export class PutExecutionsResponse extends jspb.Message { + getExecutionIdsList(): Array; + setExecutionIdsList(value: Array): PutExecutionsResponse; + clearExecutionIdsList(): PutExecutionsResponse; + addExecutionIds(value: number, index?: number): PutExecutionsResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutExecutionsResponse.AsObject; + static toObject(includeInstance: boolean, msg: PutExecutionsResponse): PutExecutionsResponse.AsObject; + static serializeBinaryToWriter(message: PutExecutionsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutExecutionsResponse; + static deserializeBinaryFromReader(message: PutExecutionsResponse, reader: jspb.BinaryReader): PutExecutionsResponse; +} + +export namespace PutExecutionsResponse { + export type AsObject = { + executionIdsList: Array, + } +} + +export class PutExecutionTypeRequest extends jspb.Message { + getExecutionType(): ml_metadata_proto_metadata_store_pb.ExecutionType | undefined; + setExecutionType(value?: ml_metadata_proto_metadata_store_pb.ExecutionType): PutExecutionTypeRequest; + hasExecutionType(): boolean; + clearExecutionType(): PutExecutionTypeRequest; + + getCanAddFields(): boolean; + setCanAddFields(value: boolean): PutExecutionTypeRequest; + + getCanOmitFields(): boolean; + setCanOmitFields(value: boolean): PutExecutionTypeRequest; + + getCanDeleteFields(): boolean; + setCanDeleteFields(value: boolean): PutExecutionTypeRequest; + + getAllFieldsMatch(): boolean; + setAllFieldsMatch(value: boolean): PutExecutionTypeRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutExecutionTypeRequest.AsObject; + static toObject(includeInstance: boolean, msg: PutExecutionTypeRequest): PutExecutionTypeRequest.AsObject; + static serializeBinaryToWriter(message: PutExecutionTypeRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutExecutionTypeRequest; + static deserializeBinaryFromReader(message: PutExecutionTypeRequest, reader: jspb.BinaryReader): PutExecutionTypeRequest; +} + +export namespace PutExecutionTypeRequest { + export type AsObject = { + executionType?: ml_metadata_proto_metadata_store_pb.ExecutionType.AsObject, + canAddFields: boolean, + canOmitFields: boolean, + canDeleteFields: boolean, + allFieldsMatch: boolean, + } +} + +export class PutExecutionTypeResponse extends jspb.Message { + getTypeId(): number; + setTypeId(value: number): PutExecutionTypeResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutExecutionTypeResponse.AsObject; + static toObject(includeInstance: boolean, msg: PutExecutionTypeResponse): PutExecutionTypeResponse.AsObject; + static serializeBinaryToWriter(message: PutExecutionTypeResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutExecutionTypeResponse; + static deserializeBinaryFromReader(message: PutExecutionTypeResponse, reader: jspb.BinaryReader): PutExecutionTypeResponse; +} + +export namespace PutExecutionTypeResponse { + export type AsObject = { + typeId: number, + } +} + +export class PutEventsRequest extends jspb.Message { + getEventsList(): Array; + setEventsList(value: Array): PutEventsRequest; + clearEventsList(): PutEventsRequest; + addEvents(value?: ml_metadata_proto_metadata_store_pb.Event, index?: number): ml_metadata_proto_metadata_store_pb.Event; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutEventsRequest.AsObject; + static toObject(includeInstance: boolean, msg: PutEventsRequest): PutEventsRequest.AsObject; + static serializeBinaryToWriter(message: PutEventsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutEventsRequest; + static deserializeBinaryFromReader(message: PutEventsRequest, reader: jspb.BinaryReader): PutEventsRequest; +} + +export namespace PutEventsRequest { + export type AsObject = { + eventsList: Array, + } +} + +export class PutEventsResponse extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutEventsResponse.AsObject; + static toObject(includeInstance: boolean, msg: PutEventsResponse): PutEventsResponse.AsObject; + static serializeBinaryToWriter(message: PutEventsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutEventsResponse; + static deserializeBinaryFromReader(message: PutEventsResponse, reader: jspb.BinaryReader): PutEventsResponse; +} + +export namespace PutEventsResponse { + export type AsObject = { + } +} + +export class PutExecutionRequest extends jspb.Message { + getExecution(): ml_metadata_proto_metadata_store_pb.Execution | undefined; + setExecution(value?: ml_metadata_proto_metadata_store_pb.Execution): PutExecutionRequest; + hasExecution(): boolean; + clearExecution(): PutExecutionRequest; + + getArtifactEventPairsList(): Array; + setArtifactEventPairsList(value: Array): PutExecutionRequest; + clearArtifactEventPairsList(): PutExecutionRequest; + addArtifactEventPairs(value?: PutExecutionRequest.ArtifactAndEvent, index?: number): PutExecutionRequest.ArtifactAndEvent; + + getContextsList(): Array; + setContextsList(value: Array): PutExecutionRequest; + clearContextsList(): PutExecutionRequest; + addContexts(value?: ml_metadata_proto_metadata_store_pb.Context, index?: number): ml_metadata_proto_metadata_store_pb.Context; + + getOptions(): PutExecutionRequest.Options | undefined; + setOptions(value?: PutExecutionRequest.Options): PutExecutionRequest; + hasOptions(): boolean; + clearOptions(): PutExecutionRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutExecutionRequest.AsObject; + static toObject(includeInstance: boolean, msg: PutExecutionRequest): PutExecutionRequest.AsObject; + static serializeBinaryToWriter(message: PutExecutionRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutExecutionRequest; + static deserializeBinaryFromReader(message: PutExecutionRequest, reader: jspb.BinaryReader): PutExecutionRequest; +} + +export namespace PutExecutionRequest { + export type AsObject = { + execution?: ml_metadata_proto_metadata_store_pb.Execution.AsObject, + artifactEventPairsList: Array, + contextsList: Array, + options?: PutExecutionRequest.Options.AsObject, + } + + export class ArtifactAndEvent extends jspb.Message { + getArtifact(): ml_metadata_proto_metadata_store_pb.Artifact | undefined; + setArtifact(value?: ml_metadata_proto_metadata_store_pb.Artifact): ArtifactAndEvent; + hasArtifact(): boolean; + clearArtifact(): ArtifactAndEvent; + + getEvent(): ml_metadata_proto_metadata_store_pb.Event | undefined; + setEvent(value?: ml_metadata_proto_metadata_store_pb.Event): ArtifactAndEvent; + hasEvent(): boolean; + clearEvent(): ArtifactAndEvent; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ArtifactAndEvent.AsObject; + static toObject(includeInstance: boolean, msg: ArtifactAndEvent): ArtifactAndEvent.AsObject; + static serializeBinaryToWriter(message: ArtifactAndEvent, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ArtifactAndEvent; + static deserializeBinaryFromReader(message: ArtifactAndEvent, reader: jspb.BinaryReader): ArtifactAndEvent; + } + + export namespace ArtifactAndEvent { + export type AsObject = { + artifact?: ml_metadata_proto_metadata_store_pb.Artifact.AsObject, + event?: ml_metadata_proto_metadata_store_pb.Event.AsObject, + } + } + + + export class Options extends jspb.Message { + getReuseContextIfAlreadyExist(): boolean; + setReuseContextIfAlreadyExist(value: boolean): Options; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Options.AsObject; + static toObject(includeInstance: boolean, msg: Options): Options.AsObject; + static serializeBinaryToWriter(message: Options, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Options; + static deserializeBinaryFromReader(message: Options, reader: jspb.BinaryReader): Options; + } + + export namespace Options { + export type AsObject = { + reuseContextIfAlreadyExist: boolean, + } + } + +} + +export class PutExecutionResponse extends jspb.Message { + getExecutionId(): number; + setExecutionId(value: number): PutExecutionResponse; + + getArtifactIdsList(): Array; + setArtifactIdsList(value: Array): PutExecutionResponse; + clearArtifactIdsList(): PutExecutionResponse; + addArtifactIds(value: number, index?: number): PutExecutionResponse; + + getContextIdsList(): Array; + setContextIdsList(value: Array): PutExecutionResponse; + clearContextIdsList(): PutExecutionResponse; + addContextIds(value: number, index?: number): PutExecutionResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutExecutionResponse.AsObject; + static toObject(includeInstance: boolean, msg: PutExecutionResponse): PutExecutionResponse.AsObject; + static serializeBinaryToWriter(message: PutExecutionResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutExecutionResponse; + static deserializeBinaryFromReader(message: PutExecutionResponse, reader: jspb.BinaryReader): PutExecutionResponse; +} + +export namespace PutExecutionResponse { + export type AsObject = { + executionId: number, + artifactIdsList: Array, + contextIdsList: Array, + } +} + +export class PutTypesRequest extends jspb.Message { + getArtifactTypesList(): Array; + setArtifactTypesList(value: Array): PutTypesRequest; + clearArtifactTypesList(): PutTypesRequest; + addArtifactTypes(value?: ml_metadata_proto_metadata_store_pb.ArtifactType, index?: number): ml_metadata_proto_metadata_store_pb.ArtifactType; + + getExecutionTypesList(): Array; + setExecutionTypesList(value: Array): PutTypesRequest; + clearExecutionTypesList(): PutTypesRequest; + addExecutionTypes(value?: ml_metadata_proto_metadata_store_pb.ExecutionType, index?: number): ml_metadata_proto_metadata_store_pb.ExecutionType; + + getContextTypesList(): Array; + setContextTypesList(value: Array): PutTypesRequest; + clearContextTypesList(): PutTypesRequest; + addContextTypes(value?: ml_metadata_proto_metadata_store_pb.ContextType, index?: number): ml_metadata_proto_metadata_store_pb.ContextType; + + getCanAddFields(): boolean; + setCanAddFields(value: boolean): PutTypesRequest; + + getCanOmitFields(): boolean; + setCanOmitFields(value: boolean): PutTypesRequest; + + getCanDeleteFields(): boolean; + setCanDeleteFields(value: boolean): PutTypesRequest; + + getAllFieldsMatch(): boolean; + setAllFieldsMatch(value: boolean): PutTypesRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutTypesRequest.AsObject; + static toObject(includeInstance: boolean, msg: PutTypesRequest): PutTypesRequest.AsObject; + static serializeBinaryToWriter(message: PutTypesRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutTypesRequest; + static deserializeBinaryFromReader(message: PutTypesRequest, reader: jspb.BinaryReader): PutTypesRequest; +} + +export namespace PutTypesRequest { + export type AsObject = { + artifactTypesList: Array, + executionTypesList: Array, + contextTypesList: Array, + canAddFields: boolean, + canOmitFields: boolean, + canDeleteFields: boolean, + allFieldsMatch: boolean, + } +} + +export class PutTypesResponse extends jspb.Message { + getArtifactTypeIdsList(): Array; + setArtifactTypeIdsList(value: Array): PutTypesResponse; + clearArtifactTypeIdsList(): PutTypesResponse; + addArtifactTypeIds(value: number, index?: number): PutTypesResponse; + + getExecutionTypeIdsList(): Array; + setExecutionTypeIdsList(value: Array): PutTypesResponse; + clearExecutionTypeIdsList(): PutTypesResponse; + addExecutionTypeIds(value: number, index?: number): PutTypesResponse; + + getContextTypeIdsList(): Array; + setContextTypeIdsList(value: Array): PutTypesResponse; + clearContextTypeIdsList(): PutTypesResponse; + addContextTypeIds(value: number, index?: number): PutTypesResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutTypesResponse.AsObject; + static toObject(includeInstance: boolean, msg: PutTypesResponse): PutTypesResponse.AsObject; + static serializeBinaryToWriter(message: PutTypesResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutTypesResponse; + static deserializeBinaryFromReader(message: PutTypesResponse, reader: jspb.BinaryReader): PutTypesResponse; +} + +export namespace PutTypesResponse { + export type AsObject = { + artifactTypeIdsList: Array, + executionTypeIdsList: Array, + contextTypeIdsList: Array, + } +} + +export class PutContextTypeRequest extends jspb.Message { + getContextType(): ml_metadata_proto_metadata_store_pb.ContextType | undefined; + setContextType(value?: ml_metadata_proto_metadata_store_pb.ContextType): PutContextTypeRequest; + hasContextType(): boolean; + clearContextType(): PutContextTypeRequest; + + getCanAddFields(): boolean; + setCanAddFields(value: boolean): PutContextTypeRequest; + + getCanOmitFields(): boolean; + setCanOmitFields(value: boolean): PutContextTypeRequest; + + getCanDeleteFields(): boolean; + setCanDeleteFields(value: boolean): PutContextTypeRequest; + + getAllFieldsMatch(): boolean; + setAllFieldsMatch(value: boolean): PutContextTypeRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutContextTypeRequest.AsObject; + static toObject(includeInstance: boolean, msg: PutContextTypeRequest): PutContextTypeRequest.AsObject; + static serializeBinaryToWriter(message: PutContextTypeRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutContextTypeRequest; + static deserializeBinaryFromReader(message: PutContextTypeRequest, reader: jspb.BinaryReader): PutContextTypeRequest; +} + +export namespace PutContextTypeRequest { + export type AsObject = { + contextType?: ml_metadata_proto_metadata_store_pb.ContextType.AsObject, + canAddFields: boolean, + canOmitFields: boolean, + canDeleteFields: boolean, + allFieldsMatch: boolean, + } +} + +export class PutContextTypeResponse extends jspb.Message { + getTypeId(): number; + setTypeId(value: number): PutContextTypeResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutContextTypeResponse.AsObject; + static toObject(includeInstance: boolean, msg: PutContextTypeResponse): PutContextTypeResponse.AsObject; + static serializeBinaryToWriter(message: PutContextTypeResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutContextTypeResponse; + static deserializeBinaryFromReader(message: PutContextTypeResponse, reader: jspb.BinaryReader): PutContextTypeResponse; +} + +export namespace PutContextTypeResponse { + export type AsObject = { + typeId: number, + } +} + +export class PutContextsRequest extends jspb.Message { + getContextsList(): Array; + setContextsList(value: Array): PutContextsRequest; + clearContextsList(): PutContextsRequest; + addContexts(value?: ml_metadata_proto_metadata_store_pb.Context, index?: number): ml_metadata_proto_metadata_store_pb.Context; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutContextsRequest.AsObject; + static toObject(includeInstance: boolean, msg: PutContextsRequest): PutContextsRequest.AsObject; + static serializeBinaryToWriter(message: PutContextsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutContextsRequest; + static deserializeBinaryFromReader(message: PutContextsRequest, reader: jspb.BinaryReader): PutContextsRequest; +} + +export namespace PutContextsRequest { + export type AsObject = { + contextsList: Array, + } +} + +export class PutContextsResponse extends jspb.Message { + getContextIdsList(): Array; + setContextIdsList(value: Array): PutContextsResponse; + clearContextIdsList(): PutContextsResponse; + addContextIds(value: number, index?: number): PutContextsResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutContextsResponse.AsObject; + static toObject(includeInstance: boolean, msg: PutContextsResponse): PutContextsResponse.AsObject; + static serializeBinaryToWriter(message: PutContextsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutContextsResponse; + static deserializeBinaryFromReader(message: PutContextsResponse, reader: jspb.BinaryReader): PutContextsResponse; +} + +export namespace PutContextsResponse { + export type AsObject = { + contextIdsList: Array, + } +} + +export class PutAttributionsAndAssociationsRequest extends jspb.Message { + getAttributionsList(): Array; + setAttributionsList(value: Array): PutAttributionsAndAssociationsRequest; + clearAttributionsList(): PutAttributionsAndAssociationsRequest; + addAttributions(value?: ml_metadata_proto_metadata_store_pb.Attribution, index?: number): ml_metadata_proto_metadata_store_pb.Attribution; + + getAssociationsList(): Array; + setAssociationsList(value: Array): PutAttributionsAndAssociationsRequest; + clearAssociationsList(): PutAttributionsAndAssociationsRequest; + addAssociations(value?: ml_metadata_proto_metadata_store_pb.Association, index?: number): ml_metadata_proto_metadata_store_pb.Association; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutAttributionsAndAssociationsRequest.AsObject; + static toObject(includeInstance: boolean, msg: PutAttributionsAndAssociationsRequest): PutAttributionsAndAssociationsRequest.AsObject; + static serializeBinaryToWriter(message: PutAttributionsAndAssociationsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutAttributionsAndAssociationsRequest; + static deserializeBinaryFromReader(message: PutAttributionsAndAssociationsRequest, reader: jspb.BinaryReader): PutAttributionsAndAssociationsRequest; +} + +export namespace PutAttributionsAndAssociationsRequest { + export type AsObject = { + attributionsList: Array, + associationsList: Array, + } +} + +export class PutAttributionsAndAssociationsResponse extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutAttributionsAndAssociationsResponse.AsObject; + static toObject(includeInstance: boolean, msg: PutAttributionsAndAssociationsResponse): PutAttributionsAndAssociationsResponse.AsObject; + static serializeBinaryToWriter(message: PutAttributionsAndAssociationsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutAttributionsAndAssociationsResponse; + static deserializeBinaryFromReader(message: PutAttributionsAndAssociationsResponse, reader: jspb.BinaryReader): PutAttributionsAndAssociationsResponse; +} + +export namespace PutAttributionsAndAssociationsResponse { + export type AsObject = { + } +} + +export class PutParentContextsRequest extends jspb.Message { + getParentContextsList(): Array; + setParentContextsList(value: Array): PutParentContextsRequest; + clearParentContextsList(): PutParentContextsRequest; + addParentContexts(value?: ml_metadata_proto_metadata_store_pb.ParentContext, index?: number): ml_metadata_proto_metadata_store_pb.ParentContext; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutParentContextsRequest.AsObject; + static toObject(includeInstance: boolean, msg: PutParentContextsRequest): PutParentContextsRequest.AsObject; + static serializeBinaryToWriter(message: PutParentContextsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutParentContextsRequest; + static deserializeBinaryFromReader(message: PutParentContextsRequest, reader: jspb.BinaryReader): PutParentContextsRequest; +} + +export namespace PutParentContextsRequest { + export type AsObject = { + parentContextsList: Array, + } +} + +export class PutParentContextsResponse extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PutParentContextsResponse.AsObject; + static toObject(includeInstance: boolean, msg: PutParentContextsResponse): PutParentContextsResponse.AsObject; + static serializeBinaryToWriter(message: PutParentContextsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PutParentContextsResponse; + static deserializeBinaryFromReader(message: PutParentContextsResponse, reader: jspb.BinaryReader): PutParentContextsResponse; +} + +export namespace PutParentContextsResponse { + export type AsObject = { + } +} + +export class GetArtifactsByTypeRequest extends jspb.Message { + getTypeName(): string; + setTypeName(value: string): GetArtifactsByTypeRequest; + + getTypeVersion(): string; + setTypeVersion(value: string): GetArtifactsByTypeRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactsByTypeRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactsByTypeRequest): GetArtifactsByTypeRequest.AsObject; + static serializeBinaryToWriter(message: GetArtifactsByTypeRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactsByTypeRequest; + static deserializeBinaryFromReader(message: GetArtifactsByTypeRequest, reader: jspb.BinaryReader): GetArtifactsByTypeRequest; +} + +export namespace GetArtifactsByTypeRequest { + export type AsObject = { + typeName: string, + typeVersion: string, + } +} + +export class GetArtifactsByTypeResponse extends jspb.Message { + getArtifactsList(): Array; + setArtifactsList(value: Array): GetArtifactsByTypeResponse; + clearArtifactsList(): GetArtifactsByTypeResponse; + addArtifacts(value?: ml_metadata_proto_metadata_store_pb.Artifact, index?: number): ml_metadata_proto_metadata_store_pb.Artifact; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactsByTypeResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactsByTypeResponse): GetArtifactsByTypeResponse.AsObject; + static serializeBinaryToWriter(message: GetArtifactsByTypeResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactsByTypeResponse; + static deserializeBinaryFromReader(message: GetArtifactsByTypeResponse, reader: jspb.BinaryReader): GetArtifactsByTypeResponse; +} + +export namespace GetArtifactsByTypeResponse { + export type AsObject = { + artifactsList: Array, + } +} + +export class GetArtifactByTypeAndNameRequest extends jspb.Message { + getTypeName(): string; + setTypeName(value: string): GetArtifactByTypeAndNameRequest; + + getTypeVersion(): string; + setTypeVersion(value: string): GetArtifactByTypeAndNameRequest; + + getArtifactName(): string; + setArtifactName(value: string): GetArtifactByTypeAndNameRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactByTypeAndNameRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactByTypeAndNameRequest): GetArtifactByTypeAndNameRequest.AsObject; + static serializeBinaryToWriter(message: GetArtifactByTypeAndNameRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactByTypeAndNameRequest; + static deserializeBinaryFromReader(message: GetArtifactByTypeAndNameRequest, reader: jspb.BinaryReader): GetArtifactByTypeAndNameRequest; +} + +export namespace GetArtifactByTypeAndNameRequest { + export type AsObject = { + typeName: string, + typeVersion: string, + artifactName: string, + } +} + +export class GetArtifactByTypeAndNameResponse extends jspb.Message { + getArtifact(): ml_metadata_proto_metadata_store_pb.Artifact | undefined; + setArtifact(value?: ml_metadata_proto_metadata_store_pb.Artifact): GetArtifactByTypeAndNameResponse; + hasArtifact(): boolean; + clearArtifact(): GetArtifactByTypeAndNameResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactByTypeAndNameResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactByTypeAndNameResponse): GetArtifactByTypeAndNameResponse.AsObject; + static serializeBinaryToWriter(message: GetArtifactByTypeAndNameResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactByTypeAndNameResponse; + static deserializeBinaryFromReader(message: GetArtifactByTypeAndNameResponse, reader: jspb.BinaryReader): GetArtifactByTypeAndNameResponse; +} + +export namespace GetArtifactByTypeAndNameResponse { + export type AsObject = { + artifact?: ml_metadata_proto_metadata_store_pb.Artifact.AsObject, + } +} + +export class GetArtifactsByIDRequest extends jspb.Message { + getArtifactIdsList(): Array; + setArtifactIdsList(value: Array): GetArtifactsByIDRequest; + clearArtifactIdsList(): GetArtifactsByIDRequest; + addArtifactIds(value: number, index?: number): GetArtifactsByIDRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactsByIDRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactsByIDRequest): GetArtifactsByIDRequest.AsObject; + static serializeBinaryToWriter(message: GetArtifactsByIDRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactsByIDRequest; + static deserializeBinaryFromReader(message: GetArtifactsByIDRequest, reader: jspb.BinaryReader): GetArtifactsByIDRequest; +} + +export namespace GetArtifactsByIDRequest { + export type AsObject = { + artifactIdsList: Array, + } +} + +export class GetArtifactsByIDResponse extends jspb.Message { + getArtifactsList(): Array; + setArtifactsList(value: Array): GetArtifactsByIDResponse; + clearArtifactsList(): GetArtifactsByIDResponse; + addArtifacts(value?: ml_metadata_proto_metadata_store_pb.Artifact, index?: number): ml_metadata_proto_metadata_store_pb.Artifact; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactsByIDResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactsByIDResponse): GetArtifactsByIDResponse.AsObject; + static serializeBinaryToWriter(message: GetArtifactsByIDResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactsByIDResponse; + static deserializeBinaryFromReader(message: GetArtifactsByIDResponse, reader: jspb.BinaryReader): GetArtifactsByIDResponse; +} + +export namespace GetArtifactsByIDResponse { + export type AsObject = { + artifactsList: Array, + } +} + +export class GetArtifactsRequest extends jspb.Message { + getOptions(): ml_metadata_proto_metadata_store_pb.ListOperationOptions | undefined; + setOptions(value?: ml_metadata_proto_metadata_store_pb.ListOperationOptions): GetArtifactsRequest; + hasOptions(): boolean; + clearOptions(): GetArtifactsRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactsRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactsRequest): GetArtifactsRequest.AsObject; + static serializeBinaryToWriter(message: GetArtifactsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactsRequest; + static deserializeBinaryFromReader(message: GetArtifactsRequest, reader: jspb.BinaryReader): GetArtifactsRequest; +} + +export namespace GetArtifactsRequest { + export type AsObject = { + options?: ml_metadata_proto_metadata_store_pb.ListOperationOptions.AsObject, + } +} + +export class GetArtifactsResponse extends jspb.Message { + getArtifactsList(): Array; + setArtifactsList(value: Array): GetArtifactsResponse; + clearArtifactsList(): GetArtifactsResponse; + addArtifacts(value?: ml_metadata_proto_metadata_store_pb.Artifact, index?: number): ml_metadata_proto_metadata_store_pb.Artifact; + + getNextPageToken(): string; + setNextPageToken(value: string): GetArtifactsResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactsResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactsResponse): GetArtifactsResponse.AsObject; + static serializeBinaryToWriter(message: GetArtifactsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactsResponse; + static deserializeBinaryFromReader(message: GetArtifactsResponse, reader: jspb.BinaryReader): GetArtifactsResponse; +} + +export namespace GetArtifactsResponse { + export type AsObject = { + artifactsList: Array, + nextPageToken: string, + } +} + +export class GetArtifactsByURIRequest extends jspb.Message { + getUrisList(): Array; + setUrisList(value: Array): GetArtifactsByURIRequest; + clearUrisList(): GetArtifactsByURIRequest; + addUris(value: string, index?: number): GetArtifactsByURIRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactsByURIRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactsByURIRequest): GetArtifactsByURIRequest.AsObject; + static serializeBinaryToWriter(message: GetArtifactsByURIRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactsByURIRequest; + static deserializeBinaryFromReader(message: GetArtifactsByURIRequest, reader: jspb.BinaryReader): GetArtifactsByURIRequest; +} + +export namespace GetArtifactsByURIRequest { + export type AsObject = { + urisList: Array, + } +} + +export class GetArtifactsByURIResponse extends jspb.Message { + getArtifactsList(): Array; + setArtifactsList(value: Array): GetArtifactsByURIResponse; + clearArtifactsList(): GetArtifactsByURIResponse; + addArtifacts(value?: ml_metadata_proto_metadata_store_pb.Artifact, index?: number): ml_metadata_proto_metadata_store_pb.Artifact; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactsByURIResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactsByURIResponse): GetArtifactsByURIResponse.AsObject; + static serializeBinaryToWriter(message: GetArtifactsByURIResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactsByURIResponse; + static deserializeBinaryFromReader(message: GetArtifactsByURIResponse, reader: jspb.BinaryReader): GetArtifactsByURIResponse; +} + +export namespace GetArtifactsByURIResponse { + export type AsObject = { + artifactsList: Array, + } +} + +export class GetExecutionsRequest extends jspb.Message { + getOptions(): ml_metadata_proto_metadata_store_pb.ListOperationOptions | undefined; + setOptions(value?: ml_metadata_proto_metadata_store_pb.ListOperationOptions): GetExecutionsRequest; + hasOptions(): boolean; + clearOptions(): GetExecutionsRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionsRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionsRequest): GetExecutionsRequest.AsObject; + static serializeBinaryToWriter(message: GetExecutionsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionsRequest; + static deserializeBinaryFromReader(message: GetExecutionsRequest, reader: jspb.BinaryReader): GetExecutionsRequest; +} + +export namespace GetExecutionsRequest { + export type AsObject = { + options?: ml_metadata_proto_metadata_store_pb.ListOperationOptions.AsObject, + } +} + +export class GetExecutionsResponse extends jspb.Message { + getExecutionsList(): Array; + setExecutionsList(value: Array): GetExecutionsResponse; + clearExecutionsList(): GetExecutionsResponse; + addExecutions(value?: ml_metadata_proto_metadata_store_pb.Execution, index?: number): ml_metadata_proto_metadata_store_pb.Execution; + + getNextPageToken(): string; + setNextPageToken(value: string): GetExecutionsResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionsResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionsResponse): GetExecutionsResponse.AsObject; + static serializeBinaryToWriter(message: GetExecutionsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionsResponse; + static deserializeBinaryFromReader(message: GetExecutionsResponse, reader: jspb.BinaryReader): GetExecutionsResponse; +} + +export namespace GetExecutionsResponse { + export type AsObject = { + executionsList: Array, + nextPageToken: string, + } +} + +export class GetArtifactTypeRequest extends jspb.Message { + getTypeName(): string; + setTypeName(value: string): GetArtifactTypeRequest; + + getTypeVersion(): string; + setTypeVersion(value: string): GetArtifactTypeRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactTypeRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactTypeRequest): GetArtifactTypeRequest.AsObject; + static serializeBinaryToWriter(message: GetArtifactTypeRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactTypeRequest; + static deserializeBinaryFromReader(message: GetArtifactTypeRequest, reader: jspb.BinaryReader): GetArtifactTypeRequest; +} + +export namespace GetArtifactTypeRequest { + export type AsObject = { + typeName: string, + typeVersion: string, + } +} + +export class GetArtifactTypeResponse extends jspb.Message { + getArtifactType(): ml_metadata_proto_metadata_store_pb.ArtifactType | undefined; + setArtifactType(value?: ml_metadata_proto_metadata_store_pb.ArtifactType): GetArtifactTypeResponse; + hasArtifactType(): boolean; + clearArtifactType(): GetArtifactTypeResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactTypeResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactTypeResponse): GetArtifactTypeResponse.AsObject; + static serializeBinaryToWriter(message: GetArtifactTypeResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactTypeResponse; + static deserializeBinaryFromReader(message: GetArtifactTypeResponse, reader: jspb.BinaryReader): GetArtifactTypeResponse; +} + +export namespace GetArtifactTypeResponse { + export type AsObject = { + artifactType?: ml_metadata_proto_metadata_store_pb.ArtifactType.AsObject, + } +} + +export class GetArtifactTypesRequest extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactTypesRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactTypesRequest): GetArtifactTypesRequest.AsObject; + static serializeBinaryToWriter(message: GetArtifactTypesRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactTypesRequest; + static deserializeBinaryFromReader(message: GetArtifactTypesRequest, reader: jspb.BinaryReader): GetArtifactTypesRequest; +} + +export namespace GetArtifactTypesRequest { + export type AsObject = { + } +} + +export class GetArtifactTypesResponse extends jspb.Message { + getArtifactTypesList(): Array; + setArtifactTypesList(value: Array): GetArtifactTypesResponse; + clearArtifactTypesList(): GetArtifactTypesResponse; + addArtifactTypes(value?: ml_metadata_proto_metadata_store_pb.ArtifactType, index?: number): ml_metadata_proto_metadata_store_pb.ArtifactType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactTypesResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactTypesResponse): GetArtifactTypesResponse.AsObject; + static serializeBinaryToWriter(message: GetArtifactTypesResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactTypesResponse; + static deserializeBinaryFromReader(message: GetArtifactTypesResponse, reader: jspb.BinaryReader): GetArtifactTypesResponse; +} + +export namespace GetArtifactTypesResponse { + export type AsObject = { + artifactTypesList: Array, + } +} + +export class GetExecutionTypesRequest extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionTypesRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionTypesRequest): GetExecutionTypesRequest.AsObject; + static serializeBinaryToWriter(message: GetExecutionTypesRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionTypesRequest; + static deserializeBinaryFromReader(message: GetExecutionTypesRequest, reader: jspb.BinaryReader): GetExecutionTypesRequest; +} + +export namespace GetExecutionTypesRequest { + export type AsObject = { + } +} + +export class GetExecutionTypesResponse extends jspb.Message { + getExecutionTypesList(): Array; + setExecutionTypesList(value: Array): GetExecutionTypesResponse; + clearExecutionTypesList(): GetExecutionTypesResponse; + addExecutionTypes(value?: ml_metadata_proto_metadata_store_pb.ExecutionType, index?: number): ml_metadata_proto_metadata_store_pb.ExecutionType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionTypesResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionTypesResponse): GetExecutionTypesResponse.AsObject; + static serializeBinaryToWriter(message: GetExecutionTypesResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionTypesResponse; + static deserializeBinaryFromReader(message: GetExecutionTypesResponse, reader: jspb.BinaryReader): GetExecutionTypesResponse; +} + +export namespace GetExecutionTypesResponse { + export type AsObject = { + executionTypesList: Array, + } +} + +export class GetContextTypesRequest extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextTypesRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetContextTypesRequest): GetContextTypesRequest.AsObject; + static serializeBinaryToWriter(message: GetContextTypesRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextTypesRequest; + static deserializeBinaryFromReader(message: GetContextTypesRequest, reader: jspb.BinaryReader): GetContextTypesRequest; +} + +export namespace GetContextTypesRequest { + export type AsObject = { + } +} + +export class GetContextTypesResponse extends jspb.Message { + getContextTypesList(): Array; + setContextTypesList(value: Array): GetContextTypesResponse; + clearContextTypesList(): GetContextTypesResponse; + addContextTypes(value?: ml_metadata_proto_metadata_store_pb.ContextType, index?: number): ml_metadata_proto_metadata_store_pb.ContextType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextTypesResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetContextTypesResponse): GetContextTypesResponse.AsObject; + static serializeBinaryToWriter(message: GetContextTypesResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextTypesResponse; + static deserializeBinaryFromReader(message: GetContextTypesResponse, reader: jspb.BinaryReader): GetContextTypesResponse; +} + +export namespace GetContextTypesResponse { + export type AsObject = { + contextTypesList: Array, + } +} + +export class GetExecutionsByTypeRequest extends jspb.Message { + getTypeName(): string; + setTypeName(value: string): GetExecutionsByTypeRequest; + + getTypeVersion(): string; + setTypeVersion(value: string): GetExecutionsByTypeRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionsByTypeRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionsByTypeRequest): GetExecutionsByTypeRequest.AsObject; + static serializeBinaryToWriter(message: GetExecutionsByTypeRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionsByTypeRequest; + static deserializeBinaryFromReader(message: GetExecutionsByTypeRequest, reader: jspb.BinaryReader): GetExecutionsByTypeRequest; +} + +export namespace GetExecutionsByTypeRequest { + export type AsObject = { + typeName: string, + typeVersion: string, + } +} + +export class GetExecutionsByTypeResponse extends jspb.Message { + getExecutionsList(): Array; + setExecutionsList(value: Array): GetExecutionsByTypeResponse; + clearExecutionsList(): GetExecutionsByTypeResponse; + addExecutions(value?: ml_metadata_proto_metadata_store_pb.Execution, index?: number): ml_metadata_proto_metadata_store_pb.Execution; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionsByTypeResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionsByTypeResponse): GetExecutionsByTypeResponse.AsObject; + static serializeBinaryToWriter(message: GetExecutionsByTypeResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionsByTypeResponse; + static deserializeBinaryFromReader(message: GetExecutionsByTypeResponse, reader: jspb.BinaryReader): GetExecutionsByTypeResponse; +} + +export namespace GetExecutionsByTypeResponse { + export type AsObject = { + executionsList: Array, + } +} + +export class GetExecutionByTypeAndNameRequest extends jspb.Message { + getTypeName(): string; + setTypeName(value: string): GetExecutionByTypeAndNameRequest; + + getTypeVersion(): string; + setTypeVersion(value: string): GetExecutionByTypeAndNameRequest; + + getExecutionName(): string; + setExecutionName(value: string): GetExecutionByTypeAndNameRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionByTypeAndNameRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionByTypeAndNameRequest): GetExecutionByTypeAndNameRequest.AsObject; + static serializeBinaryToWriter(message: GetExecutionByTypeAndNameRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionByTypeAndNameRequest; + static deserializeBinaryFromReader(message: GetExecutionByTypeAndNameRequest, reader: jspb.BinaryReader): GetExecutionByTypeAndNameRequest; +} + +export namespace GetExecutionByTypeAndNameRequest { + export type AsObject = { + typeName: string, + typeVersion: string, + executionName: string, + } +} + +export class GetExecutionByTypeAndNameResponse extends jspb.Message { + getExecution(): ml_metadata_proto_metadata_store_pb.Execution | undefined; + setExecution(value?: ml_metadata_proto_metadata_store_pb.Execution): GetExecutionByTypeAndNameResponse; + hasExecution(): boolean; + clearExecution(): GetExecutionByTypeAndNameResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionByTypeAndNameResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionByTypeAndNameResponse): GetExecutionByTypeAndNameResponse.AsObject; + static serializeBinaryToWriter(message: GetExecutionByTypeAndNameResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionByTypeAndNameResponse; + static deserializeBinaryFromReader(message: GetExecutionByTypeAndNameResponse, reader: jspb.BinaryReader): GetExecutionByTypeAndNameResponse; +} + +export namespace GetExecutionByTypeAndNameResponse { + export type AsObject = { + execution?: ml_metadata_proto_metadata_store_pb.Execution.AsObject, + } +} + +export class GetExecutionsByIDRequest extends jspb.Message { + getExecutionIdsList(): Array; + setExecutionIdsList(value: Array): GetExecutionsByIDRequest; + clearExecutionIdsList(): GetExecutionsByIDRequest; + addExecutionIds(value: number, index?: number): GetExecutionsByIDRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionsByIDRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionsByIDRequest): GetExecutionsByIDRequest.AsObject; + static serializeBinaryToWriter(message: GetExecutionsByIDRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionsByIDRequest; + static deserializeBinaryFromReader(message: GetExecutionsByIDRequest, reader: jspb.BinaryReader): GetExecutionsByIDRequest; +} + +export namespace GetExecutionsByIDRequest { + export type AsObject = { + executionIdsList: Array, + } +} + +export class GetExecutionsByIDResponse extends jspb.Message { + getExecutionsList(): Array; + setExecutionsList(value: Array): GetExecutionsByIDResponse; + clearExecutionsList(): GetExecutionsByIDResponse; + addExecutions(value?: ml_metadata_proto_metadata_store_pb.Execution, index?: number): ml_metadata_proto_metadata_store_pb.Execution; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionsByIDResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionsByIDResponse): GetExecutionsByIDResponse.AsObject; + static serializeBinaryToWriter(message: GetExecutionsByIDResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionsByIDResponse; + static deserializeBinaryFromReader(message: GetExecutionsByIDResponse, reader: jspb.BinaryReader): GetExecutionsByIDResponse; +} + +export namespace GetExecutionsByIDResponse { + export type AsObject = { + executionsList: Array, + } +} + +export class GetExecutionTypeRequest extends jspb.Message { + getTypeName(): string; + setTypeName(value: string): GetExecutionTypeRequest; + + getTypeVersion(): string; + setTypeVersion(value: string): GetExecutionTypeRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionTypeRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionTypeRequest): GetExecutionTypeRequest.AsObject; + static serializeBinaryToWriter(message: GetExecutionTypeRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionTypeRequest; + static deserializeBinaryFromReader(message: GetExecutionTypeRequest, reader: jspb.BinaryReader): GetExecutionTypeRequest; +} + +export namespace GetExecutionTypeRequest { + export type AsObject = { + typeName: string, + typeVersion: string, + } +} + +export class GetExecutionTypeResponse extends jspb.Message { + getExecutionType(): ml_metadata_proto_metadata_store_pb.ExecutionType | undefined; + setExecutionType(value?: ml_metadata_proto_metadata_store_pb.ExecutionType): GetExecutionTypeResponse; + hasExecutionType(): boolean; + clearExecutionType(): GetExecutionTypeResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionTypeResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionTypeResponse): GetExecutionTypeResponse.AsObject; + static serializeBinaryToWriter(message: GetExecutionTypeResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionTypeResponse; + static deserializeBinaryFromReader(message: GetExecutionTypeResponse, reader: jspb.BinaryReader): GetExecutionTypeResponse; +} + +export namespace GetExecutionTypeResponse { + export type AsObject = { + executionType?: ml_metadata_proto_metadata_store_pb.ExecutionType.AsObject, + } +} + +export class GetEventsByExecutionIDsRequest extends jspb.Message { + getExecutionIdsList(): Array; + setExecutionIdsList(value: Array): GetEventsByExecutionIDsRequest; + clearExecutionIdsList(): GetEventsByExecutionIDsRequest; + addExecutionIds(value: number, index?: number): GetEventsByExecutionIDsRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetEventsByExecutionIDsRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetEventsByExecutionIDsRequest): GetEventsByExecutionIDsRequest.AsObject; + static serializeBinaryToWriter(message: GetEventsByExecutionIDsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetEventsByExecutionIDsRequest; + static deserializeBinaryFromReader(message: GetEventsByExecutionIDsRequest, reader: jspb.BinaryReader): GetEventsByExecutionIDsRequest; +} + +export namespace GetEventsByExecutionIDsRequest { + export type AsObject = { + executionIdsList: Array, + } +} + +export class GetEventsByExecutionIDsResponse extends jspb.Message { + getEventsList(): Array; + setEventsList(value: Array): GetEventsByExecutionIDsResponse; + clearEventsList(): GetEventsByExecutionIDsResponse; + addEvents(value?: ml_metadata_proto_metadata_store_pb.Event, index?: number): ml_metadata_proto_metadata_store_pb.Event; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetEventsByExecutionIDsResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetEventsByExecutionIDsResponse): GetEventsByExecutionIDsResponse.AsObject; + static serializeBinaryToWriter(message: GetEventsByExecutionIDsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetEventsByExecutionIDsResponse; + static deserializeBinaryFromReader(message: GetEventsByExecutionIDsResponse, reader: jspb.BinaryReader): GetEventsByExecutionIDsResponse; +} + +export namespace GetEventsByExecutionIDsResponse { + export type AsObject = { + eventsList: Array, + } +} + +export class GetEventsByArtifactIDsRequest extends jspb.Message { + getArtifactIdsList(): Array; + setArtifactIdsList(value: Array): GetEventsByArtifactIDsRequest; + clearArtifactIdsList(): GetEventsByArtifactIDsRequest; + addArtifactIds(value: number, index?: number): GetEventsByArtifactIDsRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetEventsByArtifactIDsRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetEventsByArtifactIDsRequest): GetEventsByArtifactIDsRequest.AsObject; + static serializeBinaryToWriter(message: GetEventsByArtifactIDsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetEventsByArtifactIDsRequest; + static deserializeBinaryFromReader(message: GetEventsByArtifactIDsRequest, reader: jspb.BinaryReader): GetEventsByArtifactIDsRequest; +} + +export namespace GetEventsByArtifactIDsRequest { + export type AsObject = { + artifactIdsList: Array, + } +} + +export class GetEventsByArtifactIDsResponse extends jspb.Message { + getEventsList(): Array; + setEventsList(value: Array): GetEventsByArtifactIDsResponse; + clearEventsList(): GetEventsByArtifactIDsResponse; + addEvents(value?: ml_metadata_proto_metadata_store_pb.Event, index?: number): ml_metadata_proto_metadata_store_pb.Event; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetEventsByArtifactIDsResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetEventsByArtifactIDsResponse): GetEventsByArtifactIDsResponse.AsObject; + static serializeBinaryToWriter(message: GetEventsByArtifactIDsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetEventsByArtifactIDsResponse; + static deserializeBinaryFromReader(message: GetEventsByArtifactIDsResponse, reader: jspb.BinaryReader): GetEventsByArtifactIDsResponse; +} + +export namespace GetEventsByArtifactIDsResponse { + export type AsObject = { + eventsList: Array, + } +} + +export class GetArtifactTypesByIDRequest extends jspb.Message { + getTypeIdsList(): Array; + setTypeIdsList(value: Array): GetArtifactTypesByIDRequest; + clearTypeIdsList(): GetArtifactTypesByIDRequest; + addTypeIds(value: number, index?: number): GetArtifactTypesByIDRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactTypesByIDRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactTypesByIDRequest): GetArtifactTypesByIDRequest.AsObject; + static serializeBinaryToWriter(message: GetArtifactTypesByIDRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactTypesByIDRequest; + static deserializeBinaryFromReader(message: GetArtifactTypesByIDRequest, reader: jspb.BinaryReader): GetArtifactTypesByIDRequest; +} + +export namespace GetArtifactTypesByIDRequest { + export type AsObject = { + typeIdsList: Array, + } +} + +export class GetArtifactTypesByIDResponse extends jspb.Message { + getArtifactTypesList(): Array; + setArtifactTypesList(value: Array): GetArtifactTypesByIDResponse; + clearArtifactTypesList(): GetArtifactTypesByIDResponse; + addArtifactTypes(value?: ml_metadata_proto_metadata_store_pb.ArtifactType, index?: number): ml_metadata_proto_metadata_store_pb.ArtifactType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactTypesByIDResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactTypesByIDResponse): GetArtifactTypesByIDResponse.AsObject; + static serializeBinaryToWriter(message: GetArtifactTypesByIDResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactTypesByIDResponse; + static deserializeBinaryFromReader(message: GetArtifactTypesByIDResponse, reader: jspb.BinaryReader): GetArtifactTypesByIDResponse; +} + +export namespace GetArtifactTypesByIDResponse { + export type AsObject = { + artifactTypesList: Array, + } +} + +export class GetExecutionTypesByIDRequest extends jspb.Message { + getTypeIdsList(): Array; + setTypeIdsList(value: Array): GetExecutionTypesByIDRequest; + clearTypeIdsList(): GetExecutionTypesByIDRequest; + addTypeIds(value: number, index?: number): GetExecutionTypesByIDRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionTypesByIDRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionTypesByIDRequest): GetExecutionTypesByIDRequest.AsObject; + static serializeBinaryToWriter(message: GetExecutionTypesByIDRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionTypesByIDRequest; + static deserializeBinaryFromReader(message: GetExecutionTypesByIDRequest, reader: jspb.BinaryReader): GetExecutionTypesByIDRequest; +} + +export namespace GetExecutionTypesByIDRequest { + export type AsObject = { + typeIdsList: Array, + } +} + +export class GetExecutionTypesByIDResponse extends jspb.Message { + getExecutionTypesList(): Array; + setExecutionTypesList(value: Array): GetExecutionTypesByIDResponse; + clearExecutionTypesList(): GetExecutionTypesByIDResponse; + addExecutionTypes(value?: ml_metadata_proto_metadata_store_pb.ExecutionType, index?: number): ml_metadata_proto_metadata_store_pb.ExecutionType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionTypesByIDResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionTypesByIDResponse): GetExecutionTypesByIDResponse.AsObject; + static serializeBinaryToWriter(message: GetExecutionTypesByIDResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionTypesByIDResponse; + static deserializeBinaryFromReader(message: GetExecutionTypesByIDResponse, reader: jspb.BinaryReader): GetExecutionTypesByIDResponse; +} + +export namespace GetExecutionTypesByIDResponse { + export type AsObject = { + executionTypesList: Array, + } +} + +export class GetContextTypeRequest extends jspb.Message { + getTypeName(): string; + setTypeName(value: string): GetContextTypeRequest; + + getTypeVersion(): string; + setTypeVersion(value: string): GetContextTypeRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextTypeRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetContextTypeRequest): GetContextTypeRequest.AsObject; + static serializeBinaryToWriter(message: GetContextTypeRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextTypeRequest; + static deserializeBinaryFromReader(message: GetContextTypeRequest, reader: jspb.BinaryReader): GetContextTypeRequest; +} + +export namespace GetContextTypeRequest { + export type AsObject = { + typeName: string, + typeVersion: string, + } +} + +export class GetContextTypeResponse extends jspb.Message { + getContextType(): ml_metadata_proto_metadata_store_pb.ContextType | undefined; + setContextType(value?: ml_metadata_proto_metadata_store_pb.ContextType): GetContextTypeResponse; + hasContextType(): boolean; + clearContextType(): GetContextTypeResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextTypeResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetContextTypeResponse): GetContextTypeResponse.AsObject; + static serializeBinaryToWriter(message: GetContextTypeResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextTypeResponse; + static deserializeBinaryFromReader(message: GetContextTypeResponse, reader: jspb.BinaryReader): GetContextTypeResponse; +} + +export namespace GetContextTypeResponse { + export type AsObject = { + contextType?: ml_metadata_proto_metadata_store_pb.ContextType.AsObject, + } +} + +export class GetContextTypesByIDRequest extends jspb.Message { + getTypeIdsList(): Array; + setTypeIdsList(value: Array): GetContextTypesByIDRequest; + clearTypeIdsList(): GetContextTypesByIDRequest; + addTypeIds(value: number, index?: number): GetContextTypesByIDRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextTypesByIDRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetContextTypesByIDRequest): GetContextTypesByIDRequest.AsObject; + static serializeBinaryToWriter(message: GetContextTypesByIDRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextTypesByIDRequest; + static deserializeBinaryFromReader(message: GetContextTypesByIDRequest, reader: jspb.BinaryReader): GetContextTypesByIDRequest; +} + +export namespace GetContextTypesByIDRequest { + export type AsObject = { + typeIdsList: Array, + } +} + +export class GetContextTypesByIDResponse extends jspb.Message { + getContextTypesList(): Array; + setContextTypesList(value: Array): GetContextTypesByIDResponse; + clearContextTypesList(): GetContextTypesByIDResponse; + addContextTypes(value?: ml_metadata_proto_metadata_store_pb.ContextType, index?: number): ml_metadata_proto_metadata_store_pb.ContextType; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextTypesByIDResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetContextTypesByIDResponse): GetContextTypesByIDResponse.AsObject; + static serializeBinaryToWriter(message: GetContextTypesByIDResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextTypesByIDResponse; + static deserializeBinaryFromReader(message: GetContextTypesByIDResponse, reader: jspb.BinaryReader): GetContextTypesByIDResponse; +} + +export namespace GetContextTypesByIDResponse { + export type AsObject = { + contextTypesList: Array, + } +} + +export class GetContextsRequest extends jspb.Message { + getOptions(): ml_metadata_proto_metadata_store_pb.ListOperationOptions | undefined; + setOptions(value?: ml_metadata_proto_metadata_store_pb.ListOperationOptions): GetContextsRequest; + hasOptions(): boolean; + clearOptions(): GetContextsRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextsRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetContextsRequest): GetContextsRequest.AsObject; + static serializeBinaryToWriter(message: GetContextsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextsRequest; + static deserializeBinaryFromReader(message: GetContextsRequest, reader: jspb.BinaryReader): GetContextsRequest; +} + +export namespace GetContextsRequest { + export type AsObject = { + options?: ml_metadata_proto_metadata_store_pb.ListOperationOptions.AsObject, + } +} + +export class GetContextsResponse extends jspb.Message { + getContextsList(): Array; + setContextsList(value: Array): GetContextsResponse; + clearContextsList(): GetContextsResponse; + addContexts(value?: ml_metadata_proto_metadata_store_pb.Context, index?: number): ml_metadata_proto_metadata_store_pb.Context; + + getNextPageToken(): string; + setNextPageToken(value: string): GetContextsResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextsResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetContextsResponse): GetContextsResponse.AsObject; + static serializeBinaryToWriter(message: GetContextsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextsResponse; + static deserializeBinaryFromReader(message: GetContextsResponse, reader: jspb.BinaryReader): GetContextsResponse; +} + +export namespace GetContextsResponse { + export type AsObject = { + contextsList: Array, + nextPageToken: string, + } +} + +export class GetContextsByTypeRequest extends jspb.Message { + getTypeName(): string; + setTypeName(value: string): GetContextsByTypeRequest; + + getOptions(): ml_metadata_proto_metadata_store_pb.ListOperationOptions | undefined; + setOptions(value?: ml_metadata_proto_metadata_store_pb.ListOperationOptions): GetContextsByTypeRequest; + hasOptions(): boolean; + clearOptions(): GetContextsByTypeRequest; + + getTypeVersion(): string; + setTypeVersion(value: string): GetContextsByTypeRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextsByTypeRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetContextsByTypeRequest): GetContextsByTypeRequest.AsObject; + static serializeBinaryToWriter(message: GetContextsByTypeRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextsByTypeRequest; + static deserializeBinaryFromReader(message: GetContextsByTypeRequest, reader: jspb.BinaryReader): GetContextsByTypeRequest; +} + +export namespace GetContextsByTypeRequest { + export type AsObject = { + typeName: string, + options?: ml_metadata_proto_metadata_store_pb.ListOperationOptions.AsObject, + typeVersion: string, + } +} + +export class GetContextsByTypeResponse extends jspb.Message { + getContextsList(): Array; + setContextsList(value: Array): GetContextsByTypeResponse; + clearContextsList(): GetContextsByTypeResponse; + addContexts(value?: ml_metadata_proto_metadata_store_pb.Context, index?: number): ml_metadata_proto_metadata_store_pb.Context; + + getNextPageToken(): string; + setNextPageToken(value: string): GetContextsByTypeResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextsByTypeResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetContextsByTypeResponse): GetContextsByTypeResponse.AsObject; + static serializeBinaryToWriter(message: GetContextsByTypeResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextsByTypeResponse; + static deserializeBinaryFromReader(message: GetContextsByTypeResponse, reader: jspb.BinaryReader): GetContextsByTypeResponse; +} + +export namespace GetContextsByTypeResponse { + export type AsObject = { + contextsList: Array, + nextPageToken: string, + } +} + +export class GetContextByTypeAndNameRequest extends jspb.Message { + getTypeName(): string; + setTypeName(value: string): GetContextByTypeAndNameRequest; + + getTypeVersion(): string; + setTypeVersion(value: string): GetContextByTypeAndNameRequest; + + getContextName(): string; + setContextName(value: string): GetContextByTypeAndNameRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextByTypeAndNameRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetContextByTypeAndNameRequest): GetContextByTypeAndNameRequest.AsObject; + static serializeBinaryToWriter(message: GetContextByTypeAndNameRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextByTypeAndNameRequest; + static deserializeBinaryFromReader(message: GetContextByTypeAndNameRequest, reader: jspb.BinaryReader): GetContextByTypeAndNameRequest; +} + +export namespace GetContextByTypeAndNameRequest { + export type AsObject = { + typeName: string, + typeVersion: string, + contextName: string, + } +} + +export class GetContextByTypeAndNameResponse extends jspb.Message { + getContext(): ml_metadata_proto_metadata_store_pb.Context | undefined; + setContext(value?: ml_metadata_proto_metadata_store_pb.Context): GetContextByTypeAndNameResponse; + hasContext(): boolean; + clearContext(): GetContextByTypeAndNameResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextByTypeAndNameResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetContextByTypeAndNameResponse): GetContextByTypeAndNameResponse.AsObject; + static serializeBinaryToWriter(message: GetContextByTypeAndNameResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextByTypeAndNameResponse; + static deserializeBinaryFromReader(message: GetContextByTypeAndNameResponse, reader: jspb.BinaryReader): GetContextByTypeAndNameResponse; +} + +export namespace GetContextByTypeAndNameResponse { + export type AsObject = { + context?: ml_metadata_proto_metadata_store_pb.Context.AsObject, + } +} + +export class GetContextsByIDRequest extends jspb.Message { + getContextIdsList(): Array; + setContextIdsList(value: Array): GetContextsByIDRequest; + clearContextIdsList(): GetContextsByIDRequest; + addContextIds(value: number, index?: number): GetContextsByIDRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextsByIDRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetContextsByIDRequest): GetContextsByIDRequest.AsObject; + static serializeBinaryToWriter(message: GetContextsByIDRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextsByIDRequest; + static deserializeBinaryFromReader(message: GetContextsByIDRequest, reader: jspb.BinaryReader): GetContextsByIDRequest; +} + +export namespace GetContextsByIDRequest { + export type AsObject = { + contextIdsList: Array, + } +} + +export class GetContextsByIDResponse extends jspb.Message { + getContextsList(): Array; + setContextsList(value: Array): GetContextsByIDResponse; + clearContextsList(): GetContextsByIDResponse; + addContexts(value?: ml_metadata_proto_metadata_store_pb.Context, index?: number): ml_metadata_proto_metadata_store_pb.Context; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextsByIDResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetContextsByIDResponse): GetContextsByIDResponse.AsObject; + static serializeBinaryToWriter(message: GetContextsByIDResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextsByIDResponse; + static deserializeBinaryFromReader(message: GetContextsByIDResponse, reader: jspb.BinaryReader): GetContextsByIDResponse; +} + +export namespace GetContextsByIDResponse { + export type AsObject = { + contextsList: Array, + } +} + +export class GetContextsByArtifactRequest extends jspb.Message { + getArtifactId(): number; + setArtifactId(value: number): GetContextsByArtifactRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextsByArtifactRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetContextsByArtifactRequest): GetContextsByArtifactRequest.AsObject; + static serializeBinaryToWriter(message: GetContextsByArtifactRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextsByArtifactRequest; + static deserializeBinaryFromReader(message: GetContextsByArtifactRequest, reader: jspb.BinaryReader): GetContextsByArtifactRequest; +} + +export namespace GetContextsByArtifactRequest { + export type AsObject = { + artifactId: number, + } +} + +export class GetContextsByArtifactResponse extends jspb.Message { + getContextsList(): Array; + setContextsList(value: Array): GetContextsByArtifactResponse; + clearContextsList(): GetContextsByArtifactResponse; + addContexts(value?: ml_metadata_proto_metadata_store_pb.Context, index?: number): ml_metadata_proto_metadata_store_pb.Context; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextsByArtifactResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetContextsByArtifactResponse): GetContextsByArtifactResponse.AsObject; + static serializeBinaryToWriter(message: GetContextsByArtifactResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextsByArtifactResponse; + static deserializeBinaryFromReader(message: GetContextsByArtifactResponse, reader: jspb.BinaryReader): GetContextsByArtifactResponse; +} + +export namespace GetContextsByArtifactResponse { + export type AsObject = { + contextsList: Array, + } +} + +export class GetContextsByExecutionRequest extends jspb.Message { + getExecutionId(): number; + setExecutionId(value: number): GetContextsByExecutionRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextsByExecutionRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetContextsByExecutionRequest): GetContextsByExecutionRequest.AsObject; + static serializeBinaryToWriter(message: GetContextsByExecutionRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextsByExecutionRequest; + static deserializeBinaryFromReader(message: GetContextsByExecutionRequest, reader: jspb.BinaryReader): GetContextsByExecutionRequest; +} + +export namespace GetContextsByExecutionRequest { + export type AsObject = { + executionId: number, + } +} + +export class GetContextsByExecutionResponse extends jspb.Message { + getContextsList(): Array; + setContextsList(value: Array): GetContextsByExecutionResponse; + clearContextsList(): GetContextsByExecutionResponse; + addContexts(value?: ml_metadata_proto_metadata_store_pb.Context, index?: number): ml_metadata_proto_metadata_store_pb.Context; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetContextsByExecutionResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetContextsByExecutionResponse): GetContextsByExecutionResponse.AsObject; + static serializeBinaryToWriter(message: GetContextsByExecutionResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetContextsByExecutionResponse; + static deserializeBinaryFromReader(message: GetContextsByExecutionResponse, reader: jspb.BinaryReader): GetContextsByExecutionResponse; +} + +export namespace GetContextsByExecutionResponse { + export type AsObject = { + contextsList: Array, + } +} + +export class GetParentContextsByContextRequest extends jspb.Message { + getContextId(): number; + setContextId(value: number): GetParentContextsByContextRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetParentContextsByContextRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetParentContextsByContextRequest): GetParentContextsByContextRequest.AsObject; + static serializeBinaryToWriter(message: GetParentContextsByContextRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetParentContextsByContextRequest; + static deserializeBinaryFromReader(message: GetParentContextsByContextRequest, reader: jspb.BinaryReader): GetParentContextsByContextRequest; +} + +export namespace GetParentContextsByContextRequest { + export type AsObject = { + contextId: number, + } +} + +export class GetParentContextsByContextResponse extends jspb.Message { + getContextsList(): Array; + setContextsList(value: Array): GetParentContextsByContextResponse; + clearContextsList(): GetParentContextsByContextResponse; + addContexts(value?: ml_metadata_proto_metadata_store_pb.Context, index?: number): ml_metadata_proto_metadata_store_pb.Context; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetParentContextsByContextResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetParentContextsByContextResponse): GetParentContextsByContextResponse.AsObject; + static serializeBinaryToWriter(message: GetParentContextsByContextResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetParentContextsByContextResponse; + static deserializeBinaryFromReader(message: GetParentContextsByContextResponse, reader: jspb.BinaryReader): GetParentContextsByContextResponse; +} + +export namespace GetParentContextsByContextResponse { + export type AsObject = { + contextsList: Array, + } +} + +export class GetChildrenContextsByContextRequest extends jspb.Message { + getContextId(): number; + setContextId(value: number): GetChildrenContextsByContextRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetChildrenContextsByContextRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetChildrenContextsByContextRequest): GetChildrenContextsByContextRequest.AsObject; + static serializeBinaryToWriter(message: GetChildrenContextsByContextRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetChildrenContextsByContextRequest; + static deserializeBinaryFromReader(message: GetChildrenContextsByContextRequest, reader: jspb.BinaryReader): GetChildrenContextsByContextRequest; +} + +export namespace GetChildrenContextsByContextRequest { + export type AsObject = { + contextId: number, + } +} + +export class GetChildrenContextsByContextResponse extends jspb.Message { + getContextsList(): Array; + setContextsList(value: Array): GetChildrenContextsByContextResponse; + clearContextsList(): GetChildrenContextsByContextResponse; + addContexts(value?: ml_metadata_proto_metadata_store_pb.Context, index?: number): ml_metadata_proto_metadata_store_pb.Context; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetChildrenContextsByContextResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetChildrenContextsByContextResponse): GetChildrenContextsByContextResponse.AsObject; + static serializeBinaryToWriter(message: GetChildrenContextsByContextResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetChildrenContextsByContextResponse; + static deserializeBinaryFromReader(message: GetChildrenContextsByContextResponse, reader: jspb.BinaryReader): GetChildrenContextsByContextResponse; +} + +export namespace GetChildrenContextsByContextResponse { + export type AsObject = { + contextsList: Array, + } +} + +export class GetArtifactsByContextRequest extends jspb.Message { + getContextId(): number; + setContextId(value: number): GetArtifactsByContextRequest; + + getOptions(): ml_metadata_proto_metadata_store_pb.ListOperationOptions | undefined; + setOptions(value?: ml_metadata_proto_metadata_store_pb.ListOperationOptions): GetArtifactsByContextRequest; + hasOptions(): boolean; + clearOptions(): GetArtifactsByContextRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactsByContextRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactsByContextRequest): GetArtifactsByContextRequest.AsObject; + static serializeBinaryToWriter(message: GetArtifactsByContextRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactsByContextRequest; + static deserializeBinaryFromReader(message: GetArtifactsByContextRequest, reader: jspb.BinaryReader): GetArtifactsByContextRequest; +} + +export namespace GetArtifactsByContextRequest { + export type AsObject = { + contextId: number, + options?: ml_metadata_proto_metadata_store_pb.ListOperationOptions.AsObject, + } +} + +export class GetArtifactsByContextResponse extends jspb.Message { + getArtifactsList(): Array; + setArtifactsList(value: Array): GetArtifactsByContextResponse; + clearArtifactsList(): GetArtifactsByContextResponse; + addArtifacts(value?: ml_metadata_proto_metadata_store_pb.Artifact, index?: number): ml_metadata_proto_metadata_store_pb.Artifact; + + getNextPageToken(): string; + setNextPageToken(value: string): GetArtifactsByContextResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetArtifactsByContextResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetArtifactsByContextResponse): GetArtifactsByContextResponse.AsObject; + static serializeBinaryToWriter(message: GetArtifactsByContextResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetArtifactsByContextResponse; + static deserializeBinaryFromReader(message: GetArtifactsByContextResponse, reader: jspb.BinaryReader): GetArtifactsByContextResponse; +} + +export namespace GetArtifactsByContextResponse { + export type AsObject = { + artifactsList: Array, + nextPageToken: string, + } +} + +export class GetExecutionsByContextRequest extends jspb.Message { + getContextId(): number; + setContextId(value: number): GetExecutionsByContextRequest; + + getOptions(): ml_metadata_proto_metadata_store_pb.ListOperationOptions | undefined; + setOptions(value?: ml_metadata_proto_metadata_store_pb.ListOperationOptions): GetExecutionsByContextRequest; + hasOptions(): boolean; + clearOptions(): GetExecutionsByContextRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionsByContextRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionsByContextRequest): GetExecutionsByContextRequest.AsObject; + static serializeBinaryToWriter(message: GetExecutionsByContextRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionsByContextRequest; + static deserializeBinaryFromReader(message: GetExecutionsByContextRequest, reader: jspb.BinaryReader): GetExecutionsByContextRequest; +} + +export namespace GetExecutionsByContextRequest { + export type AsObject = { + contextId: number, + options?: ml_metadata_proto_metadata_store_pb.ListOperationOptions.AsObject, + } +} + +export class GetExecutionsByContextResponse extends jspb.Message { + getExecutionsList(): Array; + setExecutionsList(value: Array): GetExecutionsByContextResponse; + clearExecutionsList(): GetExecutionsByContextResponse; + addExecutions(value?: ml_metadata_proto_metadata_store_pb.Execution, index?: number): ml_metadata_proto_metadata_store_pb.Execution; + + getNextPageToken(): string; + setNextPageToken(value: string): GetExecutionsByContextResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetExecutionsByContextResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetExecutionsByContextResponse): GetExecutionsByContextResponse.AsObject; + static serializeBinaryToWriter(message: GetExecutionsByContextResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetExecutionsByContextResponse; + static deserializeBinaryFromReader(message: GetExecutionsByContextResponse, reader: jspb.BinaryReader): GetExecutionsByContextResponse; +} + +export namespace GetExecutionsByContextResponse { + export type AsObject = { + executionsList: Array, + nextPageToken: string, + } +} diff --git a/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_service_pb.js b/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_service_pb.js new file mode 100644 index 0000000000..ff5aa57875 --- /dev/null +++ b/frontend/src/third_party/mlmd/generated/ml_metadata/proto/metadata_store_service_pb.js @@ -0,0 +1,18015 @@ +// source: ml_metadata/proto/metadata_store_service.proto +/** + * @fileoverview + * @enhanceable + * @suppress {missingRequire} reports error on implicit type usages. + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +var ml_metadata_proto_metadata_store_pb = require('../../ml_metadata/proto/metadata_store_pb.js'); +goog.object.extend(proto, ml_metadata_proto_metadata_store_pb); +goog.exportSymbol('proto.ml_metadata.ArtifactAndType', null, global); +goog.exportSymbol('proto.ml_metadata.ArtifactStruct', null, global); +goog.exportSymbol('proto.ml_metadata.ArtifactStruct.ValueCase', null, global); +goog.exportSymbol('proto.ml_metadata.ArtifactStructList', null, global); +goog.exportSymbol('proto.ml_metadata.ArtifactStructMap', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactByTypeAndNameRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactByTypeAndNameResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactTypeRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactTypeResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactTypesByIDRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactTypesByIDResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactTypesRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactTypesResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactsByContextRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactsByContextResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactsByIDRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactsByIDResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactsByTypeRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactsByTypeResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactsByURIRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactsByURIResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactsRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetArtifactsResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetChildrenContextsByContextRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetChildrenContextsByContextResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextByTypeAndNameRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextByTypeAndNameResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextTypeRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextTypeResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextTypesByIDRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextTypesByIDResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextTypesRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextTypesResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextsByArtifactRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextsByArtifactResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextsByExecutionRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextsByExecutionResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextsByIDRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextsByIDResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextsByTypeRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextsByTypeResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextsRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetContextsResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetEventsByArtifactIDsRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetEventsByArtifactIDsResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetEventsByExecutionIDsRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetEventsByExecutionIDsResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionByTypeAndNameRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionByTypeAndNameResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionTypeRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionTypeResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionTypesByIDRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionTypesByIDResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionTypesRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionTypesResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionsByContextRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionsByContextResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionsByIDRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionsByIDResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionsByTypeRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionsByTypeResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionsRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetExecutionsResponse', null, global); +goog.exportSymbol('proto.ml_metadata.GetParentContextsByContextRequest', null, global); +goog.exportSymbol('proto.ml_metadata.GetParentContextsByContextResponse', null, global); +goog.exportSymbol('proto.ml_metadata.PutArtifactTypeRequest', null, global); +goog.exportSymbol('proto.ml_metadata.PutArtifactTypeResponse', null, global); +goog.exportSymbol('proto.ml_metadata.PutArtifactsRequest', null, global); +goog.exportSymbol('proto.ml_metadata.PutArtifactsRequest.Options', null, global); +goog.exportSymbol('proto.ml_metadata.PutArtifactsResponse', null, global); +goog.exportSymbol('proto.ml_metadata.PutAttributionsAndAssociationsRequest', null, global); +goog.exportSymbol('proto.ml_metadata.PutAttributionsAndAssociationsResponse', null, global); +goog.exportSymbol('proto.ml_metadata.PutContextTypeRequest', null, global); +goog.exportSymbol('proto.ml_metadata.PutContextTypeResponse', null, global); +goog.exportSymbol('proto.ml_metadata.PutContextsRequest', null, global); +goog.exportSymbol('proto.ml_metadata.PutContextsResponse', null, global); +goog.exportSymbol('proto.ml_metadata.PutEventsRequest', null, global); +goog.exportSymbol('proto.ml_metadata.PutEventsResponse', null, global); +goog.exportSymbol('proto.ml_metadata.PutExecutionRequest', null, global); +goog.exportSymbol('proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent', null, global); +goog.exportSymbol('proto.ml_metadata.PutExecutionRequest.Options', null, global); +goog.exportSymbol('proto.ml_metadata.PutExecutionResponse', null, global); +goog.exportSymbol('proto.ml_metadata.PutExecutionTypeRequest', null, global); +goog.exportSymbol('proto.ml_metadata.PutExecutionTypeResponse', null, global); +goog.exportSymbol('proto.ml_metadata.PutExecutionsRequest', null, global); +goog.exportSymbol('proto.ml_metadata.PutExecutionsResponse', null, global); +goog.exportSymbol('proto.ml_metadata.PutParentContextsRequest', null, global); +goog.exportSymbol('proto.ml_metadata.PutParentContextsResponse', null, global); +goog.exportSymbol('proto.ml_metadata.PutTypesRequest', null, global); +goog.exportSymbol('proto.ml_metadata.PutTypesResponse', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ArtifactAndType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.ArtifactAndType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ArtifactAndType.displayName = 'proto.ml_metadata.ArtifactAndType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ArtifactStructMap = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.ArtifactStructMap, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ArtifactStructMap.displayName = 'proto.ml_metadata.ArtifactStructMap'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ArtifactStructList = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.ArtifactStructList.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.ArtifactStructList, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ArtifactStructList.displayName = 'proto.ml_metadata.ArtifactStructList'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.ArtifactStruct = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_metadata.ArtifactStruct.oneofGroups_); +}; +goog.inherits(proto.ml_metadata.ArtifactStruct, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.ArtifactStruct.displayName = 'proto.ml_metadata.ArtifactStruct'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutArtifactsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.PutArtifactsRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.PutArtifactsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutArtifactsRequest.displayName = 'proto.ml_metadata.PutArtifactsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutArtifactsRequest.Options = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.PutArtifactsRequest.Options, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutArtifactsRequest.Options.displayName = 'proto.ml_metadata.PutArtifactsRequest.Options'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutArtifactsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.PutArtifactsResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.PutArtifactsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutArtifactsResponse.displayName = 'proto.ml_metadata.PutArtifactsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutArtifactTypeRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.PutArtifactTypeRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutArtifactTypeRequest.displayName = 'proto.ml_metadata.PutArtifactTypeRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutArtifactTypeResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.PutArtifactTypeResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutArtifactTypeResponse.displayName = 'proto.ml_metadata.PutArtifactTypeResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutExecutionsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.PutExecutionsRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.PutExecutionsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutExecutionsRequest.displayName = 'proto.ml_metadata.PutExecutionsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutExecutionsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.PutExecutionsResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.PutExecutionsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutExecutionsResponse.displayName = 'proto.ml_metadata.PutExecutionsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutExecutionTypeRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.PutExecutionTypeRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutExecutionTypeRequest.displayName = 'proto.ml_metadata.PutExecutionTypeRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutExecutionTypeResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.PutExecutionTypeResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutExecutionTypeResponse.displayName = 'proto.ml_metadata.PutExecutionTypeResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutEventsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.PutEventsRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.PutEventsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutEventsRequest.displayName = 'proto.ml_metadata.PutEventsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutEventsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.PutEventsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutEventsResponse.displayName = 'proto.ml_metadata.PutEventsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutExecutionRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.PutExecutionRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.PutExecutionRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutExecutionRequest.displayName = 'proto.ml_metadata.PutExecutionRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.displayName = 'proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutExecutionRequest.Options = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.PutExecutionRequest.Options, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutExecutionRequest.Options.displayName = 'proto.ml_metadata.PutExecutionRequest.Options'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutExecutionResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.PutExecutionResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.PutExecutionResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutExecutionResponse.displayName = 'proto.ml_metadata.PutExecutionResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutTypesRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.PutTypesRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.PutTypesRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutTypesRequest.displayName = 'proto.ml_metadata.PutTypesRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutTypesResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.PutTypesResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.PutTypesResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutTypesResponse.displayName = 'proto.ml_metadata.PutTypesResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutContextTypeRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.PutContextTypeRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutContextTypeRequest.displayName = 'proto.ml_metadata.PutContextTypeRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutContextTypeResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.PutContextTypeResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutContextTypeResponse.displayName = 'proto.ml_metadata.PutContextTypeResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutContextsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.PutContextsRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.PutContextsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutContextsRequest.displayName = 'proto.ml_metadata.PutContextsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutContextsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.PutContextsResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.PutContextsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutContextsResponse.displayName = 'proto.ml_metadata.PutContextsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.PutAttributionsAndAssociationsRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.PutAttributionsAndAssociationsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutAttributionsAndAssociationsRequest.displayName = 'proto.ml_metadata.PutAttributionsAndAssociationsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutAttributionsAndAssociationsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.PutAttributionsAndAssociationsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutAttributionsAndAssociationsResponse.displayName = 'proto.ml_metadata.PutAttributionsAndAssociationsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutParentContextsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.PutParentContextsRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.PutParentContextsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutParentContextsRequest.displayName = 'proto.ml_metadata.PutParentContextsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.PutParentContextsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.PutParentContextsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.PutParentContextsResponse.displayName = 'proto.ml_metadata.PutParentContextsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactsByTypeRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactsByTypeRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactsByTypeRequest.displayName = 'proto.ml_metadata.GetArtifactsByTypeRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactsByTypeResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetArtifactsByTypeResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactsByTypeResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactsByTypeResponse.displayName = 'proto.ml_metadata.GetArtifactsByTypeResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactByTypeAndNameRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactByTypeAndNameRequest.displayName = 'proto.ml_metadata.GetArtifactByTypeAndNameRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactByTypeAndNameResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactByTypeAndNameResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactByTypeAndNameResponse.displayName = 'proto.ml_metadata.GetArtifactByTypeAndNameResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactsByIDRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetArtifactsByIDRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactsByIDRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactsByIDRequest.displayName = 'proto.ml_metadata.GetArtifactsByIDRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactsByIDResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetArtifactsByIDResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactsByIDResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactsByIDResponse.displayName = 'proto.ml_metadata.GetArtifactsByIDResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactsRequest.displayName = 'proto.ml_metadata.GetArtifactsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetArtifactsResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactsResponse.displayName = 'proto.ml_metadata.GetArtifactsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactsByURIRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetArtifactsByURIRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactsByURIRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactsByURIRequest.displayName = 'proto.ml_metadata.GetArtifactsByURIRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactsByURIResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetArtifactsByURIResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactsByURIResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactsByURIResponse.displayName = 'proto.ml_metadata.GetArtifactsByURIResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionsRequest.displayName = 'proto.ml_metadata.GetExecutionsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetExecutionsResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionsResponse.displayName = 'proto.ml_metadata.GetExecutionsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactTypeRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactTypeRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactTypeRequest.displayName = 'proto.ml_metadata.GetArtifactTypeRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactTypeResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactTypeResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactTypeResponse.displayName = 'proto.ml_metadata.GetArtifactTypeResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactTypesRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactTypesRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactTypesRequest.displayName = 'proto.ml_metadata.GetArtifactTypesRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactTypesResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetArtifactTypesResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactTypesResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactTypesResponse.displayName = 'proto.ml_metadata.GetArtifactTypesResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionTypesRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionTypesRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionTypesRequest.displayName = 'proto.ml_metadata.GetExecutionTypesRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionTypesResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetExecutionTypesResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionTypesResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionTypesResponse.displayName = 'proto.ml_metadata.GetExecutionTypesResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextTypesRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetContextTypesRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextTypesRequest.displayName = 'proto.ml_metadata.GetContextTypesRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextTypesResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetContextTypesResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetContextTypesResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextTypesResponse.displayName = 'proto.ml_metadata.GetContextTypesResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionsByTypeRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionsByTypeRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionsByTypeRequest.displayName = 'proto.ml_metadata.GetExecutionsByTypeRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionsByTypeResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetExecutionsByTypeResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionsByTypeResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionsByTypeResponse.displayName = 'proto.ml_metadata.GetExecutionsByTypeResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionByTypeAndNameRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionByTypeAndNameRequest.displayName = 'proto.ml_metadata.GetExecutionByTypeAndNameRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionByTypeAndNameResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionByTypeAndNameResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionByTypeAndNameResponse.displayName = 'proto.ml_metadata.GetExecutionByTypeAndNameResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionsByIDRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetExecutionsByIDRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionsByIDRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionsByIDRequest.displayName = 'proto.ml_metadata.GetExecutionsByIDRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionsByIDResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetExecutionsByIDResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionsByIDResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionsByIDResponse.displayName = 'proto.ml_metadata.GetExecutionsByIDResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionTypeRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionTypeRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionTypeRequest.displayName = 'proto.ml_metadata.GetExecutionTypeRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionTypeResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionTypeResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionTypeResponse.displayName = 'proto.ml_metadata.GetExecutionTypeResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetEventsByExecutionIDsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetEventsByExecutionIDsRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetEventsByExecutionIDsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetEventsByExecutionIDsRequest.displayName = 'proto.ml_metadata.GetEventsByExecutionIDsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetEventsByExecutionIDsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetEventsByExecutionIDsResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetEventsByExecutionIDsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetEventsByExecutionIDsResponse.displayName = 'proto.ml_metadata.GetEventsByExecutionIDsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetEventsByArtifactIDsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetEventsByArtifactIDsRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetEventsByArtifactIDsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetEventsByArtifactIDsRequest.displayName = 'proto.ml_metadata.GetEventsByArtifactIDsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetEventsByArtifactIDsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetEventsByArtifactIDsResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetEventsByArtifactIDsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetEventsByArtifactIDsResponse.displayName = 'proto.ml_metadata.GetEventsByArtifactIDsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactTypesByIDRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetArtifactTypesByIDRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactTypesByIDRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactTypesByIDRequest.displayName = 'proto.ml_metadata.GetArtifactTypesByIDRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactTypesByIDResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetArtifactTypesByIDResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactTypesByIDResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactTypesByIDResponse.displayName = 'proto.ml_metadata.GetArtifactTypesByIDResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionTypesByIDRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetExecutionTypesByIDRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionTypesByIDRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionTypesByIDRequest.displayName = 'proto.ml_metadata.GetExecutionTypesByIDRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionTypesByIDResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetExecutionTypesByIDResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionTypesByIDResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionTypesByIDResponse.displayName = 'proto.ml_metadata.GetExecutionTypesByIDResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextTypeRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetContextTypeRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextTypeRequest.displayName = 'proto.ml_metadata.GetContextTypeRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextTypeResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetContextTypeResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextTypeResponse.displayName = 'proto.ml_metadata.GetContextTypeResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextTypesByIDRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetContextTypesByIDRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetContextTypesByIDRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextTypesByIDRequest.displayName = 'proto.ml_metadata.GetContextTypesByIDRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextTypesByIDResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetContextTypesByIDResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetContextTypesByIDResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextTypesByIDResponse.displayName = 'proto.ml_metadata.GetContextTypesByIDResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetContextsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextsRequest.displayName = 'proto.ml_metadata.GetContextsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetContextsResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetContextsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextsResponse.displayName = 'proto.ml_metadata.GetContextsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextsByTypeRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetContextsByTypeRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextsByTypeRequest.displayName = 'proto.ml_metadata.GetContextsByTypeRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextsByTypeResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetContextsByTypeResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetContextsByTypeResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextsByTypeResponse.displayName = 'proto.ml_metadata.GetContextsByTypeResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextByTypeAndNameRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetContextByTypeAndNameRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextByTypeAndNameRequest.displayName = 'proto.ml_metadata.GetContextByTypeAndNameRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextByTypeAndNameResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetContextByTypeAndNameResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextByTypeAndNameResponse.displayName = 'proto.ml_metadata.GetContextByTypeAndNameResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextsByIDRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetContextsByIDRequest.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetContextsByIDRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextsByIDRequest.displayName = 'proto.ml_metadata.GetContextsByIDRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextsByIDResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetContextsByIDResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetContextsByIDResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextsByIDResponse.displayName = 'proto.ml_metadata.GetContextsByIDResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextsByArtifactRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetContextsByArtifactRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextsByArtifactRequest.displayName = 'proto.ml_metadata.GetContextsByArtifactRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextsByArtifactResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetContextsByArtifactResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetContextsByArtifactResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextsByArtifactResponse.displayName = 'proto.ml_metadata.GetContextsByArtifactResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextsByExecutionRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetContextsByExecutionRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextsByExecutionRequest.displayName = 'proto.ml_metadata.GetContextsByExecutionRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetContextsByExecutionResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetContextsByExecutionResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetContextsByExecutionResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetContextsByExecutionResponse.displayName = 'proto.ml_metadata.GetContextsByExecutionResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetParentContextsByContextRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetParentContextsByContextRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetParentContextsByContextRequest.displayName = 'proto.ml_metadata.GetParentContextsByContextRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetParentContextsByContextResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetParentContextsByContextResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetParentContextsByContextResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetParentContextsByContextResponse.displayName = 'proto.ml_metadata.GetParentContextsByContextResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetChildrenContextsByContextRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetChildrenContextsByContextRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetChildrenContextsByContextRequest.displayName = 'proto.ml_metadata.GetChildrenContextsByContextRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetChildrenContextsByContextResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetChildrenContextsByContextResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetChildrenContextsByContextResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetChildrenContextsByContextResponse.displayName = 'proto.ml_metadata.GetChildrenContextsByContextResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactsByContextRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactsByContextRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactsByContextRequest.displayName = 'proto.ml_metadata.GetArtifactsByContextRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetArtifactsByContextResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetArtifactsByContextResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetArtifactsByContextResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetArtifactsByContextResponse.displayName = 'proto.ml_metadata.GetArtifactsByContextResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionsByContextRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionsByContextRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionsByContextRequest.displayName = 'proto.ml_metadata.GetExecutionsByContextRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.ml_metadata.GetExecutionsByContextResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.GetExecutionsByContextResponse.repeatedFields_, null); +}; +goog.inherits(proto.ml_metadata.GetExecutionsByContextResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.ml_metadata.GetExecutionsByContextResponse.displayName = 'proto.ml_metadata.GetExecutionsByContextResponse'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ArtifactAndType.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ArtifactAndType.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ArtifactAndType} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ArtifactAndType.toObject = function(includeInstance, msg) { + var f, obj = { + artifact: (f = msg.getArtifact()) && ml_metadata_proto_metadata_store_pb.Artifact.toObject(includeInstance, f), + type: (f = msg.getType()) && ml_metadata_proto_metadata_store_pb.ArtifactType.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ArtifactAndType} + */ +proto.ml_metadata.ArtifactAndType.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ArtifactAndType; + return proto.ml_metadata.ArtifactAndType.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ArtifactAndType} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ArtifactAndType} + */ +proto.ml_metadata.ArtifactAndType.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Artifact; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Artifact.deserializeBinaryFromReader); + msg.setArtifact(value); + break; + case 2: + var value = new ml_metadata_proto_metadata_store_pb.ArtifactType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ArtifactType.deserializeBinaryFromReader); + msg.setType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ArtifactAndType.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ArtifactAndType.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ArtifactAndType} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ArtifactAndType.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifact(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Artifact.serializeBinaryToWriter + ); + } + f = message.getType(); + if (f != null) { + writer.writeMessage( + 2, + f, + ml_metadata_proto_metadata_store_pb.ArtifactType.serializeBinaryToWriter + ); + } +}; + + +/** + * optional Artifact artifact = 1; + * @return {?proto.ml_metadata.Artifact} + */ +proto.ml_metadata.ArtifactAndType.prototype.getArtifact = function() { + return /** @type{?proto.ml_metadata.Artifact} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.Artifact, 1)); +}; + + +/** + * @param {?proto.ml_metadata.Artifact|undefined} value + * @return {!proto.ml_metadata.ArtifactAndType} returns this +*/ +proto.ml_metadata.ArtifactAndType.prototype.setArtifact = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ArtifactAndType} returns this + */ +proto.ml_metadata.ArtifactAndType.prototype.clearArtifact = function() { + return this.setArtifact(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactAndType.prototype.hasArtifact = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ArtifactType type = 2; + * @return {?proto.ml_metadata.ArtifactType} + */ +proto.ml_metadata.ArtifactAndType.prototype.getType = function() { + return /** @type{?proto.ml_metadata.ArtifactType} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.ArtifactType, 2)); +}; + + +/** + * @param {?proto.ml_metadata.ArtifactType|undefined} value + * @return {!proto.ml_metadata.ArtifactAndType} returns this +*/ +proto.ml_metadata.ArtifactAndType.prototype.setType = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ArtifactAndType} returns this + */ +proto.ml_metadata.ArtifactAndType.prototype.clearType = function() { + return this.setType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactAndType.prototype.hasType = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ArtifactStructMap.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ArtifactStructMap.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ArtifactStructMap} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ArtifactStructMap.toObject = function(includeInstance, msg) { + var f, obj = { + propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.ArtifactStruct.toObject) : [] + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ArtifactStructMap} + */ +proto.ml_metadata.ArtifactStructMap.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ArtifactStructMap; + return proto.ml_metadata.ArtifactStructMap.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ArtifactStructMap} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ArtifactStructMap} + */ +proto.ml_metadata.ArtifactStructMap.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = msg.getPropertiesMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.ArtifactStruct.deserializeBinaryFromReader, "", new proto.ml_metadata.ArtifactStruct()); + }); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ArtifactStructMap.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ArtifactStructMap.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ArtifactStructMap} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ArtifactStructMap.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getPropertiesMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.ArtifactStruct.serializeBinaryToWriter); + } +}; + + +/** + * map properties = 1; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map} + */ +proto.ml_metadata.ArtifactStructMap.prototype.getPropertiesMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map} */ ( + jspb.Message.getMapField(this, 1, opt_noLazyCreate, + proto.ml_metadata.ArtifactStruct)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.ml_metadata.ArtifactStructMap} returns this + */ +proto.ml_metadata.ArtifactStructMap.prototype.clearPropertiesMap = function() { + this.getPropertiesMap().clear(); + return this;}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.ArtifactStructList.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ArtifactStructList.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ArtifactStructList.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ArtifactStructList} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ArtifactStructList.toObject = function(includeInstance, msg) { + var f, obj = { + elementsList: jspb.Message.toObjectList(msg.getElementsList(), + proto.ml_metadata.ArtifactStruct.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ArtifactStructList} + */ +proto.ml_metadata.ArtifactStructList.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ArtifactStructList; + return proto.ml_metadata.ArtifactStructList.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ArtifactStructList} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ArtifactStructList} + */ +proto.ml_metadata.ArtifactStructList.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_metadata.ArtifactStruct; + reader.readMessage(value,proto.ml_metadata.ArtifactStruct.deserializeBinaryFromReader); + msg.addElements(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ArtifactStructList.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ArtifactStructList.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ArtifactStructList} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ArtifactStructList.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getElementsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.ml_metadata.ArtifactStruct.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ArtifactStruct elements = 1; + * @return {!Array} + */ +proto.ml_metadata.ArtifactStructList.prototype.getElementsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.ArtifactStruct, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.ArtifactStructList} returns this +*/ +proto.ml_metadata.ArtifactStructList.prototype.setElementsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.ArtifactStruct=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ArtifactStruct} + */ +proto.ml_metadata.ArtifactStructList.prototype.addElements = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ArtifactStruct, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.ArtifactStructList} returns this + */ +proto.ml_metadata.ArtifactStructList.prototype.clearElementsList = function() { + return this.setElementsList([]); +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.ml_metadata.ArtifactStruct.oneofGroups_ = [[1,2,3]]; + +/** + * @enum {number} + */ +proto.ml_metadata.ArtifactStruct.ValueCase = { + VALUE_NOT_SET: 0, + ARTIFACT: 1, + MAP: 2, + LIST: 3 +}; + +/** + * @return {proto.ml_metadata.ArtifactStruct.ValueCase} + */ +proto.ml_metadata.ArtifactStruct.prototype.getValueCase = function() { + return /** @type {proto.ml_metadata.ArtifactStruct.ValueCase} */(jspb.Message.computeOneofCase(this, proto.ml_metadata.ArtifactStruct.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.ArtifactStruct.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.ArtifactStruct.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.ArtifactStruct} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ArtifactStruct.toObject = function(includeInstance, msg) { + var f, obj = { + artifact: (f = msg.getArtifact()) && proto.ml_metadata.ArtifactAndType.toObject(includeInstance, f), + map: (f = msg.getMap()) && proto.ml_metadata.ArtifactStructMap.toObject(includeInstance, f), + list: (f = msg.getList()) && proto.ml_metadata.ArtifactStructList.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.ArtifactStruct} + */ +proto.ml_metadata.ArtifactStruct.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.ArtifactStruct; + return proto.ml_metadata.ArtifactStruct.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.ArtifactStruct} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.ArtifactStruct} + */ +proto.ml_metadata.ArtifactStruct.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.ml_metadata.ArtifactAndType; + reader.readMessage(value,proto.ml_metadata.ArtifactAndType.deserializeBinaryFromReader); + msg.setArtifact(value); + break; + case 2: + var value = new proto.ml_metadata.ArtifactStructMap; + reader.readMessage(value,proto.ml_metadata.ArtifactStructMap.deserializeBinaryFromReader); + msg.setMap(value); + break; + case 3: + var value = new proto.ml_metadata.ArtifactStructList; + reader.readMessage(value,proto.ml_metadata.ArtifactStructList.deserializeBinaryFromReader); + msg.setList(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.ArtifactStruct.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.ArtifactStruct.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.ArtifactStruct} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.ArtifactStruct.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifact(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.ml_metadata.ArtifactAndType.serializeBinaryToWriter + ); + } + f = message.getMap(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_metadata.ArtifactStructMap.serializeBinaryToWriter + ); + } + f = message.getList(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.ml_metadata.ArtifactStructList.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ArtifactAndType artifact = 1; + * @return {?proto.ml_metadata.ArtifactAndType} + */ +proto.ml_metadata.ArtifactStruct.prototype.getArtifact = function() { + return /** @type{?proto.ml_metadata.ArtifactAndType} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.ArtifactAndType, 1)); +}; + + +/** + * @param {?proto.ml_metadata.ArtifactAndType|undefined} value + * @return {!proto.ml_metadata.ArtifactStruct} returns this +*/ +proto.ml_metadata.ArtifactStruct.prototype.setArtifact = function(value) { + return jspb.Message.setOneofWrapperField(this, 1, proto.ml_metadata.ArtifactStruct.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ArtifactStruct} returns this + */ +proto.ml_metadata.ArtifactStruct.prototype.clearArtifact = function() { + return this.setArtifact(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactStruct.prototype.hasArtifact = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ArtifactStructMap map = 2; + * @return {?proto.ml_metadata.ArtifactStructMap} + */ +proto.ml_metadata.ArtifactStruct.prototype.getMap = function() { + return /** @type{?proto.ml_metadata.ArtifactStructMap} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.ArtifactStructMap, 2)); +}; + + +/** + * @param {?proto.ml_metadata.ArtifactStructMap|undefined} value + * @return {!proto.ml_metadata.ArtifactStruct} returns this +*/ +proto.ml_metadata.ArtifactStruct.prototype.setMap = function(value) { + return jspb.Message.setOneofWrapperField(this, 2, proto.ml_metadata.ArtifactStruct.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ArtifactStruct} returns this + */ +proto.ml_metadata.ArtifactStruct.prototype.clearMap = function() { + return this.setMap(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactStruct.prototype.hasMap = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional ArtifactStructList list = 3; + * @return {?proto.ml_metadata.ArtifactStructList} + */ +proto.ml_metadata.ArtifactStruct.prototype.getList = function() { + return /** @type{?proto.ml_metadata.ArtifactStructList} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.ArtifactStructList, 3)); +}; + + +/** + * @param {?proto.ml_metadata.ArtifactStructList|undefined} value + * @return {!proto.ml_metadata.ArtifactStruct} returns this +*/ +proto.ml_metadata.ArtifactStruct.prototype.setList = function(value) { + return jspb.Message.setOneofWrapperField(this, 3, proto.ml_metadata.ArtifactStruct.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.ArtifactStruct} returns this + */ +proto.ml_metadata.ArtifactStruct.prototype.clearList = function() { + return this.setList(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.ArtifactStruct.prototype.hasList = function() { + return jspb.Message.getField(this, 3) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.PutArtifactsRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutArtifactsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutArtifactsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutArtifactsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutArtifactsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + artifactsList: jspb.Message.toObjectList(msg.getArtifactsList(), + ml_metadata_proto_metadata_store_pb.Artifact.toObject, includeInstance), + options: (f = msg.getOptions()) && proto.ml_metadata.PutArtifactsRequest.Options.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutArtifactsRequest} + */ +proto.ml_metadata.PutArtifactsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutArtifactsRequest; + return proto.ml_metadata.PutArtifactsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutArtifactsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutArtifactsRequest} + */ +proto.ml_metadata.PutArtifactsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Artifact; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Artifact.deserializeBinaryFromReader); + msg.addArtifacts(value); + break; + case 2: + var value = new proto.ml_metadata.PutArtifactsRequest.Options; + reader.readMessage(value,proto.ml_metadata.PutArtifactsRequest.Options.deserializeBinaryFromReader); + msg.setOptions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutArtifactsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutArtifactsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutArtifactsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutArtifactsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Artifact.serializeBinaryToWriter + ); + } + f = message.getOptions(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.ml_metadata.PutArtifactsRequest.Options.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutArtifactsRequest.Options.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutArtifactsRequest.Options.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutArtifactsRequest.Options} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutArtifactsRequest.Options.toObject = function(includeInstance, msg) { + var f, obj = { + abortIfLatestUpdatedTimeChanged: (f = jspb.Message.getBooleanField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutArtifactsRequest.Options} + */ +proto.ml_metadata.PutArtifactsRequest.Options.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutArtifactsRequest.Options; + return proto.ml_metadata.PutArtifactsRequest.Options.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutArtifactsRequest.Options} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutArtifactsRequest.Options} + */ +proto.ml_metadata.PutArtifactsRequest.Options.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setAbortIfLatestUpdatedTimeChanged(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutArtifactsRequest.Options.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutArtifactsRequest.Options.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutArtifactsRequest.Options} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutArtifactsRequest.Options.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {boolean} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeBool( + 1, + f + ); + } +}; + + +/** + * optional bool abort_if_latest_updated_time_changed = 1; + * @return {boolean} + */ +proto.ml_metadata.PutArtifactsRequest.Options.prototype.getAbortIfLatestUpdatedTimeChanged = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 1, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutArtifactsRequest.Options} returns this + */ +proto.ml_metadata.PutArtifactsRequest.Options.prototype.setAbortIfLatestUpdatedTimeChanged = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutArtifactsRequest.Options} returns this + */ +proto.ml_metadata.PutArtifactsRequest.Options.prototype.clearAbortIfLatestUpdatedTimeChanged = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutArtifactsRequest.Options.prototype.hasAbortIfLatestUpdatedTimeChanged = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * repeated Artifact artifacts = 1; + * @return {!Array} + */ +proto.ml_metadata.PutArtifactsRequest.prototype.getArtifactsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Artifact, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutArtifactsRequest} returns this +*/ +proto.ml_metadata.PutArtifactsRequest.prototype.setArtifactsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Artifact=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Artifact} + */ +proto.ml_metadata.PutArtifactsRequest.prototype.addArtifacts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Artifact, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutArtifactsRequest} returns this + */ +proto.ml_metadata.PutArtifactsRequest.prototype.clearArtifactsList = function() { + return this.setArtifactsList([]); +}; + + +/** + * optional Options options = 2; + * @return {?proto.ml_metadata.PutArtifactsRequest.Options} + */ +proto.ml_metadata.PutArtifactsRequest.prototype.getOptions = function() { + return /** @type{?proto.ml_metadata.PutArtifactsRequest.Options} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.PutArtifactsRequest.Options, 2)); +}; + + +/** + * @param {?proto.ml_metadata.PutArtifactsRequest.Options|undefined} value + * @return {!proto.ml_metadata.PutArtifactsRequest} returns this +*/ +proto.ml_metadata.PutArtifactsRequest.prototype.setOptions = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.PutArtifactsRequest} returns this + */ +proto.ml_metadata.PutArtifactsRequest.prototype.clearOptions = function() { + return this.setOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutArtifactsRequest.prototype.hasOptions = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.PutArtifactsResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutArtifactsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutArtifactsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutArtifactsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutArtifactsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + artifactIdsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutArtifactsResponse} + */ +proto.ml_metadata.PutArtifactsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutArtifactsResponse; + return proto.ml_metadata.PutArtifactsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutArtifactsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutArtifactsResponse} + */ +proto.ml_metadata.PutArtifactsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addArtifactIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutArtifactsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutArtifactsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutArtifactsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutArtifactsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 1, + f + ); + } +}; + + +/** + * repeated int64 artifact_ids = 1; + * @return {!Array} + */ +proto.ml_metadata.PutArtifactsResponse.prototype.getArtifactIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutArtifactsResponse} returns this + */ +proto.ml_metadata.PutArtifactsResponse.prototype.setArtifactIdsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.PutArtifactsResponse} returns this + */ +proto.ml_metadata.PutArtifactsResponse.prototype.addArtifactIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutArtifactsResponse} returns this + */ +proto.ml_metadata.PutArtifactsResponse.prototype.clearArtifactIdsList = function() { + return this.setArtifactIdsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutArtifactTypeRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutArtifactTypeRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutArtifactTypeRequest.toObject = function(includeInstance, msg) { + var f, obj = { + artifactType: (f = msg.getArtifactType()) && ml_metadata_proto_metadata_store_pb.ArtifactType.toObject(includeInstance, f), + canAddFields: (f = jspb.Message.getBooleanField(msg, 2)) == null ? undefined : f, + canOmitFields: (f = jspb.Message.getBooleanField(msg, 5)) == null ? undefined : f, + canDeleteFields: (f = jspb.Message.getBooleanField(msg, 3)) == null ? undefined : f, + allFieldsMatch: jspb.Message.getBooleanFieldWithDefault(msg, 4, true) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutArtifactTypeRequest} + */ +proto.ml_metadata.PutArtifactTypeRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutArtifactTypeRequest; + return proto.ml_metadata.PutArtifactTypeRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutArtifactTypeRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutArtifactTypeRequest} + */ +proto.ml_metadata.PutArtifactTypeRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ArtifactType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ArtifactType.deserializeBinaryFromReader); + msg.setArtifactType(value); + break; + case 2: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCanAddFields(value); + break; + case 5: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCanOmitFields(value); + break; + case 3: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCanDeleteFields(value); + break; + case 4: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setAllFieldsMatch(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutArtifactTypeRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutArtifactTypeRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutArtifactTypeRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactType(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ArtifactType.serializeBinaryToWriter + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeBool( + 2, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeBool( + 5, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeBool( + 3, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeBool( + 4, + f + ); + } +}; + + +/** + * optional ArtifactType artifact_type = 1; + * @return {?proto.ml_metadata.ArtifactType} + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.getArtifactType = function() { + return /** @type{?proto.ml_metadata.ArtifactType} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.ArtifactType, 1)); +}; + + +/** + * @param {?proto.ml_metadata.ArtifactType|undefined} value + * @return {!proto.ml_metadata.PutArtifactTypeRequest} returns this +*/ +proto.ml_metadata.PutArtifactTypeRequest.prototype.setArtifactType = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.PutArtifactTypeRequest} returns this + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.clearArtifactType = function() { + return this.setArtifactType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.hasArtifactType = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional bool can_add_fields = 2; + * @return {boolean} + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.getCanAddFields = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutArtifactTypeRequest} returns this + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.setCanAddFields = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutArtifactTypeRequest} returns this + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.clearCanAddFields = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.hasCanAddFields = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional bool can_omit_fields = 5; + * @return {boolean} + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.getCanOmitFields = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 5, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutArtifactTypeRequest} returns this + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.setCanOmitFields = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutArtifactTypeRequest} returns this + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.clearCanOmitFields = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.hasCanOmitFields = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional bool can_delete_fields = 3; + * @return {boolean} + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.getCanDeleteFields = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutArtifactTypeRequest} returns this + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.setCanDeleteFields = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutArtifactTypeRequest} returns this + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.clearCanDeleteFields = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.hasCanDeleteFields = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional bool all_fields_match = 4; + * @return {boolean} + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.getAllFieldsMatch = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, true)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutArtifactTypeRequest} returns this + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.setAllFieldsMatch = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutArtifactTypeRequest} returns this + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.clearAllFieldsMatch = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutArtifactTypeRequest.prototype.hasAllFieldsMatch = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutArtifactTypeResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutArtifactTypeResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutArtifactTypeResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutArtifactTypeResponse.toObject = function(includeInstance, msg) { + var f, obj = { + typeId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutArtifactTypeResponse} + */ +proto.ml_metadata.PutArtifactTypeResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutArtifactTypeResponse; + return proto.ml_metadata.PutArtifactTypeResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutArtifactTypeResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutArtifactTypeResponse} + */ +proto.ml_metadata.PutArtifactTypeResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setTypeId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutArtifactTypeResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutArtifactTypeResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutArtifactTypeResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutArtifactTypeResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } +}; + + +/** + * optional int64 type_id = 1; + * @return {number} + */ +proto.ml_metadata.PutArtifactTypeResponse.prototype.getTypeId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.PutArtifactTypeResponse} returns this + */ +proto.ml_metadata.PutArtifactTypeResponse.prototype.setTypeId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutArtifactTypeResponse} returns this + */ +proto.ml_metadata.PutArtifactTypeResponse.prototype.clearTypeId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutArtifactTypeResponse.prototype.hasTypeId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.PutExecutionsRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutExecutionsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutExecutionsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutExecutionsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + executionsList: jspb.Message.toObjectList(msg.getExecutionsList(), + ml_metadata_proto_metadata_store_pb.Execution.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutExecutionsRequest} + */ +proto.ml_metadata.PutExecutionsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutExecutionsRequest; + return proto.ml_metadata.PutExecutionsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutExecutionsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutExecutionsRequest} + */ +proto.ml_metadata.PutExecutionsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Execution; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Execution.deserializeBinaryFromReader); + msg.addExecutions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutExecutionsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutExecutionsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutExecutionsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecutionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Execution.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Execution executions = 1; + * @return {!Array} + */ +proto.ml_metadata.PutExecutionsRequest.prototype.getExecutionsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Execution, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutExecutionsRequest} returns this +*/ +proto.ml_metadata.PutExecutionsRequest.prototype.setExecutionsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Execution=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Execution} + */ +proto.ml_metadata.PutExecutionsRequest.prototype.addExecutions = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Execution, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutExecutionsRequest} returns this + */ +proto.ml_metadata.PutExecutionsRequest.prototype.clearExecutionsList = function() { + return this.setExecutionsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.PutExecutionsResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutExecutionsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutExecutionsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutExecutionsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + executionIdsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutExecutionsResponse} + */ +proto.ml_metadata.PutExecutionsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutExecutionsResponse; + return proto.ml_metadata.PutExecutionsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutExecutionsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutExecutionsResponse} + */ +proto.ml_metadata.PutExecutionsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addExecutionIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutExecutionsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutExecutionsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutExecutionsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecutionIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 1, + f + ); + } +}; + + +/** + * repeated int64 execution_ids = 1; + * @return {!Array} + */ +proto.ml_metadata.PutExecutionsResponse.prototype.getExecutionIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutExecutionsResponse} returns this + */ +proto.ml_metadata.PutExecutionsResponse.prototype.setExecutionIdsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.PutExecutionsResponse} returns this + */ +proto.ml_metadata.PutExecutionsResponse.prototype.addExecutionIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutExecutionsResponse} returns this + */ +proto.ml_metadata.PutExecutionsResponse.prototype.clearExecutionIdsList = function() { + return this.setExecutionIdsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutExecutionTypeRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutExecutionTypeRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionTypeRequest.toObject = function(includeInstance, msg) { + var f, obj = { + executionType: (f = msg.getExecutionType()) && ml_metadata_proto_metadata_store_pb.ExecutionType.toObject(includeInstance, f), + canAddFields: (f = jspb.Message.getBooleanField(msg, 2)) == null ? undefined : f, + canOmitFields: (f = jspb.Message.getBooleanField(msg, 5)) == null ? undefined : f, + canDeleteFields: (f = jspb.Message.getBooleanField(msg, 3)) == null ? undefined : f, + allFieldsMatch: jspb.Message.getBooleanFieldWithDefault(msg, 4, true) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutExecutionTypeRequest} + */ +proto.ml_metadata.PutExecutionTypeRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutExecutionTypeRequest; + return proto.ml_metadata.PutExecutionTypeRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutExecutionTypeRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutExecutionTypeRequest} + */ +proto.ml_metadata.PutExecutionTypeRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ExecutionType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ExecutionType.deserializeBinaryFromReader); + msg.setExecutionType(value); + break; + case 2: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCanAddFields(value); + break; + case 5: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCanOmitFields(value); + break; + case 3: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCanDeleteFields(value); + break; + case 4: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setAllFieldsMatch(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutExecutionTypeRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutExecutionTypeRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionTypeRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecutionType(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ExecutionType.serializeBinaryToWriter + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeBool( + 2, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeBool( + 5, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeBool( + 3, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeBool( + 4, + f + ); + } +}; + + +/** + * optional ExecutionType execution_type = 1; + * @return {?proto.ml_metadata.ExecutionType} + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.getExecutionType = function() { + return /** @type{?proto.ml_metadata.ExecutionType} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.ExecutionType, 1)); +}; + + +/** + * @param {?proto.ml_metadata.ExecutionType|undefined} value + * @return {!proto.ml_metadata.PutExecutionTypeRequest} returns this +*/ +proto.ml_metadata.PutExecutionTypeRequest.prototype.setExecutionType = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.PutExecutionTypeRequest} returns this + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.clearExecutionType = function() { + return this.setExecutionType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.hasExecutionType = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional bool can_add_fields = 2; + * @return {boolean} + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.getCanAddFields = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutExecutionTypeRequest} returns this + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.setCanAddFields = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutExecutionTypeRequest} returns this + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.clearCanAddFields = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.hasCanAddFields = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional bool can_omit_fields = 5; + * @return {boolean} + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.getCanOmitFields = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 5, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutExecutionTypeRequest} returns this + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.setCanOmitFields = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutExecutionTypeRequest} returns this + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.clearCanOmitFields = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.hasCanOmitFields = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional bool can_delete_fields = 3; + * @return {boolean} + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.getCanDeleteFields = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutExecutionTypeRequest} returns this + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.setCanDeleteFields = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutExecutionTypeRequest} returns this + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.clearCanDeleteFields = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.hasCanDeleteFields = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional bool all_fields_match = 4; + * @return {boolean} + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.getAllFieldsMatch = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, true)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutExecutionTypeRequest} returns this + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.setAllFieldsMatch = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutExecutionTypeRequest} returns this + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.clearAllFieldsMatch = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutExecutionTypeRequest.prototype.hasAllFieldsMatch = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutExecutionTypeResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutExecutionTypeResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutExecutionTypeResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionTypeResponse.toObject = function(includeInstance, msg) { + var f, obj = { + typeId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutExecutionTypeResponse} + */ +proto.ml_metadata.PutExecutionTypeResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutExecutionTypeResponse; + return proto.ml_metadata.PutExecutionTypeResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutExecutionTypeResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutExecutionTypeResponse} + */ +proto.ml_metadata.PutExecutionTypeResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setTypeId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutExecutionTypeResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutExecutionTypeResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutExecutionTypeResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionTypeResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } +}; + + +/** + * optional int64 type_id = 1; + * @return {number} + */ +proto.ml_metadata.PutExecutionTypeResponse.prototype.getTypeId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.PutExecutionTypeResponse} returns this + */ +proto.ml_metadata.PutExecutionTypeResponse.prototype.setTypeId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutExecutionTypeResponse} returns this + */ +proto.ml_metadata.PutExecutionTypeResponse.prototype.clearTypeId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutExecutionTypeResponse.prototype.hasTypeId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.PutEventsRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutEventsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutEventsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutEventsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutEventsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + eventsList: jspb.Message.toObjectList(msg.getEventsList(), + ml_metadata_proto_metadata_store_pb.Event.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutEventsRequest} + */ +proto.ml_metadata.PutEventsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutEventsRequest; + return proto.ml_metadata.PutEventsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutEventsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutEventsRequest} + */ +proto.ml_metadata.PutEventsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Event; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Event.deserializeBinaryFromReader); + msg.addEvents(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutEventsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutEventsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutEventsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutEventsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getEventsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Event.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Event events = 1; + * @return {!Array} + */ +proto.ml_metadata.PutEventsRequest.prototype.getEventsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Event, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutEventsRequest} returns this +*/ +proto.ml_metadata.PutEventsRequest.prototype.setEventsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Event=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Event} + */ +proto.ml_metadata.PutEventsRequest.prototype.addEvents = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Event, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutEventsRequest} returns this + */ +proto.ml_metadata.PutEventsRequest.prototype.clearEventsList = function() { + return this.setEventsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutEventsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutEventsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutEventsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutEventsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutEventsResponse} + */ +proto.ml_metadata.PutEventsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutEventsResponse; + return proto.ml_metadata.PutEventsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutEventsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutEventsResponse} + */ +proto.ml_metadata.PutEventsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutEventsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutEventsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutEventsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutEventsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.PutExecutionRequest.repeatedFields_ = [2,3]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutExecutionRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutExecutionRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutExecutionRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionRequest.toObject = function(includeInstance, msg) { + var f, obj = { + execution: (f = msg.getExecution()) && ml_metadata_proto_metadata_store_pb.Execution.toObject(includeInstance, f), + artifactEventPairsList: jspb.Message.toObjectList(msg.getArtifactEventPairsList(), + proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.toObject, includeInstance), + contextsList: jspb.Message.toObjectList(msg.getContextsList(), + ml_metadata_proto_metadata_store_pb.Context.toObject, includeInstance), + options: (f = msg.getOptions()) && proto.ml_metadata.PutExecutionRequest.Options.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutExecutionRequest} + */ +proto.ml_metadata.PutExecutionRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutExecutionRequest; + return proto.ml_metadata.PutExecutionRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutExecutionRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutExecutionRequest} + */ +proto.ml_metadata.PutExecutionRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Execution; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Execution.deserializeBinaryFromReader); + msg.setExecution(value); + break; + case 2: + var value = new proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent; + reader.readMessage(value,proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.deserializeBinaryFromReader); + msg.addArtifactEventPairs(value); + break; + case 3: + var value = new ml_metadata_proto_metadata_store_pb.Context; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Context.deserializeBinaryFromReader); + msg.addContexts(value); + break; + case 4: + var value = new proto.ml_metadata.PutExecutionRequest.Options; + reader.readMessage(value,proto.ml_metadata.PutExecutionRequest.Options.deserializeBinaryFromReader); + msg.setOptions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutExecutionRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutExecutionRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutExecutionRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecution(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Execution.serializeBinaryToWriter + ); + } + f = message.getArtifactEventPairsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.serializeBinaryToWriter + ); + } + f = message.getContextsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 3, + f, + ml_metadata_proto_metadata_store_pb.Context.serializeBinaryToWriter + ); + } + f = message.getOptions(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.ml_metadata.PutExecutionRequest.Options.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.toObject = function(includeInstance, msg) { + var f, obj = { + artifact: (f = msg.getArtifact()) && ml_metadata_proto_metadata_store_pb.Artifact.toObject(includeInstance, f), + event: (f = msg.getEvent()) && ml_metadata_proto_metadata_store_pb.Event.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent} + */ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent; + return proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent} + */ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Artifact; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Artifact.deserializeBinaryFromReader); + msg.setArtifact(value); + break; + case 2: + var value = new ml_metadata_proto_metadata_store_pb.Event; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Event.deserializeBinaryFromReader); + msg.setEvent(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifact(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Artifact.serializeBinaryToWriter + ); + } + f = message.getEvent(); + if (f != null) { + writer.writeMessage( + 2, + f, + ml_metadata_proto_metadata_store_pb.Event.serializeBinaryToWriter + ); + } +}; + + +/** + * optional Artifact artifact = 1; + * @return {?proto.ml_metadata.Artifact} + */ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.prototype.getArtifact = function() { + return /** @type{?proto.ml_metadata.Artifact} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.Artifact, 1)); +}; + + +/** + * @param {?proto.ml_metadata.Artifact|undefined} value + * @return {!proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent} returns this +*/ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.prototype.setArtifact = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent} returns this + */ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.prototype.clearArtifact = function() { + return this.setArtifact(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.prototype.hasArtifact = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional Event event = 2; + * @return {?proto.ml_metadata.Event} + */ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.prototype.getEvent = function() { + return /** @type{?proto.ml_metadata.Event} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.Event, 2)); +}; + + +/** + * @param {?proto.ml_metadata.Event|undefined} value + * @return {!proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent} returns this +*/ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.prototype.setEvent = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent} returns this + */ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.prototype.clearEvent = function() { + return this.setEvent(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent.prototype.hasEvent = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutExecutionRequest.Options.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutExecutionRequest.Options.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutExecutionRequest.Options} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionRequest.Options.toObject = function(includeInstance, msg) { + var f, obj = { + reuseContextIfAlreadyExist: (f = jspb.Message.getBooleanField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutExecutionRequest.Options} + */ +proto.ml_metadata.PutExecutionRequest.Options.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutExecutionRequest.Options; + return proto.ml_metadata.PutExecutionRequest.Options.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutExecutionRequest.Options} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutExecutionRequest.Options} + */ +proto.ml_metadata.PutExecutionRequest.Options.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setReuseContextIfAlreadyExist(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutExecutionRequest.Options.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutExecutionRequest.Options.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutExecutionRequest.Options} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionRequest.Options.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {boolean} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeBool( + 1, + f + ); + } +}; + + +/** + * optional bool reuse_context_if_already_exist = 1; + * @return {boolean} + */ +proto.ml_metadata.PutExecutionRequest.Options.prototype.getReuseContextIfAlreadyExist = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 1, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutExecutionRequest.Options} returns this + */ +proto.ml_metadata.PutExecutionRequest.Options.prototype.setReuseContextIfAlreadyExist = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutExecutionRequest.Options} returns this + */ +proto.ml_metadata.PutExecutionRequest.Options.prototype.clearReuseContextIfAlreadyExist = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutExecutionRequest.Options.prototype.hasReuseContextIfAlreadyExist = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional Execution execution = 1; + * @return {?proto.ml_metadata.Execution} + */ +proto.ml_metadata.PutExecutionRequest.prototype.getExecution = function() { + return /** @type{?proto.ml_metadata.Execution} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.Execution, 1)); +}; + + +/** + * @param {?proto.ml_metadata.Execution|undefined} value + * @return {!proto.ml_metadata.PutExecutionRequest} returns this +*/ +proto.ml_metadata.PutExecutionRequest.prototype.setExecution = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.PutExecutionRequest} returns this + */ +proto.ml_metadata.PutExecutionRequest.prototype.clearExecution = function() { + return this.setExecution(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutExecutionRequest.prototype.hasExecution = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * repeated ArtifactAndEvent artifact_event_pairs = 2; + * @return {!Array} + */ +proto.ml_metadata.PutExecutionRequest.prototype.getArtifactEventPairsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutExecutionRequest} returns this +*/ +proto.ml_metadata.PutExecutionRequest.prototype.setArtifactEventPairsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent} + */ +proto.ml_metadata.PutExecutionRequest.prototype.addArtifactEventPairs = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.ml_metadata.PutExecutionRequest.ArtifactAndEvent, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutExecutionRequest} returns this + */ +proto.ml_metadata.PutExecutionRequest.prototype.clearArtifactEventPairsList = function() { + return this.setArtifactEventPairsList([]); +}; + + +/** + * repeated Context contexts = 3; + * @return {!Array} + */ +proto.ml_metadata.PutExecutionRequest.prototype.getContextsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Context, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutExecutionRequest} returns this +*/ +proto.ml_metadata.PutExecutionRequest.prototype.setContextsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 3, value); +}; + + +/** + * @param {!proto.ml_metadata.Context=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Context} + */ +proto.ml_metadata.PutExecutionRequest.prototype.addContexts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.ml_metadata.Context, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutExecutionRequest} returns this + */ +proto.ml_metadata.PutExecutionRequest.prototype.clearContextsList = function() { + return this.setContextsList([]); +}; + + +/** + * optional Options options = 4; + * @return {?proto.ml_metadata.PutExecutionRequest.Options} + */ +proto.ml_metadata.PutExecutionRequest.prototype.getOptions = function() { + return /** @type{?proto.ml_metadata.PutExecutionRequest.Options} */ ( + jspb.Message.getWrapperField(this, proto.ml_metadata.PutExecutionRequest.Options, 4)); +}; + + +/** + * @param {?proto.ml_metadata.PutExecutionRequest.Options|undefined} value + * @return {!proto.ml_metadata.PutExecutionRequest} returns this +*/ +proto.ml_metadata.PutExecutionRequest.prototype.setOptions = function(value) { + return jspb.Message.setWrapperField(this, 4, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.PutExecutionRequest} returns this + */ +proto.ml_metadata.PutExecutionRequest.prototype.clearOptions = function() { + return this.setOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutExecutionRequest.prototype.hasOptions = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.PutExecutionResponse.repeatedFields_ = [2,3]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutExecutionResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutExecutionResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutExecutionResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionResponse.toObject = function(includeInstance, msg) { + var f, obj = { + executionId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + artifactIdsList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f, + contextIdsList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutExecutionResponse} + */ +proto.ml_metadata.PutExecutionResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutExecutionResponse; + return proto.ml_metadata.PutExecutionResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutExecutionResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutExecutionResponse} + */ +proto.ml_metadata.PutExecutionResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setExecutionId(value); + break; + case 2: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addArtifactIds(values[i]); + } + break; + case 3: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addContextIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutExecutionResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutExecutionResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutExecutionResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutExecutionResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = message.getArtifactIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 2, + f + ); + } + f = message.getContextIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 3, + f + ); + } +}; + + +/** + * optional int64 execution_id = 1; + * @return {number} + */ +proto.ml_metadata.PutExecutionResponse.prototype.getExecutionId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.PutExecutionResponse} returns this + */ +proto.ml_metadata.PutExecutionResponse.prototype.setExecutionId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutExecutionResponse} returns this + */ +proto.ml_metadata.PutExecutionResponse.prototype.clearExecutionId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutExecutionResponse.prototype.hasExecutionId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * repeated int64 artifact_ids = 2; + * @return {!Array} + */ +proto.ml_metadata.PutExecutionResponse.prototype.getArtifactIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutExecutionResponse} returns this + */ +proto.ml_metadata.PutExecutionResponse.prototype.setArtifactIdsList = function(value) { + return jspb.Message.setField(this, 2, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.PutExecutionResponse} returns this + */ +proto.ml_metadata.PutExecutionResponse.prototype.addArtifactIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 2, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutExecutionResponse} returns this + */ +proto.ml_metadata.PutExecutionResponse.prototype.clearArtifactIdsList = function() { + return this.setArtifactIdsList([]); +}; + + +/** + * repeated int64 context_ids = 3; + * @return {!Array} + */ +proto.ml_metadata.PutExecutionResponse.prototype.getContextIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutExecutionResponse} returns this + */ +proto.ml_metadata.PutExecutionResponse.prototype.setContextIdsList = function(value) { + return jspb.Message.setField(this, 3, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.PutExecutionResponse} returns this + */ +proto.ml_metadata.PutExecutionResponse.prototype.addContextIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 3, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutExecutionResponse} returns this + */ +proto.ml_metadata.PutExecutionResponse.prototype.clearContextIdsList = function() { + return this.setContextIdsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.PutTypesRequest.repeatedFields_ = [1,2,3]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutTypesRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutTypesRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutTypesRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutTypesRequest.toObject = function(includeInstance, msg) { + var f, obj = { + artifactTypesList: jspb.Message.toObjectList(msg.getArtifactTypesList(), + ml_metadata_proto_metadata_store_pb.ArtifactType.toObject, includeInstance), + executionTypesList: jspb.Message.toObjectList(msg.getExecutionTypesList(), + ml_metadata_proto_metadata_store_pb.ExecutionType.toObject, includeInstance), + contextTypesList: jspb.Message.toObjectList(msg.getContextTypesList(), + ml_metadata_proto_metadata_store_pb.ContextType.toObject, includeInstance), + canAddFields: (f = jspb.Message.getBooleanField(msg, 4)) == null ? undefined : f, + canOmitFields: (f = jspb.Message.getBooleanField(msg, 7)) == null ? undefined : f, + canDeleteFields: (f = jspb.Message.getBooleanField(msg, 5)) == null ? undefined : f, + allFieldsMatch: jspb.Message.getBooleanFieldWithDefault(msg, 6, true) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutTypesRequest} + */ +proto.ml_metadata.PutTypesRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutTypesRequest; + return proto.ml_metadata.PutTypesRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutTypesRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutTypesRequest} + */ +proto.ml_metadata.PutTypesRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ArtifactType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ArtifactType.deserializeBinaryFromReader); + msg.addArtifactTypes(value); + break; + case 2: + var value = new ml_metadata_proto_metadata_store_pb.ExecutionType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ExecutionType.deserializeBinaryFromReader); + msg.addExecutionTypes(value); + break; + case 3: + var value = new ml_metadata_proto_metadata_store_pb.ContextType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ContextType.deserializeBinaryFromReader); + msg.addContextTypes(value); + break; + case 4: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCanAddFields(value); + break; + case 7: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCanOmitFields(value); + break; + case 5: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCanDeleteFields(value); + break; + case 6: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setAllFieldsMatch(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutTypesRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutTypesRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutTypesRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutTypesRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactTypesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ArtifactType.serializeBinaryToWriter + ); + } + f = message.getExecutionTypesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + ml_metadata_proto_metadata_store_pb.ExecutionType.serializeBinaryToWriter + ); + } + f = message.getContextTypesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 3, + f, + ml_metadata_proto_metadata_store_pb.ContextType.serializeBinaryToWriter + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeBool( + 4, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 7)); + if (f != null) { + writer.writeBool( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeBool( + 5, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 6)); + if (f != null) { + writer.writeBool( + 6, + f + ); + } +}; + + +/** + * repeated ArtifactType artifact_types = 1; + * @return {!Array} + */ +proto.ml_metadata.PutTypesRequest.prototype.getArtifactTypesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.ArtifactType, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutTypesRequest} returns this +*/ +proto.ml_metadata.PutTypesRequest.prototype.setArtifactTypesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.ArtifactType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ArtifactType} + */ +proto.ml_metadata.PutTypesRequest.prototype.addArtifactTypes = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ArtifactType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutTypesRequest} returns this + */ +proto.ml_metadata.PutTypesRequest.prototype.clearArtifactTypesList = function() { + return this.setArtifactTypesList([]); +}; + + +/** + * repeated ExecutionType execution_types = 2; + * @return {!Array} + */ +proto.ml_metadata.PutTypesRequest.prototype.getExecutionTypesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.ExecutionType, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutTypesRequest} returns this +*/ +proto.ml_metadata.PutTypesRequest.prototype.setExecutionTypesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.ml_metadata.ExecutionType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ExecutionType} + */ +proto.ml_metadata.PutTypesRequest.prototype.addExecutionTypes = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.ml_metadata.ExecutionType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutTypesRequest} returns this + */ +proto.ml_metadata.PutTypesRequest.prototype.clearExecutionTypesList = function() { + return this.setExecutionTypesList([]); +}; + + +/** + * repeated ContextType context_types = 3; + * @return {!Array} + */ +proto.ml_metadata.PutTypesRequest.prototype.getContextTypesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.ContextType, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutTypesRequest} returns this +*/ +proto.ml_metadata.PutTypesRequest.prototype.setContextTypesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 3, value); +}; + + +/** + * @param {!proto.ml_metadata.ContextType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ContextType} + */ +proto.ml_metadata.PutTypesRequest.prototype.addContextTypes = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.ml_metadata.ContextType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutTypesRequest} returns this + */ +proto.ml_metadata.PutTypesRequest.prototype.clearContextTypesList = function() { + return this.setContextTypesList([]); +}; + + +/** + * optional bool can_add_fields = 4; + * @return {boolean} + */ +proto.ml_metadata.PutTypesRequest.prototype.getCanAddFields = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutTypesRequest} returns this + */ +proto.ml_metadata.PutTypesRequest.prototype.setCanAddFields = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutTypesRequest} returns this + */ +proto.ml_metadata.PutTypesRequest.prototype.clearCanAddFields = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutTypesRequest.prototype.hasCanAddFields = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional bool can_omit_fields = 7; + * @return {boolean} + */ +proto.ml_metadata.PutTypesRequest.prototype.getCanOmitFields = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 7, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutTypesRequest} returns this + */ +proto.ml_metadata.PutTypesRequest.prototype.setCanOmitFields = function(value) { + return jspb.Message.setField(this, 7, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutTypesRequest} returns this + */ +proto.ml_metadata.PutTypesRequest.prototype.clearCanOmitFields = function() { + return jspb.Message.setField(this, 7, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutTypesRequest.prototype.hasCanOmitFields = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * optional bool can_delete_fields = 5; + * @return {boolean} + */ +proto.ml_metadata.PutTypesRequest.prototype.getCanDeleteFields = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 5, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutTypesRequest} returns this + */ +proto.ml_metadata.PutTypesRequest.prototype.setCanDeleteFields = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutTypesRequest} returns this + */ +proto.ml_metadata.PutTypesRequest.prototype.clearCanDeleteFields = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutTypesRequest.prototype.hasCanDeleteFields = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional bool all_fields_match = 6; + * @return {boolean} + */ +proto.ml_metadata.PutTypesRequest.prototype.getAllFieldsMatch = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 6, true)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutTypesRequest} returns this + */ +proto.ml_metadata.PutTypesRequest.prototype.setAllFieldsMatch = function(value) { + return jspb.Message.setField(this, 6, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutTypesRequest} returns this + */ +proto.ml_metadata.PutTypesRequest.prototype.clearAllFieldsMatch = function() { + return jspb.Message.setField(this, 6, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutTypesRequest.prototype.hasAllFieldsMatch = function() { + return jspb.Message.getField(this, 6) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.PutTypesResponse.repeatedFields_ = [1,2,3]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutTypesResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutTypesResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutTypesResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutTypesResponse.toObject = function(includeInstance, msg) { + var f, obj = { + artifactTypeIdsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f, + executionTypeIdsList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f, + contextTypeIdsList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutTypesResponse} + */ +proto.ml_metadata.PutTypesResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutTypesResponse; + return proto.ml_metadata.PutTypesResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutTypesResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutTypesResponse} + */ +proto.ml_metadata.PutTypesResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addArtifactTypeIds(values[i]); + } + break; + case 2: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addExecutionTypeIds(values[i]); + } + break; + case 3: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addContextTypeIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutTypesResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutTypesResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutTypesResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutTypesResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactTypeIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 1, + f + ); + } + f = message.getExecutionTypeIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 2, + f + ); + } + f = message.getContextTypeIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 3, + f + ); + } +}; + + +/** + * repeated int64 artifact_type_ids = 1; + * @return {!Array} + */ +proto.ml_metadata.PutTypesResponse.prototype.getArtifactTypeIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutTypesResponse} returns this + */ +proto.ml_metadata.PutTypesResponse.prototype.setArtifactTypeIdsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.PutTypesResponse} returns this + */ +proto.ml_metadata.PutTypesResponse.prototype.addArtifactTypeIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutTypesResponse} returns this + */ +proto.ml_metadata.PutTypesResponse.prototype.clearArtifactTypeIdsList = function() { + return this.setArtifactTypeIdsList([]); +}; + + +/** + * repeated int64 execution_type_ids = 2; + * @return {!Array} + */ +proto.ml_metadata.PutTypesResponse.prototype.getExecutionTypeIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutTypesResponse} returns this + */ +proto.ml_metadata.PutTypesResponse.prototype.setExecutionTypeIdsList = function(value) { + return jspb.Message.setField(this, 2, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.PutTypesResponse} returns this + */ +proto.ml_metadata.PutTypesResponse.prototype.addExecutionTypeIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 2, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutTypesResponse} returns this + */ +proto.ml_metadata.PutTypesResponse.prototype.clearExecutionTypeIdsList = function() { + return this.setExecutionTypeIdsList([]); +}; + + +/** + * repeated int64 context_type_ids = 3; + * @return {!Array} + */ +proto.ml_metadata.PutTypesResponse.prototype.getContextTypeIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutTypesResponse} returns this + */ +proto.ml_metadata.PutTypesResponse.prototype.setContextTypeIdsList = function(value) { + return jspb.Message.setField(this, 3, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.PutTypesResponse} returns this + */ +proto.ml_metadata.PutTypesResponse.prototype.addContextTypeIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 3, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutTypesResponse} returns this + */ +proto.ml_metadata.PutTypesResponse.prototype.clearContextTypeIdsList = function() { + return this.setContextTypeIdsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutContextTypeRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutContextTypeRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutContextTypeRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutContextTypeRequest.toObject = function(includeInstance, msg) { + var f, obj = { + contextType: (f = msg.getContextType()) && ml_metadata_proto_metadata_store_pb.ContextType.toObject(includeInstance, f), + canAddFields: (f = jspb.Message.getBooleanField(msg, 2)) == null ? undefined : f, + canOmitFields: (f = jspb.Message.getBooleanField(msg, 5)) == null ? undefined : f, + canDeleteFields: (f = jspb.Message.getBooleanField(msg, 3)) == null ? undefined : f, + allFieldsMatch: jspb.Message.getBooleanFieldWithDefault(msg, 4, true) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutContextTypeRequest} + */ +proto.ml_metadata.PutContextTypeRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutContextTypeRequest; + return proto.ml_metadata.PutContextTypeRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutContextTypeRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutContextTypeRequest} + */ +proto.ml_metadata.PutContextTypeRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ContextType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ContextType.deserializeBinaryFromReader); + msg.setContextType(value); + break; + case 2: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCanAddFields(value); + break; + case 5: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCanOmitFields(value); + break; + case 3: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCanDeleteFields(value); + break; + case 4: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setAllFieldsMatch(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutContextTypeRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutContextTypeRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutContextTypeRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutContextTypeRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextType(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ContextType.serializeBinaryToWriter + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeBool( + 2, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeBool( + 5, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeBool( + 3, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeBool( + 4, + f + ); + } +}; + + +/** + * optional ContextType context_type = 1; + * @return {?proto.ml_metadata.ContextType} + */ +proto.ml_metadata.PutContextTypeRequest.prototype.getContextType = function() { + return /** @type{?proto.ml_metadata.ContextType} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.ContextType, 1)); +}; + + +/** + * @param {?proto.ml_metadata.ContextType|undefined} value + * @return {!proto.ml_metadata.PutContextTypeRequest} returns this +*/ +proto.ml_metadata.PutContextTypeRequest.prototype.setContextType = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.PutContextTypeRequest} returns this + */ +proto.ml_metadata.PutContextTypeRequest.prototype.clearContextType = function() { + return this.setContextType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutContextTypeRequest.prototype.hasContextType = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional bool can_add_fields = 2; + * @return {boolean} + */ +proto.ml_metadata.PutContextTypeRequest.prototype.getCanAddFields = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutContextTypeRequest} returns this + */ +proto.ml_metadata.PutContextTypeRequest.prototype.setCanAddFields = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutContextTypeRequest} returns this + */ +proto.ml_metadata.PutContextTypeRequest.prototype.clearCanAddFields = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutContextTypeRequest.prototype.hasCanAddFields = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional bool can_omit_fields = 5; + * @return {boolean} + */ +proto.ml_metadata.PutContextTypeRequest.prototype.getCanOmitFields = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 5, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutContextTypeRequest} returns this + */ +proto.ml_metadata.PutContextTypeRequest.prototype.setCanOmitFields = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutContextTypeRequest} returns this + */ +proto.ml_metadata.PutContextTypeRequest.prototype.clearCanOmitFields = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutContextTypeRequest.prototype.hasCanOmitFields = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional bool can_delete_fields = 3; + * @return {boolean} + */ +proto.ml_metadata.PutContextTypeRequest.prototype.getCanDeleteFields = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutContextTypeRequest} returns this + */ +proto.ml_metadata.PutContextTypeRequest.prototype.setCanDeleteFields = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutContextTypeRequest} returns this + */ +proto.ml_metadata.PutContextTypeRequest.prototype.clearCanDeleteFields = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutContextTypeRequest.prototype.hasCanDeleteFields = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional bool all_fields_match = 4; + * @return {boolean} + */ +proto.ml_metadata.PutContextTypeRequest.prototype.getAllFieldsMatch = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, true)); +}; + + +/** + * @param {boolean} value + * @return {!proto.ml_metadata.PutContextTypeRequest} returns this + */ +proto.ml_metadata.PutContextTypeRequest.prototype.setAllFieldsMatch = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutContextTypeRequest} returns this + */ +proto.ml_metadata.PutContextTypeRequest.prototype.clearAllFieldsMatch = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutContextTypeRequest.prototype.hasAllFieldsMatch = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutContextTypeResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutContextTypeResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutContextTypeResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutContextTypeResponse.toObject = function(includeInstance, msg) { + var f, obj = { + typeId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutContextTypeResponse} + */ +proto.ml_metadata.PutContextTypeResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutContextTypeResponse; + return proto.ml_metadata.PutContextTypeResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutContextTypeResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutContextTypeResponse} + */ +proto.ml_metadata.PutContextTypeResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setTypeId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutContextTypeResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutContextTypeResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutContextTypeResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutContextTypeResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } +}; + + +/** + * optional int64 type_id = 1; + * @return {number} + */ +proto.ml_metadata.PutContextTypeResponse.prototype.getTypeId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.PutContextTypeResponse} returns this + */ +proto.ml_metadata.PutContextTypeResponse.prototype.setTypeId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.PutContextTypeResponse} returns this + */ +proto.ml_metadata.PutContextTypeResponse.prototype.clearTypeId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.PutContextTypeResponse.prototype.hasTypeId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.PutContextsRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutContextsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutContextsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutContextsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutContextsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + contextsList: jspb.Message.toObjectList(msg.getContextsList(), + ml_metadata_proto_metadata_store_pb.Context.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutContextsRequest} + */ +proto.ml_metadata.PutContextsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutContextsRequest; + return proto.ml_metadata.PutContextsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutContextsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutContextsRequest} + */ +proto.ml_metadata.PutContextsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Context; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Context.deserializeBinaryFromReader); + msg.addContexts(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutContextsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutContextsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutContextsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutContextsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Context.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Context contexts = 1; + * @return {!Array} + */ +proto.ml_metadata.PutContextsRequest.prototype.getContextsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Context, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutContextsRequest} returns this +*/ +proto.ml_metadata.PutContextsRequest.prototype.setContextsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Context=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Context} + */ +proto.ml_metadata.PutContextsRequest.prototype.addContexts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Context, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutContextsRequest} returns this + */ +proto.ml_metadata.PutContextsRequest.prototype.clearContextsList = function() { + return this.setContextsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.PutContextsResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutContextsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutContextsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutContextsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutContextsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + contextIdsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutContextsResponse} + */ +proto.ml_metadata.PutContextsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutContextsResponse; + return proto.ml_metadata.PutContextsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutContextsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutContextsResponse} + */ +proto.ml_metadata.PutContextsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addContextIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutContextsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutContextsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutContextsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutContextsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 1, + f + ); + } +}; + + +/** + * repeated int64 context_ids = 1; + * @return {!Array} + */ +proto.ml_metadata.PutContextsResponse.prototype.getContextIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutContextsResponse} returns this + */ +proto.ml_metadata.PutContextsResponse.prototype.setContextIdsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.PutContextsResponse} returns this + */ +proto.ml_metadata.PutContextsResponse.prototype.addContextIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutContextsResponse} returns this + */ +proto.ml_metadata.PutContextsResponse.prototype.clearContextIdsList = function() { + return this.setContextIdsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.repeatedFields_ = [1,2]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutAttributionsAndAssociationsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutAttributionsAndAssociationsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + attributionsList: jspb.Message.toObjectList(msg.getAttributionsList(), + ml_metadata_proto_metadata_store_pb.Attribution.toObject, includeInstance), + associationsList: jspb.Message.toObjectList(msg.getAssociationsList(), + ml_metadata_proto_metadata_store_pb.Association.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutAttributionsAndAssociationsRequest} + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutAttributionsAndAssociationsRequest; + return proto.ml_metadata.PutAttributionsAndAssociationsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutAttributionsAndAssociationsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutAttributionsAndAssociationsRequest} + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Attribution; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Attribution.deserializeBinaryFromReader); + msg.addAttributions(value); + break; + case 2: + var value = new ml_metadata_proto_metadata_store_pb.Association; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Association.deserializeBinaryFromReader); + msg.addAssociations(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutAttributionsAndAssociationsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutAttributionsAndAssociationsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getAttributionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Attribution.serializeBinaryToWriter + ); + } + f = message.getAssociationsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + ml_metadata_proto_metadata_store_pb.Association.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Attribution attributions = 1; + * @return {!Array} + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.prototype.getAttributionsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Attribution, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutAttributionsAndAssociationsRequest} returns this +*/ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.prototype.setAttributionsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Attribution=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Attribution} + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.prototype.addAttributions = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Attribution, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutAttributionsAndAssociationsRequest} returns this + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.prototype.clearAttributionsList = function() { + return this.setAttributionsList([]); +}; + + +/** + * repeated Association associations = 2; + * @return {!Array} + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.prototype.getAssociationsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Association, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutAttributionsAndAssociationsRequest} returns this +*/ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.prototype.setAssociationsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.ml_metadata.Association=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Association} + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.prototype.addAssociations = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.ml_metadata.Association, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutAttributionsAndAssociationsRequest} returns this + */ +proto.ml_metadata.PutAttributionsAndAssociationsRequest.prototype.clearAssociationsList = function() { + return this.setAssociationsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutAttributionsAndAssociationsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutAttributionsAndAssociationsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutAttributionsAndAssociationsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutAttributionsAndAssociationsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutAttributionsAndAssociationsResponse} + */ +proto.ml_metadata.PutAttributionsAndAssociationsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutAttributionsAndAssociationsResponse; + return proto.ml_metadata.PutAttributionsAndAssociationsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutAttributionsAndAssociationsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutAttributionsAndAssociationsResponse} + */ +proto.ml_metadata.PutAttributionsAndAssociationsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutAttributionsAndAssociationsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutAttributionsAndAssociationsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutAttributionsAndAssociationsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutAttributionsAndAssociationsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.PutParentContextsRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutParentContextsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutParentContextsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutParentContextsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutParentContextsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + parentContextsList: jspb.Message.toObjectList(msg.getParentContextsList(), + ml_metadata_proto_metadata_store_pb.ParentContext.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutParentContextsRequest} + */ +proto.ml_metadata.PutParentContextsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutParentContextsRequest; + return proto.ml_metadata.PutParentContextsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutParentContextsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutParentContextsRequest} + */ +proto.ml_metadata.PutParentContextsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ParentContext; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ParentContext.deserializeBinaryFromReader); + msg.addParentContexts(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutParentContextsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutParentContextsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutParentContextsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutParentContextsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getParentContextsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ParentContext.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ParentContext parent_contexts = 1; + * @return {!Array} + */ +proto.ml_metadata.PutParentContextsRequest.prototype.getParentContextsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.ParentContext, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.PutParentContextsRequest} returns this +*/ +proto.ml_metadata.PutParentContextsRequest.prototype.setParentContextsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.ParentContext=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ParentContext} + */ +proto.ml_metadata.PutParentContextsRequest.prototype.addParentContexts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ParentContext, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.PutParentContextsRequest} returns this + */ +proto.ml_metadata.PutParentContextsRequest.prototype.clearParentContextsList = function() { + return this.setParentContextsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.PutParentContextsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.PutParentContextsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.PutParentContextsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutParentContextsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.PutParentContextsResponse} + */ +proto.ml_metadata.PutParentContextsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.PutParentContextsResponse; + return proto.ml_metadata.PutParentContextsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.PutParentContextsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.PutParentContextsResponse} + */ +proto.ml_metadata.PutParentContextsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.PutParentContextsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.PutParentContextsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.PutParentContextsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.PutParentContextsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactsByTypeRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactsByTypeRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactsByTypeRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByTypeRequest.toObject = function(includeInstance, msg) { + var f, obj = { + typeName: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + typeVersion: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactsByTypeRequest} + */ +proto.ml_metadata.GetArtifactsByTypeRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactsByTypeRequest; + return proto.ml_metadata.GetArtifactsByTypeRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactsByTypeRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactsByTypeRequest} + */ +proto.ml_metadata.GetArtifactsByTypeRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeVersion(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactsByTypeRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactsByTypeRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactsByTypeRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByTypeRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string type_name = 1; + * @return {string} + */ +proto.ml_metadata.GetArtifactsByTypeRequest.prototype.getTypeName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetArtifactsByTypeRequest} returns this + */ +proto.ml_metadata.GetArtifactsByTypeRequest.prototype.setTypeName = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetArtifactsByTypeRequest} returns this + */ +proto.ml_metadata.GetArtifactsByTypeRequest.prototype.clearTypeName = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactsByTypeRequest.prototype.hasTypeName = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string type_version = 2; + * @return {string} + */ +proto.ml_metadata.GetArtifactsByTypeRequest.prototype.getTypeVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetArtifactsByTypeRequest} returns this + */ +proto.ml_metadata.GetArtifactsByTypeRequest.prototype.setTypeVersion = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetArtifactsByTypeRequest} returns this + */ +proto.ml_metadata.GetArtifactsByTypeRequest.prototype.clearTypeVersion = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactsByTypeRequest.prototype.hasTypeVersion = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetArtifactsByTypeResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactsByTypeResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactsByTypeResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactsByTypeResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByTypeResponse.toObject = function(includeInstance, msg) { + var f, obj = { + artifactsList: jspb.Message.toObjectList(msg.getArtifactsList(), + ml_metadata_proto_metadata_store_pb.Artifact.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactsByTypeResponse} + */ +proto.ml_metadata.GetArtifactsByTypeResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactsByTypeResponse; + return proto.ml_metadata.GetArtifactsByTypeResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactsByTypeResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactsByTypeResponse} + */ +proto.ml_metadata.GetArtifactsByTypeResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Artifact; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Artifact.deserializeBinaryFromReader); + msg.addArtifacts(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactsByTypeResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactsByTypeResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactsByTypeResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByTypeResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Artifact.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Artifact artifacts = 1; + * @return {!Array} + */ +proto.ml_metadata.GetArtifactsByTypeResponse.prototype.getArtifactsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Artifact, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetArtifactsByTypeResponse} returns this +*/ +proto.ml_metadata.GetArtifactsByTypeResponse.prototype.setArtifactsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Artifact=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Artifact} + */ +proto.ml_metadata.GetArtifactsByTypeResponse.prototype.addArtifacts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Artifact, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetArtifactsByTypeResponse} returns this + */ +proto.ml_metadata.GetArtifactsByTypeResponse.prototype.clearArtifactsList = function() { + return this.setArtifactsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactByTypeAndNameRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.toObject = function(includeInstance, msg) { + var f, obj = { + typeName: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + typeVersion: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + artifactName: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactByTypeAndNameRequest; + return proto.ml_metadata.GetArtifactByTypeAndNameRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeName(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeVersion(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setArtifactName(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactByTypeAndNameRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string type_name = 1; + * @return {string} + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.getTypeName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.setTypeName = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.clearTypeName = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.hasTypeName = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string type_version = 3; + * @return {string} + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.getTypeVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.setTypeVersion = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.clearTypeVersion = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.hasTypeVersion = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional string artifact_name = 2; + * @return {string} + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.getArtifactName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.setArtifactName = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetArtifactByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.clearArtifactName = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactByTypeAndNameRequest.prototype.hasArtifactName = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactByTypeAndNameResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactByTypeAndNameResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactByTypeAndNameResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactByTypeAndNameResponse.toObject = function(includeInstance, msg) { + var f, obj = { + artifact: (f = msg.getArtifact()) && ml_metadata_proto_metadata_store_pb.Artifact.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactByTypeAndNameResponse} + */ +proto.ml_metadata.GetArtifactByTypeAndNameResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactByTypeAndNameResponse; + return proto.ml_metadata.GetArtifactByTypeAndNameResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactByTypeAndNameResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactByTypeAndNameResponse} + */ +proto.ml_metadata.GetArtifactByTypeAndNameResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Artifact; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Artifact.deserializeBinaryFromReader); + msg.setArtifact(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactByTypeAndNameResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactByTypeAndNameResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactByTypeAndNameResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactByTypeAndNameResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifact(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Artifact.serializeBinaryToWriter + ); + } +}; + + +/** + * optional Artifact artifact = 1; + * @return {?proto.ml_metadata.Artifact} + */ +proto.ml_metadata.GetArtifactByTypeAndNameResponse.prototype.getArtifact = function() { + return /** @type{?proto.ml_metadata.Artifact} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.Artifact, 1)); +}; + + +/** + * @param {?proto.ml_metadata.Artifact|undefined} value + * @return {!proto.ml_metadata.GetArtifactByTypeAndNameResponse} returns this +*/ +proto.ml_metadata.GetArtifactByTypeAndNameResponse.prototype.setArtifact = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.GetArtifactByTypeAndNameResponse} returns this + */ +proto.ml_metadata.GetArtifactByTypeAndNameResponse.prototype.clearArtifact = function() { + return this.setArtifact(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactByTypeAndNameResponse.prototype.hasArtifact = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetArtifactsByIDRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactsByIDRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactsByIDRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactsByIDRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByIDRequest.toObject = function(includeInstance, msg) { + var f, obj = { + artifactIdsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactsByIDRequest} + */ +proto.ml_metadata.GetArtifactsByIDRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactsByIDRequest; + return proto.ml_metadata.GetArtifactsByIDRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactsByIDRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactsByIDRequest} + */ +proto.ml_metadata.GetArtifactsByIDRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addArtifactIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactsByIDRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactsByIDRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactsByIDRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByIDRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 1, + f + ); + } +}; + + +/** + * repeated int64 artifact_ids = 1; + * @return {!Array} + */ +proto.ml_metadata.GetArtifactsByIDRequest.prototype.getArtifactIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetArtifactsByIDRequest} returns this + */ +proto.ml_metadata.GetArtifactsByIDRequest.prototype.setArtifactIdsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.GetArtifactsByIDRequest} returns this + */ +proto.ml_metadata.GetArtifactsByIDRequest.prototype.addArtifactIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetArtifactsByIDRequest} returns this + */ +proto.ml_metadata.GetArtifactsByIDRequest.prototype.clearArtifactIdsList = function() { + return this.setArtifactIdsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetArtifactsByIDResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactsByIDResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactsByIDResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactsByIDResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByIDResponse.toObject = function(includeInstance, msg) { + var f, obj = { + artifactsList: jspb.Message.toObjectList(msg.getArtifactsList(), + ml_metadata_proto_metadata_store_pb.Artifact.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactsByIDResponse} + */ +proto.ml_metadata.GetArtifactsByIDResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactsByIDResponse; + return proto.ml_metadata.GetArtifactsByIDResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactsByIDResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactsByIDResponse} + */ +proto.ml_metadata.GetArtifactsByIDResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Artifact; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Artifact.deserializeBinaryFromReader); + msg.addArtifacts(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactsByIDResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactsByIDResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactsByIDResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByIDResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Artifact.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Artifact artifacts = 1; + * @return {!Array} + */ +proto.ml_metadata.GetArtifactsByIDResponse.prototype.getArtifactsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Artifact, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetArtifactsByIDResponse} returns this +*/ +proto.ml_metadata.GetArtifactsByIDResponse.prototype.setArtifactsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Artifact=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Artifact} + */ +proto.ml_metadata.GetArtifactsByIDResponse.prototype.addArtifacts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Artifact, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetArtifactsByIDResponse} returns this + */ +proto.ml_metadata.GetArtifactsByIDResponse.prototype.clearArtifactsList = function() { + return this.setArtifactsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + options: (f = msg.getOptions()) && ml_metadata_proto_metadata_store_pb.ListOperationOptions.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactsRequest} + */ +proto.ml_metadata.GetArtifactsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactsRequest; + return proto.ml_metadata.GetArtifactsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactsRequest} + */ +proto.ml_metadata.GetArtifactsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ListOperationOptions; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ListOperationOptions.deserializeBinaryFromReader); + msg.setOptions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getOptions(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ListOperationOptions.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ListOperationOptions options = 1; + * @return {?proto.ml_metadata.ListOperationOptions} + */ +proto.ml_metadata.GetArtifactsRequest.prototype.getOptions = function() { + return /** @type{?proto.ml_metadata.ListOperationOptions} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.ListOperationOptions, 1)); +}; + + +/** + * @param {?proto.ml_metadata.ListOperationOptions|undefined} value + * @return {!proto.ml_metadata.GetArtifactsRequest} returns this +*/ +proto.ml_metadata.GetArtifactsRequest.prototype.setOptions = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.GetArtifactsRequest} returns this + */ +proto.ml_metadata.GetArtifactsRequest.prototype.clearOptions = function() { + return this.setOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactsRequest.prototype.hasOptions = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetArtifactsResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + artifactsList: jspb.Message.toObjectList(msg.getArtifactsList(), + ml_metadata_proto_metadata_store_pb.Artifact.toObject, includeInstance), + nextPageToken: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactsResponse} + */ +proto.ml_metadata.GetArtifactsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactsResponse; + return proto.ml_metadata.GetArtifactsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactsResponse} + */ +proto.ml_metadata.GetArtifactsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Artifact; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Artifact.deserializeBinaryFromReader); + msg.addArtifacts(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setNextPageToken(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Artifact.serializeBinaryToWriter + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * repeated Artifact artifacts = 1; + * @return {!Array} + */ +proto.ml_metadata.GetArtifactsResponse.prototype.getArtifactsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Artifact, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetArtifactsResponse} returns this +*/ +proto.ml_metadata.GetArtifactsResponse.prototype.setArtifactsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Artifact=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Artifact} + */ +proto.ml_metadata.GetArtifactsResponse.prototype.addArtifacts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Artifact, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetArtifactsResponse} returns this + */ +proto.ml_metadata.GetArtifactsResponse.prototype.clearArtifactsList = function() { + return this.setArtifactsList([]); +}; + + +/** + * optional string next_page_token = 2; + * @return {string} + */ +proto.ml_metadata.GetArtifactsResponse.prototype.getNextPageToken = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetArtifactsResponse} returns this + */ +proto.ml_metadata.GetArtifactsResponse.prototype.setNextPageToken = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetArtifactsResponse} returns this + */ +proto.ml_metadata.GetArtifactsResponse.prototype.clearNextPageToken = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactsResponse.prototype.hasNextPageToken = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetArtifactsByURIRequest.repeatedFields_ = [2]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactsByURIRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactsByURIRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactsByURIRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByURIRequest.toObject = function(includeInstance, msg) { + var f, obj = { + urisList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactsByURIRequest} + */ +proto.ml_metadata.GetArtifactsByURIRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactsByURIRequest; + return proto.ml_metadata.GetArtifactsByURIRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactsByURIRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactsByURIRequest} + */ +proto.ml_metadata.GetArtifactsByURIRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.addUris(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactsByURIRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactsByURIRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactsByURIRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByURIRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getUrisList(); + if (f.length > 0) { + writer.writeRepeatedString( + 2, + f + ); + } +}; + + +/** + * repeated string uris = 2; + * @return {!Array} + */ +proto.ml_metadata.GetArtifactsByURIRequest.prototype.getUrisList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetArtifactsByURIRequest} returns this + */ +proto.ml_metadata.GetArtifactsByURIRequest.prototype.setUrisList = function(value) { + return jspb.Message.setField(this, 2, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.GetArtifactsByURIRequest} returns this + */ +proto.ml_metadata.GetArtifactsByURIRequest.prototype.addUris = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 2, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetArtifactsByURIRequest} returns this + */ +proto.ml_metadata.GetArtifactsByURIRequest.prototype.clearUrisList = function() { + return this.setUrisList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetArtifactsByURIResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactsByURIResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactsByURIResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactsByURIResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByURIResponse.toObject = function(includeInstance, msg) { + var f, obj = { + artifactsList: jspb.Message.toObjectList(msg.getArtifactsList(), + ml_metadata_proto_metadata_store_pb.Artifact.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactsByURIResponse} + */ +proto.ml_metadata.GetArtifactsByURIResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactsByURIResponse; + return proto.ml_metadata.GetArtifactsByURIResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactsByURIResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactsByURIResponse} + */ +proto.ml_metadata.GetArtifactsByURIResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Artifact; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Artifact.deserializeBinaryFromReader); + msg.addArtifacts(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactsByURIResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactsByURIResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactsByURIResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByURIResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Artifact.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Artifact artifacts = 1; + * @return {!Array} + */ +proto.ml_metadata.GetArtifactsByURIResponse.prototype.getArtifactsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Artifact, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetArtifactsByURIResponse} returns this +*/ +proto.ml_metadata.GetArtifactsByURIResponse.prototype.setArtifactsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Artifact=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Artifact} + */ +proto.ml_metadata.GetArtifactsByURIResponse.prototype.addArtifacts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Artifact, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetArtifactsByURIResponse} returns this + */ +proto.ml_metadata.GetArtifactsByURIResponse.prototype.clearArtifactsList = function() { + return this.setArtifactsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + options: (f = msg.getOptions()) && ml_metadata_proto_metadata_store_pb.ListOperationOptions.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionsRequest} + */ +proto.ml_metadata.GetExecutionsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionsRequest; + return proto.ml_metadata.GetExecutionsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionsRequest} + */ +proto.ml_metadata.GetExecutionsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ListOperationOptions; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ListOperationOptions.deserializeBinaryFromReader); + msg.setOptions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getOptions(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ListOperationOptions.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ListOperationOptions options = 1; + * @return {?proto.ml_metadata.ListOperationOptions} + */ +proto.ml_metadata.GetExecutionsRequest.prototype.getOptions = function() { + return /** @type{?proto.ml_metadata.ListOperationOptions} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.ListOperationOptions, 1)); +}; + + +/** + * @param {?proto.ml_metadata.ListOperationOptions|undefined} value + * @return {!proto.ml_metadata.GetExecutionsRequest} returns this +*/ +proto.ml_metadata.GetExecutionsRequest.prototype.setOptions = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.GetExecutionsRequest} returns this + */ +proto.ml_metadata.GetExecutionsRequest.prototype.clearOptions = function() { + return this.setOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionsRequest.prototype.hasOptions = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetExecutionsResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + executionsList: jspb.Message.toObjectList(msg.getExecutionsList(), + ml_metadata_proto_metadata_store_pb.Execution.toObject, includeInstance), + nextPageToken: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionsResponse} + */ +proto.ml_metadata.GetExecutionsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionsResponse; + return proto.ml_metadata.GetExecutionsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionsResponse} + */ +proto.ml_metadata.GetExecutionsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Execution; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Execution.deserializeBinaryFromReader); + msg.addExecutions(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setNextPageToken(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecutionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Execution.serializeBinaryToWriter + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * repeated Execution executions = 1; + * @return {!Array} + */ +proto.ml_metadata.GetExecutionsResponse.prototype.getExecutionsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Execution, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetExecutionsResponse} returns this +*/ +proto.ml_metadata.GetExecutionsResponse.prototype.setExecutionsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Execution=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Execution} + */ +proto.ml_metadata.GetExecutionsResponse.prototype.addExecutions = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Execution, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetExecutionsResponse} returns this + */ +proto.ml_metadata.GetExecutionsResponse.prototype.clearExecutionsList = function() { + return this.setExecutionsList([]); +}; + + +/** + * optional string next_page_token = 2; + * @return {string} + */ +proto.ml_metadata.GetExecutionsResponse.prototype.getNextPageToken = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetExecutionsResponse} returns this + */ +proto.ml_metadata.GetExecutionsResponse.prototype.setNextPageToken = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetExecutionsResponse} returns this + */ +proto.ml_metadata.GetExecutionsResponse.prototype.clearNextPageToken = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionsResponse.prototype.hasNextPageToken = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactTypeRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactTypeRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactTypeRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactTypeRequest.toObject = function(includeInstance, msg) { + var f, obj = { + typeName: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + typeVersion: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactTypeRequest} + */ +proto.ml_metadata.GetArtifactTypeRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactTypeRequest; + return proto.ml_metadata.GetArtifactTypeRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactTypeRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactTypeRequest} + */ +proto.ml_metadata.GetArtifactTypeRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeVersion(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactTypeRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactTypeRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactTypeRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactTypeRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string type_name = 1; + * @return {string} + */ +proto.ml_metadata.GetArtifactTypeRequest.prototype.getTypeName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetArtifactTypeRequest} returns this + */ +proto.ml_metadata.GetArtifactTypeRequest.prototype.setTypeName = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetArtifactTypeRequest} returns this + */ +proto.ml_metadata.GetArtifactTypeRequest.prototype.clearTypeName = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactTypeRequest.prototype.hasTypeName = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string type_version = 2; + * @return {string} + */ +proto.ml_metadata.GetArtifactTypeRequest.prototype.getTypeVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetArtifactTypeRequest} returns this + */ +proto.ml_metadata.GetArtifactTypeRequest.prototype.setTypeVersion = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetArtifactTypeRequest} returns this + */ +proto.ml_metadata.GetArtifactTypeRequest.prototype.clearTypeVersion = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactTypeRequest.prototype.hasTypeVersion = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactTypeResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactTypeResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactTypeResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactTypeResponse.toObject = function(includeInstance, msg) { + var f, obj = { + artifactType: (f = msg.getArtifactType()) && ml_metadata_proto_metadata_store_pb.ArtifactType.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactTypeResponse} + */ +proto.ml_metadata.GetArtifactTypeResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactTypeResponse; + return proto.ml_metadata.GetArtifactTypeResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactTypeResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactTypeResponse} + */ +proto.ml_metadata.GetArtifactTypeResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ArtifactType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ArtifactType.deserializeBinaryFromReader); + msg.setArtifactType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactTypeResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactTypeResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactTypeResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactTypeResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactType(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ArtifactType.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ArtifactType artifact_type = 1; + * @return {?proto.ml_metadata.ArtifactType} + */ +proto.ml_metadata.GetArtifactTypeResponse.prototype.getArtifactType = function() { + return /** @type{?proto.ml_metadata.ArtifactType} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.ArtifactType, 1)); +}; + + +/** + * @param {?proto.ml_metadata.ArtifactType|undefined} value + * @return {!proto.ml_metadata.GetArtifactTypeResponse} returns this +*/ +proto.ml_metadata.GetArtifactTypeResponse.prototype.setArtifactType = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.GetArtifactTypeResponse} returns this + */ +proto.ml_metadata.GetArtifactTypeResponse.prototype.clearArtifactType = function() { + return this.setArtifactType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactTypeResponse.prototype.hasArtifactType = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactTypesRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactTypesRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactTypesRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactTypesRequest.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactTypesRequest} + */ +proto.ml_metadata.GetArtifactTypesRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactTypesRequest; + return proto.ml_metadata.GetArtifactTypesRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactTypesRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactTypesRequest} + */ +proto.ml_metadata.GetArtifactTypesRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactTypesRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactTypesRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactTypesRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactTypesRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetArtifactTypesResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactTypesResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactTypesResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactTypesResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactTypesResponse.toObject = function(includeInstance, msg) { + var f, obj = { + artifactTypesList: jspb.Message.toObjectList(msg.getArtifactTypesList(), + ml_metadata_proto_metadata_store_pb.ArtifactType.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactTypesResponse} + */ +proto.ml_metadata.GetArtifactTypesResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactTypesResponse; + return proto.ml_metadata.GetArtifactTypesResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactTypesResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactTypesResponse} + */ +proto.ml_metadata.GetArtifactTypesResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ArtifactType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ArtifactType.deserializeBinaryFromReader); + msg.addArtifactTypes(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactTypesResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactTypesResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactTypesResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactTypesResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactTypesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ArtifactType.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ArtifactType artifact_types = 1; + * @return {!Array} + */ +proto.ml_metadata.GetArtifactTypesResponse.prototype.getArtifactTypesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.ArtifactType, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetArtifactTypesResponse} returns this +*/ +proto.ml_metadata.GetArtifactTypesResponse.prototype.setArtifactTypesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.ArtifactType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ArtifactType} + */ +proto.ml_metadata.GetArtifactTypesResponse.prototype.addArtifactTypes = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ArtifactType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetArtifactTypesResponse} returns this + */ +proto.ml_metadata.GetArtifactTypesResponse.prototype.clearArtifactTypesList = function() { + return this.setArtifactTypesList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionTypesRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionTypesRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionTypesRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionTypesRequest.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionTypesRequest} + */ +proto.ml_metadata.GetExecutionTypesRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionTypesRequest; + return proto.ml_metadata.GetExecutionTypesRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionTypesRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionTypesRequest} + */ +proto.ml_metadata.GetExecutionTypesRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionTypesRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionTypesRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionTypesRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionTypesRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetExecutionTypesResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionTypesResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionTypesResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionTypesResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionTypesResponse.toObject = function(includeInstance, msg) { + var f, obj = { + executionTypesList: jspb.Message.toObjectList(msg.getExecutionTypesList(), + ml_metadata_proto_metadata_store_pb.ExecutionType.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionTypesResponse} + */ +proto.ml_metadata.GetExecutionTypesResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionTypesResponse; + return proto.ml_metadata.GetExecutionTypesResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionTypesResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionTypesResponse} + */ +proto.ml_metadata.GetExecutionTypesResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ExecutionType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ExecutionType.deserializeBinaryFromReader); + msg.addExecutionTypes(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionTypesResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionTypesResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionTypesResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionTypesResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecutionTypesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ExecutionType.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ExecutionType execution_types = 1; + * @return {!Array} + */ +proto.ml_metadata.GetExecutionTypesResponse.prototype.getExecutionTypesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.ExecutionType, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetExecutionTypesResponse} returns this +*/ +proto.ml_metadata.GetExecutionTypesResponse.prototype.setExecutionTypesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.ExecutionType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ExecutionType} + */ +proto.ml_metadata.GetExecutionTypesResponse.prototype.addExecutionTypes = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ExecutionType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetExecutionTypesResponse} returns this + */ +proto.ml_metadata.GetExecutionTypesResponse.prototype.clearExecutionTypesList = function() { + return this.setExecutionTypesList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextTypesRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextTypesRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextTypesRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextTypesRequest.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextTypesRequest} + */ +proto.ml_metadata.GetContextTypesRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextTypesRequest; + return proto.ml_metadata.GetContextTypesRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextTypesRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextTypesRequest} + */ +proto.ml_metadata.GetContextTypesRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextTypesRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextTypesRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextTypesRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextTypesRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetContextTypesResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextTypesResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextTypesResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextTypesResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextTypesResponse.toObject = function(includeInstance, msg) { + var f, obj = { + contextTypesList: jspb.Message.toObjectList(msg.getContextTypesList(), + ml_metadata_proto_metadata_store_pb.ContextType.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextTypesResponse} + */ +proto.ml_metadata.GetContextTypesResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextTypesResponse; + return proto.ml_metadata.GetContextTypesResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextTypesResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextTypesResponse} + */ +proto.ml_metadata.GetContextTypesResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ContextType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ContextType.deserializeBinaryFromReader); + msg.addContextTypes(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextTypesResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextTypesResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextTypesResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextTypesResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextTypesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ContextType.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ContextType context_types = 1; + * @return {!Array} + */ +proto.ml_metadata.GetContextTypesResponse.prototype.getContextTypesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.ContextType, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetContextTypesResponse} returns this +*/ +proto.ml_metadata.GetContextTypesResponse.prototype.setContextTypesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.ContextType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ContextType} + */ +proto.ml_metadata.GetContextTypesResponse.prototype.addContextTypes = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ContextType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetContextTypesResponse} returns this + */ +proto.ml_metadata.GetContextTypesResponse.prototype.clearContextTypesList = function() { + return this.setContextTypesList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionsByTypeRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionsByTypeRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionsByTypeRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsByTypeRequest.toObject = function(includeInstance, msg) { + var f, obj = { + typeName: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + typeVersion: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionsByTypeRequest} + */ +proto.ml_metadata.GetExecutionsByTypeRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionsByTypeRequest; + return proto.ml_metadata.GetExecutionsByTypeRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionsByTypeRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionsByTypeRequest} + */ +proto.ml_metadata.GetExecutionsByTypeRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeVersion(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionsByTypeRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionsByTypeRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionsByTypeRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsByTypeRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string type_name = 1; + * @return {string} + */ +proto.ml_metadata.GetExecutionsByTypeRequest.prototype.getTypeName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetExecutionsByTypeRequest} returns this + */ +proto.ml_metadata.GetExecutionsByTypeRequest.prototype.setTypeName = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetExecutionsByTypeRequest} returns this + */ +proto.ml_metadata.GetExecutionsByTypeRequest.prototype.clearTypeName = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionsByTypeRequest.prototype.hasTypeName = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string type_version = 2; + * @return {string} + */ +proto.ml_metadata.GetExecutionsByTypeRequest.prototype.getTypeVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetExecutionsByTypeRequest} returns this + */ +proto.ml_metadata.GetExecutionsByTypeRequest.prototype.setTypeVersion = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetExecutionsByTypeRequest} returns this + */ +proto.ml_metadata.GetExecutionsByTypeRequest.prototype.clearTypeVersion = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionsByTypeRequest.prototype.hasTypeVersion = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetExecutionsByTypeResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionsByTypeResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionsByTypeResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionsByTypeResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsByTypeResponse.toObject = function(includeInstance, msg) { + var f, obj = { + executionsList: jspb.Message.toObjectList(msg.getExecutionsList(), + ml_metadata_proto_metadata_store_pb.Execution.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionsByTypeResponse} + */ +proto.ml_metadata.GetExecutionsByTypeResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionsByTypeResponse; + return proto.ml_metadata.GetExecutionsByTypeResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionsByTypeResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionsByTypeResponse} + */ +proto.ml_metadata.GetExecutionsByTypeResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Execution; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Execution.deserializeBinaryFromReader); + msg.addExecutions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionsByTypeResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionsByTypeResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionsByTypeResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsByTypeResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecutionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Execution.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Execution executions = 1; + * @return {!Array} + */ +proto.ml_metadata.GetExecutionsByTypeResponse.prototype.getExecutionsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Execution, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetExecutionsByTypeResponse} returns this +*/ +proto.ml_metadata.GetExecutionsByTypeResponse.prototype.setExecutionsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Execution=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Execution} + */ +proto.ml_metadata.GetExecutionsByTypeResponse.prototype.addExecutions = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Execution, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetExecutionsByTypeResponse} returns this + */ +proto.ml_metadata.GetExecutionsByTypeResponse.prototype.clearExecutionsList = function() { + return this.setExecutionsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionByTypeAndNameRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.toObject = function(includeInstance, msg) { + var f, obj = { + typeName: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + typeVersion: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + executionName: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionByTypeAndNameRequest; + return proto.ml_metadata.GetExecutionByTypeAndNameRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeName(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeVersion(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setExecutionName(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionByTypeAndNameRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string type_name = 1; + * @return {string} + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.getTypeName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.setTypeName = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.clearTypeName = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.hasTypeName = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string type_version = 3; + * @return {string} + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.getTypeVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.setTypeVersion = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.clearTypeVersion = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.hasTypeVersion = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional string execution_name = 2; + * @return {string} + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.getExecutionName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.setExecutionName = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetExecutionByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.clearExecutionName = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionByTypeAndNameRequest.prototype.hasExecutionName = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionByTypeAndNameResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionByTypeAndNameResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionByTypeAndNameResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionByTypeAndNameResponse.toObject = function(includeInstance, msg) { + var f, obj = { + execution: (f = msg.getExecution()) && ml_metadata_proto_metadata_store_pb.Execution.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionByTypeAndNameResponse} + */ +proto.ml_metadata.GetExecutionByTypeAndNameResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionByTypeAndNameResponse; + return proto.ml_metadata.GetExecutionByTypeAndNameResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionByTypeAndNameResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionByTypeAndNameResponse} + */ +proto.ml_metadata.GetExecutionByTypeAndNameResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Execution; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Execution.deserializeBinaryFromReader); + msg.setExecution(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionByTypeAndNameResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionByTypeAndNameResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionByTypeAndNameResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionByTypeAndNameResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecution(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Execution.serializeBinaryToWriter + ); + } +}; + + +/** + * optional Execution execution = 1; + * @return {?proto.ml_metadata.Execution} + */ +proto.ml_metadata.GetExecutionByTypeAndNameResponse.prototype.getExecution = function() { + return /** @type{?proto.ml_metadata.Execution} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.Execution, 1)); +}; + + +/** + * @param {?proto.ml_metadata.Execution|undefined} value + * @return {!proto.ml_metadata.GetExecutionByTypeAndNameResponse} returns this +*/ +proto.ml_metadata.GetExecutionByTypeAndNameResponse.prototype.setExecution = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.GetExecutionByTypeAndNameResponse} returns this + */ +proto.ml_metadata.GetExecutionByTypeAndNameResponse.prototype.clearExecution = function() { + return this.setExecution(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionByTypeAndNameResponse.prototype.hasExecution = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetExecutionsByIDRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionsByIDRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionsByIDRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionsByIDRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsByIDRequest.toObject = function(includeInstance, msg) { + var f, obj = { + executionIdsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionsByIDRequest} + */ +proto.ml_metadata.GetExecutionsByIDRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionsByIDRequest; + return proto.ml_metadata.GetExecutionsByIDRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionsByIDRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionsByIDRequest} + */ +proto.ml_metadata.GetExecutionsByIDRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addExecutionIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionsByIDRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionsByIDRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionsByIDRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsByIDRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecutionIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 1, + f + ); + } +}; + + +/** + * repeated int64 execution_ids = 1; + * @return {!Array} + */ +proto.ml_metadata.GetExecutionsByIDRequest.prototype.getExecutionIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetExecutionsByIDRequest} returns this + */ +proto.ml_metadata.GetExecutionsByIDRequest.prototype.setExecutionIdsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.GetExecutionsByIDRequest} returns this + */ +proto.ml_metadata.GetExecutionsByIDRequest.prototype.addExecutionIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetExecutionsByIDRequest} returns this + */ +proto.ml_metadata.GetExecutionsByIDRequest.prototype.clearExecutionIdsList = function() { + return this.setExecutionIdsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetExecutionsByIDResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionsByIDResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionsByIDResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionsByIDResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsByIDResponse.toObject = function(includeInstance, msg) { + var f, obj = { + executionsList: jspb.Message.toObjectList(msg.getExecutionsList(), + ml_metadata_proto_metadata_store_pb.Execution.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionsByIDResponse} + */ +proto.ml_metadata.GetExecutionsByIDResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionsByIDResponse; + return proto.ml_metadata.GetExecutionsByIDResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionsByIDResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionsByIDResponse} + */ +proto.ml_metadata.GetExecutionsByIDResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Execution; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Execution.deserializeBinaryFromReader); + msg.addExecutions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionsByIDResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionsByIDResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionsByIDResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsByIDResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecutionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Execution.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Execution executions = 1; + * @return {!Array} + */ +proto.ml_metadata.GetExecutionsByIDResponse.prototype.getExecutionsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Execution, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetExecutionsByIDResponse} returns this +*/ +proto.ml_metadata.GetExecutionsByIDResponse.prototype.setExecutionsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Execution=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Execution} + */ +proto.ml_metadata.GetExecutionsByIDResponse.prototype.addExecutions = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Execution, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetExecutionsByIDResponse} returns this + */ +proto.ml_metadata.GetExecutionsByIDResponse.prototype.clearExecutionsList = function() { + return this.setExecutionsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionTypeRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionTypeRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionTypeRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionTypeRequest.toObject = function(includeInstance, msg) { + var f, obj = { + typeName: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + typeVersion: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionTypeRequest} + */ +proto.ml_metadata.GetExecutionTypeRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionTypeRequest; + return proto.ml_metadata.GetExecutionTypeRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionTypeRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionTypeRequest} + */ +proto.ml_metadata.GetExecutionTypeRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeVersion(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionTypeRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionTypeRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionTypeRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionTypeRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string type_name = 1; + * @return {string} + */ +proto.ml_metadata.GetExecutionTypeRequest.prototype.getTypeName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetExecutionTypeRequest} returns this + */ +proto.ml_metadata.GetExecutionTypeRequest.prototype.setTypeName = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetExecutionTypeRequest} returns this + */ +proto.ml_metadata.GetExecutionTypeRequest.prototype.clearTypeName = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionTypeRequest.prototype.hasTypeName = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string type_version = 2; + * @return {string} + */ +proto.ml_metadata.GetExecutionTypeRequest.prototype.getTypeVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetExecutionTypeRequest} returns this + */ +proto.ml_metadata.GetExecutionTypeRequest.prototype.setTypeVersion = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetExecutionTypeRequest} returns this + */ +proto.ml_metadata.GetExecutionTypeRequest.prototype.clearTypeVersion = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionTypeRequest.prototype.hasTypeVersion = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionTypeResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionTypeResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionTypeResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionTypeResponse.toObject = function(includeInstance, msg) { + var f, obj = { + executionType: (f = msg.getExecutionType()) && ml_metadata_proto_metadata_store_pb.ExecutionType.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionTypeResponse} + */ +proto.ml_metadata.GetExecutionTypeResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionTypeResponse; + return proto.ml_metadata.GetExecutionTypeResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionTypeResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionTypeResponse} + */ +proto.ml_metadata.GetExecutionTypeResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ExecutionType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ExecutionType.deserializeBinaryFromReader); + msg.setExecutionType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionTypeResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionTypeResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionTypeResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionTypeResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecutionType(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ExecutionType.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ExecutionType execution_type = 1; + * @return {?proto.ml_metadata.ExecutionType} + */ +proto.ml_metadata.GetExecutionTypeResponse.prototype.getExecutionType = function() { + return /** @type{?proto.ml_metadata.ExecutionType} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.ExecutionType, 1)); +}; + + +/** + * @param {?proto.ml_metadata.ExecutionType|undefined} value + * @return {!proto.ml_metadata.GetExecutionTypeResponse} returns this +*/ +proto.ml_metadata.GetExecutionTypeResponse.prototype.setExecutionType = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.GetExecutionTypeResponse} returns this + */ +proto.ml_metadata.GetExecutionTypeResponse.prototype.clearExecutionType = function() { + return this.setExecutionType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionTypeResponse.prototype.hasExecutionType = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetEventsByExecutionIDsRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetEventsByExecutionIDsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetEventsByExecutionIDsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetEventsByExecutionIDsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetEventsByExecutionIDsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + executionIdsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetEventsByExecutionIDsRequest} + */ +proto.ml_metadata.GetEventsByExecutionIDsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetEventsByExecutionIDsRequest; + return proto.ml_metadata.GetEventsByExecutionIDsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetEventsByExecutionIDsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetEventsByExecutionIDsRequest} + */ +proto.ml_metadata.GetEventsByExecutionIDsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addExecutionIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetEventsByExecutionIDsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetEventsByExecutionIDsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetEventsByExecutionIDsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetEventsByExecutionIDsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecutionIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 1, + f + ); + } +}; + + +/** + * repeated int64 execution_ids = 1; + * @return {!Array} + */ +proto.ml_metadata.GetEventsByExecutionIDsRequest.prototype.getExecutionIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetEventsByExecutionIDsRequest} returns this + */ +proto.ml_metadata.GetEventsByExecutionIDsRequest.prototype.setExecutionIdsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.GetEventsByExecutionIDsRequest} returns this + */ +proto.ml_metadata.GetEventsByExecutionIDsRequest.prototype.addExecutionIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetEventsByExecutionIDsRequest} returns this + */ +proto.ml_metadata.GetEventsByExecutionIDsRequest.prototype.clearExecutionIdsList = function() { + return this.setExecutionIdsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetEventsByExecutionIDsResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetEventsByExecutionIDsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetEventsByExecutionIDsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetEventsByExecutionIDsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetEventsByExecutionIDsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + eventsList: jspb.Message.toObjectList(msg.getEventsList(), + ml_metadata_proto_metadata_store_pb.Event.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetEventsByExecutionIDsResponse} + */ +proto.ml_metadata.GetEventsByExecutionIDsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetEventsByExecutionIDsResponse; + return proto.ml_metadata.GetEventsByExecutionIDsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetEventsByExecutionIDsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetEventsByExecutionIDsResponse} + */ +proto.ml_metadata.GetEventsByExecutionIDsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Event; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Event.deserializeBinaryFromReader); + msg.addEvents(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetEventsByExecutionIDsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetEventsByExecutionIDsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetEventsByExecutionIDsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetEventsByExecutionIDsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getEventsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Event.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Event events = 1; + * @return {!Array} + */ +proto.ml_metadata.GetEventsByExecutionIDsResponse.prototype.getEventsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Event, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetEventsByExecutionIDsResponse} returns this +*/ +proto.ml_metadata.GetEventsByExecutionIDsResponse.prototype.setEventsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Event=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Event} + */ +proto.ml_metadata.GetEventsByExecutionIDsResponse.prototype.addEvents = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Event, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetEventsByExecutionIDsResponse} returns this + */ +proto.ml_metadata.GetEventsByExecutionIDsResponse.prototype.clearEventsList = function() { + return this.setEventsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetEventsByArtifactIDsRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetEventsByArtifactIDsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetEventsByArtifactIDsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetEventsByArtifactIDsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetEventsByArtifactIDsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + artifactIdsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetEventsByArtifactIDsRequest} + */ +proto.ml_metadata.GetEventsByArtifactIDsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetEventsByArtifactIDsRequest; + return proto.ml_metadata.GetEventsByArtifactIDsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetEventsByArtifactIDsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetEventsByArtifactIDsRequest} + */ +proto.ml_metadata.GetEventsByArtifactIDsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addArtifactIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetEventsByArtifactIDsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetEventsByArtifactIDsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetEventsByArtifactIDsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetEventsByArtifactIDsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 1, + f + ); + } +}; + + +/** + * repeated int64 artifact_ids = 1; + * @return {!Array} + */ +proto.ml_metadata.GetEventsByArtifactIDsRequest.prototype.getArtifactIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetEventsByArtifactIDsRequest} returns this + */ +proto.ml_metadata.GetEventsByArtifactIDsRequest.prototype.setArtifactIdsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.GetEventsByArtifactIDsRequest} returns this + */ +proto.ml_metadata.GetEventsByArtifactIDsRequest.prototype.addArtifactIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetEventsByArtifactIDsRequest} returns this + */ +proto.ml_metadata.GetEventsByArtifactIDsRequest.prototype.clearArtifactIdsList = function() { + return this.setArtifactIdsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetEventsByArtifactIDsResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetEventsByArtifactIDsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetEventsByArtifactIDsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetEventsByArtifactIDsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetEventsByArtifactIDsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + eventsList: jspb.Message.toObjectList(msg.getEventsList(), + ml_metadata_proto_metadata_store_pb.Event.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetEventsByArtifactIDsResponse} + */ +proto.ml_metadata.GetEventsByArtifactIDsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetEventsByArtifactIDsResponse; + return proto.ml_metadata.GetEventsByArtifactIDsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetEventsByArtifactIDsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetEventsByArtifactIDsResponse} + */ +proto.ml_metadata.GetEventsByArtifactIDsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Event; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Event.deserializeBinaryFromReader); + msg.addEvents(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetEventsByArtifactIDsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetEventsByArtifactIDsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetEventsByArtifactIDsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetEventsByArtifactIDsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getEventsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Event.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Event events = 1; + * @return {!Array} + */ +proto.ml_metadata.GetEventsByArtifactIDsResponse.prototype.getEventsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Event, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetEventsByArtifactIDsResponse} returns this +*/ +proto.ml_metadata.GetEventsByArtifactIDsResponse.prototype.setEventsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Event=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Event} + */ +proto.ml_metadata.GetEventsByArtifactIDsResponse.prototype.addEvents = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Event, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetEventsByArtifactIDsResponse} returns this + */ +proto.ml_metadata.GetEventsByArtifactIDsResponse.prototype.clearEventsList = function() { + return this.setEventsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetArtifactTypesByIDRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactTypesByIDRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactTypesByIDRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactTypesByIDRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactTypesByIDRequest.toObject = function(includeInstance, msg) { + var f, obj = { + typeIdsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactTypesByIDRequest} + */ +proto.ml_metadata.GetArtifactTypesByIDRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactTypesByIDRequest; + return proto.ml_metadata.GetArtifactTypesByIDRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactTypesByIDRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactTypesByIDRequest} + */ +proto.ml_metadata.GetArtifactTypesByIDRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addTypeIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactTypesByIDRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactTypesByIDRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactTypesByIDRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactTypesByIDRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTypeIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 1, + f + ); + } +}; + + +/** + * repeated int64 type_ids = 1; + * @return {!Array} + */ +proto.ml_metadata.GetArtifactTypesByIDRequest.prototype.getTypeIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetArtifactTypesByIDRequest} returns this + */ +proto.ml_metadata.GetArtifactTypesByIDRequest.prototype.setTypeIdsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.GetArtifactTypesByIDRequest} returns this + */ +proto.ml_metadata.GetArtifactTypesByIDRequest.prototype.addTypeIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetArtifactTypesByIDRequest} returns this + */ +proto.ml_metadata.GetArtifactTypesByIDRequest.prototype.clearTypeIdsList = function() { + return this.setTypeIdsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetArtifactTypesByIDResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactTypesByIDResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactTypesByIDResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactTypesByIDResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactTypesByIDResponse.toObject = function(includeInstance, msg) { + var f, obj = { + artifactTypesList: jspb.Message.toObjectList(msg.getArtifactTypesList(), + ml_metadata_proto_metadata_store_pb.ArtifactType.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactTypesByIDResponse} + */ +proto.ml_metadata.GetArtifactTypesByIDResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactTypesByIDResponse; + return proto.ml_metadata.GetArtifactTypesByIDResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactTypesByIDResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactTypesByIDResponse} + */ +proto.ml_metadata.GetArtifactTypesByIDResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ArtifactType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ArtifactType.deserializeBinaryFromReader); + msg.addArtifactTypes(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactTypesByIDResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactTypesByIDResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactTypesByIDResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactTypesByIDResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactTypesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ArtifactType.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ArtifactType artifact_types = 1; + * @return {!Array} + */ +proto.ml_metadata.GetArtifactTypesByIDResponse.prototype.getArtifactTypesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.ArtifactType, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetArtifactTypesByIDResponse} returns this +*/ +proto.ml_metadata.GetArtifactTypesByIDResponse.prototype.setArtifactTypesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.ArtifactType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ArtifactType} + */ +proto.ml_metadata.GetArtifactTypesByIDResponse.prototype.addArtifactTypes = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ArtifactType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetArtifactTypesByIDResponse} returns this + */ +proto.ml_metadata.GetArtifactTypesByIDResponse.prototype.clearArtifactTypesList = function() { + return this.setArtifactTypesList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetExecutionTypesByIDRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionTypesByIDRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionTypesByIDRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionTypesByIDRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionTypesByIDRequest.toObject = function(includeInstance, msg) { + var f, obj = { + typeIdsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionTypesByIDRequest} + */ +proto.ml_metadata.GetExecutionTypesByIDRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionTypesByIDRequest; + return proto.ml_metadata.GetExecutionTypesByIDRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionTypesByIDRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionTypesByIDRequest} + */ +proto.ml_metadata.GetExecutionTypesByIDRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addTypeIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionTypesByIDRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionTypesByIDRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionTypesByIDRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionTypesByIDRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTypeIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 1, + f + ); + } +}; + + +/** + * repeated int64 type_ids = 1; + * @return {!Array} + */ +proto.ml_metadata.GetExecutionTypesByIDRequest.prototype.getTypeIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetExecutionTypesByIDRequest} returns this + */ +proto.ml_metadata.GetExecutionTypesByIDRequest.prototype.setTypeIdsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.GetExecutionTypesByIDRequest} returns this + */ +proto.ml_metadata.GetExecutionTypesByIDRequest.prototype.addTypeIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetExecutionTypesByIDRequest} returns this + */ +proto.ml_metadata.GetExecutionTypesByIDRequest.prototype.clearTypeIdsList = function() { + return this.setTypeIdsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetExecutionTypesByIDResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionTypesByIDResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionTypesByIDResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionTypesByIDResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionTypesByIDResponse.toObject = function(includeInstance, msg) { + var f, obj = { + executionTypesList: jspb.Message.toObjectList(msg.getExecutionTypesList(), + ml_metadata_proto_metadata_store_pb.ExecutionType.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionTypesByIDResponse} + */ +proto.ml_metadata.GetExecutionTypesByIDResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionTypesByIDResponse; + return proto.ml_metadata.GetExecutionTypesByIDResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionTypesByIDResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionTypesByIDResponse} + */ +proto.ml_metadata.GetExecutionTypesByIDResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ExecutionType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ExecutionType.deserializeBinaryFromReader); + msg.addExecutionTypes(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionTypesByIDResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionTypesByIDResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionTypesByIDResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionTypesByIDResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecutionTypesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ExecutionType.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ExecutionType execution_types = 1; + * @return {!Array} + */ +proto.ml_metadata.GetExecutionTypesByIDResponse.prototype.getExecutionTypesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.ExecutionType, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetExecutionTypesByIDResponse} returns this +*/ +proto.ml_metadata.GetExecutionTypesByIDResponse.prototype.setExecutionTypesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.ExecutionType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ExecutionType} + */ +proto.ml_metadata.GetExecutionTypesByIDResponse.prototype.addExecutionTypes = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ExecutionType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetExecutionTypesByIDResponse} returns this + */ +proto.ml_metadata.GetExecutionTypesByIDResponse.prototype.clearExecutionTypesList = function() { + return this.setExecutionTypesList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextTypeRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextTypeRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextTypeRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextTypeRequest.toObject = function(includeInstance, msg) { + var f, obj = { + typeName: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + typeVersion: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextTypeRequest} + */ +proto.ml_metadata.GetContextTypeRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextTypeRequest; + return proto.ml_metadata.GetContextTypeRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextTypeRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextTypeRequest} + */ +proto.ml_metadata.GetContextTypeRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeVersion(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextTypeRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextTypeRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextTypeRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextTypeRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string type_name = 1; + * @return {string} + */ +proto.ml_metadata.GetContextTypeRequest.prototype.getTypeName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetContextTypeRequest} returns this + */ +proto.ml_metadata.GetContextTypeRequest.prototype.setTypeName = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetContextTypeRequest} returns this + */ +proto.ml_metadata.GetContextTypeRequest.prototype.clearTypeName = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextTypeRequest.prototype.hasTypeName = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string type_version = 2; + * @return {string} + */ +proto.ml_metadata.GetContextTypeRequest.prototype.getTypeVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetContextTypeRequest} returns this + */ +proto.ml_metadata.GetContextTypeRequest.prototype.setTypeVersion = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetContextTypeRequest} returns this + */ +proto.ml_metadata.GetContextTypeRequest.prototype.clearTypeVersion = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextTypeRequest.prototype.hasTypeVersion = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextTypeResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextTypeResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextTypeResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextTypeResponse.toObject = function(includeInstance, msg) { + var f, obj = { + contextType: (f = msg.getContextType()) && ml_metadata_proto_metadata_store_pb.ContextType.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextTypeResponse} + */ +proto.ml_metadata.GetContextTypeResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextTypeResponse; + return proto.ml_metadata.GetContextTypeResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextTypeResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextTypeResponse} + */ +proto.ml_metadata.GetContextTypeResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ContextType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ContextType.deserializeBinaryFromReader); + msg.setContextType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextTypeResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextTypeResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextTypeResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextTypeResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextType(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ContextType.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ContextType context_type = 1; + * @return {?proto.ml_metadata.ContextType} + */ +proto.ml_metadata.GetContextTypeResponse.prototype.getContextType = function() { + return /** @type{?proto.ml_metadata.ContextType} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.ContextType, 1)); +}; + + +/** + * @param {?proto.ml_metadata.ContextType|undefined} value + * @return {!proto.ml_metadata.GetContextTypeResponse} returns this +*/ +proto.ml_metadata.GetContextTypeResponse.prototype.setContextType = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.GetContextTypeResponse} returns this + */ +proto.ml_metadata.GetContextTypeResponse.prototype.clearContextType = function() { + return this.setContextType(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextTypeResponse.prototype.hasContextType = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetContextTypesByIDRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextTypesByIDRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextTypesByIDRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextTypesByIDRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextTypesByIDRequest.toObject = function(includeInstance, msg) { + var f, obj = { + typeIdsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextTypesByIDRequest} + */ +proto.ml_metadata.GetContextTypesByIDRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextTypesByIDRequest; + return proto.ml_metadata.GetContextTypesByIDRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextTypesByIDRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextTypesByIDRequest} + */ +proto.ml_metadata.GetContextTypesByIDRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addTypeIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextTypesByIDRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextTypesByIDRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextTypesByIDRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextTypesByIDRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTypeIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 1, + f + ); + } +}; + + +/** + * repeated int64 type_ids = 1; + * @return {!Array} + */ +proto.ml_metadata.GetContextTypesByIDRequest.prototype.getTypeIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetContextTypesByIDRequest} returns this + */ +proto.ml_metadata.GetContextTypesByIDRequest.prototype.setTypeIdsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.GetContextTypesByIDRequest} returns this + */ +proto.ml_metadata.GetContextTypesByIDRequest.prototype.addTypeIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetContextTypesByIDRequest} returns this + */ +proto.ml_metadata.GetContextTypesByIDRequest.prototype.clearTypeIdsList = function() { + return this.setTypeIdsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetContextTypesByIDResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextTypesByIDResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextTypesByIDResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextTypesByIDResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextTypesByIDResponse.toObject = function(includeInstance, msg) { + var f, obj = { + contextTypesList: jspb.Message.toObjectList(msg.getContextTypesList(), + ml_metadata_proto_metadata_store_pb.ContextType.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextTypesByIDResponse} + */ +proto.ml_metadata.GetContextTypesByIDResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextTypesByIDResponse; + return proto.ml_metadata.GetContextTypesByIDResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextTypesByIDResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextTypesByIDResponse} + */ +proto.ml_metadata.GetContextTypesByIDResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ContextType; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ContextType.deserializeBinaryFromReader); + msg.addContextTypes(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextTypesByIDResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextTypesByIDResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextTypesByIDResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextTypesByIDResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextTypesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ContextType.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated ContextType context_types = 1; + * @return {!Array} + */ +proto.ml_metadata.GetContextTypesByIDResponse.prototype.getContextTypesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.ContextType, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetContextTypesByIDResponse} returns this +*/ +proto.ml_metadata.GetContextTypesByIDResponse.prototype.setContextTypesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.ContextType=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.ContextType} + */ +proto.ml_metadata.GetContextTypesByIDResponse.prototype.addContextTypes = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ContextType, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetContextTypesByIDResponse} returns this + */ +proto.ml_metadata.GetContextTypesByIDResponse.prototype.clearContextTypesList = function() { + return this.setContextTypesList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + options: (f = msg.getOptions()) && ml_metadata_proto_metadata_store_pb.ListOperationOptions.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextsRequest} + */ +proto.ml_metadata.GetContextsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextsRequest; + return proto.ml_metadata.GetContextsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextsRequest} + */ +proto.ml_metadata.GetContextsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.ListOperationOptions; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ListOperationOptions.deserializeBinaryFromReader); + msg.setOptions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getOptions(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.ListOperationOptions.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ListOperationOptions options = 1; + * @return {?proto.ml_metadata.ListOperationOptions} + */ +proto.ml_metadata.GetContextsRequest.prototype.getOptions = function() { + return /** @type{?proto.ml_metadata.ListOperationOptions} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.ListOperationOptions, 1)); +}; + + +/** + * @param {?proto.ml_metadata.ListOperationOptions|undefined} value + * @return {!proto.ml_metadata.GetContextsRequest} returns this +*/ +proto.ml_metadata.GetContextsRequest.prototype.setOptions = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.GetContextsRequest} returns this + */ +proto.ml_metadata.GetContextsRequest.prototype.clearOptions = function() { + return this.setOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextsRequest.prototype.hasOptions = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetContextsResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + contextsList: jspb.Message.toObjectList(msg.getContextsList(), + ml_metadata_proto_metadata_store_pb.Context.toObject, includeInstance), + nextPageToken: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextsResponse} + */ +proto.ml_metadata.GetContextsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextsResponse; + return proto.ml_metadata.GetContextsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextsResponse} + */ +proto.ml_metadata.GetContextsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Context; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Context.deserializeBinaryFromReader); + msg.addContexts(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setNextPageToken(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Context.serializeBinaryToWriter + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * repeated Context contexts = 1; + * @return {!Array} + */ +proto.ml_metadata.GetContextsResponse.prototype.getContextsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Context, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetContextsResponse} returns this +*/ +proto.ml_metadata.GetContextsResponse.prototype.setContextsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Context=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Context} + */ +proto.ml_metadata.GetContextsResponse.prototype.addContexts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Context, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetContextsResponse} returns this + */ +proto.ml_metadata.GetContextsResponse.prototype.clearContextsList = function() { + return this.setContextsList([]); +}; + + +/** + * optional string next_page_token = 2; + * @return {string} + */ +proto.ml_metadata.GetContextsResponse.prototype.getNextPageToken = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetContextsResponse} returns this + */ +proto.ml_metadata.GetContextsResponse.prototype.setNextPageToken = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetContextsResponse} returns this + */ +proto.ml_metadata.GetContextsResponse.prototype.clearNextPageToken = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextsResponse.prototype.hasNextPageToken = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextsByTypeRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextsByTypeRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextsByTypeRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByTypeRequest.toObject = function(includeInstance, msg) { + var f, obj = { + typeName: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + options: (f = msg.getOptions()) && ml_metadata_proto_metadata_store_pb.ListOperationOptions.toObject(includeInstance, f), + typeVersion: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextsByTypeRequest} + */ +proto.ml_metadata.GetContextsByTypeRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextsByTypeRequest; + return proto.ml_metadata.GetContextsByTypeRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextsByTypeRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextsByTypeRequest} + */ +proto.ml_metadata.GetContextsByTypeRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeName(value); + break; + case 2: + var value = new ml_metadata_proto_metadata_store_pb.ListOperationOptions; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ListOperationOptions.deserializeBinaryFromReader); + msg.setOptions(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeVersion(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextsByTypeRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextsByTypeRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextsByTypeRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByTypeRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = message.getOptions(); + if (f != null) { + writer.writeMessage( + 2, + f, + ml_metadata_proto_metadata_store_pb.ListOperationOptions.serializeBinaryToWriter + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * optional string type_name = 1; + * @return {string} + */ +proto.ml_metadata.GetContextsByTypeRequest.prototype.getTypeName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetContextsByTypeRequest} returns this + */ +proto.ml_metadata.GetContextsByTypeRequest.prototype.setTypeName = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetContextsByTypeRequest} returns this + */ +proto.ml_metadata.GetContextsByTypeRequest.prototype.clearTypeName = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextsByTypeRequest.prototype.hasTypeName = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ListOperationOptions options = 2; + * @return {?proto.ml_metadata.ListOperationOptions} + */ +proto.ml_metadata.GetContextsByTypeRequest.prototype.getOptions = function() { + return /** @type{?proto.ml_metadata.ListOperationOptions} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.ListOperationOptions, 2)); +}; + + +/** + * @param {?proto.ml_metadata.ListOperationOptions|undefined} value + * @return {!proto.ml_metadata.GetContextsByTypeRequest} returns this +*/ +proto.ml_metadata.GetContextsByTypeRequest.prototype.setOptions = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.GetContextsByTypeRequest} returns this + */ +proto.ml_metadata.GetContextsByTypeRequest.prototype.clearOptions = function() { + return this.setOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextsByTypeRequest.prototype.hasOptions = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional string type_version = 3; + * @return {string} + */ +proto.ml_metadata.GetContextsByTypeRequest.prototype.getTypeVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetContextsByTypeRequest} returns this + */ +proto.ml_metadata.GetContextsByTypeRequest.prototype.setTypeVersion = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetContextsByTypeRequest} returns this + */ +proto.ml_metadata.GetContextsByTypeRequest.prototype.clearTypeVersion = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextsByTypeRequest.prototype.hasTypeVersion = function() { + return jspb.Message.getField(this, 3) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetContextsByTypeResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextsByTypeResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextsByTypeResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextsByTypeResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByTypeResponse.toObject = function(includeInstance, msg) { + var f, obj = { + contextsList: jspb.Message.toObjectList(msg.getContextsList(), + ml_metadata_proto_metadata_store_pb.Context.toObject, includeInstance), + nextPageToken: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextsByTypeResponse} + */ +proto.ml_metadata.GetContextsByTypeResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextsByTypeResponse; + return proto.ml_metadata.GetContextsByTypeResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextsByTypeResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextsByTypeResponse} + */ +proto.ml_metadata.GetContextsByTypeResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Context; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Context.deserializeBinaryFromReader); + msg.addContexts(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setNextPageToken(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextsByTypeResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextsByTypeResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextsByTypeResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByTypeResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Context.serializeBinaryToWriter + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * repeated Context contexts = 1; + * @return {!Array} + */ +proto.ml_metadata.GetContextsByTypeResponse.prototype.getContextsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Context, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetContextsByTypeResponse} returns this +*/ +proto.ml_metadata.GetContextsByTypeResponse.prototype.setContextsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Context=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Context} + */ +proto.ml_metadata.GetContextsByTypeResponse.prototype.addContexts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Context, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetContextsByTypeResponse} returns this + */ +proto.ml_metadata.GetContextsByTypeResponse.prototype.clearContextsList = function() { + return this.setContextsList([]); +}; + + +/** + * optional string next_page_token = 2; + * @return {string} + */ +proto.ml_metadata.GetContextsByTypeResponse.prototype.getNextPageToken = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetContextsByTypeResponse} returns this + */ +proto.ml_metadata.GetContextsByTypeResponse.prototype.setNextPageToken = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetContextsByTypeResponse} returns this + */ +proto.ml_metadata.GetContextsByTypeResponse.prototype.clearNextPageToken = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextsByTypeResponse.prototype.hasNextPageToken = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextByTypeAndNameRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextByTypeAndNameRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.toObject = function(includeInstance, msg) { + var f, obj = { + typeName: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + typeVersion: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + contextName: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextByTypeAndNameRequest} + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextByTypeAndNameRequest; + return proto.ml_metadata.GetContextByTypeAndNameRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextByTypeAndNameRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextByTypeAndNameRequest} + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeName(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setTypeVersion(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setContextName(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextByTypeAndNameRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextByTypeAndNameRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string type_name = 1; + * @return {string} + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.getTypeName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetContextByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.setTypeName = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetContextByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.clearTypeName = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.hasTypeName = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string type_version = 3; + * @return {string} + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.getTypeVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetContextByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.setTypeVersion = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetContextByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.clearTypeVersion = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.hasTypeVersion = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional string context_name = 2; + * @return {string} + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.getContextName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetContextByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.setContextName = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetContextByTypeAndNameRequest} returns this + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.clearContextName = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextByTypeAndNameRequest.prototype.hasContextName = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextByTypeAndNameResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextByTypeAndNameResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextByTypeAndNameResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextByTypeAndNameResponse.toObject = function(includeInstance, msg) { + var f, obj = { + context: (f = msg.getContext()) && ml_metadata_proto_metadata_store_pb.Context.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextByTypeAndNameResponse} + */ +proto.ml_metadata.GetContextByTypeAndNameResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextByTypeAndNameResponse; + return proto.ml_metadata.GetContextByTypeAndNameResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextByTypeAndNameResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextByTypeAndNameResponse} + */ +proto.ml_metadata.GetContextByTypeAndNameResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Context; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Context.deserializeBinaryFromReader); + msg.setContext(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextByTypeAndNameResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextByTypeAndNameResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextByTypeAndNameResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextByTypeAndNameResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContext(); + if (f != null) { + writer.writeMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Context.serializeBinaryToWriter + ); + } +}; + + +/** + * optional Context context = 1; + * @return {?proto.ml_metadata.Context} + */ +proto.ml_metadata.GetContextByTypeAndNameResponse.prototype.getContext = function() { + return /** @type{?proto.ml_metadata.Context} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.Context, 1)); +}; + + +/** + * @param {?proto.ml_metadata.Context|undefined} value + * @return {!proto.ml_metadata.GetContextByTypeAndNameResponse} returns this +*/ +proto.ml_metadata.GetContextByTypeAndNameResponse.prototype.setContext = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.GetContextByTypeAndNameResponse} returns this + */ +proto.ml_metadata.GetContextByTypeAndNameResponse.prototype.clearContext = function() { + return this.setContext(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextByTypeAndNameResponse.prototype.hasContext = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetContextsByIDRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextsByIDRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextsByIDRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextsByIDRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByIDRequest.toObject = function(includeInstance, msg) { + var f, obj = { + contextIdsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextsByIDRequest} + */ +proto.ml_metadata.GetContextsByIDRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextsByIDRequest; + return proto.ml_metadata.GetContextsByIDRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextsByIDRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextsByIDRequest} + */ +proto.ml_metadata.GetContextsByIDRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addContextIds(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextsByIDRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextsByIDRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextsByIDRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByIDRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextIdsList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 1, + f + ); + } +}; + + +/** + * repeated int64 context_ids = 1; + * @return {!Array} + */ +proto.ml_metadata.GetContextsByIDRequest.prototype.getContextIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetContextsByIDRequest} returns this + */ +proto.ml_metadata.GetContextsByIDRequest.prototype.setContextIdsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.ml_metadata.GetContextsByIDRequest} returns this + */ +proto.ml_metadata.GetContextsByIDRequest.prototype.addContextIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetContextsByIDRequest} returns this + */ +proto.ml_metadata.GetContextsByIDRequest.prototype.clearContextIdsList = function() { + return this.setContextIdsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetContextsByIDResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextsByIDResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextsByIDResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextsByIDResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByIDResponse.toObject = function(includeInstance, msg) { + var f, obj = { + contextsList: jspb.Message.toObjectList(msg.getContextsList(), + ml_metadata_proto_metadata_store_pb.Context.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextsByIDResponse} + */ +proto.ml_metadata.GetContextsByIDResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextsByIDResponse; + return proto.ml_metadata.GetContextsByIDResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextsByIDResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextsByIDResponse} + */ +proto.ml_metadata.GetContextsByIDResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Context; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Context.deserializeBinaryFromReader); + msg.addContexts(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextsByIDResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextsByIDResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextsByIDResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByIDResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Context.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Context contexts = 1; + * @return {!Array} + */ +proto.ml_metadata.GetContextsByIDResponse.prototype.getContextsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Context, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetContextsByIDResponse} returns this +*/ +proto.ml_metadata.GetContextsByIDResponse.prototype.setContextsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Context=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Context} + */ +proto.ml_metadata.GetContextsByIDResponse.prototype.addContexts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Context, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetContextsByIDResponse} returns this + */ +proto.ml_metadata.GetContextsByIDResponse.prototype.clearContextsList = function() { + return this.setContextsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextsByArtifactRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextsByArtifactRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextsByArtifactRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByArtifactRequest.toObject = function(includeInstance, msg) { + var f, obj = { + artifactId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextsByArtifactRequest} + */ +proto.ml_metadata.GetContextsByArtifactRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextsByArtifactRequest; + return proto.ml_metadata.GetContextsByArtifactRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextsByArtifactRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextsByArtifactRequest} + */ +proto.ml_metadata.GetContextsByArtifactRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setArtifactId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextsByArtifactRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextsByArtifactRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextsByArtifactRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByArtifactRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } +}; + + +/** + * optional int64 artifact_id = 1; + * @return {number} + */ +proto.ml_metadata.GetContextsByArtifactRequest.prototype.getArtifactId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.GetContextsByArtifactRequest} returns this + */ +proto.ml_metadata.GetContextsByArtifactRequest.prototype.setArtifactId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetContextsByArtifactRequest} returns this + */ +proto.ml_metadata.GetContextsByArtifactRequest.prototype.clearArtifactId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextsByArtifactRequest.prototype.hasArtifactId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetContextsByArtifactResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextsByArtifactResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextsByArtifactResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextsByArtifactResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByArtifactResponse.toObject = function(includeInstance, msg) { + var f, obj = { + contextsList: jspb.Message.toObjectList(msg.getContextsList(), + ml_metadata_proto_metadata_store_pb.Context.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextsByArtifactResponse} + */ +proto.ml_metadata.GetContextsByArtifactResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextsByArtifactResponse; + return proto.ml_metadata.GetContextsByArtifactResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextsByArtifactResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextsByArtifactResponse} + */ +proto.ml_metadata.GetContextsByArtifactResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Context; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Context.deserializeBinaryFromReader); + msg.addContexts(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextsByArtifactResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextsByArtifactResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextsByArtifactResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByArtifactResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Context.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Context contexts = 1; + * @return {!Array} + */ +proto.ml_metadata.GetContextsByArtifactResponse.prototype.getContextsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Context, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetContextsByArtifactResponse} returns this +*/ +proto.ml_metadata.GetContextsByArtifactResponse.prototype.setContextsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Context=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Context} + */ +proto.ml_metadata.GetContextsByArtifactResponse.prototype.addContexts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Context, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetContextsByArtifactResponse} returns this + */ +proto.ml_metadata.GetContextsByArtifactResponse.prototype.clearContextsList = function() { + return this.setContextsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextsByExecutionRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextsByExecutionRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextsByExecutionRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByExecutionRequest.toObject = function(includeInstance, msg) { + var f, obj = { + executionId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextsByExecutionRequest} + */ +proto.ml_metadata.GetContextsByExecutionRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextsByExecutionRequest; + return proto.ml_metadata.GetContextsByExecutionRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextsByExecutionRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextsByExecutionRequest} + */ +proto.ml_metadata.GetContextsByExecutionRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setExecutionId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextsByExecutionRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextsByExecutionRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextsByExecutionRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByExecutionRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } +}; + + +/** + * optional int64 execution_id = 1; + * @return {number} + */ +proto.ml_metadata.GetContextsByExecutionRequest.prototype.getExecutionId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.GetContextsByExecutionRequest} returns this + */ +proto.ml_metadata.GetContextsByExecutionRequest.prototype.setExecutionId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetContextsByExecutionRequest} returns this + */ +proto.ml_metadata.GetContextsByExecutionRequest.prototype.clearExecutionId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetContextsByExecutionRequest.prototype.hasExecutionId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetContextsByExecutionResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetContextsByExecutionResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetContextsByExecutionResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetContextsByExecutionResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByExecutionResponse.toObject = function(includeInstance, msg) { + var f, obj = { + contextsList: jspb.Message.toObjectList(msg.getContextsList(), + ml_metadata_proto_metadata_store_pb.Context.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetContextsByExecutionResponse} + */ +proto.ml_metadata.GetContextsByExecutionResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetContextsByExecutionResponse; + return proto.ml_metadata.GetContextsByExecutionResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetContextsByExecutionResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetContextsByExecutionResponse} + */ +proto.ml_metadata.GetContextsByExecutionResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Context; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Context.deserializeBinaryFromReader); + msg.addContexts(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetContextsByExecutionResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetContextsByExecutionResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetContextsByExecutionResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetContextsByExecutionResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Context.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Context contexts = 1; + * @return {!Array} + */ +proto.ml_metadata.GetContextsByExecutionResponse.prototype.getContextsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Context, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetContextsByExecutionResponse} returns this +*/ +proto.ml_metadata.GetContextsByExecutionResponse.prototype.setContextsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Context=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Context} + */ +proto.ml_metadata.GetContextsByExecutionResponse.prototype.addContexts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Context, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetContextsByExecutionResponse} returns this + */ +proto.ml_metadata.GetContextsByExecutionResponse.prototype.clearContextsList = function() { + return this.setContextsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetParentContextsByContextRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetParentContextsByContextRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetParentContextsByContextRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetParentContextsByContextRequest.toObject = function(includeInstance, msg) { + var f, obj = { + contextId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetParentContextsByContextRequest} + */ +proto.ml_metadata.GetParentContextsByContextRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetParentContextsByContextRequest; + return proto.ml_metadata.GetParentContextsByContextRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetParentContextsByContextRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetParentContextsByContextRequest} + */ +proto.ml_metadata.GetParentContextsByContextRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setContextId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetParentContextsByContextRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetParentContextsByContextRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetParentContextsByContextRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetParentContextsByContextRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } +}; + + +/** + * optional int64 context_id = 1; + * @return {number} + */ +proto.ml_metadata.GetParentContextsByContextRequest.prototype.getContextId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.GetParentContextsByContextRequest} returns this + */ +proto.ml_metadata.GetParentContextsByContextRequest.prototype.setContextId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetParentContextsByContextRequest} returns this + */ +proto.ml_metadata.GetParentContextsByContextRequest.prototype.clearContextId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetParentContextsByContextRequest.prototype.hasContextId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetParentContextsByContextResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetParentContextsByContextResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetParentContextsByContextResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetParentContextsByContextResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetParentContextsByContextResponse.toObject = function(includeInstance, msg) { + var f, obj = { + contextsList: jspb.Message.toObjectList(msg.getContextsList(), + ml_metadata_proto_metadata_store_pb.Context.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetParentContextsByContextResponse} + */ +proto.ml_metadata.GetParentContextsByContextResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetParentContextsByContextResponse; + return proto.ml_metadata.GetParentContextsByContextResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetParentContextsByContextResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetParentContextsByContextResponse} + */ +proto.ml_metadata.GetParentContextsByContextResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Context; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Context.deserializeBinaryFromReader); + msg.addContexts(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetParentContextsByContextResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetParentContextsByContextResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetParentContextsByContextResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetParentContextsByContextResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Context.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Context contexts = 1; + * @return {!Array} + */ +proto.ml_metadata.GetParentContextsByContextResponse.prototype.getContextsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Context, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetParentContextsByContextResponse} returns this +*/ +proto.ml_metadata.GetParentContextsByContextResponse.prototype.setContextsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Context=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Context} + */ +proto.ml_metadata.GetParentContextsByContextResponse.prototype.addContexts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Context, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetParentContextsByContextResponse} returns this + */ +proto.ml_metadata.GetParentContextsByContextResponse.prototype.clearContextsList = function() { + return this.setContextsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetChildrenContextsByContextRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetChildrenContextsByContextRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetChildrenContextsByContextRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetChildrenContextsByContextRequest.toObject = function(includeInstance, msg) { + var f, obj = { + contextId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetChildrenContextsByContextRequest} + */ +proto.ml_metadata.GetChildrenContextsByContextRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetChildrenContextsByContextRequest; + return proto.ml_metadata.GetChildrenContextsByContextRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetChildrenContextsByContextRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetChildrenContextsByContextRequest} + */ +proto.ml_metadata.GetChildrenContextsByContextRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setContextId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetChildrenContextsByContextRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetChildrenContextsByContextRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetChildrenContextsByContextRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetChildrenContextsByContextRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } +}; + + +/** + * optional int64 context_id = 1; + * @return {number} + */ +proto.ml_metadata.GetChildrenContextsByContextRequest.prototype.getContextId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.GetChildrenContextsByContextRequest} returns this + */ +proto.ml_metadata.GetChildrenContextsByContextRequest.prototype.setContextId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetChildrenContextsByContextRequest} returns this + */ +proto.ml_metadata.GetChildrenContextsByContextRequest.prototype.clearContextId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetChildrenContextsByContextRequest.prototype.hasContextId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetChildrenContextsByContextResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetChildrenContextsByContextResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetChildrenContextsByContextResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetChildrenContextsByContextResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetChildrenContextsByContextResponse.toObject = function(includeInstance, msg) { + var f, obj = { + contextsList: jspb.Message.toObjectList(msg.getContextsList(), + ml_metadata_proto_metadata_store_pb.Context.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetChildrenContextsByContextResponse} + */ +proto.ml_metadata.GetChildrenContextsByContextResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetChildrenContextsByContextResponse; + return proto.ml_metadata.GetChildrenContextsByContextResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetChildrenContextsByContextResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetChildrenContextsByContextResponse} + */ +proto.ml_metadata.GetChildrenContextsByContextResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Context; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Context.deserializeBinaryFromReader); + msg.addContexts(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetChildrenContextsByContextResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetChildrenContextsByContextResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetChildrenContextsByContextResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetChildrenContextsByContextResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContextsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Context.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated Context contexts = 1; + * @return {!Array} + */ +proto.ml_metadata.GetChildrenContextsByContextResponse.prototype.getContextsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Context, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetChildrenContextsByContextResponse} returns this +*/ +proto.ml_metadata.GetChildrenContextsByContextResponse.prototype.setContextsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Context=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Context} + */ +proto.ml_metadata.GetChildrenContextsByContextResponse.prototype.addContexts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Context, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetChildrenContextsByContextResponse} returns this + */ +proto.ml_metadata.GetChildrenContextsByContextResponse.prototype.clearContextsList = function() { + return this.setContextsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactsByContextRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactsByContextRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactsByContextRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByContextRequest.toObject = function(includeInstance, msg) { + var f, obj = { + contextId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + options: (f = msg.getOptions()) && ml_metadata_proto_metadata_store_pb.ListOperationOptions.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactsByContextRequest} + */ +proto.ml_metadata.GetArtifactsByContextRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactsByContextRequest; + return proto.ml_metadata.GetArtifactsByContextRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactsByContextRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactsByContextRequest} + */ +proto.ml_metadata.GetArtifactsByContextRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setContextId(value); + break; + case 2: + var value = new ml_metadata_proto_metadata_store_pb.ListOperationOptions; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ListOperationOptions.deserializeBinaryFromReader); + msg.setOptions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactsByContextRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactsByContextRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactsByContextRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByContextRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = message.getOptions(); + if (f != null) { + writer.writeMessage( + 2, + f, + ml_metadata_proto_metadata_store_pb.ListOperationOptions.serializeBinaryToWriter + ); + } +}; + + +/** + * optional int64 context_id = 1; + * @return {number} + */ +proto.ml_metadata.GetArtifactsByContextRequest.prototype.getContextId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.GetArtifactsByContextRequest} returns this + */ +proto.ml_metadata.GetArtifactsByContextRequest.prototype.setContextId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetArtifactsByContextRequest} returns this + */ +proto.ml_metadata.GetArtifactsByContextRequest.prototype.clearContextId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactsByContextRequest.prototype.hasContextId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ListOperationOptions options = 2; + * @return {?proto.ml_metadata.ListOperationOptions} + */ +proto.ml_metadata.GetArtifactsByContextRequest.prototype.getOptions = function() { + return /** @type{?proto.ml_metadata.ListOperationOptions} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.ListOperationOptions, 2)); +}; + + +/** + * @param {?proto.ml_metadata.ListOperationOptions|undefined} value + * @return {!proto.ml_metadata.GetArtifactsByContextRequest} returns this +*/ +proto.ml_metadata.GetArtifactsByContextRequest.prototype.setOptions = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.GetArtifactsByContextRequest} returns this + */ +proto.ml_metadata.GetArtifactsByContextRequest.prototype.clearOptions = function() { + return this.setOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactsByContextRequest.prototype.hasOptions = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetArtifactsByContextResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetArtifactsByContextResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetArtifactsByContextResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetArtifactsByContextResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByContextResponse.toObject = function(includeInstance, msg) { + var f, obj = { + artifactsList: jspb.Message.toObjectList(msg.getArtifactsList(), + ml_metadata_proto_metadata_store_pb.Artifact.toObject, includeInstance), + nextPageToken: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetArtifactsByContextResponse} + */ +proto.ml_metadata.GetArtifactsByContextResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetArtifactsByContextResponse; + return proto.ml_metadata.GetArtifactsByContextResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetArtifactsByContextResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetArtifactsByContextResponse} + */ +proto.ml_metadata.GetArtifactsByContextResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Artifact; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Artifact.deserializeBinaryFromReader); + msg.addArtifacts(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setNextPageToken(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetArtifactsByContextResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetArtifactsByContextResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetArtifactsByContextResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetArtifactsByContextResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getArtifactsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Artifact.serializeBinaryToWriter + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * repeated Artifact artifacts = 1; + * @return {!Array} + */ +proto.ml_metadata.GetArtifactsByContextResponse.prototype.getArtifactsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Artifact, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetArtifactsByContextResponse} returns this +*/ +proto.ml_metadata.GetArtifactsByContextResponse.prototype.setArtifactsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Artifact=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Artifact} + */ +proto.ml_metadata.GetArtifactsByContextResponse.prototype.addArtifacts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Artifact, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetArtifactsByContextResponse} returns this + */ +proto.ml_metadata.GetArtifactsByContextResponse.prototype.clearArtifactsList = function() { + return this.setArtifactsList([]); +}; + + +/** + * optional string next_page_token = 2; + * @return {string} + */ +proto.ml_metadata.GetArtifactsByContextResponse.prototype.getNextPageToken = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetArtifactsByContextResponse} returns this + */ +proto.ml_metadata.GetArtifactsByContextResponse.prototype.setNextPageToken = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetArtifactsByContextResponse} returns this + */ +proto.ml_metadata.GetArtifactsByContextResponse.prototype.clearNextPageToken = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetArtifactsByContextResponse.prototype.hasNextPageToken = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionsByContextRequest.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionsByContextRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionsByContextRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsByContextRequest.toObject = function(includeInstance, msg) { + var f, obj = { + contextId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + options: (f = msg.getOptions()) && ml_metadata_proto_metadata_store_pb.ListOperationOptions.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionsByContextRequest} + */ +proto.ml_metadata.GetExecutionsByContextRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionsByContextRequest; + return proto.ml_metadata.GetExecutionsByContextRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionsByContextRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionsByContextRequest} + */ +proto.ml_metadata.GetExecutionsByContextRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setContextId(value); + break; + case 2: + var value = new ml_metadata_proto_metadata_store_pb.ListOperationOptions; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.ListOperationOptions.deserializeBinaryFromReader); + msg.setOptions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionsByContextRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionsByContextRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionsByContextRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsByContextRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = message.getOptions(); + if (f != null) { + writer.writeMessage( + 2, + f, + ml_metadata_proto_metadata_store_pb.ListOperationOptions.serializeBinaryToWriter + ); + } +}; + + +/** + * optional int64 context_id = 1; + * @return {number} + */ +proto.ml_metadata.GetExecutionsByContextRequest.prototype.getContextId = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.ml_metadata.GetExecutionsByContextRequest} returns this + */ +proto.ml_metadata.GetExecutionsByContextRequest.prototype.setContextId = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetExecutionsByContextRequest} returns this + */ +proto.ml_metadata.GetExecutionsByContextRequest.prototype.clearContextId = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionsByContextRequest.prototype.hasContextId = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ListOperationOptions options = 2; + * @return {?proto.ml_metadata.ListOperationOptions} + */ +proto.ml_metadata.GetExecutionsByContextRequest.prototype.getOptions = function() { + return /** @type{?proto.ml_metadata.ListOperationOptions} */ ( + jspb.Message.getWrapperField(this, ml_metadata_proto_metadata_store_pb.ListOperationOptions, 2)); +}; + + +/** + * @param {?proto.ml_metadata.ListOperationOptions|undefined} value + * @return {!proto.ml_metadata.GetExecutionsByContextRequest} returns this +*/ +proto.ml_metadata.GetExecutionsByContextRequest.prototype.setOptions = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.ml_metadata.GetExecutionsByContextRequest} returns this + */ +proto.ml_metadata.GetExecutionsByContextRequest.prototype.clearOptions = function() { + return this.setOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionsByContextRequest.prototype.hasOptions = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.ml_metadata.GetExecutionsByContextResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.ml_metadata.GetExecutionsByContextResponse.prototype.toObject = function(opt_includeInstance) { + return proto.ml_metadata.GetExecutionsByContextResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.ml_metadata.GetExecutionsByContextResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsByContextResponse.toObject = function(includeInstance, msg) { + var f, obj = { + executionsList: jspb.Message.toObjectList(msg.getExecutionsList(), + ml_metadata_proto_metadata_store_pb.Execution.toObject, includeInstance), + nextPageToken: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.ml_metadata.GetExecutionsByContextResponse} + */ +proto.ml_metadata.GetExecutionsByContextResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.ml_metadata.GetExecutionsByContextResponse; + return proto.ml_metadata.GetExecutionsByContextResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.ml_metadata.GetExecutionsByContextResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.ml_metadata.GetExecutionsByContextResponse} + */ +proto.ml_metadata.GetExecutionsByContextResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new ml_metadata_proto_metadata_store_pb.Execution; + reader.readMessage(value,ml_metadata_proto_metadata_store_pb.Execution.deserializeBinaryFromReader); + msg.addExecutions(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setNextPageToken(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.ml_metadata.GetExecutionsByContextResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.ml_metadata.GetExecutionsByContextResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.ml_metadata.GetExecutionsByContextResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.ml_metadata.GetExecutionsByContextResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getExecutionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + ml_metadata_proto_metadata_store_pb.Execution.serializeBinaryToWriter + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * repeated Execution executions = 1; + * @return {!Array} + */ +proto.ml_metadata.GetExecutionsByContextResponse.prototype.getExecutionsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, ml_metadata_proto_metadata_store_pb.Execution, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.ml_metadata.GetExecutionsByContextResponse} returns this +*/ +proto.ml_metadata.GetExecutionsByContextResponse.prototype.setExecutionsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.ml_metadata.Execution=} opt_value + * @param {number=} opt_index + * @return {!proto.ml_metadata.Execution} + */ +proto.ml_metadata.GetExecutionsByContextResponse.prototype.addExecutions = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Execution, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.ml_metadata.GetExecutionsByContextResponse} returns this + */ +proto.ml_metadata.GetExecutionsByContextResponse.prototype.clearExecutionsList = function() { + return this.setExecutionsList([]); +}; + + +/** + * optional string next_page_token = 2; + * @return {string} + */ +proto.ml_metadata.GetExecutionsByContextResponse.prototype.getNextPageToken = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.ml_metadata.GetExecutionsByContextResponse} returns this + */ +proto.ml_metadata.GetExecutionsByContextResponse.prototype.setNextPageToken = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.ml_metadata.GetExecutionsByContextResponse} returns this + */ +proto.ml_metadata.GetExecutionsByContextResponse.prototype.clearNextPageToken = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.ml_metadata.GetExecutionsByContextResponse.prototype.hasNextPageToken = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +goog.object.extend(exports, proto.ml_metadata); diff --git a/frontend/src/third_party/mlmd/index.ts b/frontend/src/third_party/mlmd/index.ts new file mode 100644 index 0000000000..8e923d8e00 --- /dev/null +++ b/frontend/src/third_party/mlmd/index.ts @@ -0,0 +1,57 @@ +/* + * Copyright 2021 The Kubeflow Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { + Artifact, + ArtifactType, + Context, + ContextType, + Event, + Execution, + ExecutionType, + Value, +} from './generated/ml_metadata/proto/metadata_store_pb'; +export { MetadataStoreServicePromiseClient } from './generated/ml_metadata/proto/metadata_store_service_grpc_web_pb'; +export { + GetArtifactsByIDRequest, + GetArtifactsByIDResponse, + GetArtifactsRequest, + GetArtifactsResponse, + GetArtifactTypesByIDRequest, + GetArtifactTypesRequest, + GetArtifactTypesResponse, + GetContextByTypeAndNameRequest, + GetContextByTypeAndNameResponse, + GetContextsByTypeRequest, + GetContextsByTypeResponse, + GetContextsRequest, + GetContextsResponse, + GetContextTypeRequest, + GetContextTypeResponse, + GetEventsByArtifactIDsRequest, + GetEventsByArtifactIDsResponse, + GetEventsByExecutionIDsRequest, + GetEventsByExecutionIDsResponse, + GetExecutionsByContextRequest, + GetExecutionsByContextResponse, + GetExecutionsByIDRequest, + GetExecutionsByIDResponse, + GetExecutionsRequest, + GetExecutionsResponse, + GetExecutionTypesByIDRequest, + GetExecutionTypesRequest, + GetExecutionTypesResponse, +} from './generated/ml_metadata/proto/metadata_store_service_pb'; diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 0000000000..5ebcecde86 --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,30 @@ +// Compile CSS using the following command: +// npm run build:tailwind +module.exports = { + purge: ['./src/**/*.{js,jsx,ts,tsx}', './public/index.html'], + darkMode: false, // or 'media' or 'class' + theme: { + extend: { + // https://tailwindcss.com/docs/customizing-colors + colors: { + // https://material.io/resources/color + mui: { + green: { + 200: { + DEFAULT: '#a5d6a7', + light: '#d7ffd9', + }, + 500: { + DEFAULT: '#4caf50', + strong: '#087f23' + } + }, + }, + }, + }, + }, + variants: { + extend: {}, + }, + plugins: [], +}; diff --git a/frontend/third_party/argo-ui/argo_template.ts b/frontend/third_party/argo-ui/argo_template.ts index 26a19a6841..5af61d6a58 100644 --- a/frontend/third_party/argo-ui/argo_template.ts +++ b/frontend/third_party/argo-ui/argo_template.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -278,34 +278,12 @@ export interface RetryStrategy { * S3Artifact is the location of an S3 artifact */ export interface S3Artifact { - /** - * AccessKeySecret is the secret selector to the bucket's access key - */ - accessKeySecret: kubernetes.SecretKeySelector; - /** - * Bucket is the name of the bucket - */ - bucket: string; - /** - * Endpoint is the hostname of the bucket endpoint - */ - endpoint: string; - /** - * Insecure will connect to the service with TLS - */ - insecure?: boolean; + // Handcrafted, this is not used by Argo UI. + s3Bucket?: S3Bucket; /** * Key is the key in the bucket where the artifact resides */ key: string; - /** - * Region contains the optional bucket region - */ - region?: string; - /** - * SecretKeySecret is the secret selector to the bucket's secret key - */ - secretKeySecret: kubernetes.SecretKeySelector; } /** @@ -336,6 +314,10 @@ export interface S3Bucket { * SecretKeySecret is the secret selector to the bucket's secret key */ secretKeySecret: kubernetes.SecretKeySelector; + + // Handcrafted, this is not used by Argo UI. + // KeyFormat is defines the format of how to store keys. Can reference workflow variables + keyFormat?: string; } /** * Script is a template subtype to enable scripting through code steps @@ -873,6 +855,47 @@ export interface WorkflowStatus { * StoredWorkflowTemplateSpec is a Workflow Spec of top level WorkflowTemplate. */ storedWorkflowTemplateSpec?: WorkflowSpec; + + // Handcrafted, this is not used by Argo UI. + // ArtifactRepositoryRef is used to cache the repository to use so we do not need to determine it everytime we reconcile. + artifactRepositoryRef?: ArtifactRepositoryRef; +} + +// Handcrafted, this is not used by Argo UI. +// +protobuf.options.(gogoproto.goproto_stringer)=false +export interface ArtifactRepositoryRef { + // artifactRepositoryRef?: ArtifactRepositoryRef; + + // The namespace of the config map. Defaults to the workflow's namespace, or the controller's namespace (if found). + namespace?: string; + + // If this ref represents the default artifact repository, rather than a config map. + default?: boolean; + + // The repository the workflow will use. This maybe empty before v3.1. + artifactRepository?: ArtifactRepository; +} + +// Handcrafted, this is not used by Argo UI. +// ArtifactRepository represents an artifact repository in which a controller will store its artifacts +export interface ArtifactRepository { + // ArchiveLogs enables log archiving + archiveLogs?: boolean; + + // S3 stores artifact in a S3-compliant object store + s3?: S3Bucket; + + // // Artifactory stores artifacts to JFrog Artifactory + // optional ArtifactoryArtifactRepository artifactory = 3; + + // // HDFS stores artifacts in HDFS + // optional HDFSArtifactRepository hdfs = 4; + + // // OSS stores artifact in a OSS-compliant object store + // optional OSSArtifactRepository oss = 5; + + // // GCS stores artifact in a GCS object store + // optional GCSArtifactRepository gcs = 6; } /** @@ -1076,8 +1099,8 @@ export interface DAGTask { */ dependencies: string[]; - // TODO: This exists in https://github.com/argoproj/argo/blob/master/api/openapi-spec/swagger.json - // but not in https://github.com/argoproj/argo-ui/blob/master/src/models/workflows.ts + // TODO: This exists in https://github.com/argoproj/argo-workflows/blob/master/api/openapi-spec/swagger.json + // but not in https://github.com/argoproj/argo-workflows/blob/master/ui/src/models/workflows.ts // Perhaps we should generate this definition file from the swagger? /** * When is an expression in which the task should conditionally execute diff --git a/frontend/third_party/argo-ui/kubernetes.ts b/frontend/third_party/argo-ui/kubernetes.ts index 5098ef916d..a8e5a28f0f 100644 --- a/frontend/third_party/argo-ui/kubernetes.ts +++ b/frontend/third_party/argo-ui/kubernetes.ts @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/frontend/third_party/once/LICENSE b/frontend/third_party/once/LICENSE new file mode 100644 index 0000000000..8edea947ac --- /dev/null +++ b/frontend/third_party/once/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/frontend/third_party/watchpack/LICENSE b/frontend/third_party/watchpack/LICENSE new file mode 100644 index 0000000000..3d5fa73258 --- /dev/null +++ b/frontend/third_party/watchpack/LICENSE @@ -0,0 +1,20 @@ +Copyright JS Foundation and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 0c8d55f5f6..8f73430c5d 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -22,8 +22,9 @@ "forceConsistentCasingInFileNames": true, "isolatedModules": true, "noEmit": true, - "strictPropertyInitialization": false, // temporary workaround blocked by @kubeflow/frontend - "strict": true + "strictPropertyInitialization": false, + "strict": true, + "noFallthroughCasesInSwitch": true }, "exclude": [ "__mocks__", @@ -35,6 +36,7 @@ "jest", "mock-backend", "node_modules", + "proto", "scripts", "server", "src/apis", @@ -42,5 +44,5 @@ "src/setupTests.ts", "webpack" ], - "include": ["src"] + "include": ["src", "stories"] } diff --git a/go-licenses.yaml b/go-licenses.yaml new file mode 100644 index 0000000000..86caae0342 --- /dev/null +++ b/go-licenses.yaml @@ -0,0 +1,173 @@ +licenses: + types: + overrides: + - spdxId: blessing + type: unencumbered +module: + go: + version: master + overrides: + - name: github.com/kubeflow/pipelines + excludePaths: + # the following are not used to build binaries + - manifests + - components + - frontend + - samples + - backend/api/python_http_client + - third_party/argo + - third_party/minio + - third_party/metadata_envoy + # collected third party licenses + - third_party/license.txt + - third_party/NOTICES + - backend/build # ignore built binaries + - v2 # v2 is a separate sub-module + - name: github.com/kubeflow/pipelines/api + skip: true # this is a local module in the same project + - name: github.com/beorn7/perks + excludePaths: + # README.md contains duplicate license info as LICENSE + - README.md + - name: github.com/docker/spdystream + excludePaths: + - LICENSE.docs # documentations use this license, does not affect us + - name: github.com/ghodss/yaml + version: v1.0.1-0.20190212211648-25d852aebe32 + license: + path: LICENSE + spdxId: MIT / BSD-3-Clause + - name: github.com/mattn/go-sqlite3 + version: v1.9.0 + license: + path: LICENSE + spdxId: MIT + subModules: + - path: . + license: + path: sqlite3-binding.h + spdxId: blessing + lineStart: 2 + lineEnd: 11 + - name: github.com/matttproud/golang_protobuf_extensions + excludePaths: + - testdata + - name: github.com/prometheus/common + version: v0.15.0 + license: + path: LICENSE + spdxId: Apache-2.0 + subModules: + - path: internal/bitbucket.org/ww/goautoneg + license: + path: README.txt + spdxId: BSD-3-Clause + - name: go.mongodb.org/mongo-driver + version: v1.4.4 + excludePaths: + - THIRD-PARTY-NOTICES # third party dependencies already included by go modules + license: + path: LICENSE + spdxId: Apache-2.0 + subModules: + - path: . + license: + path: THIRD-PARTY-NOTICES + spdxId: BSD-2-Clause + lineStart: 1 + lineEnd: 29 + - path: . + license: + path: THIRD-PARTY-NOTICES + spdxId: BSD-3-Clause + lineStart: 31 + lineEnd: 61 + - name: gopkg.in/jcmturner/gokrb5.v5 + excludePaths: + - testenv + - name: gopkg.in/yaml.v3 + version: v3.0.0-20210107192922-496545a6307b + # There are other files with license headers, + # but they are all included in the root LICENSE. + license: + path: LICENSE + spdxId: MIT + - name: k8s.io/kubernetes + excludePaths: + # Godeps include auto-collected third party license files, but + # we already get them via go modules, so we can ignore them. + - Godeps/LICENSES + # Staging modules are published as separate modules in k8s.io, not used here + - staging + # We do not use UI code here. + - third_party/swagger-ui/lib + - name: cloud.google.com/go + version: v0.55.0 + license: + path: LICENSE + spdxId: Apache-2.0 + subModules: + - path: cmd/go-cloud-debug-agent/internal/debug/elf + license: + path: elf.go + spdxId: BSD-2-Clause + lineStart: 1 + lineEnd: 43 + - name: cloud.google.com/go/storage + version: v1.12.0 + license: + path: LICENSE + url: https://github.com/googleapis/google-cloud-go/blob/storage/v1.12.0/LICENSE + spdxId: Apache-2.0 + - name: github.com/jmespath/go-jmespath + version: v0.4.0 + license: # non-standard license file + path: LICENSE + spdxId: Apache-2.0 + - name: github.com/aws/aws-sdk-go + version: v1.36.1 + license: + path: LICENSE.txt + spdxId: Apache-2.0 + subModules: + - path: internal/sync/singleflight + license: + path: LICENSE + spdxId: BSD-3-Clause + - name: github.com/davecgh/go-spew + version: v1.1.1 + license: + path: LICENSE + spdxId: ISC + - name: github.com/googleapis/gax-go/v2 + version: v2.0.5 + license: + path: LICENSE + spdxId: BSD-3-Clause + - name: golang.org/x/net + excludePaths: + - html/testdata + - name: github.com/gogo/protobuf + version: v1.3.2 + license: + # All files have either BSD-3-Clause or BSD-2-Clause licenses with manual + # inspection. + path: LICENSE + spdxId: BSD-3-Clause / BSD-2-Clause + - name: google.golang.org/protobuf + version: v1.27.1 + license: + path: LICENSE + spdxId: BSD-3-Clause + - name: gopkg.in/yaml.v2 + version: v2.4.0 + license: + path: LICENSE + # gopkg.in/yaml.v2 is port of a MIT licensed library + spdxId: Apache-2.0 / MIT + - name: go.opencensus.io + version: v0.22.5 + license: + path: LICENSE + url: https://github.com/census-instrumentation/opencensus-go/blob/v0.22.5/LICENSE + spdxId: Apache-2.0 diff --git a/go.mod b/go.mod index e46d525d9c..c8e25abd84 100644 --- a/go.mod +++ b/go.mod @@ -3,10 +3,9 @@ module github.com/kubeflow/pipelines require ( github.com/Masterminds/squirrel v0.0.0-20190107164353-fa735ea14f09 github.com/VividCortex/mysqlerr v0.0.0-20170204212430-6c6b55f8796f - github.com/argoproj/argo v0.0.0-20200506223611-54154c61eb4f github.com/cenkalti/backoff v2.2.1+incompatible github.com/fsnotify/fsnotify v1.4.9 - github.com/ghodss/yaml v1.0.0 + github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 github.com/go-ini/ini v1.62.0 // indirect github.com/go-openapi/errors v0.19.9 github.com/go-openapi/runtime v0.19.24 @@ -19,10 +18,10 @@ require ( github.com/google/addlicense v0.0.0-20200906110928-a0294312aa76 github.com/google/go-cmp v0.5.6 github.com/google/uuid v1.2.0 - github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e // indirect github.com/gorilla/mux v1.8.0 - github.com/grpc-ecosystem/grpc-gateway v1.14.8 + github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/jinzhu/gorm v1.9.12 + github.com/lestrrat-go/strftime v1.0.4 github.com/mattn/go-sqlite3 v2.0.1+incompatible github.com/minio/minio-go v6.0.14+incompatible github.com/peterhellberg/duration v0.0.0-20191119133758-ec6baeebcd10 @@ -35,28 +34,30 @@ require ( github.com/tektoncd/pipeline v0.27.0 go.uber.org/zap v1.18.1 golang.org/x/net v0.0.0-20210614182718-04defd469f4e - google.golang.org/api v0.36.0 google.golang.org/genproto v0.0.0-20210416161957-9910b6c460de google.golang.org/grpc v1.38.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 - google.golang.org/protobuf v1.26.0 - gopkg.in/yaml.v2 v2.4.0 + google.golang.org/protobuf v1.27.1 k8s.io/api v0.20.7 k8s.io/apimachinery v0.20.7 - k8s.io/client-go v11.0.1-0.20190805182717-6502b5e7b1b5+incompatible + k8s.io/client-go v0.20.7 k8s.io/code-generator v0.20.7 - sigs.k8s.io/controller-runtime v0.6.4 + sigs.k8s.io/controller-runtime v0.7.0 ) replace ( - github.com/googleapis/gnostic => github.com/googleapis/gnostic v0.2.0 - k8s.io/api => k8s.io/api v0.18.12 - k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.18.12 - k8s.io/apimachinery => k8s.io/apimachinery v0.18.12 - k8s.io/apiserver => k8s.io/apiserver v0.18.12 - k8s.io/client-go => k8s.io/client-go v0.18.12 - k8s.io/code-generator => k8s.io/code-generator v0.18.12 - k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29 + cloud.google.com/go => cloud.google.com/go v0.55.0 + github.com/gogo/protobuf => github.com/gogo/protobuf v1.3.2 + // TODO: remove temporary patch + github.com/kubeflow/pipelines/api => ./api + github.com/mattn/go-sqlite3 => github.com/mattn/go-sqlite3 v1.9.0 + github.com/prometheus/common => github.com/prometheus/common v0.15.0 + k8s.io/api => k8s.io/api v0.19.6 + k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.19.6 + k8s.io/apimachinery => k8s.io/apimachinery v0.19.6 + k8s.io/apiserver => k8s.io/apiserver v0.19.6 + k8s.io/client-go => k8s.io/client-go v0.19.6 + k8s.io/code-generator => k8s.io/code-generator v0.19.6 ) go 1.13 diff --git a/go.sum b/go.sum index ed2744b6b2..04ebbc8644 100644 --- a/go.sum +++ b/go.sum @@ -1,32 +1,12 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.55.0 h1:eoz/lYxKSL4CNAiaUJ0ZfD1J3bfMYbU5B3rwM1C1EIU= cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0 h1:eWRCuwubtDrCJG0oSUMgnsbD4CmPFQF2ei4OFbXvwww= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= @@ -86,26 +66,18 @@ github.com/VividCortex/mysqlerr v0.0.0-20170204212430-6c6b55f8796f h1:HR5nRmUQgX github.com/VividCortex/mysqlerr v0.0.0-20170204212430-6c6b55f8796f/go.mod h1:f3HiCrHjHBdcm6E83vGaXh1KomZMA2P6aeo3hKx/wg0= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/alecthomas/jsonschema v0.0.0-20180308105923-f2c93856175a/go.mod h1:qpebaTNSsyUn5rPSJMsfqEtDw71TTggXM6stUDI16HA= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/aliyun/aliyun-oss-go-sdk v2.0.6+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/argoproj/argo v0.0.0-20200506223611-54154c61eb4f h1:XB3XWc8Lu19WO6BdPzBJIIOFGD4EpCJXRv0+GknNhv8= -github.com/argoproj/argo v0.0.0-20200506223611-54154c61eb4f/go.mod h1:odaKT905bWZwj3ObCKT8pA48QyLnABRDiNpGSoC050M= -github.com/argoproj/pkg v0.0.0-20200318225345-d3be5f29b1a8/go.mod h1:2EZ44RG/CcgtPTwrRR0apOc7oU6UIw8GjCUJWZ8X3bM= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= @@ -113,7 +85,6 @@ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= @@ -121,14 +92,10 @@ github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGL github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.27.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.31.12 h1:SxRRGyhlCagI0DYkhOg+FgdXGXzRTE3vEX/gsgFaiKQ= github.com/aws/aws-sdk-go v1.31.12/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-sdk-go v1.34.28 h1:sscPpn/Ns3i0F4HPEWAVcwdIRaZZCuL7llJ2/60yPIk= github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -164,7 +131,6 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/colinmarc/hdfs v1.1.4-0.20180805212432-9746310a4d31/go.mod h1:vSBumefK4HA5uiRSwNP+3ofgrEoScpCS2MMWcWXEuQ4= github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/stargz-snapshotter/estargz v0.0.0-20201223015020-a9a0c2d64694/go.mod h1:E9uVkkBKf0EaC39j2JVW9EzdNhYvpz6eQIjILHebruk= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -177,7 +143,6 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= @@ -198,7 +163,6 @@ github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyG github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/cli v20.10.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v20.10.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= @@ -206,7 +170,7 @@ github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= @@ -215,7 +179,6 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.15.0+incompatible h1:8KpYO/Xl/ZudZs5RNOEhWMBY4hmzlZhhRd9cu+jrZP4= github.com/emicklei/go-restful v2.15.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= @@ -230,15 +193,12 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y= github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.5.0 h1:bAmFiUJ+o0o2B4OiTFeE3MqCOtyo+jjPP9iZ0VRxYUc= github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= @@ -247,46 +207,40 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew= +github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-ini/ini v1.51.1/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-ini/ini v1.62.0 h1:7VJT/ZXjzqSrvtraFp4ONq80hTcRQth1c9ZnQ3uNQvU= github.com/go-ini/ini v1.62.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc= github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/zapr v0.1.0 h1:h+WVe9j6HAA01niTJPA/kKH0i7e0rLZBCwauQFcRE54= -github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= +github.com/go-logr/zapr v0.2.0 h1:v6Ji8yBW77pva6NkJKQdHLAJKrIJKRHz0RXwPqCHSR4= +github.com/go-logr/zapr v0.2.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/analysis v0.19.5 h1:8b2ZgKfKIUTVQpTb77MoRDIMEIwvDVw40o3aOXdfYzI= github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ= github.com/go-openapi/analysis v0.19.16 h1:Ub9e++M8sDwtHD+S587TYi+6ANBG1NRYGZDihqk0SaY= github.com/go-openapi/analysis v0.19.16/go.mod h1:GLInF007N83Ad3m8a/CbQ5TPzdnGT7workfHwuVjNVk= -github.com/go-openapi/errors v0.17.0 h1:g5DzIh94VpuR/dd6Ff8KqyHNnw7yBa2xSHIPPzjRDUo= github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.19.2 h1:a2kIyV3w+OS3S97zxUndRVD46+FhGOUBDFY7nmu4CsY= github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= @@ -298,7 +252,6 @@ github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+ github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -306,17 +259,14 @@ github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1 github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= -github.com/go-openapi/loads v0.17.0 h1:H22nMs3GDQk4SwAaFQ+jLNw+0xoFeCueawhZlv8MBYs= github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI= -github.com/go-openapi/loads v0.19.4 h1:5I4CCSqoWzT+82bBkNIvmLc0UOsoKKQ4Fz+3VxOB7SY= github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= github.com/go-openapi/loads v0.19.5/go.mod h1:dswLCAdonkRufe/gSUC3gN8nTSaB9uaS2es0x5/IbjY= github.com/go-openapi/loads v0.19.6/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc= @@ -325,7 +275,6 @@ github.com/go-openapi/loads v0.20.0 h1:Pymw1O8zDmWeNv4kVsHd0W3cvgdp8juRa4U/U/8D/ github.com/go-openapi/loads v0.20.0/go.mod h1:2LhKquiE513rN5xC6Aan6lYOSddlL8Mp20AW9kpviM4= github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= -github.com/go-openapi/runtime v0.19.4 h1:csnOgcgAiuGoM/Po7PEpKDoNulCcF3FGbSnbHfxgjMI= github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo= github.com/go-openapi/runtime v0.19.16/go.mod h1:5P9104EJgYcizotuXhEuUrzVc+j1RiSjahULvYmlv98= @@ -336,20 +285,16 @@ github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsd github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/spec v0.19.6 h1:rMMMj8cV38KVXK7SFc+I2MWClbEfbK705+j+dyqun5g= github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= -github.com/go-openapi/spec v0.19.7/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= github.com/go-openapi/spec v0.19.15/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU= github.com/go-openapi/spec v0.20.0/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU= github.com/go-openapi/spec v0.20.2 h1:pFPUZsiIbZ20kLUcuCGeuQWG735fPMxW7wHF9BWlnQU= github.com/go-openapi/spec v0.20.2/go.mod h1:RW6Xcbs6LOyWLU/mXGdzn2Qc+3aj+ASfI7rvSZh1Vls= -github.com/go-openapi/strfmt v0.17.0 h1:1isAxYf//QDTnVzbLAMrUK++0k1EjeLJU/gTOR0o3Mc= github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/strfmt v0.19.3 h1:eRfyY5SkaNJCAwmmMcADjY31ow9+N7MCLW7oRkbsINA= github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= @@ -361,17 +306,14 @@ github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/ github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= -github.com/go-openapi/swag v0.19.8/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= github.com/go-openapi/swag v0.19.12/go.mod h1:eFdyEBkTdoAf/9RXBvj4cr1nH7GD8Kzo5HTt47gr72M= -github.com/go-openapi/swag v0.19.13 h1:233UVgMy1DlmCYYfOiFpta6e2urloh+sEs5id6lyzog= github.com/go-openapi/swag v0.19.13/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo= -github.com/go-openapi/validate v0.19.5 h1:QhCBKRYqZR+SKo4gl1lPhPahope8/RLt6EVgY8X80w0= github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8= github.com/go-openapi/validate v0.19.12/go.mod h1:Rzou8hA/CBw8donlS6WNEUQupNvUZ0waH08tGe6kAQ4= @@ -379,7 +321,6 @@ github.com/go-openapi/validate v0.19.15/go.mod h1:tbn/fdOwYHgrhPBzidZfJC2MIVvs9G github.com/go-openapi/validate v0.20.1 h1:QGQ5CvK74E28t3DkegGweKR+auemUi5IdpMc4x3UW6s= github.com/go-openapi/validate v0.20.1/go.mod h1:b60iJT+xNNLfaQJUqLI7946tYiFEOuE9E4k54HpKcJ0= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= @@ -411,11 +352,8 @@ github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGt github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= @@ -427,20 +365,13 @@ github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -449,7 +380,6 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= @@ -472,16 +402,12 @@ github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -492,40 +418,27 @@ github.com/google/go-github/v27 v27.0.6/go.mod h1:/0Gr8pJ55COkmv+S/yPKCczSkUPIM/ github.com/google/go-licenses v0.0.0-20200602185517-f29a4c695c3d/go.mod h1:g1VOUGKZYIqe8lDq2mL7plhAWXqrEaGUs7eIjthN1sk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/licenseclassifier v0.0.0-20190926221455-842c0d70d702/go.mod h1:qsqn2hxC+vURpyBRygGUuinTO42MFRLcsmQ/P8v94+M= github.com/google/mako v0.0.0-20190821191249-122f8dcef9e3/go.mod h1:YzLcVlL+NqWnmUEPuhS1LxDDwGO9WNbVlEXaF4IH35g= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gnostic v0.2.0 h1:l6N3VoaVzTncYYW+9yOz2LJJammFZGBO13sqgEhpy9g= -github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= +github.com/googleapis/gnostic v0.5.3 h1:2qsuRm+bzgwSIKikigPASa2GhW8H2Dn4Qq7UxD8K/48= +github.com/googleapis/gnostic v0.5.3/go.mod h1:TRWw1s4gxBGjSe301Dai3c7wXJAZy57+/6tawkOvqHQ= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gophercloud/gophercloud v0.7.0/go.mod h1:gmC5oQqMDOMO1t1gq5DquX/yAU808e/4mzjjDA76+Ss= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1ks85zJ1lfDGgIiMDuIptTOhJq+zKyg= -github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= @@ -534,19 +447,17 @@ github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= -github.com/grpc-ecosystem/grpc-gateway v1.14.8 h1:hXClj+iFpmLM8i3lkO6i4Psli4P2qObQuQReiII26U8= github.com/grpc-ecosystem/grpc-gateway v1.14.8/go.mod h1:NZE8t6vs6TnwLL/ITkaK8W3ecMLGAbh2jXTclvpiwYo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/h2non/gock v1.0.9/go.mod h1:CZMcB0Lg5IWnr9bF79pPMg9WeV6WumxQiUJ1UvdO1iE= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= @@ -563,14 +474,12 @@ github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+ github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v0.0.0-20180228145832-27454136f036/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= @@ -583,19 +492,15 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg= github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= +github.com/imdario/mergo v0.3.10 h1:6q5mVkdH/vYmqngx7kZQTjJ5HRsx+ImorDIEQ+beJgc= +github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/tdigest v0.0.0-20180711151920-a7d76c6f093a/go.mod h1:9GkyshztGufsdPQWjH+ifgnIr3xNUL5syI70g2dzU1o= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jcmturner/gofork v0.0.0-20180107083740-2aebee971930/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= -github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= github.com/jenkins-x/go-scm v1.5.117/go.mod h1:PCT338UhP/pQ0IeEeMEf/hoLTYKcH7qjGEKd7jPkeYg= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jinzhu/gorm v1.9.12 h1:Drgk1clyWT9t9ERbzHza6Mj/8FY/CqMyVzOiHviMo6Q= @@ -606,9 +511,7 @@ github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M= github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= @@ -620,28 +523,23 @@ github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCV github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -658,16 +556,17 @@ github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= +github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8= +github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is= +github.com/lestrrat-go/strftime v1.0.4 h1:T1Rb9EPkAhgxKqbcMIPguPq8glqXTA1koF8n9BHElA8= +github.com/lestrrat-go/strftime v1.0.4/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR76fd03sz+Qz4g= github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.3.0 h1:/qkRGz8zljWiDcFvgpwUpwIAPu3r07TDvs3Rws+o/pU= -github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lightstep/tracecontext.go v0.0.0-20181129014701-1757c391b1ac h1:+2b6iGRJe3hvV/yVXrd41yVEjxuFHxasJqDhkIjS4gk= github.com/lightstep/tracecontext.go v0.0.0-20181129014701-1757c391b1ac/go.mod h1:Frd2bnT3w5FB5q49ENTfVlztJES+1k/7lyWX2+9gq/M= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -678,21 +577,17 @@ github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-sqlite3 v2.0.1+incompatible h1:xQ15muvnzGBHpIpdrNi1DA5x0+TcBZzsIDwmw9uTHzw= -github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/4= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -705,12 +600,10 @@ github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceT github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= @@ -725,10 +618,8 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= @@ -750,22 +641,21 @@ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:v github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.2/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.1 h1:jMU0WaQrP0a/YAEq8eJmJKjBoMs+pClEr1vDMlM/Do4= +github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.3 h1:gph6h/qe9GSUw1NhH1gp+qb+h8rXD8Cy60Z32Qw3ELA= github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= @@ -787,11 +677,8 @@ github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT9 github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/getopt v0.0.0-20180729010549-6fdd0a2c7117/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= -github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= github.com/pelletier/go-toml v1.7.0 h1:7utD74fnzVc/cpcyy8sjrlFr5vYpypUixARcHIMIGuI= @@ -814,12 +701,10 @@ github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prY github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.9.0 h1:Rrch9mh17XcxvEu9D9DEpb4isxjGBtcevQjKvxPRQIU= github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= @@ -830,18 +715,8 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0 h1:4fgOnadei3EZvgRwxJ7RMpG1k1pOZth5Pc13tyspaKM= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -849,7 +724,6 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= @@ -859,7 +733,6 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= -github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -874,18 +747,15 @@ github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdh github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/githubv4 v0.0.0-20190718010115-4ba037080260/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= @@ -899,7 +769,6 @@ github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTd github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.4-0.20181021141114-fe5e611709b0/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= @@ -909,12 +778,12 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2 h1:VUFqw5KcqRf7i70GOzW7N+Q7+gxVBkSSqiXB12+JQ4M= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -925,9 +794,7 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -936,8 +803,6 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/tektoncd/pipeline v0.27.0 h1:lsQBNg3q+VK5S0liDxhaodnI0+VLlL+8znl+ZWbLZy8= github.com/tektoncd/pipeline v0.27.0/go.mod h1:m8fmoJm7h5qhtl4lroyn6tBzyy53rkM/kYVqM/UL304= github.com/tektoncd/plumbing v0.0.0-20210514044347-f8a9689d5bd5/go.mod h1:WTWwsg91xgm+jPOKoyKVK/yRYxnVDlUYeDlypB1lDdQ= -github.com/tidwall/gjson v1.3.5/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= -github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -950,35 +815,25 @@ github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijb github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v0.0.0-20171207120941-e5f51c11919d/go.mod h1:+g/po7GqyG5E+1CNgquiIxJnsXEi5vwFn5weFujbO78= -github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/vdemeester/k8s-pkg-credentialprovider v1.19.7/go.mod h1:K2nMO14cgZitdwBqdQps9tInJgcaXcU/7q5F59lpbNI= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yudai/gojsondiff v0.0.0-20170107030110-7b1b7adf999d/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.2 h1:jxcFYjlkl8xaERsgLo+RNquI0epW6zuy/ZRQs6jnrFA= go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= @@ -992,15 +847,13 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.8.0 h1:CUhrE4N1rqSE6FM9ecihEjRkLQu8cDfgDyoOs83mEY4= go.uber.org/atomic v1.8.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -1009,16 +862,16 @@ go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= +go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go.uber.org/zap v1.18.1 h1:CSUJ2mjFszzEWt4CdKISEuChVIXGBn3lAPwkRGyVrc4= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -golang.org/x/crypto v0.0.0-20180723164146-c126467f60eb/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1037,23 +890,16 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191117063200-497ca9f6d64f/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a h1:kr2P4QFmQr29mSLA43kwrOcgcReGTfbE9N577tCTuBc= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= @@ -1065,15 +911,11 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= @@ -1083,7 +925,6 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1109,15 +950,12 @@ golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= @@ -1127,14 +965,11 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= @@ -1146,7 +981,6 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 h1:3B43BWw0xEBsLZ/NO1VALz6fppU3481pik+2Ksv45z8= golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= @@ -1160,11 +994,9 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1177,7 +1009,6 @@ golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1187,25 +1018,20 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191119060738-e882bf8e40c2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1219,18 +1045,16 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3 h1:kzM6+9dur93BcC2kVlYl34cHU+TYZLanmpSJHVMmL64= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1242,26 +1066,21 @@ golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf h1:MZ2shdL+ZM/XzY3ZGOnh4Nlpnxz5GSOhOmtHo3iPU6M= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1271,7 +1090,6 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1281,18 +1099,13 @@ golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1302,13 +1115,9 @@ golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191118222007-07fc4c7f2b98/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191203134012-c197fd4bf371/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1316,24 +1125,19 @@ golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200407191807-cd5a53e07f8a/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.4 h1:cVngSRcfgyZCzys3KYOpCFa+4dqX/Oub9tAq00ttGVs= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= @@ -1342,15 +1146,12 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= +gomodules.xyz/jsonpatch/v2 v2.1.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1365,33 +1166,25 @@ google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.25.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0 h1:l2Nfbl2GPXdWorv+dT2XfinX2jOOw4zv1VhLstx+6rE= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -1399,7 +1192,6 @@ google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4 google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1410,11 +1202,7 @@ google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1m google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210416161957-9910b6c460de h1:+nG/xknR+Gc5ByHOtK1dT0Pl3LYo8NLR+Jz3XeBeGEg= google.golang.org/genproto v0.0.0-20210416161957-9910b6c460de/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= @@ -1427,7 +1215,6 @@ google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ij google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -1435,8 +1222,8 @@ google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0= @@ -1449,43 +1236,31 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gavv/httpexpect.v2 v2.0.0/go.mod h1:uMEAayJd5rI8SqPSUiHbQFyj5OTNrBgkLUYex48OYGc= gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.54.0 h1:oM5ElzbIi7gwLnNbPX2M25ED1vSAK3B6dex50eS/6Fs= -gopkg.in/ini.v1 v1.54.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= -gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= -gopkg.in/jcmturner/goidentity.v2 v2.0.0/go.mod h1:vCwK9HeXksMeUmQ4SxDd1tRz4LejrKh3KRVjQWhjvZI= -gopkg.in/jcmturner/gokrb5.v5 v5.3.0/go.mod h1:oQz8Wc5GsctOTgCVyKad1Vw4TCWz5G6gfIQr88RPv4k= -gopkg.in/jcmturner/rpc.v0 v0.0.2/go.mod h1:NzMq6cRzR9lipgw7WxRBHNx5N8SifBuaCQsOT1kWY/E= -gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1502,9 +1277,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= @@ -1517,67 +1290,61 @@ gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81 gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.18.12 h1:97X6znOXMVgCKivTAgpBXGBGlCe3gbM++yFdldgBCaE= -k8s.io/api v0.18.12/go.mod h1:3sS78jmUoGHwERyMbEhxP6owcQ77UxGo+Yy+dKNWrh0= -k8s.io/apiextensions-apiserver v0.18.12 h1:b0jTgW/qwqZBMIJTMxkLvvAtNRDZboG5yZiIbOFgQv8= -k8s.io/apiextensions-apiserver v0.18.12/go.mod h1:nihADkPed1L37Vxpz2/BrtxO9mCtINH23aNtUe/CRLo= -k8s.io/apimachinery v0.18.12 h1:bLFXU4IxOu06F6Z6PV7eqtapXFb1G2q0ni0XBNFtJH8= -k8s.io/apimachinery v0.18.12/go.mod h1:PF5taHbXgTEJLU+xMypMmYTXTWPJ5LaW8bfsisxnEXk= -k8s.io/apiserver v0.18.12/go.mod h1:uFOeW4LlxS6KDgLWy3n3gh0DhC6m41QIFgL33ouk+4w= -k8s.io/client-go v0.18.12 h1:MDGRE2tGidz29g45dI4kfelJo+aRmDqWx0Way8mD88A= -k8s.io/client-go v0.18.12/go.mod h1:0aC8XkA09dX/goYqHQJ/kVv0zL1t+weOZt3pmz9LpxA= +k8s.io/api v0.19.6 h1:F3lfwgpKcKms6F1mMqkQXFzXmme8QqHTJBtBkev3TOg= +k8s.io/api v0.19.6/go.mod h1:Plxx44Nh4zVblkJrIgxVPgPre1mvng6tXf1Sj3bs0fU= +k8s.io/apiextensions-apiserver v0.19.6 h1:LL7H65E2VTBfxmsWQZth60zzWVtbSN2gWMEWfsuDvIQ= +k8s.io/apiextensions-apiserver v0.19.6/go.mod h1:9s8ceL67UJAD1ewbsn07tkQ7/EGjiKOedKyiUCVXJgQ= +k8s.io/apimachinery v0.19.6 h1:kBLzSGuDdY1NdSV2uFzI+FwZ9wtkmG+X3ZVcWXSqNgA= +k8s.io/apimachinery v0.19.6/go.mod h1:6sRbGRAVY5DOCuZwB5XkqguBqpqLU6q/kOaOdk29z6Q= +k8s.io/apiserver v0.19.6/go.mod h1:05XquZxCDzQ27ebk7uV2LrFIK4lm5Yt47XkkUvLAoAM= +k8s.io/client-go v0.19.6 h1:vtPb33nP8DBMW+/CyuJ8fiie36c3CM1Ts6L4Tsr+PtU= +k8s.io/client-go v0.19.6/go.mod h1:gEiS+efRlXYUEQ9Oz4lmNXlxAl5JZ8y2zbTDGhvXXnk= k8s.io/cloud-provider v0.19.7/go.mod h1:aO/VpUwkG+JQN7ZXc5WBLZ5NBXuq/Y5B6vri6U94PZ8= -k8s.io/code-generator v0.18.12 h1:/cSUfqlYZ90y0WDxxWfwfTXUGkJer2Gt1L3AIaVvviQ= -k8s.io/code-generator v0.18.12/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= -k8s.io/component-base v0.18.12/go.mod h1:pRGKXsx2KWfsJqlDi4sbCc1jpaB87rXIIqupjhr5wj0= +k8s.io/code-generator v0.19.6 h1:N7PlZyX25j5Jl9oIBphWN2qp1AKZOwXdDVfj2Z0V0p8= +k8s.io/code-generator v0.19.6/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= +k8s.io/component-base v0.19.2/go.mod h1:g5LrsiTiabMLZ40AR6Hl45f088DevyGY+cCE2agEIVo= +k8s.io/component-base v0.19.6/go.mod h1:8Btsf8J00/fVDa/YFmXjei7gVkcFrlKZXjSeP4SZNJg= +k8s.io/component-base v0.19.7 h1:ZXS2VRWOWBOc2fTd1zjzhi/b/mkqFT9FDqiNsn1cH30= k8s.io/component-base v0.19.7/go.mod h1:YX8spPBgwl3I6UGcSdQiEMAqRMSUsGQOW7SEr4+Qa3U= k8s.io/csi-translation-lib v0.19.7/go.mod h1:WghizPQuzuygr2WdpgN2EjcNpDD2V4EAbxFXsgHgSBk= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/gengo v0.0.0-20210203185629-de9496dff47b h1:bAU8IlrMA6KbP0dIg/sVSJn95pDCUHDZx0DpTGrf2v4= k8s.io/gengo v0.0.0-20210203185629-de9496dff47b/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/klog/v2 v2.0.0 h1:Foj74zO6RbjjP4hBEKjnYtjjAhGg4jNynUdYF6fJrok= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.5.0 h1:8mOnjf1RmUPW6KRqQCfYSZq/K20Unmp3IhuZUhxl8KI= k8s.io/klog/v2 v2.5.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29 h1:NeQXVJ2XFSkRoPzRo8AId01ZER+j8oV4SZADT4iBOXQ= -k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29/go.mod h1:F+5wygcW0wmRTnM3cOgIqGivxkwSWIWT5YdsDbeAOaU= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kube-openapi v0.0.0-20210113233702-8566a335510f h1:ZcWbnalfwIst131Zff7dGd1HQdt+NA9q7z9Fi0vbsHY= +k8s.io/kube-openapi v0.0.0-20210113233702-8566a335510f/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= k8s.io/legacy-cloud-providers v0.19.7/go.mod h1:dsZk4gH9QIwAtHQ8CK0Ps257xlfgoXE3tMkMNhW2xDU= -k8s.io/utils v0.0.0-20191218082557-f07c713de883/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20200603063816-c1c6865ac451 h1:v8ud2Up6QK1lNOKFgiIVrZdMg7MpmSnvtrOieolJKoE= -k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20200912215256-4140de9c8800/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210111153108-fddb29f9d009 h1:0T5IaWHO3sJTEmCP6mUlBvMukxPKUQWqiI/YuiBNMiQ= k8s.io/utils v0.0.0-20210111153108-fddb29f9d009/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= knative.dev/hack v0.0.0-20210622141627-e28525d8d260/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI= knative.dev/pkg v0.0.0-20210730172132-bb4aaf09c430 h1:1ZIFVpdWK7fyXVMsCz7Ko/vfsE3p9WI3oB20Uz0AulY= knative.dev/pkg v0.0.0-20210730172132-bb4aaf09c430/go.mod h1:NYZRIPU+Pv39VfbZV1BtMIe4kCavNle1udsPrvOLm+Y= pgregory.net/rapid v0.3.3/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= -sigs.k8s.io/controller-runtime v0.6.4 h1:4013CKsBs5bEqo+LevzDett+LLxag/FjQWG94nVZ/9g= -sigs.k8s.io/controller-runtime v0.6.4/go.mod h1:WlZNXcM0++oyaQt4B7C2lEE5JYRs8vJUzRP4N4JpdAY= -sigs.k8s.io/structured-merge-diff/v2 v2.0.1/go.mod h1:Wb7vfKAodbKgf6tn1Kl0VvGj7mRH6DGaRcixXEJXTsE= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= +sigs.k8s.io/controller-runtime v0.7.0 h1:bU20IBBEPccWz5+zXpLnpVsgBYxqclaHu1pVDl/gEt8= +sigs.k8s.io/controller-runtime v0.7.0/go.mod h1:pJ3YBrJiAqMAZKi6UVGuE98ZrroV1p+pIhoHsMm9wdU= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.2 h1:YHQV7Dajm86OuqnIR6zAelnDWBRjo+YhYV9PmGrh1s8= +sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -upper.io/db.v3 v3.6.3+incompatible/go.mod h1:FgTdD24eBjJAbPKsQSiHUNgXjOR4Lub3u1UMHSIh82Y= diff --git a/hack/cherry-pick.sh b/hack/cherry-pick.sh index c399f0bec8..a90e1615c3 100755 --- a/hack/cherry-pick.sh +++ b/hack/cherry-pick.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/hack/format.sh b/hack/format.sh index 3b073ec5e4..48ab181b7b 100755 --- a/hack/format.sh +++ b/hack/format.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/samples/test/fail.py b/hack/install-go-licenses.sh old mode 100644 new mode 100755 similarity index 61% rename from samples/test/fail.py rename to hack/install-go-licenses.sh index c01da7cd2d..bc48a699c5 --- a/samples/test/fail.py +++ b/hack/install-go-licenses.sh @@ -1,4 +1,6 @@ -# Copyright 2021 Google LLC +#!/bin/sh +# +# Copyright 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -11,22 +13,15 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -"""Fail pipeline.""" - -from kfp import components, dsl - - -def fail(): - '''Fails''' - import sys - sys.exit(1) - - -fail_op = components.create_component_from_func( - fail, base_image='alpine:latest' -) +set -ex -@dsl.pipeline(name='fail_pipeline') -def fail_pipeline(): - fail_task = fail_op() +DOWNLOAD_URL="https://github.com/Bobgy/go-licenses/releases/download/v0.0.0-2021-06-27/go-licenses-linux.tar.gz" +if which wget; then + wget "${DOWNLOAD_URL}" +else + curl -LO "${DOWNLOAD_URL}" +fi +tar xvf go-licenses-linux.tar.gz +mv go-licenses /usr/local/bin +mv licenses /usr/local/bin diff --git a/samples/test/two_step_test.py b/hack/update-all-requirements.sh old mode 100644 new mode 100755 similarity index 54% rename from samples/test/two_step_test.py rename to hack/update-all-requirements.sh index 0c772897d6..3a71bf81e9 --- a/samples/test/two_step_test.py +++ b/hack/update-all-requirements.sh @@ -1,27 +1,23 @@ -# Copyright 2021 Google LLC +#!/bin/bash +# Copyright 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -"""Two step v2-compatible pipeline.""" -from .two_step import two_step_pipeline -from .util import run_pipeline_func, TestCase +set -euo pipefail +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null && pwd)" +REPO_ROOT="${DIR}/.." -def verify(run, run_id: str): - assert run.status == 'Succeeded' - # TODO(Bobgy): verify MLMD status - - -run_pipeline_func([ - TestCase(pipeline_func=two_step_pipeline, verify_func=verify) -]) +cd "${REPO_ROOT}/backend" && bash update_requirements.sh +cd "${REPO_ROOT}/backend/src/apiserver/visualization" && bash update_requirements.sh +cd "${REPO_ROOT}/test/sample-test/hack" && bash update_requirements.sh diff --git a/hack/update-requirements.sh b/hack/update-requirements.sh new file mode 100755 index 0000000000..68361a3b3d --- /dev/null +++ b/hack/update-requirements.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Usage: ./update_requirements.sh requirements.txt + +set -euo pipefail +IMAGE=${1:-"python:3.7"} +docker run -i --rm --entrypoint "" "$IMAGE" sh -c ' + python3 -m pip install pip setuptools --upgrade --quiet + python3 -m pip install pip-tools==5.4.0 --quiet + pip-compile --verbose --output-file - - +' diff --git a/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/application.yaml b/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/application.yaml index bd4c2aaa28..174aa780d0 100644 --- a/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/application.yaml +++ b/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/application.yaml @@ -12,7 +12,7 @@ metadata: spec: descriptor: type: Kubeflow Pipelines - version: 1.5.0 + version: 1.7.0 description: |- Reusable end-to-end ML workflow maintainers: diff --git a/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/argo.yaml b/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/argo.yaml index 9eb635a0ed..742ab0e120 100644 --- a/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/argo.yaml +++ b/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/argo.yaml @@ -1,20 +1,10 @@ -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workflows.argoproj.io labels: app.kubernetes.io/name: "{{ .Release.Name }}" spec: - additionalPrinterColumns: - - JSONPath: .status.phase - description: Status of the workflow - name: Status - type: string - - JSONPath: .status.startedAt - description: When the workflow was started - format: date-time - name: Age - type: date group: argoproj.io names: kind: Workflow @@ -24,14 +14,44 @@ spec: - wf singular: workflow scope: Namespaced - subresources: {} - version: v1alpha1 versions: - - name: v1alpha1 + - additionalPrinterColumns: + - description: Status of the workflow + jsonPath: .status.phase + name: Status + type: string + - description: When the workflow was started + format: date-time + jsonPath: .status.startedAt + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true + subresources: {} --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: clusterworkflowtemplates.argoproj.io @@ -48,13 +68,29 @@ spec: - cwft singular: clusterworkflowtemplate scope: Cluster - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: cronworkflows.argoproj.io @@ -71,13 +107,33 @@ spec: - cronwf singular: cronworkflow scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workfloweventbindings.argoproj.io @@ -93,13 +149,29 @@ spec: - wfeb singular: workfloweventbinding scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workflowtemplates.argoproj.io @@ -115,9 +187,25 @@ spec: - wftmpl singular: workflowtemplate scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- @@ -135,6 +223,14 @@ metadata: labels: app.kubernetes.io/name: "{{ .Release.Name }}" rules: +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - get + - update - apiGroups: - "" resources: @@ -245,12 +341,12 @@ subjects: apiVersion: v1 data: # References: - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/config/config.go - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/docs/workflow-controller-configmap.md - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/docs/workflow-controller-configmap.yaml + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/config/config.go + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.md + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.yaml - # pns executor is a more portable default, see https://github.com/kubeflow/pipelines/issues/1654. - containerRuntimeExecutor: pns + # emissary executor is a more portable default, see https://github.com/kubeflow/pipelines/issues/1654. + containerRuntimeExecutor: '{{ if .Values.executor.emissary }}emissary{{ else }}docker{{ end }}' # Note, {{ `some-string-{{without}}-template-interpretation` }} is a way to avoid some brackets interpreted as template. # Reference: https://github.com/helm/helm/issues/2798#issuecomment-467319526 @@ -259,7 +355,18 @@ data: s3: endpoint: 'minio-service.{{ .Release.Namespace }}:9000' bucket: '{{ if .Values.managedstorage.enabled }}{{ .Values.managedstorage.gcsBucketName }}{{ else }}mlpipeline{{ end }}' - keyFormat: "{{ `artifacts/{{workflow.name}}/{{pod.name}}` }}" + # keyFormat is a format pattern to define how artifacts will be organized in a bucket. + # It can reference workflow metadata variables such as workflow.namespace, workflow.name, + # pod.name. Can also use strftime formating of workflow.creationTimestamp so that workflow + # artifacts can be organized by date. If omitted, will use workflow.name/pod.name, + # which has potential for have collisions, because names do not guarantee they are unique + # over the lifetime of the cluster. + # Refer to https://kubernetes.io/docs/concepts/overview/working-with-objects/names/. + # + # The following format looks like: + # artifacts/my-workflow-abc123/2018/08/23/my-workflow-abc123-1234567890 + # Adding date into the path greatly reduces the chance of pod.name collision. + keyFormat: "{{ `artifacts/{{workflow.name}}/{{workflow.creationTimestamp.Y}}/{{workflow.creationTimestamp.m}}/{{workflow.creationTimestamp.d}}/{{pod.name}}` }}" # insecure will disable TLS. Primarily used for minio installs not configured with TLS insecure: true accessKeySecret: @@ -315,25 +422,36 @@ spec: - --executor-image - "{{ .Values.images.argoexecutor }}" - --namespaced + env: + - name: LEADER_ELECTION_IDENTITY + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name ports: - name: metrics containerPort: 9090 - # Periodically check we are listening on the metrics port - # causing a restart if it is not OK. - # This takes advantage of the fact that if the metrics service has died, - # then the controller has died. - # In testing, it appears to take 60-90s from failure to restart. + - containerPort: 6060 livenessProbe: + failureThreshold: 3 httpGet: - port: metrics - path: /metrics - initialDelaySeconds: 30 - periodSeconds: 30 + path: /healthz + port: 6060 + initialDelaySeconds: 90 + periodSeconds: 60 + timeoutSeconds: 30 resources: requests: cpu: 100m memory: 500Mi - securityContext: - runAsNonRoot: true + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true nodeSelector: kubernetes.io/os: linux + securityContext: + runAsNonRoot: true diff --git a/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/cache.yaml b/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/cache.yaml index 7e7acc6a00..1652d5b67a 100644 --- a/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/cache.yaml +++ b/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/cache.yaml @@ -191,6 +191,7 @@ data: mysql_host: "mysql" mysql_port: "3306" cache_image: "gcr.io/google-containers/busybox" + cache_node_restrictions: "false" --- apiVersion: apps/v1 kind: Deployment @@ -237,6 +238,11 @@ spec: configMapKeyRef: name: cache-configmap key: cache_image + - name: CACHE_NODE_RESTRICTIONS + valueFrom: + configMapKeyRef: + name: cache-configmap + key: cache_node_restrictions - name: DBCONFIG_DRIVER valueFrom: configMapKeyRef: diff --git a/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/config-snapshot.yaml b/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/config-snapshot.yaml index e12063ae4c..f0878b1b89 100644 --- a/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/config-snapshot.yaml +++ b/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/config-snapshot.yaml @@ -10,6 +10,7 @@ metadata: data: appName: '{{ .Release.Name }}' namespace: '{{ .Release.Namespace }}' + emissaryExecutor: '{{ .Values.executor.emissary }}' managedStorageEnabled: '{{ .Values.managedstorage.enabled }}' #{{ if .Values.managedstorage.enabled }} managedStorageCloudSqlInstanceConnectionName: '{{ .Values.managedstorage.cloudsqlInstanceConnectionName }}' diff --git a/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/pipeline.yaml b/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/pipeline.yaml index f0ce5a23c2..1f1a0eb3d5 100644 --- a/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/pipeline.yaml +++ b/manifests/gcp_marketplace/chart/kubeflow-pipelines/templates/pipeline.yaml @@ -805,3 +805,12 @@ apiVersion: v1 kind: ServiceAccount metadata: name: kubeflow-pipelines-container-builder +{{ if .Values.managedstorage.enabled }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: kfp-launcher +data: + defaultPipelineRoot: 'gs://{{ .Values.managedstorage.gcsBucketName }}/v2/artifacts' +{{ end }} diff --git a/manifests/gcp_marketplace/chart/kubeflow-pipelines/values.yaml b/manifests/gcp_marketplace/chart/kubeflow-pipelines/values.yaml index 2b5f33e0c1..4a74539a54 100644 --- a/manifests/gcp_marketplace/chart/kubeflow-pipelines/values.yaml +++ b/manifests/gcp_marketplace/chart/kubeflow-pipelines/values.yaml @@ -17,13 +17,13 @@ images: cacheserver: gcr.io/ml-pipeline/google/pipelines/cacheserver:dummy cachedeployer: gcr.io/ml-pipeline/google/pipelines/cachedeployer:dummy -serviceAccountCredential: "" +executor: + emissary: false gcpDefaultConfigName: "gcp-default-config" - managedstorage: enabled: false - cloudsqlInstanceConnectionName: null - gcsBucketName: null - databaseNamePrefix: '{{ .Release.Name | replace "-" "_" | replace "." "_" }}' + cloudsqlInstanceConnectionName: "" + gcsBucketName: "" + databaseNamePrefix: "" dbUsername: 'root' dbPassword: '' diff --git a/manifests/gcp_marketplace/deployer/init_action.sh b/manifests/gcp_marketplace/deployer/init_action.sh index a867d9acb6..3669c8c126 100644 --- a/manifests/gcp_marketplace/deployer/init_action.sh +++ b/manifests/gcp_marketplace/deployer/init_action.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/manifests/gcp_marketplace/deployer/overlay_deploy.sh b/manifests/gcp_marketplace/deployer/overlay_deploy.sh index 1efc77351c..70131308f0 100644 --- a/manifests/gcp_marketplace/deployer/overlay_deploy.sh +++ b/manifests/gcp_marketplace/deployer/overlay_deploy.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/manifests/gcp_marketplace/deployer/overlay_deploy_with_tests.sh b/manifests/gcp_marketplace/deployer/overlay_deploy_with_tests.sh index ed7e0808a9..f5dc23086e 100644 --- a/manifests/gcp_marketplace/deployer/overlay_deploy_with_tests.sh +++ b/manifests/gcp_marketplace/deployer/overlay_deploy_with_tests.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/manifests/gcp_marketplace/hack/format.sh b/manifests/gcp_marketplace/hack/format.sh index 7d0863e370..0aeeeffa58 100755 --- a/manifests/gcp_marketplace/hack/format.sh +++ b/manifests/gcp_marketplace/hack/format.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/manifests/gcp_marketplace/hack/release.sh b/manifests/gcp_marketplace/hack/release.sh index 52e68bf3d8..d1b03e9e3e 100755 --- a/manifests/gcp_marketplace/hack/release.sh +++ b/manifests/gcp_marketplace/hack/release.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/manifests/gcp_marketplace/schema.yaml b/manifests/gcp_marketplace/schema.yaml index 4e3abf5e8b..604ec80ce2 100644 --- a/manifests/gcp_marketplace/schema.yaml +++ b/manifests/gcp_marketplace/schema.yaml @@ -1,9 +1,9 @@ x-google-marketplace: schemaVersion: v2 applicationApiVersion: v1beta1 - publishedVersion: 1.5.0 + publishedVersion: 1.7.0 publishedVersionMetadata: - releaseNote: Based on 1.5.0 version. + releaseNote: Based on 1.7.0 version. releaseTypes: - Feature recommended: false @@ -121,6 +121,10 @@ x-google-marketplace: - apiGroups: [''] resources: ['configmaps', 'events', 'pods/log', 'persistentvolumes', 'persistentvolumeclaims', 'pods', 'pods/exec'] verbs: ['*'] + # Needed by argo v3.1.0+ + - apiGroups: ['coordination.k8s.io'] + resources: ['leases'] + verbs: ['create', 'get', 'update'] - apiGroups: ['batch'] resources: ['jobs'] verbs: ['*'] @@ -165,6 +169,19 @@ properties: type: string x-google-marketplace: type: NAMESPACE + executor.emissary: + type: boolean + title: Use emissary executor (Alpha) + default: false + description: |- + Warning, Kubeflow Pipelines does not work on Google Kubernetes Engine (GKE) 1.19+ by + default. You cluster node image must be configured to use docker as container runtime. + + Using emissary executor removes the restriction on container runtime, but note some of + your pipelines may require manual migrations. + + Refer to Argo Workflow Executors documentation for detailed configuration and migration instructions for both options: + https://www.kubeflow.org/docs/components/pipelines/installation/choose-executor/ managedstorage.enabled: type: boolean title: Use managed storage @@ -217,9 +234,9 @@ properties: description: |- If you are deploying Kubeflow Pipelines with managed storage, specify the database username for Kubeflow Pipelines to use when connecting to your - MySQL instance on Cloud SQL. If you leave this field empty, this value - defaults to 'root'. Learn more about MySQL users, see https://cloud.google.com/sql/docs/mysql/users. - default: "" + MySQL instance on Cloud SQL. + Learn more about MySQL users, see https://cloud.google.com/sql/docs/mysql/users. + default: root managedstorage.dbPassword: type: string title: Database password (Managed storage only) @@ -244,8 +261,7 @@ properties: During the deployment process, Kubeflow Pipelines creates two databases, "_pipeline" and "_metadata". If the prefix specified matches a previous deployment, this deployment will reuse the existing - databases. If this value is not specified, the application instance name - is used. + databases. default: "" required: - name diff --git a/manifests/gcp_marketplace/test/presubmit.sh b/manifests/gcp_marketplace/test/presubmit.sh index 3367fdc3a0..3197b025e2 100755 --- a/manifests/gcp_marketplace/test/presubmit.sh +++ b/manifests/gcp_marketplace/test/presubmit.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020-2021 Google LLC +# Copyright 2020-2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/manifests/gcp_marketplace/test/snapshot-base.yaml b/manifests/gcp_marketplace/test/snapshot-base.yaml index 1de44e3d3b..25909412b4 100644 --- a/manifests/gcp_marketplace/test/snapshot-base.yaml +++ b/manifests/gcp_marketplace/test/snapshot-base.yaml @@ -12,6 +12,7 @@ metadata: data: appName: 'my-release' namespace: 'kubeflow' + emissaryExecutor: 'false' managedStorageEnabled: 'false' # --- @@ -222,6 +223,7 @@ data: mysql_host: "mysql" mysql_port: "3306" cache_image: "gcr.io/google-containers/busybox" + cache_node_restrictions: "false" --- apiVersion: apps/v1 kind: Deployment @@ -251,11 +253,17 @@ spec: value: 'root' - name: DBCONFIG_PASSWORD value: '' + - name: CACHE_IMAGE valueFrom: configMapKeyRef: name: cache-configmap key: cache_image + - name: CACHE_NODE_RESTRICTIONS + valueFrom: + configMapKeyRef: + name: cache-configmap + key: cache_node_restrictions - name: DBCONFIG_DRIVER valueFrom: configMapKeyRef: @@ -315,6 +323,92 @@ spec: - port: 443 targetPort: webhook-api +--- +# Source: kubeflow-pipelines/templates/mysql.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: mysql + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: v1 +kind: Service +metadata: + name: mysql + labels: + app.kubernetes.io/name: my-release +spec: + ports: + - port: 3306 + selector: + + app: mysql + + app.kubernetes.io/name: my-release +--- + +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: mysql-pv-claim + labels: + app.kubernetes.io/name: my-release +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mysql + labels: + app.kubernetes.io/name: my-release +spec: + selector: + matchLabels: + app: mysql + app.kubernetes.io/name: my-release + strategy: + type: Recreate + template: + metadata: + labels: + app: mysql + app.kubernetes.io/name: my-release + spec: + serviceAccountName: mysql + containers: + - name: mysql + image: gcr.io/ml-pipeline/google/pipelines/mysql:dummy + args: + # https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_ignore-db-dir + # Ext4, Btrfs etc. volumes root directories have a lost+found directory that should not be treated as a database. + - --ignore-db-dir=lost+found + - --datadir + - /var/lib/mysql + env: + - name: MYSQL_ALLOW_EMPTY_PASSWORD + value: "true" + ports: + - containerPort: 3306 + name: mysql + volumeMounts: + - mountPath: /var/lib/mysql + name: mysql-persistent-storage + resources: + requests: + cpu: 100m + memory: 800Mi + volumes: + - name: mysql-persistent-storage + persistentVolumeClaim: + claimName: mysql-pv-claim + + --- # Source: kubeflow-pipelines/templates/proxy.yaml apiVersion: v1 @@ -389,23 +483,13 @@ metadata: --- # Source: kubeflow-pipelines/templates/argo.yaml -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workflows.argoproj.io labels: app.kubernetes.io/name: "my-release" spec: - additionalPrinterColumns: - - JSONPath: .status.phase - description: Status of the workflow - name: Status - type: string - - JSONPath: .status.startedAt - description: When the workflow was started - format: date-time - name: Age - type: date group: argoproj.io names: kind: Workflow @@ -415,14 +499,44 @@ spec: - wf singular: workflow scope: Namespaced - subresources: {} - version: v1alpha1 versions: - - name: v1alpha1 + - additionalPrinterColumns: + - description: Status of the workflow + jsonPath: .status.phase + name: Status + type: string + - description: When the workflow was started + format: date-time + jsonPath: .status.startedAt + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true + subresources: {} --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: clusterworkflowtemplates.argoproj.io @@ -439,13 +553,29 @@ spec: - cwft singular: clusterworkflowtemplate scope: Cluster - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: cronworkflows.argoproj.io @@ -462,13 +592,33 @@ spec: - cronwf singular: cronworkflow scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workfloweventbindings.argoproj.io @@ -484,13 +634,29 @@ spec: - wfeb singular: workfloweventbinding scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workflowtemplates.argoproj.io @@ -506,9 +672,25 @@ spec: - wftmpl singular: workflowtemplate scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- @@ -526,6 +708,14 @@ metadata: labels: app.kubernetes.io/name: "my-release" rules: +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - get + - update - apiGroups: - "" resources: @@ -636,21 +826,32 @@ subjects: apiVersion: v1 data: # References: - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/config/config.go - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/docs/workflow-controller-configmap.md - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/docs/workflow-controller-configmap.yaml + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/config/config.go + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.md + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.yaml - # pns executor is a more portable default, see https://github.com/kubeflow/pipelines/issues/1654. - containerRuntimeExecutor: pns + # emissary executor is a more portable default, see https://github.com/kubeflow/pipelines/issues/1654. + containerRuntimeExecutor: 'docker' - # Note, some-string-without-template-interpretation is a way to avoid some brackets interpreted as template. + # Note, some-string-{{without}}-template-interpretation is a way to avoid some brackets interpreted as template. # Reference: https://github.com/helm/helm/issues/2798#issuecomment-467319526 artifactRepository: | archiveLogs: true s3: - endpoint: 'minio-service.kubeflow:9000', - bucket: 'mlpipeline', - keyFormat: "artifacts/{{workflow.name}}/{{pod.name}}" + endpoint: 'minio-service.kubeflow:9000' + bucket: 'mlpipeline' + # keyFormat is a format pattern to define how artifacts will be organized in a bucket. + # It can reference workflow metadata variables such as workflow.namespace, workflow.name, + # pod.name. Can also use strftime formating of workflow.creationTimestamp so that workflow + # artifacts can be organized by date. If omitted, will use workflow.name/pod.name, + # which has potential for have collisions, because names do not guarantee they are unique + # over the lifetime of the cluster. + # Refer to https://kubernetes.io/docs/concepts/overview/working-with-objects/names/. + # + # The following format looks like: + # artifacts/my-workflow-abc123/2018/08/23/my-workflow-abc123-1234567890 + # Adding date into the path greatly reduces the chance of pod.name collision. + keyFormat: "artifacts/{{workflow.name}}/{{workflow.creationTimestamp.Y}}/{{workflow.creationTimestamp.m}}/{{workflow.creationTimestamp.d}}/{{pod.name}}" # insecure will disable TLS. Primarily used for minio installs not configured with TLS insecure: true accessKeySecret: @@ -706,28 +907,39 @@ spec: - --executor-image - "gcr.io/ml-pipeline/google/pipelines/argoexecutor:dummy" - --namespaced + env: + - name: LEADER_ELECTION_IDENTITY + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name ports: - name: metrics containerPort: 9090 - # Periodically check we are listening on the metrics port - # causing a restart if it is not OK. - # This takes advantage of the fact that if the metrics service has died, - # then the controller has died. - # In testing, it appears to take 60-90s from failure to restart. + - containerPort: 6060 livenessProbe: + failureThreshold: 3 httpGet: - port: metrics - path: /metrics - initialDelaySeconds: 30 - periodSeconds: 30 + path: /healthz + port: 6060 + initialDelaySeconds: 90 + periodSeconds: 60 + timeoutSeconds: 30 resources: requests: cpu: 100m memory: 500Mi - securityContext: - runAsNonRoot: true + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true nodeSelector: kubernetes.io/os: linux + securityContext: + runAsNonRoot: true --- # Source: kubeflow-pipelines/templates/pipeline.yaml @@ -1519,6 +1731,7 @@ kind: ServiceAccount metadata: name: kubeflow-pipelines-container-builder + --- # Source: kubeflow-pipelines/templates/metadata.yaml apiVersion: v1 @@ -1834,78 +2047,6 @@ spec: claimName: minio-pvc ---- -# Source: kubeflow-pipelines/templates/mysql.yaml -apiVersion: v1 -kind: Service -metadata: - name: mysql - labels: - app.kubernetes.io/name: my-release -spec: - ports: - - port: 3306 - selector: - - app: mysql - - app.kubernetes.io/name: my-release ---- - -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: mysql-pv-claim - labels: - app.kubernetes.io/name: my-release -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 20Gi ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: mysql - labels: - app.kubernetes.io/name: my-release -spec: - selector: - matchLabels: - app: mysql - app.kubernetes.io/name: my-release - strategy: - type: Recreate - template: - metadata: - labels: - app: mysql - app.kubernetes.io/name: my-release - spec: - containers: - - env: - - name: MYSQL_ALLOW_EMPTY_PASSWORD - value: "true" - image: gcr.io/ml-pipeline/google/pipelines/mysql:dummy - name: mysql - ports: - - containerPort: 3306 - name: mysql - volumeMounts: - - mountPath: /var/lib/mysql - name: mysql-persistent-storage - resources: - requests: - cpu: 100m - memory: 800Mi - volumes: - - name: mysql-persistent-storage - persistentVolumeClaim: - claimName: mysql-pv-claim - - --- # Source: kubeflow-pipelines/templates/application.yaml apiVersion: app.k8s.io/v1beta1 @@ -1922,7 +2063,7 @@ metadata: spec: descriptor: type: Kubeflow Pipelines - version: 1.4.1 + version: 1.7.0-rc.3 description: |- Reusable end-to-end ML workflow maintainers: diff --git a/manifests/gcp_marketplace/test/snapshot-emissary.yaml b/manifests/gcp_marketplace/test/snapshot-emissary.yaml new file mode 100644 index 0000000000..b9dbdf50ae --- /dev/null +++ b/manifests/gcp_marketplace/test/snapshot-emissary.yaml @@ -0,0 +1,2098 @@ +--- +# Source: kubeflow-pipelines/templates/config-snapshot.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: ml-pipeline-install-config-snapshot + labels: + app.kubernetes.io/name: 'my-release' + annotations: + pipelines.kubeflow.org/comment: |- + This is a snapshot of install parameters. There's no effect modifying this. +data: + appName: 'my-release' + namespace: 'kubeflow' + emissaryExecutor: 'true' + managedStorageEnabled: 'false' + # +--- +apiVersion: v1 +kind: Secret +metadata: + name: ml-pipeline-install-secret-snapshot + labels: + app.kubernetes.io/name: 'my-release' + annotations: + pipelines.kubeflow.org/comment: |- + This is a snapshot of install secrets. There's no effect modifying this. +type: Opaque +# + +--- +# Source: kubeflow-pipelines/templates/cache.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kubeflow-pipelines-cache-deployer-sa + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kubeflow-pipelines-cache + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: kubeflow-pipelines-cache-deployer-clusterrole + app.kubernetes.io/name: my-release + name: kubeflow-pipelines-cache-deployer-clusterrole +rules: +- apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + verbs: + - create + - delete + - get + - update +- apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + verbs: + - create + - delete + - get + - list + - patch +- apiGroups: + - certificates.k8s.io + resources: + - signers + resourceNames: + - kubernetes.io/* + verbs: + - approve +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: kubeflow-pipelines-cache-deployer-role + app.kubernetes.io/name: my-release + name: kubeflow-pipelines-cache-deployer-role +rules: +- apiGroups: + - "" + resources: + - secrets + verbs: + - create + - delete + - get + - patch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: kubeflow-pipelines-cache-role + app.kubernetes.io/name: my-release + name: kubeflow-pipelines-cache-role +rules: +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch + - update + - patch +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - get + - list + - watch + - update + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: kubeflow-pipelines-cache-binding + labels: + app.kubernetes.io/name: my-release +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kubeflow-pipelines-cache-role +subjects: +- kind: ServiceAccount + name: kubeflow-pipelines-cache + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: kubeflow-pipelines-cache-deployer-clusterrolebinding + labels: + app.kubernetes.io/name: my-release +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kubeflow-pipelines-cache-deployer-clusterrole +subjects: +- kind: ServiceAccount + name: kubeflow-pipelines-cache-deployer-sa + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: kubeflow-pipelines-cache-deployer-rolebinding + labels: + app.kubernetes.io/name: my-release +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kubeflow-pipelines-cache-deployer-role +subjects: +- kind: ServiceAccount + name: kubeflow-pipelines-cache-deployer-sa + namespace: kubeflow +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cache-deployer-deployment + labels: + app: cache-deployer + app.kubernetes.io/name: my-release +spec: + replicas: 1 + selector: + matchLabels: + app: cache-deployer + app.kubernetes.io/name: my-release + strategy: + type: Recreate + template: + metadata: + labels: + app: cache-deployer + app.kubernetes.io/name: my-release + spec: + containers: + - name: main + image: gcr.io/ml-pipeline/google/pipelines/cachedeployer:dummy + imagePullPolicy: Always + env: + - name: NAMESPACE_TO_WATCH + value: kubeflow + serviceAccountName: kubeflow-pipelines-cache-deployer-sa + restartPolicy: Always +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: cache-configmap + labels: + component: cache-server +data: + mysql_database: 'my_release_cachedb' + mysql_driver: "mysql" + mysql_host: "mysql" + mysql_port: "3306" + cache_image: "gcr.io/google-containers/busybox" + cache_node_restrictions: "false" +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cache-server + labels: + app: cache-server + app.kubernetes.io/name: my-release +spec: + replicas: 1 + selector: + matchLabels: + app: cache-server + app.kubernetes.io/name: my-release + template: + metadata: + labels: + app: cache-server + app.kubernetes.io/name: my-release + spec: + containers: + - name: server + image: gcr.io/ml-pipeline/google/pipelines/cacheserver:dummy + env: + + - name: DBCONFIG_USER + value: 'root' + - name: DBCONFIG_PASSWORD + value: '' + + - name: CACHE_IMAGE + valueFrom: + configMapKeyRef: + name: cache-configmap + key: cache_image + - name: CACHE_NODE_RESTRICTIONS + valueFrom: + configMapKeyRef: + name: cache-configmap + key: cache_node_restrictions + - name: DBCONFIG_DRIVER + valueFrom: + configMapKeyRef: + name: cache-configmap + key: mysql_driver + - name: DBCONFIG_DB_NAME + valueFrom: + configMapKeyRef: + name: cache-configmap + key: mysql_database + - name: DBCONFIG_HOST_NAME + valueFrom: + configMapKeyRef: + name: cache-configmap + key: mysql_host + - name: DBCONFIG_PORT + valueFrom: + configMapKeyRef: + name: cache-configmap + key: mysql_port + - name: NAMESPACE_TO_WATCH + value: kubeflow + args: ["--db_driver=$(DBCONFIG_DRIVER)", + "--db_host=$(DBCONFIG_HOST_NAME)", + "--db_port=$(DBCONFIG_PORT)", + "--db_name=$(DBCONFIG_DB_NAME)", + "--db_user=$(DBCONFIG_USER)", + "--db_password=$(DBCONFIG_PASSWORD)", + "--namespace_to_watch=$(NAMESPACE_TO_WATCH)", + ] + imagePullPolicy: Always + ports: + - containerPort: 8443 + name: webhook-api + volumeMounts: + - name: webhook-tls-certs + mountPath: /etc/webhook/certs + readOnly: true + volumes: + - name: webhook-tls-certs + secret: + secretName: webhook-server-tls + serviceAccountName: kubeflow-pipelines-cache +--- +apiVersion: v1 +kind: Service +metadata: + name: cache-server + labels: + app: cache-server + app.kubernetes.io/name: my-release +spec: + selector: + app: cache-server + app.kubernetes.io/name: my-release + ports: + - port: 443 + targetPort: webhook-api + +--- +# Source: kubeflow-pipelines/templates/mysql.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: mysql + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: v1 +kind: Service +metadata: + name: mysql + labels: + app.kubernetes.io/name: my-release +spec: + ports: + - port: 3306 + selector: + + app: mysql + + app.kubernetes.io/name: my-release +--- + +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: mysql-pv-claim + labels: + app.kubernetes.io/name: my-release +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mysql + labels: + app.kubernetes.io/name: my-release +spec: + selector: + matchLabels: + app: mysql + app.kubernetes.io/name: my-release + strategy: + type: Recreate + template: + metadata: + labels: + app: mysql + app.kubernetes.io/name: my-release + spec: + serviceAccountName: mysql + containers: + - name: mysql + image: gcr.io/ml-pipeline/google/pipelines/mysql:dummy + args: + # https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_ignore-db-dir + # Ext4, Btrfs etc. volumes root directories have a lost+found directory that should not be treated as a database. + - --ignore-db-dir=lost+found + - --datadir + - /var/lib/mysql + env: + - name: MYSQL_ALLOW_EMPTY_PASSWORD + value: "true" + ports: + - containerPort: 3306 + name: mysql + volumeMounts: + - mountPath: /var/lib/mysql + name: mysql-persistent-storage + resources: + requests: + cpu: 100m + memory: 800Mi + volumes: + - name: mysql-persistent-storage + persistentVolumeClaim: + claimName: mysql-pv-claim + + +--- +# Source: kubeflow-pipelines/templates/proxy.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: proxy-agent-runner + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: proxy-agent-runner + app.kubernetes.io/name: my-release + name: proxy-agent-runner +rules: + - apiGroups: + - "" + resources: + - configmaps + verbs: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/name: my-release + app: proxy-agent-runner + name: proxy-agent-runner +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: proxy-agent-runner +subjects: + - kind: ServiceAccount + name: proxy-agent-runner + namespace: kubeflow +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: proxy-agent + app.kubernetes.io/name: my-release + name: proxy-agent +spec: + selector: + matchLabels: + app: proxy-agent + app.kubernetes.io/name: my-release + template: + metadata: + labels: + app: proxy-agent + app.kubernetes.io/name: my-release + spec: + hostNetwork: true + containers: + - image: gcr.io/ml-pipeline/google/pipelines/proxyagent:dummy + imagePullPolicy: IfNotPresent + name: proxy-agent + serviceAccountName: proxy-agent-runner +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: inverse-proxy-config + labels: + app.kubernetes.io/name: my-release + +--- +# Source: kubeflow-pipelines/templates/argo.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: workflows.argoproj.io + labels: + app.kubernetes.io/name: "my-release" +spec: + group: argoproj.io + names: + kind: Workflow + listKind: WorkflowList + plural: workflows + shortNames: + - wf + singular: workflow + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Status of the workflow + jsonPath: .status.phase + name: Status + type: string + - description: When the workflow was started + format: date-time + jsonPath: .status.startedAt + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true + subresources: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: clusterworkflowtemplates.argoproj.io + labels: + app.kubernetes.io/name: "my-release" +spec: + group: argoproj.io + names: + kind: ClusterWorkflowTemplate + listKind: ClusterWorkflowTemplateList + plural: clusterworkflowtemplates + shortNames: + - clusterwftmpl + - cwft + singular: clusterworkflowtemplate + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: cronworkflows.argoproj.io + labels: + app.kubernetes.io/name: "my-release" +spec: + group: argoproj.io + names: + kind: CronWorkflow + listKind: CronWorkflowList + plural: cronworkflows + shortNames: + - cwf + - cronwf + singular: cronworkflow + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: workfloweventbindings.argoproj.io + labels: + app.kubernetes.io/name: "my-release" +spec: + group: argoproj.io + names: + kind: WorkflowEventBinding + listKind: WorkflowEventBindingList + plural: workfloweventbindings + shortNames: + - wfeb + singular: workfloweventbinding + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: workflowtemplates.argoproj.io + labels: + app.kubernetes.io/name: "my-release" +spec: + group: argoproj.io + names: + kind: WorkflowTemplate + listKind: WorkflowTemplateList + plural: workflowtemplates + shortNames: + - wftmpl + singular: workflowtemplate + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: argo + labels: + app.kubernetes.io/name: "my-release" +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: argo-role + labels: + app.kubernetes.io/name: "my-release" +rules: +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - get + - update +- apiGroups: + - "" + resources: + - pods + - pods/exec + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - watch + - list +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - create + - delete + - get +- apiGroups: + - argoproj.io + resources: + - workflows + - workflows/finalizers + verbs: + - get + - list + - watch + - update + - patch + - delete + - create +- apiGroups: + - argoproj.io + resources: + - workflowtemplates + - workflowtemplates/finalizers + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - get + - list +- apiGroups: + - "" + resources: + - secrets + verbs: + - get +- apiGroups: + - argoproj.io + resources: + - cronworkflows + - cronworkflows/finalizers + verbs: + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + - "policy" + resources: + - poddisruptionbudgets + verbs: + - create + - get + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: argo-binding + labels: + app.kubernetes.io/name: "my-release" +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: argo-role +subjects: + - kind: ServiceAccount + name: argo + namespace: "kubeflow" +--- +apiVersion: v1 +data: + # References: + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/config/config.go + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.md + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.yaml + + # emissary executor is a more portable default, see https://github.com/kubeflow/pipelines/issues/1654. + containerRuntimeExecutor: 'emissary' + + # Note, some-string-{{without}}-template-interpretation is a way to avoid some brackets interpreted as template. + # Reference: https://github.com/helm/helm/issues/2798#issuecomment-467319526 + artifactRepository: | + archiveLogs: true + s3: + endpoint: 'minio-service.kubeflow:9000' + bucket: 'mlpipeline' + # keyFormat is a format pattern to define how artifacts will be organized in a bucket. + # It can reference workflow metadata variables such as workflow.namespace, workflow.name, + # pod.name. Can also use strftime formating of workflow.creationTimestamp so that workflow + # artifacts can be organized by date. If omitted, will use workflow.name/pod.name, + # which has potential for have collisions, because names do not guarantee they are unique + # over the lifetime of the cluster. + # Refer to https://kubernetes.io/docs/concepts/overview/working-with-objects/names/. + # + # The following format looks like: + # artifacts/my-workflow-abc123/2018/08/23/my-workflow-abc123-1234567890 + # Adding date into the path greatly reduces the chance of pod.name collision. + keyFormat: "artifacts/{{workflow.name}}/{{workflow.creationTimestamp.Y}}/{{workflow.creationTimestamp.m}}/{{workflow.creationTimestamp.d}}/{{pod.name}}" + # insecure will disable TLS. Primarily used for minio installs not configured with TLS + insecure: true + accessKeySecret: + name: mlpipeline-minio-artifact + key: accesskey + secretKeySecret: + name: mlpipeline-minio-artifact + key: secretkey +kind: ConfigMap +metadata: + name: workflow-controller-configmap + labels: + app.kubernetes.io/name: "my-release" +--- +apiVersion: v1 +data: + accesskey: bWluaW8= + secretkey: bWluaW8xMjM= +kind: Secret +metadata: + name: mlpipeline-minio-artifact + labels: + app.kubernetes.io/name: "my-release" +type: Opaque +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workflow-controller + labels: + app: workflow-controller + app.kubernetes.io/name: "my-release" +spec: + selector: + matchLabels: + app: workflow-controller + app.kubernetes.io/name: "my-release" + template: + metadata: + labels: + app: workflow-controller + app.kubernetes.io/name: "my-release" + spec: + serviceAccountName: argo + containers: + - name: workflow-controller + image: "gcr.io/ml-pipeline/google/pipelines/argoworkflowcontroller:dummy" + command: + - workflow-controller + args: + - --configmap + - workflow-controller-configmap + - --executor-image + - "gcr.io/ml-pipeline/google/pipelines/argoexecutor:dummy" + - --namespaced + env: + - name: LEADER_ELECTION_IDENTITY + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + ports: + - name: metrics + containerPort: 9090 + - containerPort: 6060 + livenessProbe: + failureThreshold: 3 + httpGet: + path: /healthz + port: 6060 + initialDelaySeconds: 90 + periodSeconds: 60 + timeoutSeconds: 30 + resources: + requests: + cpu: 100m + memory: 500Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + nodeSelector: + kubernetes.io/os: linux + securityContext: + runAsNonRoot: true + +--- +# Source: kubeflow-pipelines/templates/pipeline.yaml +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: scheduledworkflows.kubeflow.org + labels: + app.kubernetes.io/name: my-release +spec: + group: kubeflow.org + names: + kind: ScheduledWorkflow + listKind: ScheduledWorkflowList + plural: scheduledworkflows + shortNames: + - swf + singular: scheduledworkflow + scope: Namespaced + versions: + - name: v1beta1 + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: my-release + name: viewers.kubeflow.org +spec: + group: kubeflow.org + names: + kind: Viewer + listKind: ViewerList + plural: viewers + shortNames: + - vi + singular: viewer + scope: Namespaced + versions: + - name: v1beta1 + served: true + storage: true +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: ml-pipeline-persistenceagent + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: ml-pipeline-scheduledworkflow + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: ml-pipeline-ui + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: ml-pipeline-viewer-crd-service-account + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: ml-pipeline-visualizationserver + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: ml-pipeline + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: pipeline-runner + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: ml-pipeline-persistenceagent-role + labels: + app.kubernetes.io/name: my-release +rules: + - apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - get + - list + - watch + - apiGroups: + - kubeflow.org + resources: + - scheduledworkflows + verbs: + - get + - list + - watch + - apiGroups: + - '' + resources: + - events + verbs: + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/name: my-release + app: ml-pipeline-scheduledworkflow-role + name: ml-pipeline-scheduledworkflow-role +rules: + - apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - create + - get + - list + - watch + - update + - patch + - delete + - apiGroups: + - kubeflow.org + resources: + - scheduledworkflows + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/name: my-release + app: ml-pipeline-ui + name: ml-pipeline-ui +rules: + - apiGroups: + - "" + resources: + - pods + - pods/log + verbs: + - create + - get + - list + - apiGroups: + - "" + resources: + - events + verbs: + - list + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - apiGroups: + - kubeflow.org + resources: + - viewers + verbs: + - create + - get + - list + - watch + - delete + - apiGroups: + - "argoproj.io" + resources: + - workflows + verbs: + - get + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: ml-pipeline-viewer-controller-role + labels: + app.kubernetes.io/name: my-release +rules: + - apiGroups: + - '*' + resources: + - deployments + - services + verbs: + - create + - get + - list + - watch + - update + - patch + - delete + - apiGroups: + - kubeflow.org + resources: + - viewers + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/name: my-release + app: ml-pipeline + name: ml-pipeline +rules: + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - delete + - apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - create + - get + - list + - watch + - update + - patch + - delete + - apiGroups: + - kubeflow.org + resources: + - scheduledworkflows + verbs: + - create + - get + - list + - update + - patch + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: pipeline-runner + labels: + app.kubernetes.io/name: my-release +rules: + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - persistentvolumes + - persistentvolumeclaims + verbs: + - '*' + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - create + - delete + - get + - apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - get + - list + - watch + - update + - patch + - apiGroups: + - "" + resources: + - pods + - pods/exec + - pods/log + - services + verbs: + - '*' + - apiGroups: + - "" + - apps + - extensions + resources: + - deployments + - replicasets + verbs: + - '*' + - apiGroups: + - kubeflow.org + resources: + - '*' + verbs: + - '*' + - apiGroups: + - batch + resources: + - jobs + verbs: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: ml-pipeline-persistenceagent-binding + labels: + app.kubernetes.io/name: my-release +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ml-pipeline-persistenceagent-role +subjects: + - kind: ServiceAccount + name: ml-pipeline-persistenceagent + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: ml-pipeline-scheduledworkflow-binding + labels: + app.kubernetes.io/name: my-release +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ml-pipeline-scheduledworkflow-role +subjects: + - kind: ServiceAccount + name: ml-pipeline-scheduledworkflow + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/name: my-release + app: ml-pipeline-ui + name: ml-pipeline-ui +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ml-pipeline-ui +subjects: + - kind: ServiceAccount + name: ml-pipeline-ui + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/name: my-release + app: ml-pipeline + name: ml-pipeline +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ml-pipeline +subjects: + - kind: ServiceAccount + name: ml-pipeline + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: pipeline-runner-binding + labels: + app.kubernetes.io/name: my-release +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: pipeline-runner +subjects: + - kind: ServiceAccount + name: pipeline-runner + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: ml-pipeline-viewer-crd-binding + labels: + app.kubernetes.io/name: my-release +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ml-pipeline-viewer-controller-role +subjects: + - kind: ServiceAccount + name: ml-pipeline-viewer-crd-service-account + namespace: kubeflow +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: ml-pipeline-ui + app.kubernetes.io/name: my-release + name: ml-pipeline-ui +spec: + ports: + - port: 80 + targetPort: 3000 + selector: + app: ml-pipeline-ui + app.kubernetes.io/name: my-release +--- +apiVersion: v1 +kind: Service +metadata: + name: ml-pipeline-visualizationserver +spec: + ports: + - name: http + port: 8888 + protocol: TCP + targetPort: 8888 + selector: + app: ml-pipeline-visualizationserver + app.kubernetes.io/name: my-release +--- +apiVersion: v1 +kind: Service +metadata: + name: ml-pipeline + labels: + app.kubernetes.io/name: my-release +spec: + ports: + - name: http + port: 8888 + protocol: TCP + targetPort: 8888 + - name: grpc + port: 8887 + protocol: TCP + targetPort: 8887 + selector: + app: ml-pipeline + app.kubernetes.io/name: my-release +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: ml-pipeline-persistenceagent + app.kubernetes.io/name: my-release + name: ml-pipeline-persistenceagent +spec: + selector: + matchLabels: + app: ml-pipeline-persistenceagent + app.kubernetes.io/name: my-release + template: + metadata: + labels: + app: ml-pipeline-persistenceagent + app.kubernetes.io/name: my-release + spec: + containers: + - env: + - name: NAMESPACE + value: kubeflow + - name: TTL_SECONDS_AFTER_WORKFLOW_FINISH + value: "86400" + image: gcr.io/ml-pipeline/google/pipelines/persistenceagent:dummy + imagePullPolicy: IfNotPresent + name: ml-pipeline-persistenceagent + resources: + requests: + cpu: 120m + memory: 500Mi + serviceAccountName: ml-pipeline-persistenceagent +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: ml-pipeline-scheduledworkflow + app.kubernetes.io/name: my-release + name: ml-pipeline-scheduledworkflow +spec: + selector: + matchLabels: + app: ml-pipeline-scheduledworkflow + app.kubernetes.io/name: my-release + template: + metadata: + labels: + app: ml-pipeline-scheduledworkflow + app.kubernetes.io/name: my-release + spec: + containers: + - env: + - name: NAMESPACE + value: kubeflow + image: gcr.io/ml-pipeline/google/pipelines/scheduledworkflow:dummy + imagePullPolicy: IfNotPresent + name: ml-pipeline-scheduledworkflow + serviceAccountName: ml-pipeline-scheduledworkflow +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: ml-pipeline-ui + app.kubernetes.io/name: my-release + name: ml-pipeline-ui +spec: + selector: + matchLabels: + app: ml-pipeline-ui + app.kubernetes.io/name: my-release + template: + metadata: + labels: + app: ml-pipeline-ui + app.kubernetes.io/name: my-release + spec: + containers: + - env: + - name: MINIO_NAMESPACE + value: kubeflow + - name: ALLOW_CUSTOM_VISUALIZATIONS + value: "true" + - name: DEPLOYMENT + value: MARKETPLACE + image: gcr.io/ml-pipeline/google/pipelines/frontend:dummy + imagePullPolicy: IfNotPresent + name: ml-pipeline-ui + ports: + - containerPort: 3000 + readinessProbe: + exec: + command: + - wget + - -q # quiet + - -S # show server response + - -O + - "-" # Redirect output to stdout + - http://localhost:3000/apis/v1beta1/healthz + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 + livenessProbe: + exec: + command: + - wget + - -q # quiet + - -S # show server response + - -O + - "-" # Redirect output to stdout + - http://localhost:3000/apis/v1beta1/healthz + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 + resources: + requests: + cpu: 10m + memory: 70Mi + serviceAccountName: ml-pipeline-ui +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: ml-pipeline-viewer-crd + app.kubernetes.io/name: my-release + name: ml-pipeline-viewer-crd +spec: + selector: + matchLabels: + app: ml-pipeline-viewer-crd + app.kubernetes.io/name: my-release + template: + metadata: + labels: + app: ml-pipeline-viewer-crd + app.kubernetes.io/name: my-release + spec: + containers: + - env: + - name: MAX_NUM_VIEWERS + value: "50" + - name: NAMESPACE + value: kubeflow + image: gcr.io/ml-pipeline/google/pipelines/viewercrd:dummy + imagePullPolicy: Always + name: ml-pipeline-viewer-crd + serviceAccountName: ml-pipeline-viewer-crd-service-account +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: ml-pipeline-visualizationserver + app.kubernetes.io/name: my-release + name: ml-pipeline-visualizationserver +spec: + selector: + matchLabels: + app: ml-pipeline-visualizationserver + app.kubernetes.io/name: my-release + template: + metadata: + labels: + app: ml-pipeline-visualizationserver + app.kubernetes.io/name: my-release + spec: + containers: + - image: gcr.io/ml-pipeline/google/pipelines/visualizationserver:dummy + imagePullPolicy: IfNotPresent + name: ml-pipeline-visualizationserver + ports: + - name: http + containerPort: 8888 + readinessProbe: + exec: + command: + - wget + - -q # quiet + - -S # show server response + - -O + - "-" # Redirect output to stdout + - http://localhost:8888/ + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 + livenessProbe: + exec: + command: + - wget + - -q # quiet + - -S # show server response + - -O + - "-" # Redirect output to stdout + - http://localhost:8888/ + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 + resources: + requests: + cpu: 30m + memory: 500Mi + serviceAccountName: ml-pipeline-visualizationserver +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: ml-pipeline + app.kubernetes.io/name: my-release + name: ml-pipeline +spec: + selector: + matchLabels: + app: ml-pipeline + app.kubernetes.io/name: my-release + template: + metadata: + labels: + app: ml-pipeline + app.kubernetes.io/name: my-release + spec: + containers: + - env: + + - name: HAS_DEFAULT_BUCKET + valueFrom: + configMapKeyRef: + name: "gcp-default-config" + key: "has_default_bucket" + - name: BUCKET_NAME + valueFrom: + configMapKeyRef: + name: "gcp-default-config" + key: "bucket_name" + + - name: PROJECT_ID + valueFrom: + configMapKeyRef: + name: "gcp-default-config" + key: "project_id" + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: DEFAULTPIPELINERUNNERSERVICEACCOUNT + value: 'pipeline-runner' + - name: OBJECTSTORECONFIG_SECURE + value: "false" + + image: gcr.io/ml-pipeline/google/pipelines/apiserver:dummy + imagePullPolicy: IfNotPresent + name: ml-pipeline-api-server + ports: + - name: http + containerPort: 8888 + - name: grpc + containerPort: 8887 + readinessProbe: + exec: + command: + - wget + - -q # quiet + - -S # show server response + - -O + - "-" # Redirect output to stdout + - http://localhost:8888/apis/v1beta1/healthz + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 + livenessProbe: + exec: + command: + - wget + - -q # quiet + - -S # show server response + - -O + - "-" # Redirect output to stdout + - http://localhost:8888/apis/v1beta1/healthz + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 + resources: + requests: + cpu: 250m + memory: 500Mi + serviceAccountName: ml-pipeline +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kubeflow-pipelines-container-builder + + +--- +# Source: kubeflow-pipelines/templates/metadata.yaml +apiVersion: v1 +kind: Service +metadata: + labels: + app: metadata + app.kubernetes.io/name: my-release + name: metadata-grpc-service +spec: + ports: + - name: grpc-api + port: 8080 + protocol: TCP + selector: + component: metadata-grpc-server + app.kubernetes.io/name: my-release +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: metadata-grpc-server + app.kubernetes.io/name: my-release + name: metadata-grpc-deployment +spec: + replicas: 1 + selector: + matchLabels: + component: metadata-grpc-server + app.kubernetes.io/name: my-release + template: + metadata: + labels: + component: metadata-grpc-server + app.kubernetes.io/name: my-release + spec: + containers: + - name: container + image: gcr.io/ml-pipeline/google/pipelines/metadataserver:dummy + imagePullPolicy: 'Always' + env: + # TODO: merge all into mysql-credential + + - name: DBCONFIG_USER + value: 'root' + - name: DBCONFIG_PASSWORD + value: '' + + - name: MYSQL_DATABASE + valueFrom: + configMapKeyRef: + name: metadata-mysql-configmap + key: MYSQL_DATABASE + - name: MYSQL_HOST + valueFrom: + configMapKeyRef: + name: metadata-mysql-configmap + key: MYSQL_HOST + - name: MYSQL_PORT + valueFrom: + configMapKeyRef: + name: metadata-mysql-configmap + key: MYSQL_PORT + command: ["/bin/metadata_store_server"] + args: ["--grpc_port=8080", + "--mysql_config_database=$(MYSQL_DATABASE)", + "--mysql_config_host=$(MYSQL_HOST)", + "--mysql_config_port=$(MYSQL_PORT)", + "--mysql_config_user=$(DBCONFIG_USER)", + "--mysql_config_password=$(DBCONFIG_PASSWORD)", + "--enable_database_upgrade=true" + ] + ports: + - containerPort: 8080 + name: grpc-api + livenessProbe: + tcpSocket: + port: grpc-api + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 + readinessProbe: + tcpSocket: + port: grpc-api + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 +--- +kind: Service +apiVersion: v1 +metadata: + labels: + app: metadata + app.kubernetes.io/name: my-release + name: metadata-envoy-service +spec: + selector: + component: metadata-envoy + type: ClusterIP + ports: + - port: 9090 + protocol: TCP + name: md-envoy +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: metadata-envoy + labels: + component: metadata-envoy + app.kubernetes.io/name: my-release +spec: + replicas: 1 + selector: + matchLabels: + component: metadata-envoy + template: + metadata: + labels: + component: metadata-envoy + spec: + containers: + - name: container + image: gcr.io/ml-pipeline/google/pipelines/metadataenvoy:dummy + ports: + - name: md-envoy + containerPort: 9090 + - name: envoy-admin + containerPort: 9901 +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: metadata-mysql-configmap + labels: + component: metadata-server +data: + MYSQL_DATABASE: 'my_release_metadata' + MYSQL_HOST: "mysql" + MYSQL_PORT: "3306" +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: metadata-grpc-configmap + labels: + component: metadata-grpc-server +data: + METADATA_GRPC_SERVICE_HOST: "metadata-grpc-service" + METADATA_GRPC_SERVICE_PORT: "8080" +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: metadata-writer + labels: + app: metadata-writer + app.kubernetes.io/name: my-release +spec: + replicas: 1 + selector: + matchLabels: + app: metadata-writer + app.kubernetes.io/name: my-release + template: + metadata: + labels: + app: metadata-writer + app.kubernetes.io/name: my-release + spec: + containers: + - name: main + image: gcr.io/ml-pipeline/google/pipelines/metadatawriter:dummy + env: + - name: NAMESPACE_TO_WATCH + valueFrom: + fieldRef: + fieldPath: metadata.namespace + serviceAccountName: kubeflow-pipelines-metadata-writer +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: kubeflow-pipelines-metadata-writer-role + app.kubernetes.io/name: my-release + name: kubeflow-pipelines-metadata-writer-role +rules: +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch + - update + - patch +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - get + - list + - watch + - update + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: kubeflow-pipelines-metadata-writer-binding + labels: + app.kubernetes.io/name: my-release +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kubeflow-pipelines-metadata-writer-role +subjects: +- kind: ServiceAccount + name: kubeflow-pipelines-metadata-writer + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kubeflow-pipelines-metadata-writer + labels: + app.kubernetes.io/name: my-release + +--- +# Source: kubeflow-pipelines/templates/minio.yaml +apiVersion: v1 +kind: Service +metadata: + name: minio-service + labels: + app: minio + app.kubernetes.io/name: my-release +spec: + ports: + - port: 9000 + protocol: TCP + targetPort: 9000 + selector: + app: minio + app.kubernetes.io/name: my-release +--- + +--- + +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: minio-pvc + labels: + app.kubernetes.io/name: my-release +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: minio + labels: + app: minio + app.kubernetes.io/name: my-release +spec: + selector: + matchLabels: + app: minio + app.kubernetes.io/name: my-release + strategy: + type: Recreate + template: + metadata: + labels: + app: minio + app.kubernetes.io/name: my-release + spec: + containers: + - args: + - server + - /data + env: + - name: MINIO_ACCESS_KEY + value: minio + - name: MINIO_SECRET_KEY + value: minio123 + image: gcr.io/ml-pipeline/google/pipelines/minio:dummy + name: minio + ports: + - containerPort: 9000 + volumeMounts: + - mountPath: /data + name: data + subPath: minio + volumes: + - name: data + persistentVolumeClaim: + claimName: minio-pvc + + +--- +# Source: kubeflow-pipelines/templates/application.yaml +apiVersion: app.k8s.io/v1beta1 +kind: Application +metadata: + name: "my-release" + namespace: "kubeflow" + annotations: + kubernetes-engine.cloud.google.com/icon: >- + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAyCAYAAADx/eOPAAALuUlEQVRogd2afWxd9XnHP99bK4pS3yhiGUIRiiJUVVVqbq8ppdR20ibqpuIMtDRkUYERp29J57gMZVuxsrZiK7oZXVv5re1AiOuoG+N1DMkuytprsGPEVMouxqQZJVHEWIdQlGVxZlmZdb/747zcc869jpMO+seOdPz7nd/L83tev89zzjX8Bq795Rq9o17zXp+Tey+Ijkyboela29DRWkhffyT733pH/Z3este9F2cC6N0kNjxtjD+FdRD8UF9X7u97y7UbQFPAivC0BdllS381slun3s3z3xVhhqeds90tqR/oMB7u68z19ZZra0E/l1if3WOziPx3skrDPTr+bvDxfxImEIJbgX6gGBJ7EfHJX/ySReDHwO9KYAenyWCMFKw21GSeslwa2Z17+TcuzPBRr7B8m6Df5oOJqdPAR/u6cm/2lmv3At+IT3GiXZqbcaxSLsfRoTsvn7XL2jE87ZXGnwf+VGiDY86ETM1wU1+XjvSW/RlgTJADQ2QaCZKWcX1/aDIcjE8i3SdzZLjn0lm8pJXD02417BM+gLmq2Rqjr/d16Vu95dp6wc8Ra5O8NrPIcoZCvIR1H+KZkd2qLcfnRYUZOuorJO+3uQt0RerolGYZR7r5+C9ZATwPviGyQprd6Liszy3bnwVKwGMjPbnFyxJmeNpX2T4gaR/QmmSpyYZTho/2depMb9k/kNh3KawuJ1bWauHzUcyXRpZAv5Zmg7aHBLcmNN9ECAFeAO3s69KZ3nLtDuF9dnBs0IT9JO24rbPb0JfP2syCZpFfE5q1mRWcvlgMNcwMTRq9z/+OWXdx4AGjvX1deqC37DbwPwOrMgsufol5mWMWs1ivEbjTrOCtLNNb+udygqsNbUBtopR/NkuuwTJ6Hxsw67KSuvH5MPDA/nJttfGTdUFCMUlp/ALwOtIs9muBxpnFnBzuSQf21oP/BbXclVvumWuTaDN8WNBm2GizJkxPM0CDMA2WGZ72bbb/Njue2TRj9Il/PcG87SeBz4ZTNaSTsmctHcO8SqDp14d7dCFLZ2v/3OpQ023Ah4n65kohvETUCdcsfmuilD+bpNdgGZvOODuHqYGIVGCec9g7+7o031v2jaBTiD0ysxbHRnZrPktzyz1zK7f0z10nh5pWwLRhvZro1KqznVJhNB8UyDeSsU4zAOiIXV1OuEqQ2AR79nflXgcY6dGLwIvR8q39cy1b+uc2Emo6dI824BpMSxz8iVhy4m/2WiYHdV5UmOHp2mpwm52ESCdwRn+9v0tPAWzpn9sAFAQbMdc60PaHsFZEWd9uxk4z8G3seykECfObTEd2KmuZG4CWyLXkYLMwtiYt+hMsTUdAEZQzjs9apv66SHJRk73ZjBQ+iRu29s+1VEr5OImmXs4MHUahVoLWgK23wbv6OrU4OulcuHYehWsVHhpXwpE2FNRayTszX2cwDpQEzTB+QvrJHCXUaigk+c++aXZiE98YmUVgV19X7u3ypH/fgfUA5h2usY2jNjmWoGVn50nvC9T2NviA5OPBGPW91OlG+0Xa1WJhhqadk3WjpKCilQIQFP19XZocnfIHgIeFWyNh6goXyX6gdNWfU8aJ5tNjEheAHZVS/ruGj0s8k6VPhh6ms6kwgoLl1aGuCEuSpwXfHZ2qrTJ+HHkNCpOjmbdFcEcGUIhUSj/H65rPO6j+766U8i/QXV0z8cqJc4btwF8AtWgtMb1wj+j41Df/s1EYQwdEDiqM3hDes9quGY3IKoYOvCrU7HlCoZtEWapPkzEpsU8uq8b36a6uBqaBv5l45URLpZT/pmGH8LnkvlAdAOt1oeXqRsuYTjlEMJiXvWN/Z+5szfqioKcOKo7qr/nAEesKiOyv2A/q88rOx8+8bPhK5dUTAA8jbUT6MuKnbKteNVHKP23xCeD1LC0F2TWOmzoAKEiWxmC+sr8rN1OerF2HGaqXFcZhDWaYj11S4ZxcXxVqyKqPZOeNTwM7Jkr5BeDPQJ8NFQaoC/gZ26rXT5TyxxAfRx6P94d0gU0pYYama+tsbwix/AHM4fKUrwAeB68kRJ5AZsWWieGTjLipsVCgrKCwKHF7pZQ/RXf104j76i4ZMmquxkzRXb2zUsqfxdxsfCiA70hRjZbpCDHmJcRdeZPDHkVck0Ul5PeHZ81DgHxKtglXaHCxVN9fr5TyR9hW3QA8Amqp5526SyKtBEbZVv1eZeZkbqKU7xfsFJwPqRW29s+11oUxnUhnkHf2dWoB+R5Jv5dNaGHh1wog8d/ZAI+0GgVpFPTp4AfJT2Hup7u6EvMk0tpkboutEz0HMPzHyD+mu3pFpZR/Aug0Pgm0RLkvFzLWYfjDvs7cqfKUt2LuXTLhue5mdWhVDJdEzxDDcRKawceN9lRePVkDfgBcR/LKVqNpz/s08DO6q4VKKT8j8zHgJ1HyzA1P11YZjfV1arw85auBR4RalDB5lEjDKi0CgPPphKZ0QiNRwUQeg88B2ydKreew9yH1NCxe/r4GaZpt1Vsrh/JnDDcBLwPkbLVgf6s86RXYj4KvtJKJM8KsGLkSlsmUL6mSg1RJY1xD7KmU8sfprnYgBqJsGVsiEfupsca7FfMo26p/OfHKiVqllB8HyPV16VxfV66G/G1QBwY5xvCgTT7X3/MTaBbFVr0fJvqw2ASZ+yul/FN0V68CHsesiDl3UopM3CwhDZDD/Dnwj3S/sjoYAMqTtc1YX02jVqYOiuuqsAKIkqZCfFIz/IrfFY8gDrKt2gI8irSuwQezyTeNaOl+6qYb+fpYGKEXJE9GSTObK5ItrheaLHE5/XRKcHul+kYN8x2kzWlLNNuVtUqibzKW5CBjxUoszO7NWrS1E/xWvMeJjck2WQHEKJeMD+qH4gWCSvg00m3AVxv5TMRKsp9Cs0Q/Ka/1BOZQNBSXMz2b9Q5oO9JCKgkqg2aKofl8uvTPeE1w3t5KKf8y26pFxINhLRa5R9JV6huT/aZuFu7Ds+A9jBdj+VIvZz2b9BL2Xi5yJQEgUFqinI9SZBDx358o5Q/HiRGtquOEmxJu6DcbC/afQWxnvHg+Odrwm2bP5txh5OEYjOM3vaiu8qqHJw1mPmK/Xs7HJf0LRncDMF5cAL6NWUxDrX/duwbczljxjSzvTX+gtXU3MBlrRCltrsxBTgorACKrRGf5bczOiVLrhUL74B2F9oHVjBd/iLwTWEhr+CIWaLYumDjIWLHha+aSwvRs1iJmJ9Kb9ZJRETS3ACsMC8i1ZNwgXZDYWTmU/1WhfeAW8Cjo+UL7wDrGik8jfid0kYz/Z2ODepv+GPIY+FAznpcUJhAo9w5mh81CFtEsWieCTzwXkogmfKBSyh8ttA98EDPqoPouYqYLxYEPMVY8itmEeTM+KEaqZhVAkiPPIL6QDPhLFiYQSC9J7M3mGlF/24zWSvwIM1xoH2gF/sFiTcSPxQakqUJxsIPx4jGCr0AzCUYTbROJ7DPAdsbSAX9ZwgDs3qTDiMGUOxF/1DgfekLVsPf0sw8DPARsDNwy8iYBXov4p0L7wC2MF99CfBJ4rqmbJbO/qYE+x1jx5HK8Xtp/aFgHDM/FX+RM9FFjHjjj4NV3HvlPsP4g+SqQgm6zCuvJQnHgi4wVz2JuAj8RnLGEVaCf8Y8cuRQ2L0mYEBB2Gb8ZHKD4NQBx+0Qpf7LQPrAVVGqiiWTpCcEn4QcLxcF7C7+aXMDahT1YX5IS5DHE/ZfC4yULEwr0DtIOWwuuvwZ8rVLKP1soDqzHPGJoyRao9b4SXiQQ30A8eO1/PJ8D7gK+BtQSJcQM8AXGlg747LUkmi91lad8J3CuZ5OeBii0D64ET2FdH1N0omWJvgLPkvwM8LmZf7lrnm3VO4CHsM4DH2P8I8vGSfK67P9q8v9wWPAcQLH4PbBHbK6Pq+3M9+Ml+6FL2dyC+WmhOLiWseKPMDeDd12uIPBrWCZ5Xds++AHsAwGlBKnoB5747c2J+aSJEuvRL8CDv/2Zz+cqh/LL/gPD//vrfwFjcI5oX6jDBwAAAABJRU5ErkJggg== + marketplace.cloud.google.com/deploy-info: '{"partner_id": "google-cloud-ai-platform", "product_id": "kubeflow-pipelines", "partner_name": "Google Cloud AI Platform"}' + labels: + app.kubernetes.io/name: "my-release" +spec: + descriptor: + type: Kubeflow Pipelines + version: 1.7.0-rc.3 + description: |- + Reusable end-to-end ML workflow + maintainers: + - name: Google Cloud AI Platform + url: https://cloud.google.com/ai-platform/ + - name: Kubeflow Pipelines + url: https://github.com/kubeflow/pipelines + links: + - description: 'Kubeflow Pipelines Documentation' + url: https://www.kubeflow.org/docs/pipelines/ + notes: |- + Please go to [Hosted Kubeflow Pipelines Console](https://console.cloud.google.com/ai-platform/pipelines/clusters). + info: + - name: Application Namespace + value: "kubeflow" + - name: Console + value: 'https://console.cloud.google.com/ai-platform/pipelines/clusters' + componentKinds: + - group: v1 + kind: ServiceAccount + - group: rbac.authorization.k8s.io/v1 + kind: Role + - group: rbac.authorization.k8s.io/v1 + kind: RoleBinding + - group: v1 + kind: Service + - group: v1 + kind: ConfigMap + - group: v1 + kind: Secret + - group: apps/v1 + kind: Deployment diff --git a/manifests/gcp_marketplace/test/snapshot-managed-storage-with-db-prefix.yaml b/manifests/gcp_marketplace/test/snapshot-managed-storage-with-db-prefix.yaml index 2092952af5..07c8d16ec1 100644 --- a/manifests/gcp_marketplace/test/snapshot-managed-storage-with-db-prefix.yaml +++ b/manifests/gcp_marketplace/test/snapshot-managed-storage-with-db-prefix.yaml @@ -12,6 +12,7 @@ metadata: data: appName: 'my-release' namespace: 'kubeflow' + emissaryExecutor: 'false' managedStorageEnabled: 'true' # managedStorageCloudSqlInstanceConnectionName: 'myproject:us-central1:myinstance' @@ -230,6 +231,7 @@ data: mysql_host: "mysql" mysql_port: "3306" cache_image: "gcr.io/google-containers/busybox" + cache_node_restrictions: "false" --- apiVersion: apps/v1 kind: Deployment @@ -265,11 +267,17 @@ spec: secretKeyRef: name: mysql-credential key: password + - name: CACHE_IMAGE valueFrom: configMapKeyRef: name: cache-configmap key: cache_image + - name: CACHE_NODE_RESTRICTIONS + valueFrom: + configMapKeyRef: + name: cache-configmap + key: cache_node_restrictions - name: DBCONFIG_DRIVER valueFrom: configMapKeyRef: @@ -329,6 +337,93 @@ spec: - port: 443 targetPort: webhook-api +--- +# Source: kubeflow-pipelines/templates/mysql.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: mysql + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: v1 +kind: Service +metadata: + name: mysql + labels: + app.kubernetes.io/name: my-release +spec: + ports: + - port: 3306 + selector: + + app: cloudsqlproxy + + app.kubernetes.io/name: my-release +--- + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cloudsqlproxy + labels: + app: cloudsqlproxy + app.kubernetes.io/name: my-release +spec: + selector: + matchLabels: + app: cloudsqlproxy + app.kubernetes.io/name: my-release + replicas: 1 + template: + metadata: + labels: + app: cloudsqlproxy + app.kubernetes.io/name: my-release + spec: + serviceAccountName: mysql + containers: + - image: gcr.io/ml-pipeline/google/pipelines/cloudsqlproxy:dummy + name: cloudsqlproxy + env: + command: ["/cloud_sql_proxy", + "-dir=/cloudsql", + # Replace with your own CloudSQL instance ID + "-instances=myproject:us-central1:myinstance=tcp:0.0.0.0:3306", + # System workload uses GCE default service account or Workload Identity's service account + # "-credential_file=/credentials/application_default_credentials.json", + "term_timeout=10s"] + # set term_timeout if require graceful handling of shutdown + # NOTE: proxy will stop accepting new connections; only wait on existing connections + lifecycle: + preStop: + exec: + # (optional) add a preStop hook so that termination is delayed + # this is required if your server still require new connections (e.g., connection pools) + command: ['sleep', '10'] + ports: + - name: mysql + containerPort: 3306 + volumeMounts: + - mountPath: /cloudsql + name: cloudsql + volumes: + - name: cloudsql + emptyDir: +--- +apiVersion: v1 +kind: Secret +metadata: + name: mysql-credential + labels: + app: mysql-credential + app.kubernetes.io/name: my-release +type: Opaque +data: + username: "cm9vdA==" + password: "MTIzNA==" + + --- # Source: kubeflow-pipelines/templates/proxy.yaml apiVersion: v1 @@ -403,23 +498,13 @@ metadata: --- # Source: kubeflow-pipelines/templates/argo.yaml -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workflows.argoproj.io labels: app.kubernetes.io/name: "my-release" spec: - additionalPrinterColumns: - - JSONPath: .status.phase - description: Status of the workflow - name: Status - type: string - - JSONPath: .status.startedAt - description: When the workflow was started - format: date-time - name: Age - type: date group: argoproj.io names: kind: Workflow @@ -429,14 +514,44 @@ spec: - wf singular: workflow scope: Namespaced - subresources: {} - version: v1alpha1 versions: - - name: v1alpha1 + - additionalPrinterColumns: + - description: Status of the workflow + jsonPath: .status.phase + name: Status + type: string + - description: When the workflow was started + format: date-time + jsonPath: .status.startedAt + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true + subresources: {} --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: clusterworkflowtemplates.argoproj.io @@ -453,13 +568,29 @@ spec: - cwft singular: clusterworkflowtemplate scope: Cluster - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: cronworkflows.argoproj.io @@ -476,13 +607,33 @@ spec: - cronwf singular: cronworkflow scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workfloweventbindings.argoproj.io @@ -498,13 +649,29 @@ spec: - wfeb singular: workfloweventbinding scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workflowtemplates.argoproj.io @@ -520,9 +687,25 @@ spec: - wftmpl singular: workflowtemplate scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- @@ -540,6 +723,14 @@ metadata: labels: app.kubernetes.io/name: "my-release" rules: +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - get + - update - apiGroups: - "" resources: @@ -650,21 +841,32 @@ subjects: apiVersion: v1 data: # References: - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/config/config.go - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/docs/workflow-controller-configmap.md - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/docs/workflow-controller-configmap.yaml + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/config/config.go + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.md + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.yaml - # pns executor is a more portable default, see https://github.com/kubeflow/pipelines/issues/1654. - containerRuntimeExecutor: pns + # emissary executor is a more portable default, see https://github.com/kubeflow/pipelines/issues/1654. + containerRuntimeExecutor: 'docker' - # Note, some-string-without-template-interpretation is a way to avoid some brackets interpreted as template. + # Note, some-string-{{without}}-template-interpretation is a way to avoid some brackets interpreted as template. # Reference: https://github.com/helm/helm/issues/2798#issuecomment-467319526 artifactRepository: | archiveLogs: true s3: - endpoint: 'minio-service.kubeflow:9000', - bucket: 'mybucket', - keyFormat: "artifacts/{{workflow.name}}/{{pod.name}}" + endpoint: 'minio-service.kubeflow:9000' + bucket: 'mybucket' + # keyFormat is a format pattern to define how artifacts will be organized in a bucket. + # It can reference workflow metadata variables such as workflow.namespace, workflow.name, + # pod.name. Can also use strftime formating of workflow.creationTimestamp so that workflow + # artifacts can be organized by date. If omitted, will use workflow.name/pod.name, + # which has potential for have collisions, because names do not guarantee they are unique + # over the lifetime of the cluster. + # Refer to https://kubernetes.io/docs/concepts/overview/working-with-objects/names/. + # + # The following format looks like: + # artifacts/my-workflow-abc123/2018/08/23/my-workflow-abc123-1234567890 + # Adding date into the path greatly reduces the chance of pod.name collision. + keyFormat: "artifacts/{{workflow.name}}/{{workflow.creationTimestamp.Y}}/{{workflow.creationTimestamp.m}}/{{workflow.creationTimestamp.d}}/{{pod.name}}" # insecure will disable TLS. Primarily used for minio installs not configured with TLS insecure: true accessKeySecret: @@ -720,28 +922,39 @@ spec: - --executor-image - "gcr.io/ml-pipeline/google/pipelines/argoexecutor:dummy" - --namespaced + env: + - name: LEADER_ELECTION_IDENTITY + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name ports: - name: metrics containerPort: 9090 - # Periodically check we are listening on the metrics port - # causing a restart if it is not OK. - # This takes advantage of the fact that if the metrics service has died, - # then the controller has died. - # In testing, it appears to take 60-90s from failure to restart. + - containerPort: 6060 livenessProbe: + failureThreshold: 3 httpGet: - port: metrics - path: /metrics - initialDelaySeconds: 30 - periodSeconds: 30 + path: /healthz + port: 6060 + initialDelaySeconds: 90 + periodSeconds: 60 + timeoutSeconds: 30 resources: requests: cpu: 100m memory: 500Mi - securityContext: - runAsNonRoot: true + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true nodeSelector: kubernetes.io/os: linux + securityContext: + runAsNonRoot: true --- # Source: kubeflow-pipelines/templates/pipeline.yaml @@ -1542,6 +1755,15 @@ kind: ServiceAccount metadata: name: kubeflow-pipelines-container-builder +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: kfp-launcher +data: + defaultPipelineRoot: 'gs://mybucket/v2/artifacts' + + --- # Source: kubeflow-pipelines/templates/metadata.yaml apiVersion: v1 @@ -1857,85 +2079,6 @@ spec: --- ---- -# Source: kubeflow-pipelines/templates/mysql.yaml -apiVersion: v1 -kind: Service -metadata: - name: mysql - labels: - app.kubernetes.io/name: my-release -spec: - ports: - - port: 3306 - selector: - - app: cloudsqlproxy - - app.kubernetes.io/name: my-release ---- - -apiVersion: apps/v1 -kind: Deployment -metadata: - name: cloudsqlproxy - labels: - app: cloudsqlproxy - app.kubernetes.io/name: my-release -spec: - selector: - matchLabels: - app: cloudsqlproxy - app.kubernetes.io/name: my-release - replicas: 1 - template: - metadata: - labels: - app: cloudsqlproxy - app.kubernetes.io/name: my-release - spec: - containers: - - image: gcr.io/ml-pipeline/google/pipelines/cloudsqlproxy:dummy - name: cloudsqlproxy - env: - command: ["/cloud_sql_proxy", - "-dir=/cloudsql", - # Replace with your own CloudSQL instance ID - "-instances=myproject:us-central1:myinstance=tcp:0.0.0.0:3306", - # System workload uses GCE default service account or Workload Identity's service account - # "-credential_file=/credentials/application_default_credentials.json", - "term_timeout=10s"] - # set term_timeout if require graceful handling of shutdown - # NOTE: proxy will stop accepting new connections; only wait on existing connections - lifecycle: - preStop: - exec: - # (optional) add a preStop hook so that termination is delayed - # this is required if your server still require new connections (e.g., connection pools) - command: ['sleep', '10'] - ports: - - name: mysql - containerPort: 3306 - volumeMounts: - - mountPath: /cloudsql - name: cloudsql - volumes: - - name: cloudsql - emptyDir: ---- -apiVersion: v1 -kind: Secret -metadata: - name: mysql-credential - labels: - app: mysql-credential - app.kubernetes.io/name: my-release -type: Opaque -data: - username: "cm9vdA==" - password: "MTIzNA==" - - --- # Source: kubeflow-pipelines/templates/application.yaml apiVersion: app.k8s.io/v1beta1 @@ -1952,7 +2095,7 @@ metadata: spec: descriptor: type: Kubeflow Pipelines - version: 1.4.1 + version: 1.7.0-rc.3 description: |- Reusable end-to-end ML workflow maintainers: diff --git a/manifests/gcp_marketplace/test/snapshot-managed-storage.yaml b/manifests/gcp_marketplace/test/snapshot-managed-storage.yaml index 4da05e4cdf..cea583d428 100644 --- a/manifests/gcp_marketplace/test/snapshot-managed-storage.yaml +++ b/manifests/gcp_marketplace/test/snapshot-managed-storage.yaml @@ -12,6 +12,7 @@ metadata: data: appName: 'my-release' namespace: 'kubeflow' + emissaryExecutor: 'false' managedStorageEnabled: 'true' # managedStorageCloudSqlInstanceConnectionName: 'myproject:us-central1:myinstance' @@ -229,6 +230,8 @@ data: mysql_driver: "mysql" mysql_host: "mysql" mysql_port: "3306" + cache_image: "gcr.io/google-containers/busybox" + cache_node_restrictions: "false" --- apiVersion: apps/v1 kind: Deployment @@ -265,6 +268,16 @@ spec: name: mysql-credential key: password + - name: CACHE_IMAGE + valueFrom: + configMapKeyRef: + name: cache-configmap + key: cache_image + - name: CACHE_NODE_RESTRICTIONS + valueFrom: + configMapKeyRef: + name: cache-configmap + key: cache_node_restrictions - name: DBCONFIG_DRIVER valueFrom: configMapKeyRef: @@ -324,6 +337,93 @@ spec: - port: 443 targetPort: webhook-api +--- +# Source: kubeflow-pipelines/templates/mysql.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: mysql + labels: + app.kubernetes.io/name: my-release +--- +apiVersion: v1 +kind: Service +metadata: + name: mysql + labels: + app.kubernetes.io/name: my-release +spec: + ports: + - port: 3306 + selector: + + app: cloudsqlproxy + + app.kubernetes.io/name: my-release +--- + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cloudsqlproxy + labels: + app: cloudsqlproxy + app.kubernetes.io/name: my-release +spec: + selector: + matchLabels: + app: cloudsqlproxy + app.kubernetes.io/name: my-release + replicas: 1 + template: + metadata: + labels: + app: cloudsqlproxy + app.kubernetes.io/name: my-release + spec: + serviceAccountName: mysql + containers: + - image: gcr.io/ml-pipeline/google/pipelines/cloudsqlproxy:dummy + name: cloudsqlproxy + env: + command: ["/cloud_sql_proxy", + "-dir=/cloudsql", + # Replace with your own CloudSQL instance ID + "-instances=myproject:us-central1:myinstance=tcp:0.0.0.0:3306", + # System workload uses GCE default service account or Workload Identity's service account + # "-credential_file=/credentials/application_default_credentials.json", + "term_timeout=10s"] + # set term_timeout if require graceful handling of shutdown + # NOTE: proxy will stop accepting new connections; only wait on existing connections + lifecycle: + preStop: + exec: + # (optional) add a preStop hook so that termination is delayed + # this is required if your server still require new connections (e.g., connection pools) + command: ['sleep', '10'] + ports: + - name: mysql + containerPort: 3306 + volumeMounts: + - mountPath: /cloudsql + name: cloudsql + volumes: + - name: cloudsql + emptyDir: +--- +apiVersion: v1 +kind: Secret +metadata: + name: mysql-credential + labels: + app: mysql-credential + app.kubernetes.io/name: my-release +type: Opaque +data: + username: "cm9vdA==" + password: "MTIzNA==" + + --- # Source: kubeflow-pipelines/templates/proxy.yaml apiVersion: v1 @@ -398,23 +498,13 @@ metadata: --- # Source: kubeflow-pipelines/templates/argo.yaml -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workflows.argoproj.io labels: app.kubernetes.io/name: "my-release" spec: - additionalPrinterColumns: - - JSONPath: .status.phase - description: Status of the workflow - name: Status - type: string - - JSONPath: .status.startedAt - description: When the workflow was started - format: date-time - name: Age - type: date group: argoproj.io names: kind: Workflow @@ -424,14 +514,44 @@ spec: - wf singular: workflow scope: Namespaced - subresources: {} - version: v1alpha1 versions: - - name: v1alpha1 + - additionalPrinterColumns: + - description: Status of the workflow + jsonPath: .status.phase + name: Status + type: string + - description: When the workflow was started + format: date-time + jsonPath: .status.startedAt + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true + subresources: {} --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: clusterworkflowtemplates.argoproj.io @@ -448,13 +568,29 @@ spec: - cwft singular: clusterworkflowtemplate scope: Cluster - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: cronworkflows.argoproj.io @@ -471,13 +607,33 @@ spec: - cronwf singular: cronworkflow scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workfloweventbindings.argoproj.io @@ -493,13 +649,29 @@ spec: - wfeb singular: workfloweventbinding scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workflowtemplates.argoproj.io @@ -515,9 +687,25 @@ spec: - wftmpl singular: workflowtemplate scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true --- @@ -535,6 +723,14 @@ metadata: labels: app.kubernetes.io/name: "my-release" rules: +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - get + - update - apiGroups: - "" resources: @@ -645,21 +841,32 @@ subjects: apiVersion: v1 data: # References: - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/config/config.go - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/docs/workflow-controller-configmap.md - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/docs/workflow-controller-configmap.yaml + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/config/config.go + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.md + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.yaml - # pns executor is a more portable default, see https://github.com/kubeflow/pipelines/issues/1654. - containerRuntimeExecutor: pns + # emissary executor is a more portable default, see https://github.com/kubeflow/pipelines/issues/1654. + containerRuntimeExecutor: 'docker' - # Note, some-string-without-template-interpretation is a way to avoid some brackets interpreted as template. + # Note, some-string-{{without}}-template-interpretation is a way to avoid some brackets interpreted as template. # Reference: https://github.com/helm/helm/issues/2798#issuecomment-467319526 artifactRepository: | archiveLogs: true s3: - endpoint: 'minio-service.kubeflow:9000', - bucket: 'mybucket', - keyFormat: "artifacts/{{workflow.name}}/{{pod.name}}" + endpoint: 'minio-service.kubeflow:9000' + bucket: 'mybucket' + # keyFormat is a format pattern to define how artifacts will be organized in a bucket. + # It can reference workflow metadata variables such as workflow.namespace, workflow.name, + # pod.name. Can also use strftime formating of workflow.creationTimestamp so that workflow + # artifacts can be organized by date. If omitted, will use workflow.name/pod.name, + # which has potential for have collisions, because names do not guarantee they are unique + # over the lifetime of the cluster. + # Refer to https://kubernetes.io/docs/concepts/overview/working-with-objects/names/. + # + # The following format looks like: + # artifacts/my-workflow-abc123/2018/08/23/my-workflow-abc123-1234567890 + # Adding date into the path greatly reduces the chance of pod.name collision. + keyFormat: "artifacts/{{workflow.name}}/{{workflow.creationTimestamp.Y}}/{{workflow.creationTimestamp.m}}/{{workflow.creationTimestamp.d}}/{{pod.name}}" # insecure will disable TLS. Primarily used for minio installs not configured with TLS insecure: true accessKeySecret: @@ -715,28 +922,39 @@ spec: - --executor-image - "gcr.io/ml-pipeline/google/pipelines/argoexecutor:dummy" - --namespaced + env: + - name: LEADER_ELECTION_IDENTITY + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name ports: - name: metrics containerPort: 9090 - # Periodically check we are listening on the metrics port - # causing a restart if it is not OK. - # This takes advantage of the fact that if the metrics service has died, - # then the controller has died. - # In testing, it appears to take 60-90s from failure to restart. + - containerPort: 6060 livenessProbe: + failureThreshold: 3 httpGet: - port: metrics - path: /metrics - initialDelaySeconds: 30 - periodSeconds: 30 + path: /healthz + port: 6060 + initialDelaySeconds: 90 + periodSeconds: 60 + timeoutSeconds: 30 resources: requests: cpu: 100m memory: 500Mi - securityContext: - runAsNonRoot: true + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true nodeSelector: kubernetes.io/os: linux + securityContext: + runAsNonRoot: true --- # Source: kubeflow-pipelines/templates/pipeline.yaml @@ -1537,6 +1755,15 @@ kind: ServiceAccount metadata: name: kubeflow-pipelines-container-builder +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: kfp-launcher +data: + defaultPipelineRoot: 'gs://mybucket/v2/artifacts' + + --- # Source: kubeflow-pipelines/templates/metadata.yaml apiVersion: v1 @@ -1852,85 +2079,6 @@ spec: --- ---- -# Source: kubeflow-pipelines/templates/mysql.yaml -apiVersion: v1 -kind: Service -metadata: - name: mysql - labels: - app.kubernetes.io/name: my-release -spec: - ports: - - port: 3306 - selector: - - app: cloudsqlproxy - - app.kubernetes.io/name: my-release ---- - -apiVersion: apps/v1 -kind: Deployment -metadata: - name: cloudsqlproxy - labels: - app: cloudsqlproxy - app.kubernetes.io/name: my-release -spec: - selector: - matchLabels: - app: cloudsqlproxy - app.kubernetes.io/name: my-release - replicas: 1 - template: - metadata: - labels: - app: cloudsqlproxy - app.kubernetes.io/name: my-release - spec: - containers: - - image: gcr.io/ml-pipeline/google/pipelines/cloudsqlproxy:dummy - name: cloudsqlproxy - env: - command: ["/cloud_sql_proxy", - "-dir=/cloudsql", - # Replace with your own CloudSQL instance ID - "-instances=myproject:us-central1:myinstance=tcp:0.0.0.0:3306", - # System workload uses GCE default service account or Workload Identity's service account - # "-credential_file=/credentials/application_default_credentials.json", - "term_timeout=10s"] - # set term_timeout if require graceful handling of shutdown - # NOTE: proxy will stop accepting new connections; only wait on existing connections - lifecycle: - preStop: - exec: - # (optional) add a preStop hook so that termination is delayed - # this is required if your server still require new connections (e.g., connection pools) - command: ['sleep', '10'] - ports: - - name: mysql - containerPort: 3306 - volumeMounts: - - mountPath: /cloudsql - name: cloudsql - volumes: - - name: cloudsql - emptyDir: ---- -apiVersion: v1 -kind: Secret -metadata: - name: mysql-credential - labels: - app: mysql-credential - app.kubernetes.io/name: my-release -type: Opaque -data: - username: "cm9vdA==" - password: "MTIzNA==" - - --- # Source: kubeflow-pipelines/templates/application.yaml apiVersion: app.k8s.io/v1beta1 @@ -1947,7 +2095,7 @@ metadata: spec: descriptor: type: Kubeflow Pipelines - version: 1.4.1 + version: 1.7.0-rc.3 description: |- Reusable end-to-end ML workflow maintainers: diff --git a/manifests/gcp_marketplace/test/snapshots.sh b/manifests/gcp_marketplace/test/snapshots.sh index 2407b1fe49..d828757aad 100755 --- a/manifests/gcp_marketplace/test/snapshots.sh +++ b/manifests/gcp_marketplace/test/snapshots.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020-2021 Google LLC +# Copyright 2020-2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null && pwd)" CASES=( "base" + "emissary" "managed-storage" "managed-storage-with-db-prefix" ) diff --git a/manifests/gcp_marketplace/test/values-emissary.yaml b/manifests/gcp_marketplace/test/values-emissary.yaml new file mode 100644 index 0000000000..0302f6a1d2 --- /dev/null +++ b/manifests/gcp_marketplace/test/values-emissary.yaml @@ -0,0 +1,9 @@ +executor: + emissary: true +managedstorage: + enabled: false + cloudsqlInstanceConnectionName: null + gcsBucketName: null + databaseNamePrefix: '{{ .Release.Name | replace "-" "_" | replace "." "_" }}' + dbUsername: 'root' + dbPassword: '' diff --git a/manifests/kustomize/README.md b/manifests/kustomize/README.md index 49ea21019e..94f72c7632 100644 --- a/manifests/kustomize/README.md +++ b/manifests/kustomize/README.md @@ -1,85 +1,58 @@ -# Kubeflow Pipelines Kustomize Manifest Folder +# Install Kubeflow Pipelines Tekton Standalone using Kustomize Manifests -## Install Kubeflow Pipelines +This folder contains [Kubeflow Pipelines Standalone](https://www.kubeflow.org/docs/components/pipelines/installation/standalone-deployment/) +Kustomize manifests. -This folder contains Kubeflow Pipelines Kustomize manifests for a light weight -deployment. You can follow the instruction and deploy Kubeflow Pipelines in an -existing cluster. +Kubeflow Pipelines Standalone is one option to install Kubeflow Pipelines. You can review all other options in +[Installation Options for Kubeflow Pipelines](https://www.kubeflow.org/docs/components/pipelines/installation/overview/). -To install Kubeflow Pipelines, you have several options. +## Install options for different envs -- Via an upcoming commandline tool. -- Via Kubectl with Kustomize, it's detailed here. +To install Kubeflow Pipelines Standalone, follow [Kubeflow Pipelines Standalone Deployment documentation](https://www.kubeflow.org/docs/components/pipelines/installation/standalone-deployment/). -### Install via Kustomize +There are environment specific installation instructions not covered in the official deployment documentation, they are listed below. -Deploy latest version of Kubeflow Pipelines. +### (env/platform-agnostic) install on any Kubernetes cluster -It uses following default settings. - -- image: latest released images -- namespace: kubeflow -- application name: pipeline - -#### Option-1 Install it to any K8s cluster - -It's based on in-cluster PersistentVolumeClaim storage. +Install: ```bash +KFP_ENV=platform-agnostic kubectl apply -k cluster-scoped-resources/ kubectl wait crd/applications.app.k8s.io --for condition=established --timeout=60s -kubectl apply -k env/platform-agnostic/ +kubectl apply -k "env/${KFP_ENV}/" kubectl wait pods -l application-crd-id=kubeflow-pipelines -n kubeflow --for condition=Ready --timeout=1800s kubectl port-forward -n kubeflow svc/ml-pipeline-ui 8080:80 ``` -Now you can access it via localhost:8080 - -#### Option-2 Install it to GCP with in-cluster PersistentVolumeClaim storage +Now you can access Kubeflow Pipelines UI in your browser by . -It's based on in-cluster PersistentVolumeClaim storage. -Additionally, it introduced a proxy in GCP to allow user easily access KFP safely. +You can install them by changing `KFP_ENV` in above instructions to the variation you want. -```bash -kubectl apply -k cluster-scoped-resources/ -kubectl wait crd/applications.app.k8s.io --for condition=established --timeout=60s +Data: -kubectl apply -k env/dev/ -kubectl wait applications/pipeline -n kubeflow --for condition=Ready --timeout=1800s +Application data are persisted in in-cluster PersistentVolumeClaim storage. -# Or visit http://console.cloud.google.com/ai-platform/pipelines -kubectl describe configmap inverse-proxy-config -n kubeflow | grep googleusercontent.com -``` +### (env/ibm) install on IBM Cloud with in-cluster PersistentVolumeClaim storage -#### Option-3 Install it to GCP with CloudSQL & GCS-Minio managed storage +IBM Cloud uses the NFS storage with UID support to make sure all pods can run as non-root users. -Its storage is based on CloudSQL & GCS. It's better than others for production usage. - -Please following [sample](sample/README.md) for a customized installation. - -#### Option-4 Install it to AWS with S3 and RDS MySQL +Please follow the [IKS group ID storage setup](https://www.kubeflow.org/docs/ibm/deploy/install-kubeflow-on-iks/#ibm-cloud-group-id-storage-setup) +before running the above standalone install commands. -Its storage is based on S3 & AWS RDS. It's more natural for AWS users to use this option. +### (env/gcp) install on Google Cloud with Cloud Storage and Cloud SQL -Please following [AWS Instructions](env/aws/README.md) for installation. +Cloud Storage and Cloud SQL are better for operating a production cluster. -Note: Community maintains a repo [e2fyi/kubeflow-aws](https://github.com/e2fyi/kubeflow-aws/tree/master/pipelines) for AWS. +Refer to [Google Cloud Instructions](sample/README.md) for installation. -#### Option-5 Install it to IBM Cloud with in-cluster PersistentVolumeClaim storage +### (env/aws) install on AWS with S3 and RDS MySQL -It's based on in-cluster PersistentVolumeClaim storage. -Additionally, it uses the ibm cloud NFS storage with UID support to make sure all pods can run as non-root users. +S3 and RDS MySQL are better for operating a production cluster. -Please follow the [IKS group ID storage setup](https://www.kubeflow.org/docs/ibm/deploy/install-kubeflow-on-iks/#ibm-cloud-group-id-storage-setup) -before running the below commands. +Refer to [AWS Instructions](env/aws/README.md) for installation. -```bash -kubectl apply -k cluster-scoped-resources/ -kubectl wait crd/applications.app.k8s.io --for condition=established --timeout=60s -kubectl apply -k env/platform-agnostic/ -kubectl wait pods -l application-crd-id=kubeflow-pipelines -n kubeflow --for condition=Ready --timeout=1800s -kubectl port-forward -n kubeflow svc/ml-pipeline-ui 8080:80 -``` +Note: Community maintains a different opinionated installation manifests for AWS, refer to [e2fyi/kubeflow-aws](https://github.com/e2fyi/kubeflow-aws/tree/master/pipelines). ## Uninstall @@ -101,46 +74,18 @@ kubectl delete applications/pipeline -n kubeflow kubectl delete -k cluster-scoped-resources/ ``` -## Troubleshooting - -### Permission error installing Kubeflow Pipelines to a cluster - -Run - -```bash -kubectl create clusterrolebinding your-binding --clusterrole=cluster-admin --user=[your-user-name] -``` - -### Samples requires "user-gcp-sa" secret - -If sample code requires a "user-gcp-sa" secret, you could create one by - -- First download the GCE VM service account token - [Document](https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating_service_account_keys) - - ```bash - gcloud iam service-accounts keys create application_default_credentials.json \ - --iam-account [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com - ``` - -- Run - - ```bash - kubectl create secret -n [your-namespace] generic user-gcp-sa --from-file=user-gcp-sa.json=application_default_credentials.json` - ``` - ## Folder Structure ### Overview -- User facing manifest entrypoints are `cluster-scoped-resources` package and `env/` package. - - `cluster-scoped-resources` should collect all cluster-scoped resources. - - `env/` should collect env specific namespace-scoped resources. - - Note, for multi-user envs, they already included cluster-scoped resources. -- KFP core components live in `base/` folders. - - If a component requires cluster-scoped resources, it should have a folder inside named `cluster-scoped` with related resources, but note that `base//kustomization.yaml` shouldn't include the `cluster-scoped` folder. `cluster-scoped` folders should be collected by top level `cluster-scoped-resources` folder. -- KFP core installations are in `base/installs/`, they only include the core KFP components, not third party ones. -- Third party components live in `third-party/` folders. +* User facing manifest entrypoints are `cluster-scoped-resources` package and `env/` package. + * `cluster-scoped-resources` should collect all cluster-scoped resources. + * `env/` should collect env specific namespace-scoped resources. + * Note, for multi-user envs, they already included cluster-scoped resources. +* KFP core components live in `base/` folders. + * If a component requires cluster-scoped resources, it should have a folder inside named `cluster-scoped` with related resources, but note that `base//kustomization.yaml` shouldn't include the `cluster-scoped` folder. `cluster-scoped` folders should be collected by top level `cluster-scoped-resources` folder. +* KFP core installations are in `base/installs/`, they only include the core KFP components, not third party ones. +* Third party components live in `third-party/` folders. ### For direct deployments @@ -154,5 +99,5 @@ Please compose `base/installs/` and third party dependencies based Constraints for namespaced installation we need to comply with (that drove above structure): -- CRDs must be applied separately, because if we apply CRs in the same `kubectl apply` command, the CRD may not have been accepted by k8s api server (e.g. Application CRD). -- [A Kubeflow 1.0 constraint](https://github.com/kubeflow/pipelines/issues/2884#issuecomment-577158715) is that we should separate cluster scoped resources from namespace scoped resources, because sometimes different roles are required to deploy them. Cluster scoped resources usually need a cluster admin role, while namespaced resources can be deployed by individual teams managing a namespace. +* CRDs must be applied separately, because if we apply CRs in the same `kubectl apply` command, the CRD may not have been accepted by k8s api server (e.g. Application CRD). +* [A Kubeflow 1.0 constraint](https://github.com/kubeflow/pipelines/issues/2884#issuecomment-577158715) is that we should separate cluster scoped resources from namespace scoped resources, because sometimes different roles are required to deploy them. Cluster scoped resources usually need a cluster admin role, while namespaced resources can be deployed by individual teams managing a namespace. diff --git a/manifests/kustomize/base/cache-deployer/kustomization.yaml b/manifests/kustomize/base/cache-deployer/kustomization.yaml index 054b005706..79ddf2c9d8 100644 --- a/manifests/kustomize/base/cache-deployer/kustomization.yaml +++ b/manifests/kustomize/base/cache-deployer/kustomization.yaml @@ -10,4 +10,4 @@ commonLabels: app: cache-deployer images: - name: gcr.io/ml-pipeline/cache-deployer - newTag: 1.5.0 + newTag: 1.7.0 diff --git a/manifests/kustomize/base/cache/cache-deployment.yaml b/manifests/kustomize/base/cache/cache-deployment.yaml index e81c1ab8b1..58512e1e6e 100644 --- a/manifests/kustomize/base/cache/cache-deployment.yaml +++ b/manifests/kustomize/base/cache/cache-deployment.yaml @@ -23,6 +23,11 @@ spec: configMapKeyRef: name: pipeline-install-config key: cacheImage + - name: CACHE_NODE_RESTRICTIONS + valueFrom: + configMapKeyRef: + name: pipeline-install-config + key: cacheNodeRestrictions - name: DBCONFIG_DRIVER value: mysql - name: DBCONFIG_DB_NAME diff --git a/manifests/kustomize/base/installs/generic/kustomization.yaml b/manifests/kustomize/base/installs/generic/kustomization.yaml index 6abe4bed0e..616288ce8d 100644 --- a/manifests/kustomize/base/installs/generic/kustomization.yaml +++ b/manifests/kustomize/base/installs/generic/kustomization.yaml @@ -41,5 +41,12 @@ vars: apiVersion: v1 fieldref: fieldpath: data.bucketName +- name: kfp-default-pipeline-root + objref: + kind: ConfigMap + name: pipeline-install-config + apiVersion: v1 + fieldref: + fieldpath: data.defaultPipelineRoot configurations: - params.yaml diff --git a/manifests/kustomize/base/installs/generic/params.yaml b/manifests/kustomize/base/installs/generic/params.yaml index 1f99ef2c53..9b8a7efd52 100644 --- a/manifests/kustomize/base/installs/generic/params.yaml +++ b/manifests/kustomize/base/installs/generic/params.yaml @@ -2,6 +2,8 @@ varReference: - path: data/config kind: ConfigMap +- path: data/defaultPipelineRoot + kind: ConfigMap - path: metadata/name kind: Application - path: spec/descriptor/version diff --git a/manifests/kustomize/base/installs/generic/pipeline-install-config.yaml b/manifests/kustomize/base/installs/generic/pipeline-install-config.yaml index 64c49e3a8d..a5da598738 100644 --- a/manifests/kustomize/base/installs/generic/pipeline-install-config.yaml +++ b/manifests/kustomize/base/installs/generic/pipeline-install-config.yaml @@ -3,14 +3,49 @@ kind: ConfigMap metadata: name: pipeline-install-config data: + warning: | + 1. Do not use kubectl to edit this configmap, because some values are used + during kustomize build. Instead, change the configmap and apply the entire + kustomize manifests again. + 2. After updating the configmap, some deployments may need to be restarted + until the changes take effect. A quick way to restart all deployments in a + namespace: `kubectl rollout restart deployment -n `. appName: pipeline - appVersion: 1.5.0 + appVersion: 1.7.0 dbHost: mysql dbPort: "3306" mlmdDb: metadb cacheDb: cachedb pipelineDb: mlpipeline bucketName: mlpipeline + ## defaultPipelineRoot: Optional. Default pipeline root in v2 compatible mode. + ## https://www.kubeflow.org/docs/components/pipelines/sdk/v2/v2-compatibility/ + ## + ## If the field is not set, kfp-launcher configmaps won't be created and + ## v2 compatible mode defaults to minio://mlpipeline/v2/artifacts as pipeline + ## root. + ## + ## When not in Kubeflow Pipelines multi-user mode, the config works as you + ## would normally expect. + ## + ## In Kubeflow Pipelines multi-user mode, the config creates default + ## kfp-launcher configmaps in each user's namespace. Users can edit the + ## kfp-launcher configmap's defaultPipelineRoot field afterwards to configure + ## namespace-specific default pipeline root. The namespace specific changes in + ## kfp-launcher configmap won't be overridden by pipeline-install-config. + ## + ## Caveat: when you update the config from a non-empty value, only new + ## namespaces get the updated config by default. Owners of existing namespaces + ## must delete the kfp-launcher configmap to get the new default config value. + ## + ## Examples: + ## defaultPipelineRoot: minio://mlpipeline/v2/artifacts + ## defaultPipelineRoot: gs://your-bucket/path/to/artifacts + ## defaultPipelineRoot: s3://your-bucket/path/to/artifacts + ## + ## V2 Compatible Mode Feature stage: + ## [Beta](https://github.com/kubeflow/pipelines/blob/master/docs/release/feature-stages.md#beta) + defaultPipelineRoot: "" ## autoUpdatePipelineDefaultVersion: States if the pipeline version ## should be updated by defult for a versioned pipeline or not when a new ## version is uploaded. This sets the deployment wide definition. @@ -20,10 +55,20 @@ data: ## cluster will be used. Valid values are UTC, Local or values according to ## the IANA Time Zone database, such as "America/New_York" and "Asia/Shanghai". ## Feature stage: - ## [Alpha](https://github.com/kubeflow/pipelines/blob/07328e5094ac2981d3059314cc848fbb71437a76/docs/release/feature-stages.md#alpha) + ## [Alpha](https://github.com/kubeflow/pipelines/blob/master/docs/release/feature-stages.md#alpha) cronScheduleTimezone: "UTC" ## cacheImage is the image that the mutating webhook will use to patch ## cached steps with. Will be used to echo a message announcing that ## the cached step result will be used. If not set it will default to ## 'registry.access.redhat.com/ubi8/ubi-minimal' cacheImage: "registry.access.redhat.com/ubi8/ubi-minimal" + ## cacheNodeRestrictions the dummy container runing if output is cached + ## will run with the same affinity and node selector as the default pipeline + ## step. This is defaulted to 'false' to allow the pod to be scheduled on + ## any node and avoid defaulting to specific nodes. Allowed values are: + ## 'false' and 'true'. + cacheNodeRestrictions: "false" + ## ConMaxLifeTimeSec will set the connection max lifetime for MySQL + ## this is very important to setup when using external databases. + ## See this issue for more details: https://github.com/kubeflow/pipelines/issues/5329 + ConMaxLifeTimeSec: "120" diff --git a/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/deployment.yaml b/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/deployment.yaml index f0a93fc86c..99dd9e21c6 100644 --- a/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/deployment.yaml +++ b/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/deployment.yaml @@ -22,6 +22,12 @@ spec: configMapKeyRef: name: pipeline-install-config key: appVersion + - name: KFP_DEFAULT_PIPELINE_ROOT + valueFrom: + configMapKeyRef: + optional: true + name: pipeline-install-config + key: defaultPipelineRoot - name: MINIO_ACCESS_KEY valueFrom: secretKeyRef: diff --git a/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/requirements-dev.txt b/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/requirements-dev.txt new file mode 100644 index 0000000000..dc27cb5746 --- /dev/null +++ b/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/requirements-dev.txt @@ -0,0 +1,3 @@ +pytest +pytest-lazy-fixture +requests diff --git a/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/run_tests.sh b/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/run_tests.sh new file mode 100755 index 0000000000..4933ec79a8 --- /dev/null +++ b/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/run_tests.sh @@ -0,0 +1,9 @@ +# Build venv with required packages +VENV=".venv" +PYTHON_VENV="${VENV}/bin/python" +python -m venv $VENV +$PYTHON_VENV -m pip install -U pip +$PYTHON_VENV -m pip install -r requirements-dev.txt + +# Run tests +$PYTHON_VENV -m pytest ./test_sync.py diff --git a/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/sync.py b/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/sync.py index 98cee4a936..a1339cb734 100644 --- a/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/sync.py +++ b/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/sync.py @@ -1,4 +1,4 @@ -# Copyright 2020-2021 Google LLC +# Copyright 2020-2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,269 +17,360 @@ import os import base64 -kfp_version = os.environ["KFP_VERSION"] -disable_istio_sidecar = os.environ.get("DISABLE_ISTIO_SIDECAR") == "true" -mlpipeline_minio_access_key = base64.b64encode( - bytes(os.environ.get("MINIO_ACCESS_KEY"), 'utf-8')).decode('utf-8') -mlpipeline_minio_secret_key = base64.b64encode( - bytes(os.environ.get("MINIO_SECRET_KEY"), 'utf-8')).decode('utf-8') +def main(): + settings = get_settings_from_env() + server = server_factory(**settings) + server.serve_forever() -class Controller(BaseHTTPRequestHandler): - def sync(self, parent, children): - pipeline_enabled = parent.get("metadata", {}).get( - "labels", {}).get("pipelines.kubeflow.org/enabled") - if pipeline_enabled != "true": - return {"status": {}, "children": []} +def get_settings_from_env(controller_port=None, + visualization_server_image=None, frontend_image=None, + visualization_server_tag=None, frontend_tag=None, disable_istio_sidecar=None, + minio_access_key=None, minio_secret_key=None, kfp_default_pipeline_root=None): + """ + Returns a dict of settings from environment variables relevant to the controller - # Compute status based on observed state. - desired_status = { - "kubeflow-pipelines-ready": \ - len(children["Secret.v1"]) == 1 and \ - len(children["ConfigMap.v1"]) == 1 and \ - len(children["Deployment.apps/v1"]) == 2 and \ - len(children["Service.v1"]) == 2 and \ - len(children["DestinationRule.networking.istio.io/v1alpha3"]) == 1 and \ - len(children["AuthorizationPolicy.security.istio.io/v1beta1"]) == 1 and \ - "True" or "False" - } + Environment settings can be overridden by passing them here as arguments. - # Generate the desired child object(s). - # parent is a namespace - namespace = parent.get("metadata", {}).get("name") - desired_resources = [ - { - "apiVersion": "v1", - "kind": "ConfigMap", - "metadata": { - "name": "metadata-grpc-configmap", - "namespace": namespace, - }, - "data": { - "METADATA_GRPC_SERVICE_HOST": - "metadata-grpc-service.kubeflow", - "METADATA_GRPC_SERVICE_PORT": "8080", - }, - }, - # Visualization server related manifests below - { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "labels": { - "app": "ml-pipeline-visualizationserver" + Settings are pulled from the all-caps version of the setting name. The + following defaults are used if those environment variables are not set + to enable backwards compatibility with previous versions of this script: + visualization_server_image: gcr.io/ml-pipeline/visualization-server + visualization_server_tag: value of KFP_VERSION environment variable + frontend_image: gcr.io/ml-pipeline/frontend + frontend_tag: value of KFP_VERSION environment variable + disable_istio_sidecar: Required (no default) + minio_access_key: Required (no default) + minio_secret_key: Required (no default) + """ + settings = dict() + settings["controller_port"] = \ + controller_port or \ + os.environ.get("CONTROLLER_PORT", "8080") + + settings["visualization_server_image"] = \ + visualization_server_image or \ + os.environ.get("VISUALIZATION_SERVER_IMAGE", "gcr.io/ml-pipeline/visualization-server") + + settings["frontend_image"] = \ + frontend_image or \ + os.environ.get("FRONTEND_IMAGE", "gcr.io/ml-pipeline/frontend") + + # Look for specific tags for each image first, falling back to + # previously used KFP_VERSION environment variable for backwards + # compatibility + settings["visualization_server_tag"] = \ + visualization_server_tag or \ + os.environ.get("VISUALIZATION_SERVER_TAG") or \ + os.environ["KFP_VERSION"] + + settings["frontend_tag"] = \ + frontend_tag or \ + os.environ.get("FRONTEND_TAG") or \ + os.environ["KFP_VERSION"] + + settings["disable_istio_sidecar"] = \ + disable_istio_sidecar if disable_istio_sidecar is not None \ + else os.environ.get("DISABLE_ISTIO_SIDECAR") == "true" + + settings["minio_access_key"] = \ + minio_access_key or \ + base64.b64encode(bytes(os.environ.get("MINIO_ACCESS_KEY"), 'utf-8')).decode('utf-8') + + settings["minio_secret_key"] = \ + minio_secret_key or \ + base64.b64encode(bytes(os.environ.get("MINIO_SECRET_KEY"), 'utf-8')).decode('utf-8') + + # KFP_DEFAULT_PIPELINE_ROOT is optional + settings["kfp_default_pipeline_root"] = \ + kfp_default_pipeline_root or \ + os.environ.get("KFP_DEFAULT_PIPELINE_ROOT") + + return settings + + +def server_factory(visualization_server_image, + visualization_server_tag, frontend_image, frontend_tag, + disable_istio_sidecar, minio_access_key, + minio_secret_key, kfp_default_pipeline_root=None, + url="", controller_port=8080): + """ + Returns an HTTPServer populated with Handler with customized settings + """ + class Controller(BaseHTTPRequestHandler): + def sync(self, parent, children): + # parent is a namespace + namespace = parent.get("metadata", {}).get("name") + + pipeline_enabled = parent.get("metadata", {}).get( + "labels", {}).get("pipelines.kubeflow.org/enabled") + + if pipeline_enabled != "true": + return {"status": {}, "children": []} + + desired_configmap_count = 1 + desired_resources = [] + if kfp_default_pipeline_root: + desired_configmap_count = 2 + desired_resources += [{ + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "kfp-launcher", + "namespace": namespace, + }, + "data": { + "defaultPipelineRoot": kfp_default_pipeline_root, + }, + }] + + + # Compute status based on observed state. + desired_status = { + "kubeflow-pipelines-ready": + len(children["Secret.v1"]) == 1 and + len(children["ConfigMap.v1"]) == desired_configmap_count and + len(children["Deployment.apps/v1"]) == 2 and + len(children["Service.v1"]) == 2 and + len(children["DestinationRule.networking.istio.io/v1alpha3"]) == 1 and + len(children["AuthorizationPolicy.security.istio.io/v1beta1"]) == 1 and + "True" or "False" + } + + # Generate the desired child object(s). + desired_resources += [ + { + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "metadata-grpc-configmap", + "namespace": namespace, + }, + "data": { + "METADATA_GRPC_SERVICE_HOST": + "metadata-grpc-service.kubeflow", + "METADATA_GRPC_SERVICE_PORT": "8080", }, - "name": "ml-pipeline-visualizationserver", - "namespace": namespace, }, - "spec": { - "selector": { - "matchLabels": { + # Visualization server related manifests below + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "labels": { "app": "ml-pipeline-visualizationserver" }, + "name": "ml-pipeline-visualizationserver", + "namespace": namespace, }, - "template": { - "metadata": { - "labels": { + "spec": { + "selector": { + "matchLabels": { "app": "ml-pipeline-visualizationserver" }, - "annotations": disable_istio_sidecar and { - "sidecar.istio.io/inject": "false" - } or {}, }, - "spec": { - "containers": [{ - "image": - "gcr.io/ml-pipeline/visualization-server:" + - kfp_version, - "imagePullPolicy": - "IfNotPresent", - "name": - "ml-pipeline-visualizationserver", - "ports": [{ - "containerPort": 8888 + "template": { + "metadata": { + "labels": { + "app": "ml-pipeline-visualizationserver" + }, + "annotations": disable_istio_sidecar and { + "sidecar.istio.io/inject": "false" + } or {}, + }, + "spec": { + "containers": [{ + "image": f"{visualization_server_image}:{visualization_server_tag}", + "imagePullPolicy": + "IfNotPresent", + "name": + "ml-pipeline-visualizationserver", + "ports": [{ + "containerPort": 8888 + }], + "resources": { + "requests": { + "cpu": "50m", + "memory": "200Mi" + }, + "limits": { + "cpu": "500m", + "memory": "1Gi" + }, + } }], - "resources": { - "requests": { - "cpu": "50m", - "memory": "200Mi" - }, - "limits": { - "cpu": "500m", - "memory": "1Gi" - }, - } - }], - "serviceAccountName": - "default-editor", + "serviceAccountName": + "default-editor", + }, }, }, }, - }, - { - "apiVersion": "networking.istio.io/v1alpha3", - "kind": "DestinationRule", - "metadata": { - "name": "ml-pipeline-visualizationserver", - "namespace": namespace, - }, - "spec": { - "host": "ml-pipeline-visualizationserver", - "trafficPolicy": { - "tls": { - "mode": "ISTIO_MUTUAL" + { + "apiVersion": "networking.istio.io/v1alpha3", + "kind": "DestinationRule", + "metadata": { + "name": "ml-pipeline-visualizationserver", + "namespace": namespace, + }, + "spec": { + "host": "ml-pipeline-visualizationserver", + "trafficPolicy": { + "tls": { + "mode": "ISTIO_MUTUAL" + } } } - } - }, - { - "apiVersion": "security.istio.io/v1beta1", - "kind": "AuthorizationPolicy", - "metadata": { - "name": "ml-pipeline-visualizationserver", - "namespace": namespace, }, - "spec": { - "selector": { - "matchLabels": { - "app": "ml-pipeline-visualizationserver" - } + { + "apiVersion": "security.istio.io/v1beta1", + "kind": "AuthorizationPolicy", + "metadata": { + "name": "ml-pipeline-visualizationserver", + "namespace": namespace, }, - "rules": [{ - "from": [{ - "source": { - "principals": ["cluster.local/ns/kubeflow/sa/ml-pipeline"] + "spec": { + "selector": { + "matchLabels": { + "app": "ml-pipeline-visualizationserver" } + }, + "rules": [{ + "from": [{ + "source": { + "principals": ["cluster.local/ns/kubeflow/sa/ml-pipeline"] + } + }] }] - }] - } - }, - { - "apiVersion": "v1", - "kind": "Service", - "metadata": { - "name": "ml-pipeline-visualizationserver", - "namespace": namespace, + } }, - "spec": { - "ports": [{ - "name": "http", - "port": 8888, - "protocol": "TCP", - "targetPort": 8888, - }], - "selector": { - "app": "ml-pipeline-visualizationserver", + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "ml-pipeline-visualizationserver", + "namespace": namespace, }, - }, - }, - # Artifact fetcher related resources below. - { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "labels": { - "app": "ml-pipeline-ui-artifact" + "spec": { + "ports": [{ + "name": "http", + "port": 8888, + "protocol": "TCP", + "targetPort": 8888, + }], + "selector": { + "app": "ml-pipeline-visualizationserver", + }, }, - "name": "ml-pipeline-ui-artifact", - "namespace": namespace, }, - "spec": { - "selector": { - "matchLabels": { + # Artifact fetcher related resources below. + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "labels": { "app": "ml-pipeline-ui-artifact" - } + }, + "name": "ml-pipeline-ui-artifact", + "namespace": namespace, }, - "template": { - "metadata": { - "labels": { + "spec": { + "selector": { + "matchLabels": { "app": "ml-pipeline-ui-artifact" - }, - "annotations": disable_istio_sidecar and { - "sidecar.istio.io/inject": "false" - } or {}, + } }, - "spec": { - "containers": [{ - "name": - "ml-pipeline-ui-artifact", - "image": - "gcr.io/ml-pipeline/frontend:" + kfp_version, - "imagePullPolicy": - "IfNotPresent", - "ports": [{ - "containerPort": 3000 + "template": { + "metadata": { + "labels": { + "app": "ml-pipeline-ui-artifact" + }, + "annotations": disable_istio_sidecar and { + "sidecar.istio.io/inject": "false" + } or {}, + }, + "spec": { + "containers": [{ + "name": + "ml-pipeline-ui-artifact", + "image": f"{frontend_image}:{frontend_tag}", + "imagePullPolicy": + "IfNotPresent", + "ports": [{ + "containerPort": 3000 + }], + "resources": { + "requests": { + "cpu": "10m", + "memory": "70Mi" + }, + "limits": { + "cpu": "100m", + "memory": "500Mi" + }, + } }], - "resources": { - "requests": { - "cpu": "10m", - "memory": "70Mi" - }, - "limits": { - "cpu": "100m", - "memory": "500Mi" - }, - } - }], - "serviceAccountName": - "default-editor" + "serviceAccountName": + "default-editor" + } } } - } - }, - { + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "ml-pipeline-ui-artifact", + "namespace": namespace, + "labels": { + "app": "ml-pipeline-ui-artifact" + } + }, + "spec": { + "ports": [{ + "name": + "http", # name is required to let istio understand request protocol + "port": 80, + "protocol": "TCP", + "targetPort": 3000 + }], + "selector": { + "app": "ml-pipeline-ui-artifact" + } + } + }, + ] + print('Received request:\n', json.dumps(parent, indent=2, sort_keys=True)) + print('Desired resources except secrets:\n', json.dumps(desired_resources, indent=2, sort_keys=True)) + # Moved after the print argument because this is sensitive data. + desired_resources.append({ "apiVersion": "v1", - "kind": "Service", + "kind": "Secret", "metadata": { - "name": "ml-pipeline-ui-artifact", + "name": "mlpipeline-minio-artifact", "namespace": namespace, - "labels": { - "app": "ml-pipeline-ui-artifact" - } }, - "spec": { - "ports": [{ - "name": - "http", # name is required to let istio understand request protocol - "port": 80, - "protocol": "TCP", - "targetPort": 3000 - }], - "selector": { - "app": "ml-pipeline-ui-artifact" - } - } - }, - ] - print('Received request:', parent) - print('Desired resources except secrets:', desired_resources) - # Moved after the print argument because this is sensitive data. - desired_resources.append({ - "apiVersion": "v1", - "kind": "Secret", - "metadata": { - "name": "mlpipeline-minio-artifact", - "namespace": namespace, - }, - "data": { - "accesskey": mlpipeline_minio_access_key, - "secretkey": mlpipeline_minio_secret_key, - }, - }) + "data": { + "accesskey": minio_access_key, + "secretkey": minio_secret_key, + }, + }) + + return {"status": desired_status, "children": desired_resources} - return {"status": desired_status, "children": desired_resources} + def do_POST(self): + # Serve the sync() function as a JSON webhook. + observed = json.loads( + self.rfile.read(int(self.headers.get("content-length")))) + desired = self.sync(observed["parent"], observed["children"]) - def do_POST(self): - # Serve the sync() function as a JSON webhook. - observed = json.loads( - self.rfile.read(int(self.headers.get("content-length")))) - desired = self.sync(observed["parent"], observed["children"]) + self.send_response(200) + self.send_header("Content-type", "application/json") + self.end_headers() + self.wfile.write(bytes(json.dumps(desired), 'utf-8')) - self.send_response(200) - self.send_header("Content-type", "application/json") - self.end_headers() - self.wfile.write(bytes(json.dumps(desired), 'utf-8')) + return HTTPServer((url, int(controller_port)), Controller) -HTTPServer(("", 8080), Controller).serve_forever() +if __name__ == "__main__": + main() diff --git a/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/test_sync.py b/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/test_sync.py new file mode 100644 index 0000000000..6158e3f8c0 --- /dev/null +++ b/manifests/kustomize/base/installs/multi-user/pipelines-profile-controller/test_sync.py @@ -0,0 +1,286 @@ +import os +from unittest import mock +import threading +from sync import get_settings_from_env, server_factory +import json + +import pytest +import requests + +# Data sets passed to server +DATA_INCORRECT_CHILDREN = { + "parent": { + "metadata": { + "labels": { + "pipelines.kubeflow.org/enabled": "true" + }, + "name": "myName" + } + }, + "children": { + "Secret.v1": [], + "ConfigMap.v1": [], + "Deployment.apps/v1": [], + "Service.v1": [], + "DestinationRule.networking.istio.io/v1alpha3": [], + "AuthorizationPolicy.security.istio.io/v1beta1": [], + } +} + +DATA_CORRECT_CHILDREN = { + "parent": { + "metadata": { + "labels": { + "pipelines.kubeflow.org/enabled": "true" + }, + "name": "myName" + } + }, + "children": { + "Secret.v1": [1], + "ConfigMap.v1": [1], + "Deployment.apps/v1": [1, 1], + "Service.v1": [1, 1], + "DestinationRule.networking.istio.io/v1alpha3": [1], + "AuthorizationPolicy.security.istio.io/v1beta1": [1], + } +} + +DATA_MISSING_PIPELINE_ENABLED = {"parent": {}, "children": {}} + +# Default values when environments are not explicit +DEFAULT_FRONTEND_IMAGE = "gcr.io/ml-pipeline/frontend" +DEFAULT_VISUALIZATION_IMAGE = "gcr.io/ml-pipeline/visualization-server" + +# Variables used for environment variable sets +VISUALIZATION_SERVER_IMAGE = "vis-image" +VISUALIZATION_SERVER_TAG = "somenumber.1.2.3" +FRONTEND_IMAGE = "frontend-image" +FRONTEND_TAG = "somehash" + +KFP_VERSION = "x.y.z" + +MINIO_ACCESS_KEY = "abcdef" +MINIO_SECRET_KEY = "uvwxyz" + +# "Environments" used in tests +ENV_VARIABLES_BASE = { + "MINIO_ACCESS_KEY": MINIO_ACCESS_KEY, + "MINIO_SECRET_KEY": MINIO_SECRET_KEY, + "CONTROLLER_PORT": "0", # HTTPServer randomly assigns the port to a free port +} + +ENV_KFP_VERSION_ONLY = dict(ENV_VARIABLES_BASE, + **{ + "KFP_VERSION": KFP_VERSION, + } + ) + +ENV_IMAGES_NO_TAGS = dict(ENV_VARIABLES_BASE, + **{ + "KFP_VERSION": KFP_VERSION, + "VISUALIZATION_SERVER_IMAGE": VISUALIZATION_SERVER_IMAGE, + "FRONTEND_IMAGE": FRONTEND_IMAGE, + } + ) + +ENV_IMAGES_WITH_TAGS = dict(ENV_VARIABLES_BASE, + **{ + "VISUALIZATION_SERVER_IMAGE": VISUALIZATION_SERVER_IMAGE, + "FRONTEND_IMAGE": FRONTEND_IMAGE, + "VISUALIZATION_SERVER_TAG": VISUALIZATION_SERVER_TAG, + "FRONTEND_TAG": FRONTEND_TAG, + } + ) + +ENV_IMAGES_WITH_TAGS_AND_ISTIO = dict(ENV_IMAGES_WITH_TAGS, + **{ + "DISABLE_ISTIO_SIDECAR": "false", + } + ) + + +def generate_image_name(imagename, tag): + return f"{str(imagename)}:{str(tag)}" + + +@pytest.fixture( + scope="function", +) +def sync_server(request): + """ + Starts the sync HTTP server for a given set of environment variables on a separate thread + + Yields: + * the server (useful to interrogate for the server address) + * environment variables (useful to interrogate for correct responses) + """ + environ = request.param + with mock.patch.dict(os.environ, environ): + # Create a server at an available port and serve it on a thread as a daemon + # This will result in a collection of servers being active - not a great way + # if this fixture is run many times during a test, but ok for now + settings = get_settings_from_env() + server = server_factory(**settings) + server_thread = threading.Thread(target=server.serve_forever) + # Put on daemon so it doesn't keep pytest from ending + server_thread.daemon = True + server_thread.start() + yield server, environ + + +@pytest.fixture( + scope="function", +) +def sync_server_from_arguments(request): + """ + Starts the sync HTTP server for a given set of parameters passed as arguments, with server on a separate thread + + Yields: + * the server (useful to interrogate for the server address) + * environment variables (useful to interrogate for correct responses) + """ + environ = {k.lower(): v for k, v in request.param.items()} + settings = environ + server = server_factory(**settings) + server_thread = threading.Thread(target=server.serve_forever) + # Put on daemon so it doesn't keep pytest from ending + server_thread.daemon = True + server_thread.start() + yield server, environ + + +@pytest.mark.parametrize( + "sync_server, data, expected_status, expected_visualization_server_image, expected_frontend_server_image", + [ + ( + ENV_KFP_VERSION_ONLY, + DATA_INCORRECT_CHILDREN, + {"kubeflow-pipelines-ready": "False"}, + generate_image_name(DEFAULT_VISUALIZATION_IMAGE, KFP_VERSION), + generate_image_name(DEFAULT_FRONTEND_IMAGE, KFP_VERSION), + ), + ( + ENV_IMAGES_NO_TAGS, + DATA_INCORRECT_CHILDREN, + {"kubeflow-pipelines-ready": "False"}, + generate_image_name(ENV_IMAGES_NO_TAGS["VISUALIZATION_SERVER_IMAGE"], KFP_VERSION), + generate_image_name(ENV_IMAGES_NO_TAGS["FRONTEND_IMAGE"], KFP_VERSION), + ), + ( + ENV_IMAGES_WITH_TAGS, + DATA_INCORRECT_CHILDREN, + {"kubeflow-pipelines-ready": "False"}, + generate_image_name(ENV_IMAGES_WITH_TAGS["VISUALIZATION_SERVER_IMAGE"], + ENV_IMAGES_WITH_TAGS["VISUALIZATION_SERVER_TAG"]), + generate_image_name(ENV_IMAGES_WITH_TAGS["FRONTEND_IMAGE"], ENV_IMAGES_WITH_TAGS["FRONTEND_TAG"]), + ), + ( + ENV_IMAGES_WITH_TAGS, + DATA_CORRECT_CHILDREN, + {"kubeflow-pipelines-ready": "True"}, + generate_image_name(ENV_IMAGES_WITH_TAGS["VISUALIZATION_SERVER_IMAGE"], + ENV_IMAGES_WITH_TAGS["VISUALIZATION_SERVER_TAG"]), + generate_image_name(ENV_IMAGES_WITH_TAGS["FRONTEND_IMAGE"], ENV_IMAGES_WITH_TAGS["FRONTEND_TAG"]), + ), + ], + indirect=["sync_server"] +) +def test_sync_server_with_pipeline_enabled(sync_server, data, expected_status, + expected_visualization_server_image, expected_frontend_server_image): + """ + Nearly end-to-end test of how Controller serves .sync as a POST + + Tests case where metadata.labels.pipelines.kubeflow.org/enabled exists, and thus + we should produce children + + Only does spot checks on children to see if key properties are correct + """ + server, environ = sync_server + + # server.server_address = (url, port_as_integer) + url = f"http://{server.server_address[0]}:{str(server.server_address[1])}" + print("url: ", url) + print("data") + print(json.dumps(data, indent=2)) + x = requests.post(url, data=json.dumps(data)) + results = json.loads(x.text) + + # Test overall status of whether children are ok + assert results['status'] == expected_status + + # Poke a few children to test things that can vary by environment variable + assert results['children'][1]["spec"]["template"]["spec"]["containers"][0][ + "image"] == expected_visualization_server_image + assert results['children'][5]["spec"]["template"]["spec"]["containers"][0][ + "image"] == expected_frontend_server_image + + +@pytest.mark.parametrize( + "sync_server_from_arguments, data, expected_status, expected_visualization_server_image, " + "expected_frontend_server_image", + [ + ( + ENV_IMAGES_WITH_TAGS_AND_ISTIO, + DATA_CORRECT_CHILDREN, + {"kubeflow-pipelines-ready": "True"}, + generate_image_name(ENV_IMAGES_WITH_TAGS["VISUALIZATION_SERVER_IMAGE"], + ENV_IMAGES_WITH_TAGS["VISUALIZATION_SERVER_TAG"]), + generate_image_name(ENV_IMAGES_WITH_TAGS["FRONTEND_IMAGE"], ENV_IMAGES_WITH_TAGS["FRONTEND_TAG"]), + ), + ], + indirect=["sync_server_from_arguments"] +) +def test_sync_server_with_direct_passing_of_settings( + sync_server_from_arguments, data, expected_status, expected_visualization_server_image, + expected_frontend_server_image): + """ + Nearly end-to-end test of how Controller serves .sync as a POST, taking variables as arguments + + Only does spot checks on children to see if key properties are correct + """ + server, environ = sync_server_from_arguments + + # server.server_address = (url, port_as_integer) + url = f"http://{server.server_address[0]}:{str(server.server_address[1])}" + print("url: ", url) + print("data") + print(json.dumps(data, indent=2)) + x = requests.post(url, data=json.dumps(data)) + results = json.loads(x.text) + + # Test overall status of whether children are ok + assert results['status'] == expected_status + + # Poke a few children to test things that can vary by environment variable + assert results['children'][1]["spec"]["template"]["spec"]["containers"][0][ + "image"] == expected_visualization_server_image + assert results['children'][5]["spec"]["template"]["spec"]["containers"][0][ + "image"] == expected_frontend_server_image + + +@pytest.mark.parametrize( + "sync_server, data, expected_status, expected_children", + [ + (ENV_IMAGES_WITH_TAGS, DATA_MISSING_PIPELINE_ENABLED, {}, []), + ], + indirect=["sync_server"] +) +def test_sync_server_without_pipeline_enabled(sync_server, data, expected_status, + expected_children): + """ + Nearly end-to-end test of how Controller serves .sync as a POST + + Tests case where metadata.labels.pipelines.kubeflow.org/enabled does not + exist and thus server returns an empty reply + """ + server, environ = sync_server + + # server.server_address = (url, port_as_integer) + url = f"http://{server.server_address[0]}:{str(server.server_address[1])}" + x = requests.post(url, data=json.dumps(data)) + results = json.loads(x.text) + + # Test overall status of whether children are ok + assert results['status'] == expected_status + assert results['children'] == expected_children diff --git a/manifests/kustomize/base/metadata/base/kustomization.yaml b/manifests/kustomize/base/metadata/base/kustomization.yaml index 70aed653b1..32b9b986bf 100644 --- a/manifests/kustomize/base/metadata/base/kustomization.yaml +++ b/manifests/kustomize/base/metadata/base/kustomization.yaml @@ -9,4 +9,4 @@ resources: - metadata-grpc-sa.yaml images: - name: gcr.io/ml-pipeline/metadata-envoy - newTag: 1.5.0 + newTag: 1.7.0 diff --git a/manifests/kustomize/base/metadata/base/metadata-grpc-deployment.yaml b/manifests/kustomize/base/metadata/base/metadata-grpc-deployment.yaml index baa8df0d1b..5f9a036cd1 100644 --- a/manifests/kustomize/base/metadata/base/metadata-grpc-deployment.yaml +++ b/manifests/kustomize/base/metadata/base/metadata-grpc-deployment.yaml @@ -22,7 +22,7 @@ spec: # * .cloudbuild.yaml and .release.cloudbuild.yaml # * manifests/kustomize/base/metadata/base/metadata-grpc-deployment.yaml # * test/tag_for_hosted.sh - image: gcr.io/tfx-oss-public/ml_metadata_store_server:0.25.1 + image: gcr.io/tfx-oss-public/ml_metadata_store_server:1.0.0 env: - name: DBCONFIG_USER valueFrom: diff --git a/manifests/kustomize/base/pipeline/kfp-launcher-configmap.yaml b/manifests/kustomize/base/pipeline/kfp-launcher-configmap.yaml new file mode 100644 index 0000000000..13f60514a3 --- /dev/null +++ b/manifests/kustomize/base/pipeline/kfp-launcher-configmap.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: kfp-launcher +data: + defaultPipelineRoot: $(kfp-default-pipeline-root) diff --git a/manifests/kustomize/base/pipeline/kustomization.yaml b/manifests/kustomize/base/pipeline/kustomization.yaml index 93c964f08c..cc02b7c829 100644 --- a/manifests/kustomize/base/pipeline/kustomization.yaml +++ b/manifests/kustomize/base/pipeline/kustomization.yaml @@ -36,7 +36,7 @@ resources: - container-builder-sa.yaml - viewer-sa.yaml - kfp-pipeline-config.yaml - + - kfp-launcher-configmap.yaml patchesStrategicMerge: - apiserver-deployment.yaml - metadata-writer-deployment.yaml @@ -54,9 +54,9 @@ images: newName: docker.io/aipipeline/frontend newTag: 0.9.0 - name: gcr.io/ml-pipeline/viewer-crd-controller - newTag: 1.5.0 + newTag: 1.7.0 - name: gcr.io/ml-pipeline/visualization-server - newTag: 1.5.0 + newTag: 1.7.0 - name: gcr.io/ml-pipeline/metadata-writer newName: docker.io/aipipeline/metadata-writer newTag: 0.9.0 diff --git a/manifests/kustomize/base/pipeline/metadata-writer/kustomization.yaml b/manifests/kustomize/base/pipeline/metadata-writer/kustomization.yaml index c9baea3db0..8fb4c30c64 100644 --- a/manifests/kustomize/base/pipeline/metadata-writer/kustomization.yaml +++ b/manifests/kustomize/base/pipeline/metadata-writer/kustomization.yaml @@ -7,4 +7,4 @@ resources: - metadata-writer-sa.yaml images: - name: gcr.io/ml-pipeline/metadata-writer - newTag: 1.5.0 + newTag: 1.7.0 diff --git a/manifests/kustomize/base/pipeline/ml-pipeline-apiserver-deployment.yaml b/manifests/kustomize/base/pipeline/ml-pipeline-apiserver-deployment.yaml index bb2eb8f82c..30173faec6 100644 --- a/manifests/kustomize/base/pipeline/ml-pipeline-apiserver-deployment.yaml +++ b/manifests/kustomize/base/pipeline/ml-pipeline-apiserver-deployment.yaml @@ -58,6 +58,11 @@ spec: configMapKeyRef: name: pipeline-install-config key: dbPort + - name: DBCONFIG_CONMAXLIFETIMESEC + valueFrom: + configMapKeyRef: + name: pipeline-install-config + key: ConMaxLifeTimeSec - name: OBJECTSTORECONFIG_ACCESSKEY valueFrom: secretKeyRef: diff --git a/manifests/kustomize/env/gcp/inverse-proxy/kustomization.yaml b/manifests/kustomize/env/gcp/inverse-proxy/kustomization.yaml index 0d4b29ebc9..d25157b3bd 100644 --- a/manifests/kustomize/env/gcp/inverse-proxy/kustomization.yaml +++ b/manifests/kustomize/env/gcp/inverse-proxy/kustomization.yaml @@ -2,7 +2,7 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization images: - name: gcr.io/ml-pipeline/inverse-proxy-agent - newTag: 1.5.0 + newTag: 1.7.0 resources: - proxy-configmap.yaml - proxy-deployment.yaml diff --git a/manifests/kustomize/env/platform-agnostic-emissary/kustomization.yaml b/manifests/kustomize/env/platform-agnostic-emissary/kustomization.yaml new file mode 100644 index 0000000000..b0f866295b --- /dev/null +++ b/manifests/kustomize/env/platform-agnostic-emissary/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +bases: +- ../platform-agnostic + +patchesStrategicMerge: +- workflow-controller-configmap-patch.yaml diff --git a/manifests/kustomize/env/platform-agnostic-emissary/workflow-controller-configmap-patch.yaml b/manifests/kustomize/env/platform-agnostic-emissary/workflow-controller-configmap-patch.yaml new file mode 100644 index 0000000000..87b8fda391 --- /dev/null +++ b/manifests/kustomize/env/platform-agnostic-emissary/workflow-controller-configmap-patch.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: workflow-controller-configmap +data: + # References: + # * https://github.com/argoproj/argo-workflows/blob/v3.1.5/config/config.go + # * https://github.com/argoproj/argo-workflows/blob/v3.1.5/docs/workflow-controller-configmap.md + # * https://github.com/argoproj/argo-workflows/blob/v3.1.5/docs/workflow-controller-configmap.yaml + + # Emissary Executor: https://argoproj.github.io/argo-workflows/workflow-executors/#emissary-emissary + containerRuntimeExecutor: emissary diff --git a/manifests/kustomize/env/platform-agnostic-multi-user-emissary/kustomization.yaml b/manifests/kustomize/env/platform-agnostic-multi-user-emissary/kustomization.yaml new file mode 100644 index 0000000000..42dda7adc0 --- /dev/null +++ b/manifests/kustomize/env/platform-agnostic-multi-user-emissary/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +bases: +- ../platform-agnostic-multi-user + +patchesStrategicMerge: +- workflow-controller-configmap-patch.yaml diff --git a/manifests/kustomize/env/platform-agnostic-multi-user-emissary/workflow-controller-configmap-patch.yaml b/manifests/kustomize/env/platform-agnostic-multi-user-emissary/workflow-controller-configmap-patch.yaml new file mode 100644 index 0000000000..24303c0081 --- /dev/null +++ b/manifests/kustomize/env/platform-agnostic-multi-user-emissary/workflow-controller-configmap-patch.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: workflow-controller-configmap +data: + # References: + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/config/config.go + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.md + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.yaml + + # Emissary Executor: https://argoproj.github.io/argo-workflows/workflow-executors/#emissary-emissary + containerRuntimeExecutor: emissary diff --git a/manifests/kustomize/gcp-workload-identity-setup.sh b/manifests/kustomize/gcp-workload-identity-setup.sh index 6fac04c570..79f86c95c8 100755 --- a/manifests/kustomize/gcp-workload-identity-setup.sh +++ b/manifests/kustomize/gcp-workload-identity-setup.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/manifests/kustomize/hack/format.sh b/manifests/kustomize/hack/format.sh index f58bdd5282..265b08fa62 100755 --- a/manifests/kustomize/hack/format.sh +++ b/manifests/kustomize/hack/format.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/manifests/kustomize/hack/presubmit.sh b/manifests/kustomize/hack/presubmit.sh index 7ec09c66da..99cb0da92b 100755 --- a/manifests/kustomize/hack/presubmit.sh +++ b/manifests/kustomize/hack/presubmit.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2021 Google LLC +# Copyright 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/manifests/kustomize/hack/release.sh b/manifests/kustomize/hack/release.sh index 2a01e4ede4..14a2c539eb 100755 --- a/manifests/kustomize/hack/release.sh +++ b/manifests/kustomize/hack/release.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/manifests/kustomize/third-party/argo/Makefile b/manifests/kustomize/third-party/argo/Makefile index aaed86b577..c057af1193 100644 --- a/manifests/kustomize/third-party/argo/Makefile +++ b/manifests/kustomize/third-party/argo/Makefile @@ -3,12 +3,10 @@ REPO_ROOT=../../../.. update: rm -rf upstream mkdir upstream - # This currently yields an error after fetching upstream manifests: - # > wrong Node Kind for expected: MappingNode was SequenceNode - # The error can be ignored for now. - # TODO(Bobgy): figure out a workaround. - -kpt pkg get "https://github.com/argoproj/argo-workflows.git/manifests@$$(cat $(REPO_ROOT)/third_party/argo/VERSION)" upstream/ + kpt pkg get "https://github.com/argoproj/argo-workflows.git/manifests@$$(cat $(REPO_ROOT)/third_party/argo/VERSION)" upstream/ # Remove the pre-hydrated manifests which we do not use. rm upstream/manifests/*.yaml # Remove README.md which might be confusing here. rm upstream/manifests/README.md + # Include argo license file + curl -Lo upstream/manifests/LICENSE "https://raw.githubusercontent.com/argoproj/argo-workflows/$$(cat $(REPO_ROOT)/third_party/argo/VERSION)/LICENSE" diff --git a/manifests/kustomize/third-party/argo/README.md b/manifests/kustomize/third-party/argo/README.md index df29731b33..7796219572 100644 --- a/manifests/kustomize/third-party/argo/README.md +++ b/manifests/kustomize/third-party/argo/README.md @@ -13,3 +13,21 @@ This folder contains: * Argo workflow controller configmap is preconfigured to integrate with KFP. * Images are configured to use KFP redistributed ones which comply with open source licenses. * A default artifact repository config is added for in-cluster minio service. + +## Upgrade argo + +Refer to [third_party/argo/README.md](../../../../third_party/argo/README.md). + +### Upgrade argo manifests + +As one step of above, we need to upgrade argo manifests in this folder. + +1. Run: + + ```bash + make update + ``` + + Note, argo version is pulled from [third_party/argo/VERSION](../../../../third_party/argo/VERSION). Edit the VERSION file first. + +2. Manually edit [YAML patches](upstream/manifests/namespace-install/overlays) to JSON patches, because YAML patches confuses kpt, refer to [#5368](https://github.com/kubeflow/pipelines/issues/5368). diff --git a/manifests/kustomize/third-party/argo/base/workflow-controller-configmap-patch.yaml b/manifests/kustomize/third-party/argo/base/workflow-controller-configmap-patch.yaml index 394b80687a..51962aa60e 100644 --- a/manifests/kustomize/third-party/argo/base/workflow-controller-configmap-patch.yaml +++ b/manifests/kustomize/third-party/argo/base/workflow-controller-configmap-patch.yaml @@ -4,13 +4,11 @@ metadata: name: workflow-controller-configmap data: # References: - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/config/config.go - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/docs/workflow-controller-configmap.md - # * https://github.com/argoproj/argo-workflows/blob/v2.12.9/docs/workflow-controller-configmap.yaml + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/config/config.go + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.md + # * https://github.com/argoproj/argo-workflows/blob/v3.1.6/docs/workflow-controller-configmap.yaml - # pns executor is a more portable default, see https://github.com/kubeflow/pipelines/issues/1654. - # However, it is flaky for containers that run really fast, see https://github.com/kubeflow/pipelines/issues/5285. - # So we still default to docker for now. + # emissary executor is a more portable default, see https://github.com/kubeflow/pipelines/issues/1654. containerRuntimeExecutor: docker # In artifactRepository.s3.endpoint, $(kfp-namespace) is needed, because in multi-user mode, pipelines may run in other namespaces. @@ -19,7 +17,18 @@ data: s3: endpoint: "minio-service.$(kfp-namespace):9000" bucket: "$(kfp-artifact-bucket-name)" - keyFormat: "artifacts/{{workflow.name}}/{{pod.name}}" + # keyFormat is a format pattern to define how artifacts will be organized in a bucket. + # It can reference workflow metadata variables such as workflow.namespace, workflow.name, + # pod.name. Can also use strftime formating of workflow.creationTimestamp so that workflow + # artifacts can be organized by date. If omitted, will use `{{workflow.name}}/{{pod.name}}`, + # which has potential for have collisions, because names do not guarantee they are unique + # over the lifetime of the cluster. + # Refer to https://kubernetes.io/docs/concepts/overview/working-with-objects/names/. + # + # The following format looks like: + # artifacts/my-workflow-abc123/2018/08/23/my-workflow-abc123-1234567890 + # Adding date into the path greatly reduces the chance of {{pod.name}} collision. + keyFormat: "artifacts/{{workflow.name}}/{{workflow.creationTimestamp.Y}}/{{workflow.creationTimestamp.m}}/{{workflow.creationTimestamp.d}}/{{pod.name}}" # insecure will disable TLS. Primarily used for minio installs not configured with TLS insecure: true accessKeySecret: @@ -28,3 +37,12 @@ data: secretKeySecret: name: mlpipeline-minio-artifact key: secretkey + executor: | + imagePullPolicy: IfNotPresent + resources: + requests: + cpu: 0.01 + memory: 32Mi + limits: + cpu: 0.5 + memory: 512Mi diff --git a/manifests/kustomize/third-party/argo/base/workflow-controller-deployment-patch.yaml b/manifests/kustomize/third-party/argo/base/workflow-controller-deployment-patch.yaml index 86eb95d3f9..c5bfa82142 100644 --- a/manifests/kustomize/third-party/argo/base/workflow-controller-deployment-patch.yaml +++ b/manifests/kustomize/third-party/argo/base/workflow-controller-deployment-patch.yaml @@ -7,12 +7,12 @@ spec: spec: containers: - name: workflow-controller - image: gcr.io/ml-pipeline/workflow-controller:v2.12.9-license-compliance + image: gcr.io/ml-pipeline/workflow-controller:v3.1.6-patch-license-compliance args: - --configmap - workflow-controller-configmap - --executor-image - - gcr.io/ml-pipeline/argoexec:v2.12.9-license-compliance + - gcr.io/ml-pipeline/argoexec:v3.1.6-patch-license-compliance resources: requests: cpu: 100m diff --git a/manifests/kustomize/third-party/argo/installs/cluster/kustomization.yaml b/manifests/kustomize/third-party/argo/installs/cluster/kustomization.yaml index 077419550d..3bb1a466df 100644 --- a/manifests/kustomize/third-party/argo/installs/cluster/kustomization.yaml +++ b/manifests/kustomize/third-party/argo/installs/cluster/kustomization.yaml @@ -8,3 +8,11 @@ bases: - ../../upstream/manifests/base/crds - ../../upstream/manifests/cluster-install/workflow-controller-rbac - ../../base + +patchesJson6902: +- target: + group: rbac.authorization.k8s.io + version: v1 + kind: ClusterRoleBinding + name: argo-binding + path: workflow-controller-clusterrolebinding-patch.json \ No newline at end of file diff --git a/manifests/kustomize/third-party/argo/installs/cluster/workflow-controller-clusterrolebinding-patch.json b/manifests/kustomize/third-party/argo/installs/cluster/workflow-controller-clusterrolebinding-patch.json new file mode 100644 index 0000000000..05e9322a11 --- /dev/null +++ b/manifests/kustomize/third-party/argo/installs/cluster/workflow-controller-clusterrolebinding-patch.json @@ -0,0 +1,7 @@ +[ + { + "op": "replace", + "path": "/subjects/0/namespace", + "value": "kubeflow" + } +] diff --git a/manifests/kustomize/third-party/argo/installs/namespace/cluster-scoped/kustomization.yaml b/manifests/kustomize/third-party/argo/installs/namespace/cluster-scoped/kustomization.yaml index a733d309d0..86733da451 100644 --- a/manifests/kustomize/third-party/argo/installs/namespace/cluster-scoped/kustomization.yaml +++ b/manifests/kustomize/third-party/argo/installs/namespace/cluster-scoped/kustomization.yaml @@ -1,4 +1,5 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization bases: -- ../../../upstream/manifests/base/crds +# Minimal CRDs omit schema validation, recommended for production cluster. +- ../../../upstream/manifests/base/crds/minimal diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/Kptfile b/manifests/kustomize/third-party/argo/upstream/manifests/Kptfile index 4ad71de418..5dd50819bb 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/Kptfile +++ b/manifests/kustomize/third-party/argo/upstream/manifests/Kptfile @@ -5,7 +5,7 @@ metadata: upstream: type: git git: - commit: 737905345d70ba1ebd566ce1230e4f971993dfd0 + commit: a245fe67db56d2808fb78c6079d08404cbee91aa repo: https://github.com/argoproj/argo-workflows directory: /manifests - ref: v2.12.9 + ref: v3.1.1 diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/LICENSE b/manifests/kustomize/third-party/argo/upstream/manifests/LICENSE new file mode 100644 index 0000000000..67e99b065b --- /dev/null +++ b/manifests/kustomize/third-party/argo/upstream/manifests/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017-2018 The Argo Authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/argo-server/argo-server-deployment.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/argo-server/argo-server-deployment.yaml index 4780b43fcc..d01698af53 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/argo-server/argo-server-deployment.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/argo-server/argo-server-deployment.yaml @@ -14,7 +14,11 @@ spec: serviceAccountName: argo-server containers: - name: argo-server - image: argoproj/argocli:v2.12.9 + image: docker.io/argoproj/argocli:latest + securityContext: + capabilities: + drop: + - ALL args: [ server ] ports: - name: web @@ -22,7 +26,7 @@ spec: readinessProbe: httpGet: port: 2746 - scheme: HTTP + scheme: HTTPS path: / initialDelaySeconds: 10 periodSeconds: 20 diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml index ab129027c9..31d1586b5f 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml @@ -1,5 +1,5 @@ # This is an auto-generated file. DO NOT EDIT -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: clusterworkflowtemplates.argoproj.io @@ -14,6690 +14,14026 @@ spec: - cwft singular: clusterworkflowtemplate scope: Cluster - validation: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - activeDeadlineSeconds: - format: int64 - type: integer - affinity: - properties: - nodeAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + operator: type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - weight: - format: int32 - type: integer - required: - - preference - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + operator: type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - type: array - required: - - nodeSelectorTerms - type: object - type: object - podAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: + values: + items: type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: array + required: + - key + - operator type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: + nodeSelectorTerms: items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - operator: + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: array + required: + - key + - operator type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer + type: array + type: object + type: array required: - - podAffinityTerm - - weight + - nodeSelectorTerms type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: properties: - key: - type: string - operator: - type: string - values: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object type: array - required: - - key - - operator + matchLabels: + additionalProperties: + type: string + type: object type: object - type: array - matchLabels: - additionalProperties: + namespaces: + items: + type: string + type: array + topologyKey: type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - type: object - type: object - arguments: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: + type: array + topologyKey: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: properties: - name: - type: string - value: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: type: string required: - - name - - value + - topologyKey type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: items: - type: string + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object - required: - - name - type: object - type: array - type: object - artifactRepositoryRef: - properties: - configMap: - type: string - key: - type: string - type: object - automountServiceAccountToken: - type: boolean - dnsConfig: - properties: - nameservers: - items: - type: string - type: array - options: - items: - properties: - name: - type: string - value: - type: string type: object - type: array - searches: - items: - type: string - type: array - type: object - dnsPolicy: - type: string - entrypoint: - type: string - executor: - properties: - serviceAccountName: - type: string - type: object - hostAliases: - items: - properties: - hostnames: - items: - type: string - type: array - ip: - type: string type: object - type: array - hostNetwork: - type: boolean - imagePullSecrets: - items: + arguments: properties: - name: - type: string - type: object - type: array - metrics: - properties: - prometheus: - items: - properties: - counter: - properties: - value: - type: string - required: - - value - type: object - gauge: - properties: - realtime: - type: boolean - value: - type: string - required: - - realtime - - value - type: object - help: - type: string - histogram: - properties: - buckets: - items: - type: number - type: array - value: - type: string - required: - - buckets - - value - type: object - labels: - items: + artifacts: + items: + properties: + archive: properties: - key: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: type: string - value: + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - key - - value type: object - type: array - name: - type: string - when: - type: string - required: - - help - - name - type: object - type: array - required: - - prometheus - type: object - nodeSelector: - additionalProperties: - type: string - type: object - onExit: - type: string - parallelism: - format: int64 - type: integer - podDisruptionBudget: - properties: - maxUnavailable: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - minAvailable: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - podGC: - properties: - strategy: - type: string - type: object - podPriority: - format: int32 - type: integer - podPriorityClassName: - type: string - podSpecPatch: - type: string - priority: - format: int32 - type: integer - retryStrategy: - properties: - backoff: - properties: - duration: - type: string - factor: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - maxDuration: - type: string - type: object - limit: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - retryPolicy: - type: string - type: object - schedulerName: - type: string - securityContext: - properties: - fsGroup: - format: int64 - type: integer - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - serviceAccountName: - type: string - shutdown: - type: string - suspend: - type: boolean - synchronization: - properties: - mutex: - properties: - name: - type: string - type: object - semaphore: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - type: object - type: object - templates: - items: - properties: - activeDeadlineSeconds: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - affinity: - properties: - nodeAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + revision: + type: string + sshPrivateKeySecret: properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - weight: - format: int32 - type: integer + key: + type: string + name: + type: string + optional: + type: boolean required: - - preference - - weight + - key type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - type: array - required: - - nodeSelectorTerms - type: object - type: object - podAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + usernameSecret: properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer + key: + type: string + name: + type: string + optional: + type: boolean required: - - podAffinityTerm - - weight + - key type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: + key: type: string + name: + type: string + optional: + type: boolean required: - - topologyKey + - key type: object - type: array - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + krbConfigConfigMap: properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer + key: + type: string + name: + type: string + optional: + type: boolean required: - - podAffinityTerm - - weight + - key type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + krbKeytabSecret: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: type: string - type: array - topologyKey: + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - topologyKey + - key type: object - type: array - type: object - type: object - archiveLocation: - properties: - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: + bucket: type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - hdfs: - properties: - addresses: - items: + createBucketIfNotPresent: + type: boolean + endpoint: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: - type: string - required: - - url - type: object - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - raw: - properties: - data: - type: string - required: - - data - type: object - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - type: object - arguments: - properties: - artifacts: - items: - properties: - archive: + key: + type: string + lifecycleRule: properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer type: object - archiveLogs: - type: boolean - artifactory: + secretKeySecret: properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: + key: type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object + name: + type: string + optional: + type: boolean required: - - url + - key type: object - from: + securityToken: type: string - gcs: + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: properties: - bucket: - type: string key: type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object + name: + type: string + optional: + type: boolean required: - - bucket - key type: object - git: + bucket: + type: string + createBucketIfNotPresent: properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: + objectLocking: type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo type: object - globalName: + endpoint: type: string - hdfs: - properties: - addresses: - items: - type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: + insecure: type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: + key: type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: + region: + type: string + roleARN: + type: string + secretKeySecret: properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean key: type: string - region: - type: string - roleARN: + name: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: + optional: type: boolean required: - - accessKeySecret - - bucket - - endpoint - key - - secretKeySecret type: object - subPath: - type: string - required: - - name + useSDKCreds: + type: boolean type: object - type: array - parameters: - items: + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: properties: default: type: string - enum: - items: - type: string - type: array - globalName: + event: type: string - name: + expression: type: string - value: + jqFilter: type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: type: object - required: - - name type: object - type: array - type: object - automountServiceAccountToken: - type: boolean - container: - properties: - args: - items: + required: + - name + type: object + type: array + type: object + artifactRepositoryRef: + properties: + configMap: + type: string + key: + type: string + type: object + automountServiceAccountToken: + type: boolean + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + options: + items: + properties: + name: type: string - type: array - command: - items: + value: type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - type: object + type: object + type: array + searches: + items: + type: string + type: array + type: object + dnsPolicy: + type: string + entrypoint: + type: string + executor: + properties: + serviceAccountName: + type: string + type: object + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + hostNetwork: + type: boolean + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + metrics: + properties: + prometheus: + items: + properties: + counter: + properties: + value: + type: string required: - - name + - value + type: object + gauge: + properties: + realtime: + type: boolean + value: + type: string + required: + - realtime + - value + type: object + help: + type: string + histogram: + properties: + buckets: + items: + type: number + type: array + value: + type: string + required: + - buckets + - value + type: object + labels: + items: + properties: + key: + type: string + value: + type: string + required: + - key + - value + type: object + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + nodeSelector: + additionalProperties: + type: string + type: object + onExit: + type: string + parallelism: + format: int64 + type: integer + podDisruptionBudget: + properties: + maxUnavailable: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + minAvailable: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator type: object type: array - envFrom: + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + podGC: + properties: + labelSelector: + properties: + matchExpressions: items: properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: + key: type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator type: object type: array - image: + matchLabels: + additionalProperties: + type: string + type: object + type: object + strategy: + type: string + type: object + podMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + podPriority: + format: int32 + type: integer + podPriorityClassName: + type: string + podSpecPatch: + type: string + priority: + format: int32 + type: integer + retryStrategy: + properties: + affinity: + properties: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: type: string - imagePullPolicy: + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: type: string - lifecycle: + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object + schedulerName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + shutdown: + type: string + suspend: + type: boolean + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key type: object - livenessProbe: + type: object + type: object + templateDefaults: + properties: + activeDeadlineSeconds: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + affinity: + properties: + nodeAffinity: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: properties: - host: - type: string - httpHeaders: + nodeSelectorTerms: items: properties: - name: - type: string - value: - type: string - required: - - name - - value + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array type: object type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - nodeSelectorTerms type: object - timeoutSeconds: - format: int32 - type: integer type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: + podAffinity: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: properties: - name: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: type: string - value: + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: type: string required: - - name - - value + - topologyKey type: object - type: array - path: + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + archiveLocation: + properties: + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + name: type: string + optional: + type: boolean required: - - port + - key type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + url: + type: string + usernameSecret: properties: - host: + key: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true + name: + type: string + optional: + type: boolean required: - - port + - key type: object - timeoutSeconds: - format: int32 - type: integer + required: + - url type: object - resources: + gcs: properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key type: object + required: + - key type: object - securityContext: + git: properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: + depth: format: int64 type: integer - runAsNonRoot: + disableSubmodules: type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: properties: - level: + key: type: string - role: + name: type: string - type: + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: type: string - user: + name: type: string + optional: + type: boolean + required: + - key type: object - windowsOptions: + usernameSecret: properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: + key: type: string - runAsUserName: + name: type: string + optional: + type: boolean + required: + - key type: object + required: + - repo type: object - startupProbe: + hdfs: properties: - exec: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: properties: - command: - items: - type: string - type: array + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key type: object - failureThreshold: - format: int32 - type: integer - httpGet: + krbConfigConfigMap: properties: - host: + key: type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + name: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - port + - key type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + oss: + properties: + accessKeySecret: properties: - host: + key: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true + name: + type: string + optional: + type: boolean required: - - port + - key type: object - timeoutSeconds: - format: int32 - type: integer + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: + raw: + properties: + data: + type: string + required: + - data + type: object + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + type: object + automountServiceAccountToken: + type: boolean + container: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: items: properties: - devicePath: - type: string name: type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object required: - - devicePath - name type: object type: array - volumeMounts: + envFrom: items: properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: type: string - required: - - mountPath - - name + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object type: object type: array - workingDir: + image: type: string - required: - - image - type: object - daemon: - type: boolean - dag: - properties: - failFast: - type: boolean - target: + imagePullPolicy: type: string - tasks: - items: - properties: - arguments: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + containerSet: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + dependencies: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + required: + - containers + type: object + daemon: + type: boolean + dag: + properties: + failFast: + type: boolean + target: + type: string + tasks: + items: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + continueOn: + properties: + error: + type: boolean + failed: + type: boolean + type: object + dependencies: + items: + type: string + type: array + depends: + type: string + hooks: + additionalProperties: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + template: + type: string + required: + - template + type: object + type: object + name: + type: string + onExit: + type: string + template: + type: string + templateRef: + properties: + clusterScope: + type: boolean + name: + type: string + template: + type: string + type: object + when: + type: string + withItems: + items: + type: object + type: array + withParam: + type: string + withSequence: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + end: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + format: + type: string + start: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + required: + - name + type: object + type: array + required: + - tasks + type: object + data: + properties: + source: + properties: + artifactPaths: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: object + transformation: + items: + properties: + expression: + type: string + required: + - expression + type: object + type: array + required: + - source + - transformation + type: object + executor: + properties: + serviceAccountName: + type: string + type: object + failFast: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + inputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + memoize: + properties: + cache: + properties: + configMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - configMap + type: object + key: + type: string + maxAge: + type: string + required: + - cache + - key + - maxAge + type: object + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + metrics: + properties: + prometheus: + items: + properties: + counter: + properties: + value: + type: string + required: + - value + type: object + gauge: + properties: + realtime: + type: boolean + value: + type: string + required: + - realtime + - value + type: object + help: + type: string + histogram: + properties: + buckets: + items: + type: number + type: array + value: + type: string + required: + - buckets + - value + type: object + labels: + items: + properties: + key: + type: string + value: + type: string + required: + - key + - value + type: object + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + outputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + exitCode: + type: string + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + result: + type: string + type: object + parallelism: + format: int64 + type: integer + podSpecPatch: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + resource: + properties: + action: + type: string + failureCondition: + type: string + flags: + items: + type: string + type: array + manifest: + type: string + mergeStrategy: + type: string + setOwnerReference: + type: boolean + successCondition: + type: string + required: + - action + type: object + retryStrategy: + properties: + affinity: + properties: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object + schedulerName: + type: string + script: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + source: + type: string + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + - source + type: object + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + sidecars: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + steps: + items: + type: array + type: array + suspend: + properties: + duration: + type: string + type: object + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + type: object + timeout: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + templates: + items: + properties: + activeDeadlineSeconds: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - name: + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - optional: - type: boolean - required: - - key + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - repo: + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + archiveLocation: + properties: + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + raw: + properties: + data: + type: string + required: + - data + type: object + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + type: object + automountServiceAccountToken: + type: boolean + container: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - image + type: object + containerSet: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + dependencies: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - revision: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object required: - - repo + - port type: object - globalName: + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - hdfs: - properties: - addresses: - items: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + required: + - containers + type: object + daemon: + type: boolean + dag: + properties: + failFast: + type: boolean + target: + type: string + tasks: + items: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + usernameSecret: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: type: string - name: + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: type: string - secretKeySecret: + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + continueOn: + properties: + error: + type: boolean + failed: + type: boolean + type: object + dependencies: + items: + type: string + type: array + depends: + type: string + hooks: + additionalProperties: + properties: + arguments: + properties: + artifacts: + items: properties: - key: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: type: string - name: + fromExpression: type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer name: type: string optional: type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string required: - - key + - name type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: + type: array + parameters: + items: properties: - key: + default: + type: string + enum: + items: + type: string + type: array + globalName: type: string name: type: string - optional: - type: boolean + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object required: - - key + - name type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: - items: + type: array + type: object + template: + type: string + required: + - template + type: object + type: object + name: + type: string + onExit: + type: string + template: + type: string + templateRef: + properties: + clusterScope: + type: boolean + name: + type: string + template: + type: string + type: object + when: + type: string + withItems: + items: + type: object + type: array + withParam: + type: string + withSequence: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + end: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + format: + type: string + start: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + required: + - name + type: object + type: array + required: + - tasks + type: object + data: + properties: + source: + properties: + artifactPaths: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: type: string - type: array - globalName: - type: string - name: + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: type: string - value: + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: type: string - valueFrom: + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: + name: type: string - path: + value: type: string - supplied: - type: object + required: + - name + - value type: object - required: - - name - type: object - type: array - type: object - continueOn: - properties: - error: + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: type: boolean - failed: + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name type: object - dependencies: - items: + type: object + transformation: + items: + properties: + expression: type: string - type: array - depends: - type: string - name: + required: + - expression + type: object + type: array + required: + - source + - transformation + type: object + executor: + properties: + serviceAccountName: + type: string + type: object + failFast: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: type: string - onExit: + type: array + ip: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: type: string - template: + type: array + command: + items: type: string - templateRef: + type: array + env: + items: properties: - clusterScope: - type: boolean name: type: string - runtimeResolution: - type: boolean - template: + value: type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name type: object - when: - type: string - withItems: - items: - type: object - type: array - withParam: - type: string - withSequence: + type: array + envFrom: + items: properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - end: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - format: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: type: string - start: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object type: object - required: - - name - type: object - type: array - required: - - tasks - type: object - executor: - properties: - serviceAccountName: - type: string - type: object - hostAliases: - items: - properties: - hostnames: - items: - type: string - type: array - ip: - type: string - type: object - type: array - initContainers: - items: - properties: - args: - items: + type: array + image: type: string - type: array - command: - items: + imagePullPolicy: type: string - type: array - env: - items: + lifecycle: properties: - name: - type: string - value: - type: string - valueFrom: + postStart: properties: - configMapKeyRef: + exec: properties: - key: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - name: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - optional: - type: boolean required: - - key + - port type: object - fieldRef: + tcpSocket: properties: - apiVersion: - type: string - fieldPath: + host: type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - fieldPath + - port type: object - resourceFieldRef: + type: object + preStop: + properties: + exec: properties: - containerName: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - divisor: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: anyOf: - type: integer - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - resource: + scheme: type: string required: - - resource + - port type: object - secretKeyRef: + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object type: object - required: - - name type: object - type: array - envFrom: - items: + livenessProbe: properties: - configMapRef: + exec: properties: - name: - type: string - optional: - type: boolean + command: + items: + type: string + type: array type: object - prefix: - type: string - secretRef: + failureThreshold: + format: int32 + type: integer + httpGet: properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: + host: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - mirrorVolumeMounts: - type: boolean - name: - type: string - ports: - items: - properties: - containerPort: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: format: int32 type: integer - hostIP: - type: string - hostPort: + periodSeconds: format: int32 type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + containerPort: + format: int32 + type: integer + hostIP: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + hostPort: + format: int32 + type: integer + name: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + protocol: + default: TCP type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true + - containerPort type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: type: string - type: array - drop: - items: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: + type: object + requests: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name + type: object type: object - type: array - volumeMounts: - items: + securityContext: properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: + allowPrivilegeEscalation: type: boolean - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - workingDir: - type: string - required: - - name - type: object - type: array - inputs: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: + capabilities: + properties: + add: + items: type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: + type: array + drop: + items: type: string - name: + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: properties: - bucket: - type: string - key: + devicePath: + type: string + name: type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object required: - - bucket - - key + - devicePath + - name type: object - git: + type: array + volumeMounts: + items: properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: + subPath: type: string - revision: + subPathExpr: type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object required: - - repo + - mountPath + - name type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: + type: array + workingDir: + type: string + required: + - name + type: object + type: array + inputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: - items: + useSDKCreds: + type: boolean + type: object + subPath: type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object - required: - - name - type: object - type: array - type: object - memoize: - properties: - cache: - properties: - configMap: + required: + - name + type: object + type: array + parameters: + items: properties: - key: + default: + type: string + enum: + items: + type: string + type: array + globalName: type: string name: type: string - optional: - type: boolean + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object required: - - key + - name type: object - required: - - configMap - type: object - key: - type: string - maxAge: - type: string - required: - - cache - - key - - maxAge - type: object - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - metrics: - properties: - prometheus: - items: + type: array + type: object + memoize: + properties: + cache: properties: - counter: - properties: - value: - type: string - required: - - value - type: object - gauge: + configMap: properties: - realtime: - type: boolean - value: + key: type: string - required: - - realtime - - value - type: object - help: - type: string - histogram: - properties: - buckets: - items: - type: number - type: array - value: + name: type: string + optional: + type: boolean required: - - buckets - - value + - key type: object - labels: - items: + required: + - configMap + type: object + key: + type: string + maxAge: + type: string + required: + - cache + - key + - maxAge + type: object + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + metrics: + properties: + prometheus: + items: + properties: + counter: properties: - key: - type: string value: type: string required: - - key - value type: object - type: array - name: - type: string - when: - type: string - required: - - help - - name - type: object - type: array - required: - - prometheus - type: object - name: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - outputs: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: + gauge: + properties: + realtime: + type: boolean + value: type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: + required: + - realtime + - value + type: object + help: + type: string + histogram: + properties: + buckets: + items: + type: number + type: array + value: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: + required: + - buckets + - value + type: object + labels: + items: properties: key: type: string - name: + value: type: string - optional: - type: boolean required: - key + - value type: object - krbKeytabSecret: - properties: - key: + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + outputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: type: string - name: + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - exitCode: - type: string - parameters: - items: - properties: - default: - type: string - enum: - items: + useSDKCreds: + type: boolean + type: object + subPath: type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object - required: - - name - type: object - type: array - result: - type: string - type: object - parallelism: - format: int64 - type: integer - podSpecPatch: - type: string - priority: - format: int32 - type: integer - priorityClassName: - type: string - resource: - properties: - action: - type: string - failureCondition: - type: string - flags: - items: + required: + - name + type: object + type: array + exitCode: type: string - type: array - manifest: - type: string - mergeStrategy: - type: string - setOwnerReference: - type: boolean - successCondition: - type: string - required: - - action - type: object - retryStrategy: - properties: - backoff: - properties: - duration: - type: string - factor: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - maxDuration: + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + result: + type: string + type: object + parallelism: + format: int64 + type: integer + podSpecPatch: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + resource: + properties: + action: + type: string + failureCondition: + type: string + flags: + items: type: string - type: object - limit: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - retryPolicy: - type: string - type: object - schedulerName: - type: string - script: - properties: - args: - items: + type: array + manifest: type: string - type: array - command: - items: + mergeStrategy: type: string - type: array - env: - items: + setOwnerReference: + type: boolean + successCondition: + type: string + required: + - action + type: object + retryStrategy: + properties: + affinity: properties: - name: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: type: string - value: + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: type: string - valueFrom: + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object + schedulerName: + type: string + script: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: properties: - configMapKeyRef: + exec: properties: - key: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - name: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - optional: - type: boolean required: - - key + - port type: object - fieldRef: + tcpSocket: properties: - apiVersion: - type: string - fieldPath: + host: type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - fieldPath + - port type: object - resourceFieldRef: + type: object + preStop: + properties: + exec: properties: - containerName: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - divisor: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: anyOf: - type: integer - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - resource: + scheme: type: string required: - - resource + - port type: object - secretKeyRef: + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object type: object - required: - - name type: object - type: array - envFrom: - items: + livenessProbe: properties: - configMapRef: + exec: properties: - name: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: type: string - optional: - type: boolean + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port type: object - prefix: - type: string - secretRef: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port type: object + timeoutSeconds: + format: int32 + type: integer type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + name: + type: string + ports: + items: properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + containerPort: + format: int32 + type: integer + hostIP: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + hostPort: + format: int32 + type: integer + name: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: properties: - containerPort: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: format: int32 type: integer - hostIP: - type: string - hostPort: + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: format: int32 type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: + type: object + requests: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + source: + type: string + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - type: array - drop: - items: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: properties: - level: - type: string - role: - type: string - type: + devicePath: type: string - user: + name: type: string + required: + - devicePath + - name type: object - windowsOptions: + type: array + volumeMounts: + items: properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: + mountPath: type: string - type: object - type: object - source: - type: string - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: + mountPropagation: type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + name: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + readOnly: + type: boolean + subPath: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + subPathExpr: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - mountPath + - name type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: + type: array + workingDir: + type: string + required: + - image + - source + type: object + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - mountPath: - type: string - mountPropagation: + level: type: string - name: + role: type: string - readOnly: - type: boolean - subPath: + type: type: string - subPathExpr: + user: type: string - required: - - mountPath - - name type: object - type: array - workingDir: - type: string - required: - - image - - source - type: object - securityContext: - properties: - fsGroup: - format: int64 - type: integer - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - sysctls: - items: + seccompProfile: properties: - name: + localhostProfile: type: string - value: + type: type: string required: - - name - - value + - type type: object - type: array - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - serviceAccountName: - type: string - sidecars: - items: - properties: - args: - items: - type: string - type: array - command: + supplementalGroups: items: - type: string + format: int64 + type: integer type: array - env: + sysctls: items: properties: name: type: string value: type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - type: object required: - name + - value type: object type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: + windowsOptions: properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + sidecars: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: + name: + type: string + value: + type: string + valueFrom: properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object type: object + required: + - name type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + type: array + envFrom: + items: properties: - host: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: type: string - httpHeaders: - items: + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: properties: - name: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - value: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string required: - - name - - value + - port type: object - type: array - path: + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + hostPort: + format: int32 + type: integer + name: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + protocol: + default: TCP type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - containerPort type: object - timeoutSeconds: - format: int32 - type: integer - type: object - mirrorVolumeMounts: - type: boolean - name: - type: string - ports: - items: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: properties: - containerPort: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: format: int32 type: integer - hostIP: - type: string - hostPort: + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: format: int32 type: integer - name: - type: string - protocol: - type: string - required: - - containerPort type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: + resources: + properties: + limits: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: + type: object + requests: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: type: string - type: array - drop: - items: + role: type: string - type: array + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: + type: array + volumeMounts: + items: properties: - level: + mountPath: type: string - role: + mountPropagation: type: string - type: + name: type: string - user: + readOnly: + type: boolean + subPath: + type: string + subPathExpr: type: string + required: + - mountPath + - name type: object - windowsOptions: + type: array + workingDir: + type: string + required: + - name + type: object + type: array + steps: + items: + type: array + type: array + suspend: + properties: + duration: + type: string + type: object + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: + key: type: string - runAsUserName: + name: type: string + optional: + type: boolean + required: + - key type: object type: object - startupProbe: - properties: - exec: - properties: - command: - items: + type: object + timeout: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: type: string - httpHeaders: - items: + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: properties: - name: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: type: string - value: + volumeMode: + type: string + volumeName: type: string - required: - - name - - value type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: + required: + - spec + type: object + type: object + fc: properties: - devicePath: + fsType: type: string - name: + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object required: - - devicePath - - name + - driver type: object - type: array - volumeMounts: - items: + flocker: properties: - mountPath: + datasetName: type: string - mountPropagation: + datasetUUID: type: string - name: + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: type: string readOnly: type: boolean - subPath: + required: + - pdName + type: object + gitRepo: + properties: + directory: type: string - subPathExpr: + repository: + type: string + revision: type: string required: - - mountPath - - name + - repository type: object - type: array - workingDir: - type: string - required: - - name - type: object - type: array - steps: - items: - type: array - type: array - suspend: - properties: - duration: - type: string - type: object - synchronization: - properties: - mutex: - properties: - name: - type: string - type: object - semaphore: - properties: - configMapKeyRef: + glusterfs: properties: - key: + endpoints: type: string - name: + path: type: string - optional: + readOnly: type: boolean required: - - key + - endpoints + - path type: object - type: object - type: object - template: - type: string - templateRef: - properties: - clusterScope: - type: boolean - name: - type: string - runtimeResolution: - type: boolean - template: - type: string - type: object - timeout: - type: string - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: + hostPath: + properties: + path: type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - readOnly: - type: boolean - volumeAttributes: - additionalProperties: + type: type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: + name: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: + targetPortal: type: string - type: array - wwids: - items: + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + readOnly: + type: boolean + server: type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: + keyring: + type: string + monitors: + items: type: string - type: object - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object + name: + type: string type: object - type: array - required: - - sources - type: object - quobyte: + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + type: array + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + ttlStrategy: + properties: + secondsAfterCompletion: + format: int32 + type: integer + secondsAfterFailure: + format: int32 + type: integer + secondsAfterSuccess: + format: int32 + type: integer + type: object + volumeClaimGC: + properties: + strategy: + type: string + type: object + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: + apiGroup: type: string - user: + kind: type: string - volume: + name: type: string required: - - registry - - volume + - kind + - name type: object - rbd: + resources: properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string + matchLabels: + additionalProperties: + type: string type: object - user: - type: string - required: - - image - - monitors type: object - scaleIO: + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + capacity: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + phase: + type: string + type: object + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: properties: - fsType: + name: type: string - gateway: + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: type: string - protectionDomain: + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: type: string - readOnly: - type: boolean - secretRef: + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: properties: - name: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: type: string type: object - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string required: - - gateway - - secretRef - - system + - spec type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string type: object - storageos: + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeName: - type: string - volumeNamespace: + name: type: string type: object - vsphereVolume: + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: + name: type: string - required: - - volumePath type: object + targetPortal: + type: string required: - - name + - iqn + - lun + - targetPortal type: object - type: array - required: - - name - type: object - type: array - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - ttlSecondsAfterFinished: - format: int32 - type: integer - ttlStrategy: - properties: - secondsAfterCompletion: - format: int32 - type: integer - secondsAfterFailure: - format: int32 - type: integer - secondsAfterSuccess: - format: int32 - type: integer - type: object - volumeClaimGC: - properties: - strategy: - type: string - type: object - volumeClaimTemplates: - items: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - accessModes: - items: + name: + type: string + nfs: + properties: + path: type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object type: object - type: object - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: + type: array + required: + - sources + type: object + quobyte: + properties: + group: type: string - type: array - capacity: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - phase: - type: string - type: object - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: + readOnly: + type: boolean + registry: type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: type: string - type: object - readOnly: - type: boolean - volumeAttributes: - additionalProperties: + type: array + pool: type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + readOnly: + type: boolean + secretRef: properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: + name: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: + user: type: string - type: array - wwids: - items: + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + gateway: type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: + protectionDomain: type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: + readOnly: + type: boolean + secretRef: properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object + name: + type: string type: object - type: array - required: - - sources - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: + sslEnabled: + type: boolean + storageMode: type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - key: - type: string - mode: - format: int32 - type: integer - path: + name: type: string - required: - - key - - path type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + workflowMetadata: type: object - type: array - workflowMetadata: - type: object - workflowTemplateRef: - properties: - clusterScope: - type: boolean - name: - type: string - type: object - type: object - required: - - metadata - - spec - type: object - version: v1alpha1 - versions: - - name: v1alpha1 + workflowTemplateRef: + properties: + clusterScope: + type: boolean + name: + type: string + type: object + type: object + required: + - metadata + - spec + type: object served: true storage: true diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_cronworkflows.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_cronworkflows.yaml index 42af0a3793..7956d040f3 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_cronworkflows.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_cronworkflows.yaml @@ -1,5 +1,5 @@ # This is an auto-generated file. DO NOT EDIT -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: cronworkflows.argoproj.io @@ -14,4273 +14,11097 @@ spec: - cronwf singular: cronworkflow scope: Namespaced - validation: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - concurrencyPolicy: - type: string - failedJobsHistoryLimit: - format: int32 - type: integer - schedule: - type: string - startingDeadlineSeconds: - format: int64 - type: integer - successfulJobsHistoryLimit: - format: int32 - type: integer - suspend: - type: boolean - timezone: - type: string - workflowMetadata: - type: object - workflowSpec: - properties: - activeDeadlineSeconds: - format: int64 - type: integer - affinity: - properties: - nodeAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + concurrencyPolicy: + type: string + failedJobsHistoryLimit: + format: int32 + type: integer + schedule: + type: string + startingDeadlineSeconds: + format: int64 + type: integer + successfulJobsHistoryLimit: + format: int32 + type: integer + suspend: + type: boolean + timezone: + type: string + workflowMetadata: + type: object + workflowSpec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + operator: type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - weight: - format: int32 - type: integer - required: - - preference - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + operator: type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - type: array - required: - - nodeSelectorTerms - type: object - type: object - podAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: + values: + items: type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: array + required: + - key + - operator type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: + nodeSelectorTerms: items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - operator: + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: array + required: + - key + - operator type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer + type: array + type: object + type: array required: - - podAffinityTerm - - weight + - nodeSelectorTerms type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: properties: - key: - type: string - operator: - type: string - values: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object type: array - required: - - key - - operator + matchLabels: + additionalProperties: + type: string + type: object type: object - type: array - matchLabels: - additionalProperties: + namespaces: + items: + type: string + type: array + topologyKey: type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - type: object - type: object - arguments: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: + type: array + topologyKey: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: properties: - name: - type: string - value: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: type: string required: - - name - - value + - topologyKey type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: items: - type: string + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object - required: - - name - type: object - type: array - type: object - artifactRepositoryRef: - properties: - configMap: - type: string - key: - type: string - type: object - automountServiceAccountToken: - type: boolean - dnsConfig: - properties: - nameservers: - items: - type: string - type: array - options: - items: - properties: - name: - type: string - value: - type: string type: object - type: array - searches: - items: - type: string - type: array - type: object - dnsPolicy: - type: string - entrypoint: - type: string - executor: - properties: - serviceAccountName: - type: string - type: object - hostAliases: - items: - properties: - hostnames: - items: - type: string - type: array - ip: - type: string type: object - type: array - hostNetwork: - type: boolean - imagePullSecrets: - items: + arguments: properties: - name: - type: string - type: object - type: array - metrics: - properties: - prometheus: - items: - properties: - counter: - properties: - value: - type: string - required: - - value - type: object - gauge: - properties: - realtime: - type: boolean - value: - type: string - required: - - realtime - - value - type: object - help: - type: string - histogram: - properties: - buckets: - items: - type: number - type: array - value: - type: string - required: - - buckets - - value - type: object - labels: - items: + artifacts: + items: + properties: + archive: properties: - key: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: type: string - value: + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - key - - value type: object - type: array - name: - type: string - when: - type: string - required: - - help - - name - type: object - type: array - required: - - prometheus - type: object - nodeSelector: - additionalProperties: - type: string - type: object - onExit: - type: string - parallelism: - format: int64 - type: integer - podDisruptionBudget: - properties: - maxUnavailable: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - minAvailable: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - podGC: - properties: - strategy: - type: string - type: object - podPriority: - format: int32 - type: integer - podPriorityClassName: - type: string - podSpecPatch: - type: string - priority: - format: int32 - type: integer - retryStrategy: - properties: - backoff: - properties: - duration: - type: string - factor: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - maxDuration: - type: string - type: object - limit: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - retryPolicy: - type: string - type: object - schedulerName: - type: string - securityContext: - properties: - fsGroup: - format: int64 - type: integer - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - serviceAccountName: - type: string - shutdown: - type: string - suspend: - type: boolean - synchronization: - properties: - mutex: - properties: - name: - type: string - type: object - semaphore: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - type: object - type: object - templates: - items: - properties: - activeDeadlineSeconds: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - affinity: - properties: - nodeAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - weight: - format: int32 - type: integer + key: + type: string + name: + type: string + optional: + type: boolean required: - - preference - - weight + - key type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - type: array - required: - - nodeSelectorTerms - type: object - type: object - podAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + repo: + type: string + revision: + type: string + sshPrivateKeySecret: properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer + key: + type: string + name: + type: string + optional: + type: boolean required: - - podAffinityTerm - - weight + - key type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + usernameSecret: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: + key: type: string + name: + type: string + optional: + type: boolean required: - - topologyKey + - key type: object - type: array - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer + key: + type: string + name: + type: string + optional: + type: boolean required: - - podAffinityTerm - - weight + - key type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + krbConfigConfigMap: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: type: string - type: array - topologyKey: + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - topologyKey + - key type: object - type: array - type: object - type: object - archiveLocation: - properties: - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: + bucket: type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - hdfs: - properties: - addresses: - items: + createBucketIfNotPresent: + type: boolean + endpoint: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + key: + type: string + lifecycleRule: properties: - name: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: type: string - value: + name: type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - url: - type: string - required: - - url - type: object - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - raw: - properties: - data: - type: string - required: - - data - type: object - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - type: object - arguments: - properties: - artifacts: - items: + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: + key: type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object + name: + type: string + optional: + type: boolean required: - - url + - key type: object - from: + bucket: type: string - gcs: + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: properties: - bucket: - type: string key: type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object + name: + type: string + optional: + type: boolean required: - - bucket - key type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: - type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: + useSDKCreds: type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name type: object - type: array - parameters: - items: + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: properties: default: type: string - enum: - items: - type: string - type: array - globalName: + event: type: string - name: + expression: type: string - value: + jqFilter: type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: type: object - required: - - name type: object - type: array - type: object - automountServiceAccountToken: - type: boolean - container: - properties: - args: - items: + required: + - name + type: object + type: array + type: object + artifactRepositoryRef: + properties: + configMap: + type: string + key: + type: string + type: object + automountServiceAccountToken: + type: boolean + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + options: + items: + properties: + name: type: string - type: array - command: - items: + value: type: string - type: array - env: - items: + type: object + type: array + searches: + items: + type: string + type: array + type: object + dnsPolicy: + type: string + entrypoint: + type: string + executor: + properties: + serviceAccountName: + type: string + type: object + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + hostNetwork: + type: boolean + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + metrics: + properties: + prometheus: + items: + properties: + counter: properties: - name: + value: + type: string + required: + - value + type: object + gauge: + properties: + realtime: + type: boolean + value: type: string + required: + - realtime + - value + type: object + help: + type: string + histogram: + properties: + buckets: + items: + type: number + type: array value: type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - type: object required: - - name + - buckets + - value + type: object + labels: + items: + properties: + key: + type: string + value: + type: string + required: + - key + - value + type: object + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + nodeSelector: + additionalProperties: + type: string + type: object + onExit: + type: string + parallelism: + format: int64 + type: integer + podDisruptionBudget: + properties: + maxUnavailable: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + minAvailable: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator type: object type: array - envFrom: + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + podGC: + properties: + labelSelector: + properties: + matchExpressions: items: properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: + key: type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator type: object type: array - image: + matchLabels: + additionalProperties: + type: string + type: object + type: object + strategy: + type: string + type: object + podMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + podPriority: + format: int32 + type: integer + podPriorityClassName: + type: string + podSpecPatch: + type: string + priority: + format: int32 + type: integer + retryStrategy: + properties: + affinity: + properties: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: type: string - imagePullPolicy: + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object + schedulerName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + shutdown: + type: string + suspend: + type: boolean + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key type: object - livenessProbe: + type: object + type: object + templateDefaults: + properties: + activeDeadlineSeconds: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + affinity: + properties: + nodeAffinity: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: properties: - host: - type: string - httpHeaders: + nodeSelectorTerms: items: properties: - name: - type: string - value: - type: string - required: - - name - - value + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array type: object type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - nodeSelectorTerms type: object - timeoutSeconds: - format: int32 - type: integer type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: + podAffinity: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: properties: - name: - type: string - value: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: type: string required: - - name - - value + - topologyKey type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array type: object - securityContext: + podAntiAffinity: properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + archiveLocation: + properties: + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: type: string - runAsUserName: + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean + required: + - key type: object + required: + - url type: object - startupProbe: + gcs: properties: - exec: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: properties: - command: - items: - type: string - type: array + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key type: object - failureThreshold: - format: int32 + required: + - key + type: object + git: + properties: + depth: + format: int64 type: integer - httpGet: + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: properties: - host: + key: type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + name: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - port + - key type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + usernameSecret: properties: - host: + key: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true + name: + type: string + optional: + type: boolean required: - - port + - key type: object - timeoutSeconds: - format: int32 - type: integer + required: + - repo type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: + hdfs: + properties: + addresses: + items: type: string - readOnly: - type: boolean - subPath: + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + raw: + properties: + data: + type: string + required: + - data + type: object + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + type: object + automountServiceAccountToken: + type: boolean + container: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: type: string - subPathExpr: + value: type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object required: - - mountPath - name type: object type: array - workingDir: - type: string - required: - - image - type: object - daemon: - type: boolean - dag: - properties: - failFast: - type: boolean - target: - type: string - tasks: + envFrom: items: properties: - arguments: + configMapRef: properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + containerSet: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + dependencies: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + required: + - containers + type: object + daemon: + type: boolean + dag: + properties: + failFast: + type: boolean + target: + type: string + tasks: + items: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key type: object - zip: + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + continueOn: + properties: + error: + type: boolean + failed: + type: boolean + type: object + dependencies: + items: + type: string + type: array + depends: + type: string + hooks: + additionalProperties: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + template: + type: string + required: + - template + type: object + type: object + name: + type: string + onExit: + type: string + template: + type: string + templateRef: + properties: + clusterScope: + type: boolean + name: + type: string + template: + type: string + type: object + when: + type: string + withItems: + items: + type: object + type: array + withParam: + type: string + withSequence: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + end: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + format: + type: string + start: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + required: + - name + type: object + type: array + required: + - tasks + type: object + data: + properties: + source: + properties: + artifactPaths: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: object + transformation: + items: + properties: + expression: + type: string + required: + - expression + type: object + type: array + required: + - source + - transformation + type: object + executor: + properties: + serviceAccountName: + type: string + type: object + failFast: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + inputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + memoize: + properties: + cache: + properties: + configMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - configMap + type: object + key: + type: string + maxAge: + type: string + required: + - cache + - key + - maxAge + type: object + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + metrics: + properties: + prometheus: + items: + properties: + counter: + properties: + value: + type: string + required: + - value + type: object + gauge: + properties: + realtime: + type: boolean + value: + type: string + required: + - realtime + - value + type: object + help: + type: string + histogram: + properties: + buckets: + items: + type: number + type: array + value: + type: string + required: + - buckets + - value + type: object + labels: + items: + properties: + key: + type: string + value: + type: string + required: + - key + - value + type: object + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + outputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + exitCode: + type: string + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + result: + type: string + type: object + parallelism: + format: int64 + type: integer + podSpecPatch: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + resource: + properties: + action: + type: string + failureCondition: + type: string + flags: + items: + type: string + type: array + manifest: + type: string + mergeStrategy: + type: string + setOwnerReference: + type: boolean + successCondition: + type: string + required: + - action + type: object + retryStrategy: + properties: + affinity: + properties: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object + schedulerName: + type: string + script: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + source: + type: string + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + - source + type: object + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + sidecars: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + steps: + items: + type: array + type: array + suspend: + properties: + duration: + type: string + type: object + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + type: object + timeout: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator type: object - type: object - archiveLogs: + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + templates: + items: + properties: + activeDeadlineSeconds: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - name: + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - name: + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: properties: - depth: - format: int64 - type: integer - fetch: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + matchLabels: + additionalProperties: + type: string type: object - required: - - repo type: object - globalName: + namespaces: + items: + type: string + type: array + topologyKey: type: string - hdfs: - properties: - addresses: - items: + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: + operator: + type: string + values: + items: type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - http: + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: properties: - headers: + matchExpressions: items: properties: - name: + key: type: string - value: + operator: type: string + values: + items: + type: string + type: array required: - - name - - value + - key + - operator type: object type: array - url: - type: string - required: - - url + matchLabels: + additionalProperties: + type: string + type: object type: object - mode: - format: int32 - type: integer + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + archiveLocation: + properties: + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + raw: + properties: + data: + type: string + required: + - data + type: object + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + type: object + automountServiceAccountToken: + type: boolean + container: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string name: type: string optional: type: boolean - oss: + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: + name: type: string - key: + value: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret + - name + - value type: object - path: + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: + name: type: string - roleARN: + value: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret + - name + - value type: object - subPath: + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: type: string required: - name + - value type: object type: array - parameters: + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: items: properties: - default: + name: type: string - enum: - items: - type: string - type: array - globalName: + value: type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: name: type: string value: type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object required: - name + - value type: object type: array - type: object - continueOn: - properties: - error: - type: boolean - failed: - type: boolean - type: object - dependencies: - items: - type: string - type: array - depends: - type: string - name: - type: string - onExit: - type: string - template: - type: string - templateRef: - properties: - clusterScope: - type: boolean - name: - type: string - runtimeResolution: - type: boolean - template: + path: type: string - type: object - when: - type: string - withItems: - items: - type: object - type: array - withParam: - type: string - withSequence: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - end: + port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true - format: + scheme: type: string - start: + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true + required: + - port type: object - required: - - name + timeoutSeconds: + format: int32 + type: integer type: object - type: array - required: - - tasks - type: object - executor: - properties: - serviceAccountName: - type: string - type: object - hostAliases: - items: - properties: - hostnames: - items: - type: string - type: array - ip: + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: type: string - type: object - type: array - initContainers: - items: - properties: - args: + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: items: - type: string + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object type: array - command: + volumeMounts: items: - type: string + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object type: array - env: + workingDir: + type: string + required: + - image + type: object + containerSet: + properties: + containers: items: properties: - name: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + dependencies: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: type: string - value: + imagePullPolicy: type: string - valueFrom: + lifecycle: properties: - configMapKeyRef: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object type: object - fieldRef: + type: object + livenessProbe: + properties: + exec: properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath + command: + items: + type: string + type: array type: object - resourceFieldRef: + failureThreshold: + format: int32 + type: integer + httpGet: properties: - containerName: + host: type: string - divisor: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: anyOf: - type: integer - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - resource: + scheme: type: string required: - - resource + - port type: object - secretKeyRef: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object + timeoutSeconds: + format: int32 + type: integer type: object - required: - - name - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: + name: type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: + ports: + items: properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + containerPort: + format: int32 + type: integer + hostIP: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + hostPort: + format: int32 + type: integer + name: type: string - required: - - port - type: object - tcpSocket: - properties: - host: + protocol: + default: TCP type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - containerPort type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: properties: - name: + host: type: string - value: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string required: - - name - - value + - port type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - mirrorVolumeMounts: - type: boolean - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - name: - type: string - value: + host: type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - name - - value + - port type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - name: + level: type: string - value: + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: type: string required: - - name - - value + - type type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + required: + - containers + type: object + daemon: + type: boolean + dag: + properties: + failFast: + type: boolean + target: + type: string + tasks: + items: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + continueOn: + properties: + error: + type: boolean + failed: + type: boolean + type: object + dependencies: + items: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: + type: array + depends: type: string + hooks: + additionalProperties: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + template: + type: string + required: + - template + type: object + type: object name: type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: + onExit: type: string - name: + template: type: string - readOnly: - type: boolean - subPath: + templateRef: + properties: + clusterScope: + type: boolean + name: + type: string + template: + type: string + type: object + when: type: string - subPathExpr: + withItems: + items: + type: object + type: array + withParam: type: string + withSequence: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + end: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + format: + type: string + start: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object required: - - mountPath - name type: object type: array - workingDir: - type: string required: - - name - type: object - type: array - inputs: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: + - tasks + type: object + data: + properties: + source: + properties: + artifactPaths: properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: + archive: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: + archiveLogs: type: boolean - passwordSecret: + artifactory: properties: - key: - type: string - name: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: type: string - optional: - type: boolean + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - - key + - url type: object - repo: + from: type: string - revision: + fromExpression: type: string - sshPrivateKeySecret: + gcs: properties: - key: + bucket: type: string - name: + key: type: string - optional: - type: boolean + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - key type: object - usernameSecret: + git: properties: - key: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: type: string - name: + revision: type: string - optional: - type: boolean + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - - key + - repo type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: - type: string - type: array - force: - type: boolean - hdfsUser: + globalName: type: string - krbCCacheSecret: + hdfs: properties: - key: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: type: string - name: + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: type: string - optional: - type: boolean required: - - key + - path type: object - krbConfigConfigMap: + http: properties: - key: - type: string - name: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: type: string - optional: - type: boolean required: - - key + - url type: object - krbKeytabSecret: + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string key: type: string - name: + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: type: string - optional: - type: boolean required: - key type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string path: type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: + raw: properties: - key: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: type: string - name: + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: type: string - optional: + insecure: type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: key: type: string - name: + region: type: string - optional: + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: type: boolean - required: - - key type: object + subPath: + type: string required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret + - name type: object - path: + type: object + transformation: + items: + properties: + expression: + type: string + required: + - expression + type: object + type: array + required: + - source + - transformation + type: object + executor: + properties: + serviceAccountName: + type: string + type: object + failFast: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: type: string - raw: + type: array + ip: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: properties: - data: + name: type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object required: - - data + - name type: object - recurseMode: - type: boolean - s3: + type: array + envFrom: + items: properties: - accessKeySecret: + configMapRef: properties: - key: - type: string name: type: string optional: type: boolean - required: - - key type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: + prefix: type: string - secretKeySecret: + secretRef: properties: - key: - type: string name: type: string optional: type: boolean - required: - - key type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: - items: - type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: + containerPort: + format: int32 + type: integer + hostIP: type: string - parameter: + hostPort: + format: int32 + type: integer + name: type: string - path: + protocol: + default: TCP type: string - supplied: - type: object + required: + - containerPort type: object - required: - - name - type: object - type: array - type: object - memoize: - properties: - cache: - properties: - configMap: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: properties: - key: - type: string - name: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: type: string - optional: + readOnlyRootFilesystem: type: boolean - required: - - key + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object type: object - required: - - configMap - type: object - key: - type: string - maxAge: - type: string - required: - - cache - - key - - maxAge - type: object - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - metrics: - properties: - prometheus: - items: - properties: - counter: - properties: - value: - type: string - required: - - value - type: object - gauge: - properties: - realtime: - type: boolean - value: - type: string - required: - - realtime - - value - type: object - help: - type: string - histogram: - properties: - buckets: - items: - type: number - type: array - value: - type: string - required: - - buckets - - value - type: object - labels: - items: + startupProbe: + properties: + exec: properties: - key: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - value: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string required: - - key - - value + - port type: object - type: array - name: - type: string - when: - type: string - required: - - help - - name - type: object - type: array - required: - - prometheus - type: object - name: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - outputs: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: type: string - revision: + name: type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object required: - - repo + - devicePath + - name type: object - globalName: - type: string - hdfs: + type: array + volumeMounts: + items: properties: - addresses: - items: - type: string - type: array - force: - type: boolean - hdfsUser: + mountPath: type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: + mountPropagation: type: string - krbServicePrincipalName: + name: type: string - krbUsername: + readOnly: + type: boolean + subPath: type: string - path: + subPathExpr: type: string required: - - addresses - - path + - mountPath + - name type: object - http: - properties: - headers: - items: + type: array + workingDir: + type: string + required: + - name + type: object + type: array + inputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: type: string - name: + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + memoize: + properties: + cache: + properties: + configMap: properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean key: type: string - region: - type: string - roleARN: + name: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: + optional: type: boolean required: - - accessKeySecret - - bucket - - endpoint - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - exitCode: - type: string - parameters: - items: - properties: - default: - type: string - enum: - items: - type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object type: object required: - - name + - configMap type: object - type: array - result: - type: string - type: object - parallelism: - format: int64 - type: integer - podSpecPatch: - type: string - priority: - format: int32 - type: integer - priorityClassName: - type: string - resource: - properties: - action: - type: string - failureCondition: - type: string - flags: - items: + key: type: string - type: array - manifest: - type: string - mergeStrategy: - type: string - setOwnerReference: - type: boolean - successCondition: - type: string - required: - - action - type: object - retryStrategy: - properties: - backoff: - properties: - duration: + maxAge: + type: string + required: + - cache + - key + - maxAge + type: object + metadata: + properties: + annotations: + additionalProperties: type: string - factor: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - maxDuration: + type: object + labels: + additionalProperties: type: string - type: object - limit: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - retryPolicy: - type: string - type: object - schedulerName: - type: string - script: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - secretKeyRef: + type: object + type: object + metrics: + properties: + prometheus: + items: + properties: + counter: + properties: + value: + type: string + required: + - value + type: object + gauge: + properties: + realtime: + type: boolean + value: + type: string + required: + - realtime + - value + type: object + help: + type: string + histogram: + properties: + buckets: + items: + type: number + type: array + value: + type: string + required: + - buckets + - value + type: object + labels: + items: properties: key: type: string - name: + value: type: string - optional: - type: boolean required: - key + - value type: object - type: object - required: - - name - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + name: + type: string + nodeSelector: + additionalProperties: type: string - lifecycle: - properties: - postStart: + type: object + outputs: + properties: + artifacts: + items: properties: - exec: + archive: properties: - command: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: items: type: string type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo type: object - httpGet: + globalName: + type: string + hdfs: properties: - host: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: type: string - httpHeaders: + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: items: properties: name: @@ -4292,2475 +11116,2987 @@ spec: - value type: object type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + url: type: string required: - - port + - url type: object - tcpSocket: + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: properties: - host: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - key type: object - type: object - preStop: - properties: - exec: + path: + type: string + raw: properties: - command: - items: - type: string - type: array + data: + type: string + required: + - data type: object - httpGet: + recurseMode: + type: boolean + s3: properties: - host: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + insecure: + type: boolean + key: type: string - required: - - port - type: object - tcpSocket: - properties: - host: + region: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean type: object + subPath: + type: string + required: + - name type: object - type: object - livenessProbe: - properties: - exec: + type: array + exitCode: + type: string + parameters: + items: properties: - command: + default: + type: string + enum: items: type: string type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name type: object - failureThreshold: - format: int32 - type: integer - httpGet: + type: array + result: + type: string + type: object + parallelism: + format: int64 + type: integer + podSpecPatch: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + resource: + properties: + action: + type: string + failureCondition: + type: string + flags: + items: + type: string + type: array + manifest: + type: string + mergeStrategy: + type: string + setOwnerReference: + type: boolean + successCondition: + type: string + required: + - action + type: object + retryStrategy: + properties: + affinity: + properties: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object + schedulerName: + type: string + script: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: properties: - host: + name: type: string - httpHeaders: - items: + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: properties: - name: + host: type: string - value: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string required: - - name - - value + - port type: object - type: array - path: + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + hostPort: + format: int32 + type: integer + name: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + protocol: + default: TCP type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - containerPort type: object - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: properties: - containerPort: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: format: int32 type: integer - hostIP: - type: string - hostPort: + successThreshold: format: int32 type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: + tcpSocket: + properties: + host: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: + type: object + requests: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + source: + type: string + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array + devicePath: + type: string + name: + type: string + required: + - devicePath + - name type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: + type: array + volumeMounts: + items: properties: - level: + mountPath: type: string - role: + mountPropagation: type: string - type: + name: type: string - user: + readOnly: + type: boolean + subPath: + type: string + subPathExpr: type: string + required: + - mountPath + - name type: object - windowsOptions: + type: array + workingDir: + type: string + required: + - image + - source + type: object + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: + name: type: string - runAsUserName: + value: type: string + required: + - name + - value type: object - type: object - source: - type: string - startupProbe: + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + sidecars: + items: properties: - exec: - properties: - command: - items: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: properties: name: type: string - value: + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: type: string - required: - - name - - value + optional: + type: boolean type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + livenessProbe: properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - workingDir: - type: string - required: - - image - - source - type: object - securityContext: - properties: - fsGroup: - format: int64 - type: integer - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - serviceAccountName: - type: string - sidecars: - items: - properties: - args: - items: - type: string - type: array - command: - items: + mirrorVolumeMounts: + type: boolean + name: type: string - type: array - env: - items: + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: properties: - name: - type: string - value: - type: string - valueFrom: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port type: object - required: - - name + timeoutSeconds: + format: int32 + type: integer type: object - type: array - envFrom: - items: + resources: properties: - configMapRef: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: properties: - name: - type: string - optional: - type: boolean + add: + items: + type: string + type: array + drop: + items: + type: string + type: array type: object - prefix: + privileged: + type: boolean + procMount: type: string - secretRef: + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - name: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: type: string - optional: - type: boolean type: object type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: + startupProbe: + properties: + exec: + properties: + command: + items: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - type: array + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name type: object - failureThreshold: - format: int32 - type: integer - httpGet: + type: array + volumeMounts: + items: properties: - host: + mountPath: type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + mountPropagation: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: type: string required: - - port + - mountPath + - name type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + type: array + workingDir: + type: string + required: + - name + type: object + type: array + steps: + items: + type: array + type: array + suspend: + properties: + duration: + type: string + type: object + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: properties: - host: + key: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true + name: + type: string + optional: + type: boolean required: - - port + - key type: object - timeoutSeconds: - format: int32 - type: integer type: object - mirrorVolumeMounts: - type: boolean - name: - type: string - ports: - items: + type: object + timeout: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: properties: - containerPort: - format: int32 - type: integer - hostIP: + fsType: type: string - hostPort: + partition: format: int32 type: integer - name: + readOnly: + type: boolean + volumeID: type: string - protocol: + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: type: string + kind: + type: string + readOnly: + type: boolean required: - - containerPort + - diskName + - diskURI type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: properties: - name: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: type: string - value: + volumeMode: + type: string + volumeName: type: string - required: - - name - - value type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + type: array + wwids: + items: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: properties: - devicePath: + datasetName: type: string - name: + datasetUUID: type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean required: - - devicePath - - name + - pdName type: object - type: array - volumeMounts: - items: + gitRepo: properties: - mountPath: + directory: type: string - mountPropagation: + repository: type: string - name: + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: type: string readOnly: type: boolean - subPath: + required: + - endpoints + - path + type: object + hostPath: + properties: + path: type: string - subPathExpr: + type: type: string required: - - mountPath - - name + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal type: object - type: array - workingDir: - type: string - required: - - name - type: object - type: array - steps: - items: - type: array - type: array - suspend: - properties: - duration: - type: string - type: object - synchronization: - properties: - mutex: - properties: name: type: string - type: object - semaphore: - properties: - configMapKeyRef: + nfs: properties: - key: + path: type: string - name: + readOnly: + type: boolean + server: type: string - optional: + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: type: boolean required: - - key + - claimName type: object - type: object - type: object - template: - type: string - templateRef: - properties: - clusterScope: - type: boolean - name: - type: string - runtimeResolution: - type: boolean - template: - type: string - type: object - timeout: - type: string - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: type: string - type: object - readOnly: - type: boolean - volumeAttributes: - additionalProperties: + type: array + pool: type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + readOnly: + type: boolean + secretRef: properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: + name: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + user: type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object + name: + type: string type: object - type: array - required: - - sources - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + type: array + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + ttlStrategy: + properties: + secondsAfterCompletion: + format: int32 + type: integer + secondsAfterFailure: + format: int32 + type: integer + secondsAfterSuccess: + format: int32 + type: integer + type: object + volumeClaimGC: + properties: + strategy: + type: string + type: object + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: properties: - fsType: - type: string - image: - type: string - keyring: + apiGroup: type: string - monitors: - items: - type: string - type: array - pool: + kind: type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - user: + name: type: string required: - - image - - monitors + - kind + - name type: object - scaleIO: + resources: properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system type: object - secret: + selector: properties: - defaultMode: - format: int32 - type: integer - items: + matchExpressions: items: properties: key: type: string - mode: - format: int32 - type: integer - path: + operator: type: string + values: + items: + type: string + type: array required: - key - - path + - operator type: object type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string + matchLabels: + additionalProperties: + type: string type: object - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath type: object - required: - - name - type: object - type: array - required: - - name - type: object - type: array - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - ttlSecondsAfterFinished: - format: int32 - type: integer - ttlStrategy: - properties: - secondsAfterCompletion: - format: int32 - type: integer - secondsAfterFailure: - format: int32 - type: integer - secondsAfterSuccess: - format: int32 - type: integer - type: object - volumeClaimGC: - properties: - strategy: - type: string - type: object - volumeClaimTemplates: - items: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - accessModes: - items: + storageClassName: type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: + volumeMode: type: string - type: array - capacity: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - phase: - type: string - type: object - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: + volumeName: type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: + type: object + status: + properties: + accessModes: + items: type: string - type: object - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: + type: array + capacity: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + phase: + type: string + type: object + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: type: string - type: object - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: properties: - key: - type: string - mode: - format: int32 - type: integer - path: + name: type: string - required: - - key - - path type: object - type: array - name: - type: string - optional: - type: boolean - type: object - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - readOnly: - type: boolean - volumeAttributes: - additionalProperties: + user: type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: + name: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: + volumeID: type: string - type: array - wwids: + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + optional: + type: boolean + type: object + csi: + properties: + driver: type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: + fsType: type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean + metadata: type: object - downwardAPI: + spec: properties: - items: + accessModes: items: - properties: - fieldRef: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: properties: - apiVersion: + key: type: string - fieldPath: + operator: type: string + values: + items: + type: string + type: array required: - - fieldPath + - key + - operator type: object - mode: - format: int32 - type: integer - path: + type: array + matchLabels: + additionalProperties: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path - type: object - type: array + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string type: object - secret: - properties: - items: + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - required: - - sources - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: type: string - type: object - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: properties: - key: + name: type: string - mode: - format: int32 - type: integer - path: + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: type: string - required: - - key - - path type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + workflowTemplateRef: + properties: + clusterScope: + type: boolean + name: + type: string type: object - type: array - workflowTemplateRef: + type: object + required: + - schedule + - workflowSpec + type: object + status: + properties: + active: + items: properties: - clusterScope: - type: boolean + apiVersion: + type: string + fieldPath: + type: string + kind: + type: string name: type: string + namespace: + type: string + resourceVersion: + type: string + uid: + type: string type: object - type: object - required: - - schedule - - workflowSpec - type: object - status: - properties: - active: - items: - properties: - apiVersion: - type: string - fieldPath: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - resourceVersion: - type: string - uid: - type: string - type: object - type: array - conditions: - items: - properties: - message: - type: string - status: - type: string - type: - type: string - type: object - type: array - lastScheduledTime: - format: date-time - type: string - required: - - active - - conditions - - lastScheduledTime - type: object - required: - - metadata - - spec - type: object - version: v1alpha1 - versions: - - name: v1alpha1 + type: array + conditions: + items: + properties: + message: + type: string + status: + type: string + type: + type: string + type: object + type: array + lastScheduledTime: + format: date-time + type: string + required: + - active + - conditions + - lastScheduledTime + type: object + required: + - metadata + - spec + type: object served: true storage: true diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_workfloweventbindings.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_workfloweventbindings.yaml index bd0e2e0fb3..11bef39e4d 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_workfloweventbindings.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_workfloweventbindings.yaml @@ -1,5 +1,5 @@ # This is an auto-generated file. DO NOT EDIT -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workfloweventbindings.argoproj.io @@ -13,387 +13,400 @@ spec: - wfeb singular: workfloweventbinding scope: Namespaced - validation: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - event: - properties: - selector: - type: string - required: - - selector - type: object - submit: - properties: - arguments: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + event: + properties: + selector: + type: string + required: + - selector + type: object + submit: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: - items: + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: type: string - supplied: - type: object - type: object - required: - - name - type: object - type: array - type: object - workflowTemplateRef: - properties: - clusterScope: - type: boolean - name: - type: string - type: object - required: - - workflowTemplateRef - type: object - required: - - event - type: object - required: - - metadata - - spec - type: object - version: v1alpha1 - versions: - - name: v1alpha1 + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + metadata: + type: object + workflowTemplateRef: + properties: + clusterScope: + type: boolean + name: + type: string + type: object + required: + - workflowTemplateRef + type: object + required: + - event + type: object + required: + - metadata + - spec + type: object served: true storage: true diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_workflows.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_workflows.yaml index e64254d664..dbfe8979af 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_workflows.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_workflows.yaml @@ -1,19 +1,9 @@ # This is an auto-generated file. DO NOT EDIT -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workflows.argoproj.io spec: - additionalPrinterColumns: - - JSONPath: .status.phase - description: Status of the workflow - name: Status - type: string - - JSONPath: .status.startedAt - description: When the workflow was started - format: date-time - name: Age - type: date group: argoproj.io names: kind: Workflow @@ -23,908 +13,980 @@ spec: - wf singular: workflow scope: Namespaced - subresources: {} - validation: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - activeDeadlineSeconds: - format: int64 - type: integer - affinity: - properties: - nodeAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + versions: + - additionalPrinterColumns: + - description: Status of the workflow + jsonPath: .status.phase + name: Status + type: string + - description: When the workflow was started + format: date-time + jsonPath: .status.startedAt + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + operator: type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - weight: - format: int32 - type: integer - required: - - preference - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + operator: type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - type: array - required: - - nodeSelectorTerms - type: object - type: object - podAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: + values: + items: type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: array + required: + - key + - operator type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: + nodeSelectorTerms: items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - operator: + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: array + required: + - key + - operator type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer + type: array + type: object + type: array required: - - podAffinityTerm - - weight + - nodeSelectorTerms type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: properties: - key: - type: string - operator: - type: string - values: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object type: array - required: - - key - - operator + matchLabels: + additionalProperties: + type: string + type: object type: object - type: array - matchLabels: - additionalProperties: + namespaces: + items: + type: string + type: array + topologyKey: type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - type: object - type: object - arguments: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: + type: array + topologyKey: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: properties: - name: - type: string - value: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: type: string required: - - name - - value + - topologyKey type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: items: - type: string + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object - required: - - name - type: object - type: array - type: object - artifactRepositoryRef: - properties: - configMap: - type: string - key: - type: string - type: object - automountServiceAccountToken: - type: boolean - dnsConfig: - properties: - nameservers: - items: - type: string - type: array - options: - items: - properties: - name: - type: string - value: - type: string type: object - type: array - searches: - items: - type: string - type: array - type: object - dnsPolicy: - type: string - entrypoint: - type: string - executor: - properties: - serviceAccountName: - type: string - type: object - hostAliases: - items: - properties: - hostnames: - items: - type: string - type: array - ip: - type: string type: object - type: array - hostNetwork: - type: boolean - imagePullSecrets: - items: + arguments: properties: - name: - type: string - type: object - type: array - metrics: - properties: - prometheus: - items: - properties: - counter: - properties: - value: - type: string - required: - - value - type: object - gauge: - properties: - realtime: - type: boolean - value: - type: string - required: - - realtime - - value - type: object - help: - type: string - histogram: - properties: - buckets: - items: - type: number - type: array - value: - type: string - required: - - buckets - - value - type: object - labels: - items: + artifacts: + items: + properties: + archive: properties: - key: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: type: string - value: + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - key - - value type: object - type: array - name: - type: string - when: - type: string - required: - - help - - name - type: object - type: array - required: - - prometheus - type: object - nodeSelector: - additionalProperties: - type: string - type: object - onExit: - type: string - parallelism: - format: int64 - type: integer - podDisruptionBudget: - properties: - maxUnavailable: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - minAvailable: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name type: object - type: object - type: object - podGC: - properties: - strategy: - type: string - type: object - podPriority: - format: int32 - type: integer - podPriorityClassName: - type: string - podSpecPatch: - type: string - priority: - format: int32 - type: integer - retryStrategy: - properties: - backoff: - properties: - duration: + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + artifactRepositoryRef: + properties: + configMap: + type: string + key: + type: string + type: object + automountServiceAccountToken: + type: boolean + dnsConfig: + properties: + nameservers: + items: type: string - factor: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - maxDuration: + type: array + options: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + searches: + items: type: string - type: object - limit: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - retryPolicy: - type: string - type: object - schedulerName: - type: string - securityContext: - properties: - fsGroup: - format: int64 - type: integer - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: + type: array + type: object + dnsPolicy: + type: string + entrypoint: + type: string + executor: + properties: + serviceAccountName: + type: string + type: object + hostAliases: + items: properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - sysctls: - items: - properties: - name: - type: string - value: + hostnames: + items: type: string - required: - - name - - value - type: object - type: array - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: + type: array + ip: type: string type: object - type: object - serviceAccountName: - type: string - shutdown: - type: string - suspend: - type: boolean - synchronization: - properties: - mutex: + type: array + hostNetwork: + type: boolean + imagePullSecrets: + items: properties: name: type: string type: object - semaphore: - properties: - configMapKeyRef: + type: array + metrics: + properties: + prometheus: + items: properties: - key: + counter: + properties: + value: + type: string + required: + - value + type: object + gauge: + properties: + realtime: + type: boolean + value: + type: string + required: + - realtime + - value + type: object + help: type: string + histogram: + properties: + buckets: + items: + type: number + type: array + value: + type: string + required: + - buckets + - value + type: object + labels: + items: + properties: + key: + type: string + value: + type: string + required: + - key + - value + type: object + type: array name: type: string - optional: - type: boolean + when: + type: string required: - - key + - help + - name type: object - type: object - type: object - templates: - items: + type: array + required: + - prometheus + type: object + nodeSelector: + additionalProperties: + type: string + type: object + onExit: + type: string + parallelism: + format: int64 + type: integer + podDisruptionBudget: + properties: + maxUnavailable: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + minAvailable: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + podGC: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + strategy: + type: string + type: object + podMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + podPriority: + format: int32 + type: integer + podPriorityClassName: + type: string + podSpecPatch: + type: string + priority: + format: int32 + type: integer + retryStrategy: + properties: + affinity: + properties: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object + schedulerName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + shutdown: + type: string + suspend: + type: boolean + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + type: object + templateDefaults: properties: activeDeadlineSeconds: anyOf: @@ -1244,7 +1306,6 @@ spec: - key type: object required: - - bucket - key type: object git: @@ -1252,6 +1313,8 @@ spec: depth: format: int64 type: integer + disableSubmodules: + type: boolean fetch: items: type: string @@ -1350,7 +1413,6 @@ spec: path: type: string required: - - addresses - path type: object http: @@ -1387,10 +1449,21 @@ spec: type: object bucket: type: string + createBucketIfNotPresent: + type: boolean endpoint: type: string key: type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object secretKeySecret: properties: key: @@ -1402,12 +1475,10 @@ spec: required: - key type: object + securityToken: + type: string required: - - accessKeySecret - - bucket - - endpoint - key - - secretKeySecret type: object raw: properties: @@ -1431,6 +1502,11 @@ spec: type: object bucket: type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object endpoint: type: string insecure: @@ -1454,37 +1530,30 @@ spec: type: object useSDKCreds: type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret type: object type: object - arguments: + automountServiceAccountToken: + type: boolean + container: properties: - artifacts: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: items: properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: + name: + type: string + value: + type: string + valueFrom: properties: - passwordSecret: + configMapKeyRef: properties: key: type: string @@ -1495,57 +1564,31 @@ spec: required: - key type: object - url: - type: string - usernameSecret: + fieldRef: properties: - key: + apiVersion: type: string - name: + fieldPath: type: string - optional: - type: boolean required: - - key + - fieldPath type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: + resourceFieldRef: properties: - key: + containerName: type: string - name: + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: type: string - optional: - type: boolean required: - - key + - resource type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: + secretKeyRef: properties: key: type: string @@ -1556,764 +1599,1036 @@ spec: required: - key type: object - repo: - type: string - revision: + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo + optional: + type: boolean type: object - globalName: + prefix: type: string - hdfs: + secretRef: properties: - addresses: - items: - type: string - type: array - force: - type: boolean - hdfsUser: + name: type: string - krbCCacheSecret: - properties: - key: + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: type: string - name: + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: properties: - key: - type: string name: type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: + value: type: string - optional: - type: boolean required: - - key + - name + - value type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: - type: string - required: - - url - type: object - mode: + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: format: int32 type: integer name: type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: properties: - key: - type: string name: type: string - optional: - type: boolean + value: + type: string required: - - key + - name + - value type: object - bucket: + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: type: string - endpoint: + type: array + drop: + items: type: string - key: + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: type: string - secretKeySecret: + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: properties: - key: - type: string name: type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: + value: type: string - optional: - type: boolean required: - - key + - name + - value type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: items: properties: - default: - type: string - enum: - items: - type: string - type: array - globalName: + devicePath: type: string name: type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object required: + - devicePath - name type: object type: array - type: object - automountServiceAccountToken: - type: boolean - container: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: + volumeMounts: items: properties: + mountPath: + type: string + mountPropagation: + type: string name: type: string - value: + readOnly: + type: boolean + subPath: + type: string + subPathExpr: type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - type: object required: + - mountPath - name type: object type: array - envFrom: + workingDir: + type: string + required: + - name + type: object + containerSet: + properties: + containers: items: properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + dependencies: + items: + type: string + type: array + env: + items: properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + name: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + value: type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object required: - - port + - name type: object - tcpSocket: + type: array + envFrom: + items: properties: - host: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: properties: - name: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - value: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string required: - - name - - value + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object name: type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: properties: - name: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: type: string - value: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string required: - - name - - value + - port type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - name: + level: type: string - value: + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: type: string required: - - name - - value + - type type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object type: array volumeMounts: items: @@ -2335,10 +2650,8 @@ spec: - name type: object type: array - workingDir: - type: string required: - - image + - containers type: object daemon: type: boolean @@ -2402,6 +2715,8 @@ spec: type: object from: type: string + fromExpression: + type: string gcs: properties: bucket: @@ -2420,7 +2735,6 @@ spec: - key type: object required: - - bucket - key type: object git: @@ -2428,6 +2742,8 @@ spec: depth: format: int64 type: integer + disableSubmodules: + type: boolean fetch: items: type: string @@ -2528,7 +2844,6 @@ spec: path: type: string required: - - addresses - path type: object http: @@ -2572,10 +2887,21 @@ spec: type: object bucket: type: string + createBucketIfNotPresent: + type: boolean endpoint: type: string key: type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object secretKeySecret: properties: key: @@ -2587,12 +2913,10 @@ spec: required: - key type: object + securityToken: + type: string required: - - accessKeySecret - - bucket - - endpoint - key - - secretKeySecret type: object path: type: string @@ -2620,6 +2944,11 @@ spec: type: object bucket: type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object endpoint: type: string insecure: @@ -2643,12 +2972,6 @@ spec: type: object useSDKCreds: type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret type: object subPath: type: string @@ -2677,6 +3000,8 @@ spec: type: string event: type: string + expression: + type: string jqFilter: type: string jsonPath: @@ -2706,1241 +3031,982 @@ spec: type: array depends: type: string - name: - type: string - onExit: - type: string - template: - type: string - templateRef: - properties: - clusterScope: - type: boolean - name: - type: string - runtimeResolution: - type: boolean - template: - type: string - type: object - when: - type: string - withItems: - items: - type: object - type: array - withParam: - type: string - withSequence: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - end: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - format: - type: string - start: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - type: object - required: - - name - type: object - type: array - required: - - tasks - type: object - executor: - properties: - serviceAccountName: - type: string - type: object - hostAliases: - items: - properties: - hostnames: - items: - type: string - type: array - ip: - type: string - type: object - type: array - initContainers: - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: + hooks: + additionalProperties: properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - resourceFieldRef: + arguments: properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array type: object - type: object - required: - - name - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: + template: type: string - optional: - type: boolean + required: + - template type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean + type: object + name: + type: string + onExit: + type: string + template: + type: string + templateRef: + properties: + clusterScope: + type: boolean + name: + type: string + template: + type: string + type: object + when: + type: string + withItems: + items: type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: + type: array + withParam: + type: string + withSequence: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: + count: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + end: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + format: type: string - port: + start: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true - required: - - port type: object - timeoutSeconds: - format: int32 - type: integer + required: + - name type: object - mirrorVolumeMounts: - type: boolean - name: - type: string - ports: - items: + type: array + required: + - tasks + type: object + data: + properties: + source: + properties: + artifactPaths: properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: type: string - protocol: + fromExpression: type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: + gcs: + properties: + bucket: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + key: + type: string + serviceAccountKeySecret: properties: - name: + key: type: string - value: + name: type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: + revision: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + sshPrivateKeySecret: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: type: string + name: + type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: + required: + - repo + type: object + globalName: type: string - required: - - mountPath - - name - type: object - type: array - workingDir: - type: string - required: - - name - type: object - type: array - inputs: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: + hdfs: + properties: + addresses: + items: type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: + type: array + force: + type: boolean + hdfsUser: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + krbCCacheSecret: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: type: string + name: + type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: - items: - type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object - required: - - name - type: object - type: array - type: object - memoize: - properties: - cache: - properties: - configMap: - properties: - key: - type: string + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer name: type: string optional: type: boolean - required: - - key - type: object - required: - - configMap - type: object - key: - type: string - maxAge: - type: string - required: - - cache - - key - - maxAge - type: object - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - metrics: - properties: - prometheus: - items: - properties: - counter: - properties: - value: - type: string - required: - - value - type: object - gauge: - properties: - realtime: - type: boolean - value: - type: string - required: - - realtime - - value - type: object - help: - type: string - histogram: - properties: - buckets: - items: - type: number - type: array - value: - type: string - required: - - buckets - - value - type: object - labels: - items: + oss: properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string key: type: string - value: + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: type: string required: - key - - value type: object - type: array - name: - type: string - when: - type: string - required: - - help - - name - type: object - type: array - required: - - prometheus - type: object - name: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - outputs: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: object + transformation: + items: + properties: + expression: + type: string + required: + - expression + type: object + type: array + required: + - source + - transformation + type: object + executor: + properties: + serviceAccountName: + type: string + type: object + failFast: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + command: + items: + type: string + type: array type: object - url: - type: string - usernameSecret: + httpGet: properties: - key: + host: type: string - name: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - optional: - type: boolean required: - - key + - port type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object - required: - - bucket - - key type: object - git: + preStop: properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: + exec: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + command: + items: + type: string + type: array type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: + httpGet: properties: - key: + host: type: string - name: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - optional: - type: boolean required: - - key + - port type: object - usernameSecret: + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object - required: - - repo type: object - globalName: - type: string - hdfs: + type: object + livenessProbe: + properties: + exec: properties: - addresses: + command: items: type: string type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path type: object - http: + failureThreshold: + format: int32 + type: integer + httpGet: properties: - headers: + host: + type: string + httpHeaders: items: properties: name: @@ -3952,268 +4018,363 @@ spec: - value type: object type: array - url: + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string required: - - url + - port type: object - mode: + initialDelaySeconds: format: int32 type: integer - name: - type: string - optional: - type: boolean - oss: + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: + host: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret + - port type: object - path: - type: string - raw: + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: properties: - data: - type: string - required: - - data + command: + items: + type: string + type: array type: object - recurseMode: - type: boolean - s3: + failureThreshold: + format: int32 + type: integer + httpGet: properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: + host: type: string - insecure: - type: boolean - key: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - region: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - roleARN: + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret + - port type: object - subPath: - type: string - required: - - name + timeoutSeconds: + format: int32 + type: integer type: object - type: array - exitCode: - type: string - parameters: - items: + resources: properties: - default: - type: string - enum: - items: - type: string - type: array - globalName: - type: string - name: - type: string - value: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: type: string - valueFrom: + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - default: + level: type: string - event: + role: type: string - jqFilter: + type: type: string - jsonPath: + user: type: string - parameter: + type: object + seccompProfile: + properties: + localhostProfile: type: string - path: + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: type: string - supplied: - type: object type: object - required: - - name type: object - type: array - result: - type: string - type: object - parallelism: - format: int64 - type: integer - podSpecPatch: - type: string - priority: - format: int32 - type: integer - priorityClassName: - type: string - resource: - properties: - action: - type: string - failureCondition: - type: string - flags: - items: - type: string - type: array - manifest: - type: string - mergeStrategy: - type: string - setOwnerReference: - type: boolean - successCondition: - type: string - required: - - action - type: object - retryStrategy: - properties: - backoff: - properties: - duration: - type: string - factor: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - maxDuration: - type: string - type: object - limit: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - retryPolicy: - type: string - type: object - schedulerName: - type: string - script: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: + startupProbe: properties: - name: - type: string - value: - type: string - valueFrom: + exec: properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - resourceFieldRef: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + inputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: properties: - containerName: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: + name: type: string + optional: + type: boolean required: - - resource + - key type: object - secretKeyRef: + url: + type: string + usernameSecret: properties: key: type: string @@ -4224,839 +4385,603 @@ spec: required: - key type: object + required: + - url type: object - required: - - name - type: object - type: array - envFrom: - items: - properties: - configMapRef: + from: + type: string + fromExpression: + type: string + gcs: properties: - name: + bucket: type: string - optional: + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo type: object - prefix: + globalName: type: string - secretRef: + hdfs: properties: - name: - type: string - optional: + addresses: + items: + type: string + type: array + force: type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: + hdfsUser: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + krbCCacheSecret: properties: - name: + key: type: string - value: + name: type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + krbConfigConfigMap: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: type: string + name: + type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + krbRealm: type: string - type: array - drop: - items: + krbServicePrincipalName: type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - source: - type: string - startupProbe: - properties: - exec: - properties: - command: - items: + krbUsername: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: type: string + name: + type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: + securityToken: + type: string + required: + - key + type: object + path: type: string - readOnly: + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: type: boolean - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - workingDir: - type: string - required: - - image - - source - type: object - securityContext: - properties: - fsGroup: - format: int64 - type: integer - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - supplementalGroups: - items: - format: int64 - type: integer + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object type: array - sysctls: + parameters: items: properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string name: type: string value: type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object required: - name - - value type: object type: array - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object type: object - serviceAccountName: - type: string - sidecars: - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: + memoize: + properties: + cache: + properties: + configMap: properties: - name: + key: type: string - value: + name: type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - type: object + optional: + type: boolean required: - - name - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object + - key type: object - type: array - image: + required: + - configMap + type: object + key: + type: string + maxAge: + type: string + required: + - cache + - key + - maxAge + type: object + metadata: + properties: + annotations: + additionalProperties: type: string - imagePullPolicy: + type: object + labels: + additionalProperties: type: string - lifecycle: + type: object + type: object + metrics: + properties: + prometheus: + items: properties: - postStart: + counter: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + value: + type: string + required: + - value + type: object + gauge: + properties: + realtime: + type: boolean + value: + type: string + required: + - realtime + - value + type: object + help: + type: string + histogram: + properties: + buckets: + items: + type: number + type: array + value: + type: string + required: + - buckets + - value + type: object + labels: + items: + properties: + key: + type: string + value: + type: string + required: + - key + - value + type: object + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + outputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + name: type: string + optional: + type: boolean required: - - port + - key type: object - tcpSocket: + url: + type: string + usernameSecret: properties: - host: + key: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true + name: + type: string + optional: + type: boolean required: - - port + - key type: object + required: + - url type: object - preStop: + from: + type: string + fromExpression: + type: string + gcs: properties: - exec: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: properties: - command: - items: - type: string - type: array + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key type: object - httpGet: + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: properties: - host: + key: type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + name: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - port + - key type: object - tcpSocket: + usernameSecret: properties: - host: + key: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true + name: + type: string + optional: + type: boolean required: - - port + - key type: object + required: + - repo type: object - type: object - livenessProbe: - properties: - exec: + globalName: + type: string + hdfs: properties: - command: + addresses: items: type: string type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: + force: + type: boolean + hdfsUser: type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + krbServicePrincipalName: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + krbUsername: + type: string + path: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - mirrorVolumeMounts: - type: boolean - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array + - path type: object - failureThreshold: - format: int32 - type: integer - httpGet: + http: properties: - host: - type: string - httpHeaders: + headers: items: properties: name: @@ -5068,4112 +4993,2964 @@ spec: - value type: object type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + url: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - url type: object - timeoutSeconds: + mode: format: int32 type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: + name: type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: + optional: type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: + oss: properties: - level: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: type: string - role: + createBucketIfNotPresent: + type: boolean + endpoint: type: string - type: + key: type: string - user: + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: type: string + required: + - key type: object - windowsOptions: + path: + type: string + raw: properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: + data: type: string + required: + - data type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + recurseMode: + type: boolean + s3: properties: - host: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + insecure: + type: boolean + key: type: string - required: - - port + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + subPath: + type: string + required: + - name + type: object + type: array + exitCode: + type: string + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: properties: - host: + default: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object type: object - timeoutSeconds: - format: int32 - type: integer + required: + - name type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - workingDir: - type: string - required: - - name - type: object - type: array - steps: - items: - type: array - type: array - suspend: + type: array + result: + type: string + type: object + parallelism: + format: int64 + type: integer + podSpecPatch: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + resource: properties: - duration: + action: + type: string + failureCondition: + type: string + flags: + items: + type: string + type: array + manifest: type: string + mergeStrategy: + type: string + setOwnerReference: + type: boolean + successCondition: + type: string + required: + - action type: object - synchronization: + retryStrategy: properties: - mutex: + affinity: properties: - name: - type: string + nodeAntiAffinity: + type: object type: object - semaphore: + backoff: properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string type: object - template: + schedulerName: type: string - templateRef: + script: properties: - clusterScope: - type: boolean - name: - type: string - runtimeResolution: - type: boolean - template: - type: string - type: object - timeout: - type: string - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: + args: + items: type: string - tolerationSeconds: - format: int64 - type: integer - value: + type: array + command: + items: type: string - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: + type: array + env: + items: properties: - readOnly: - type: boolean - secretName: + name: type: string - shareName: + value: type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object required: - - secretName - - shareName + - name type: object - cephfs: + type: array + envFrom: + items: properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: + configMapRef: properties: name: type: string + optional: + type: boolean type: object - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: + prefix: type: string - readOnly: - type: boolean secretRef: properties: name: type: string + optional: + type: boolean type: object - volumeID: - type: string - required: - - volumeID type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: properties: - key: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - mode: - format: int32 - type: integer + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array path: type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string required: - - key - - path + - port type: object - type: array - name: - type: string - optional: - type: boolean - type: object - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + tcpSocket: properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: + host: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - path + - port type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: type: string - type: array - wwids: - items: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: properties: - fsType: - type: string - partition: + containerPort: format: int32 type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: + hostIP: type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: + hostPort: + format: int32 + type: integer + name: type: string - type: + protocol: + default: TCP type: string required: - - path + - containerPort type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: type: string - type: object - targetPortal: + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + source: + type: string + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: type: string required: - - iqn - - lun - - targetPortal + - devicePath + - name type: object - name: - type: string - nfs: + type: array + volumeMounts: + items: properties: - path: + mountPath: + type: string + mountPropagation: + type: string + name: type: string readOnly: type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: + subPath: type: string - pdID: + subPathExpr: type: string required: - - pdID + - mountPath + - name type: object - portworxVolume: + type: array + workingDir: + type: string + required: + - name + - source + type: object + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: properties: - fsType: + name: type: string - readOnly: - type: boolean - volumeID: + value: type: string required: - - volumeID + - name + - value type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + sidecars: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: properties: - configMap: + configMapKeyRef: properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array + key: + type: string name: type: string optional: type: boolean + required: + - key type: object - downwardAPI: + fieldRef: properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path - type: object - type: array + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath type: object - secret: + resourceFieldRef: properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: + containerName: type: string - optional: - type: boolean + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource type: object - serviceAccountToken: + secretKeyRef: properties: - audience: + key: type: string - expirationSeconds: - format: int64 - type: integer - path: + name: type: string + optional: + type: boolean required: - - path + - key type: object type: object - type: array - required: - - sources - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: properties: - name: - type: string + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object type: object - user: - type: string - required: - - image - - monitors type: object - scaleIO: + livenessProbe: properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: + exec: properties: - name: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string + required: + - port type: object - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: + initialDelaySeconds: format: int32 type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - name: + host: type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port type: object - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath + timeoutSeconds: + format: int32 + type: integer type: object - required: - - name - type: object - type: array - required: - - name - type: object - type: array - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - ttlSecondsAfterFinished: - format: int32 - type: integer - ttlStrategy: - properties: - secondsAfterCompletion: - format: int32 - type: integer - secondsAfterFailure: - format: int32 - type: integer - secondsAfterSuccess: - format: int32 - type: integer - type: object - volumeClaimGC: - properties: - strategy: - type: string - type: object - volumeClaimTemplates: - items: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - accessModes: - items: + mirrorVolumeMounts: + type: boolean + name: type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort type: object - type: object - selector: - properties: - matchExpressions: - items: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: properties: - key: - type: string - operator: - type: string - values: + command: items: type: string type: array - required: - - key - - operator type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: - type: string - type: array - capacity: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - phase: - type: string - type: object - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: + failureThreshold: format: int32 type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: + httpGet: properties: - apiVersion: + host: type: string - fieldPath: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - required: - - fieldPath - type: object - mode: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: format: int32 type: integer - path: - type: string - resourceFieldRef: + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - containerName: + host: type: string - divisor: + port: anyOf: - type: integer - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - resource: + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: type: string required: - - resource + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string type: object - required: - - path type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: + startupProbe: properties: - configMap: + exec: properties: - items: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - mode: - format: int32 - type: integer - path: + value: type: string required: - - key - - path + - name + - value type: object type: array - name: + path: type: string - optional: - type: boolean - type: object - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - optional: - type: boolean + required: + - port type: object - serviceAccountToken: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: + host: type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - path + - port type: object + timeoutSeconds: + format: int32 + type: integer type: object - type: array - required: - - sources - type: object - quobyte: + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + steps: + items: + type: array + type: array + suspend: properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: + duration: type: string - required: - - registry - - volume type: object - rbd: + synchronization: properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: + mutex: properties: name: type: string type: object - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: + semaphore: properties: - name: - type: string + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object type: object - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + timeout: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: properties: - key: + fsType: type: string - mode: + partition: format: int32 type: integer - path: + readOnly: + type: boolean + volumeID: type: string required: - - key - - path + - volumeID type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name - type: object - type: array - workflowTemplateRef: - properties: - clusterScope: - type: boolean - name: - type: string - type: object - type: object - status: - properties: - compressedNodes: - type: string - conditions: - items: - properties: - message: - type: string - status: - type: string - type: - type: string - type: object - type: array - estimatedDuration: - type: integer - finishedAt: - format: date-time - type: string - message: - type: string - nodes: - additionalProperties: - properties: - boundaryID: - type: string - children: - items: - type: string - type: array - daemoned: - type: boolean - displayName: - type: string - estimatedDuration: - type: integer - finishedAt: - format: date-time - type: string - hostNodeName: - type: string - id: - type: string - inputs: - properties: - artifacts: - items: + azureDisk: properties: - archive: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object + name: + type: string type: object - archiveLogs: + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: type: boolean - artifactory: + secretRef: properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: + name: type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url type: object - from: + volumeID: type: string - gcs: + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: properties: - bucket: - type: string - key: + name: type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: + spec: properties: - key: - type: string - name: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: + volumeMode: type: string - name: + volumeName: type: string - optional: - type: boolean - required: - - key type: object required: - - repo + - spec type: object - globalName: + type: object + fc: + properties: + fsType: type: string - hdfs: - properties: - addresses: - items: - type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: - type: string - required: - - url - type: object - mode: + lun: format: int32 type: integer - name: - type: string - optional: + readOnly: type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: type: string - raw: - properties: - data: - type: string - required: - - data + fsType: + type: string + options: + additionalProperties: + type: string type: object - recurseMode: + readOnly: type: boolean - s3: + secretRef: properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: + name: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret type: object - subPath: - type: string required: - - name + - driver type: object - type: array - parameters: - items: + flocker: properties: - default: + datasetName: type: string - enum: - items: - type: string - type: array - globalName: + datasetUUID: type: string - name: + type: object + gcePersistentDisk: + properties: + fsType: type: string - value: + partition: + format: int32 + type: integer + pdName: type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object + readOnly: + type: boolean required: - - name + - pdName type: object - type: array - type: object - memoizationStatus: - properties: - cacheName: - type: string - hit: - type: boolean - key: - type: string - required: - - cacheName - - hit - - key - type: object - message: - type: string - name: - type: string - outboundNodes: - items: - type: string - type: array - outputs: - properties: - artifacts: - items: + gitRepo: properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: + required: + - endpoints + - path + type: object + hostPath: + properties: + path: type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: + name: type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo type: object - globalName: + targetPortal: type: string - hdfs: - properties: - addresses: - items: - type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: path: type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: + readOnly: type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: + server: type: string required: - - name + - path + - server type: object - type: array - exitCode: - type: string - parameters: - items: + persistentVolumeClaim: properties: - default: + claimName: type: string - enum: - items: - type: string - type: array - globalName: + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: type: string - name: + pdID: type: string - value: + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object required: - - name + - volumeID type: object - type: array - result: - type: string - type: object - phase: - type: string - podIP: - type: string - progress: - type: string - resourcesDuration: - additionalProperties: - format: int64 - type: integer - type: object - startedAt: - format: date-time - type: string - storedTemplateID: - type: string - synchronizationStatus: - properties: - waiting: - type: string - type: object - templateName: - type: string - templateRef: - properties: - clusterScope: - type: boolean - name: - type: string - runtimeResolution: - type: boolean - template: - type: string - type: object - templateScope: - type: string - type: - type: string - workflowTemplateName: - type: string - required: - - id - - name - - type - type: object - type: object - offloadNodeStatusVersion: - type: string - outputs: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: + readOnly: + type: boolean + registry: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: properties: name: type: string - value: - type: string - required: - - name - - value type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - exitCode: - type: string - parameters: - items: - properties: - default: - type: string - enum: - items: - type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object - required: - - name - type: object - type: array - result: - type: string - type: object - persistentVolumeClaims: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: + user: type: string required: - - key - - path + - image + - monitors type: object - type: array - name: - type: string - optional: - type: boolean - type: object - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + scaleIO: properties: - fieldRef: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: properties: - apiVersion: + name: type: string - fieldPath: - type: string - required: - - fieldPath type: object - mode: + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: format: int32 type: integer - path: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: type: string - resourceFieldRef: + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: + name: type: string - required: - - resource type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string required: - - path + - volumePath type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: + required: + - name + type: object + type: array + type: object + templates: + items: + properties: + activeDeadlineSeconds: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + affinity: + properties: + nodeAffinity: properties: - configMap: - properties: - items: - items: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array type: object - type: array - name: - type: string - optional: - type: boolean - type: object - downwardAPI: + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: properties: - items: + nodeSelectorTerms: items: properties: - fieldRef: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object type: object - mode: - format: int32 - type: integer - path: + namespaces: + items: + type: string + type: array + topologyKey: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object required: - - path + - topologyKey type: object - type: array - type: object - secret: - properties: - items: - items: + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: properties: - key: - type: string - mode: - format: int32 - type: integer - path: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: type: string required: - - key - - path + - topologyKey type: object - type: array + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + archiveLocation: + properties: + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string name: type: string optional: type: boolean + required: + - key type: object - serviceAccountToken: + url: + type: string + usernameSecret: properties: - audience: + key: type: string - expirationSeconds: - format: int64 - type: integer - path: + name: type: string + optional: + type: boolean required: - - path + - key type: object + required: + - url type: object - type: array - required: - - sources - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + gcs: properties: - key: + bucket: type: string - mode: - format: int32 - type: integer - path: + key: type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - key - - path type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name - type: object - type: array - phase: - type: string - progress: - type: string - resourcesDuration: - additionalProperties: - format: int64 - type: integer - type: object - startedAt: - format: date-time - type: string - storedTemplates: - additionalProperties: - properties: - activeDeadlineSeconds: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - affinity: - properties: - nodeAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - weight: - format: int32 - type: integer + key: + type: string + name: + type: string + optional: + type: boolean required: - - preference - - weight + - key type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - type: array - required: - - nodeSelectorTerms - type: object - type: object - podAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + repo: + type: string + revision: + type: string + sshPrivateKeySecret: properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer + key: + type: string + name: + type: string + optional: + type: boolean required: - - podAffinityTerm - - weight + - key type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + usernameSecret: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: + key: type: string - required: - - topologyKey + name: + type: string + optional: + type: boolean + required: + - key type: object - type: array - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + required: + - repo + type: object + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: format: int32 type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean required: - - podAffinityTerm - - weight + - key type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + securityToken: + type: string + required: + - key + type: object + raw: + properties: + data: + type: string + required: + - data + type: object + s3: + properties: + accessKeySecret: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: + key: + type: string + name: type: string + optional: + type: boolean required: - - topologyKey + - key type: object - type: array - type: object - type: object - archiveLocation: - properties: - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + type: object + automountServiceAccountToken: + type: boolean + container: + properties: + args: + items: type: string - usernameSecret: + type: array + command: + items: + type: string + type: array + env: + items: properties: - key: - type: string name: type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - hdfs: - properties: - addresses: - items: - type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: + value: type: string - optional: - type: boolean + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object required: - - key + - name type: object - krbKeytabSecret: + type: array + envFrom: + items: properties: - key: - type: string - name: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: type: string - optional: - type: boolean - required: - - key + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: properties: - name: - type: string - value: - type: string - required: - - name - - value + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object type: object - type: array - url: - type: string - required: - - url - type: object - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - raw: - properties: - data: - type: string - required: - - data - type: object - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - type: object - arguments: - properties: - artifacts: - items: - properties: - archive: + preStop: properties: - none: - type: object - tar: + exec: properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: + command: + items: + type: string + type: array type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: + httpGet: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - name: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - optional: - type: boolean required: - - key + - port type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object - required: - - bucket - - key type: object - git: + type: object + livenessProbe: + properties: + exec: properties: - depth: - format: int64 - type: integer - fetch: + command: items: type: string type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo type: object - globalName: - type: string - hdfs: + failureThreshold: + format: int32 + type: integer + httpGet: properties: - addresses: + host: + type: string + httpHeaders: items: - type: string + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object type: array - force: - type: boolean - hdfsUser: + path: type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - path: + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - addresses - - path + - port type: object - http: + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: properties: - headers: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: items: properties: name: @@ -9185,5295 +7962,20684 @@ spec: - value type: object type: array - url: + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string required: - - url + - port type: object - mode: + initialDelaySeconds: format: int32 type: integer - name: + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: type: string - optional: + readOnlyRootFilesystem: type: boolean - oss: + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: + level: type: string - endpoint: + role: type: string - key: + type: + type: string + user: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret type: object - path: - type: string - raw: + seccompProfile: properties: - data: + localhostProfile: + type: string + type: type: string required: - - data + - type type: object - recurseMode: - type: boolean - s3: + windowsOptions: properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: + gmsaCredentialSpec: type: string - endpoint: + gmsaCredentialSpecName: type: string - insecure: - type: boolean - key: + runAsUserName: type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret type: object - subPath: - type: string - required: - - name type: object - type: array - parameters: - items: + startupProbe: properties: - default: - type: string - enum: - items: - type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: + exec: properties: - default: - type: string - event: - type: string - jqFilter: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: type: string - jsonPath: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - parameter: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - path: + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: type: string - supplied: - type: object + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port type: object - required: - - name + timeoutSeconds: + format: int32 + type: integer type: object - type: array - type: object - automountServiceAccountToken: - type: boolean - container: - properties: - args: - items: + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: type: string - type: array - command: - items: + terminationMessagePolicy: type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - image + type: object + containerSet: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + dependencies: + items: + type: string + type: array + env: + items: properties: - key: - type: string name: type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: + value: type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object required: - - fieldPath + - name type: object - resourceFieldRef: + type: array + envFrom: + items: properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: type: string - required: - - resource + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object type: object - secretKeyRef: + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: properties: - key: + containerPort: + format: int32 + type: integer + hostIP: type: string + hostPort: + format: int32 + type: integer name: type: string - optional: - type: boolean + protocol: + default: TCP + type: string required: - - key + - containerPort type: object - type: object - required: - - name - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: properties: - command: - items: - type: string - type: array + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer type: object - httpGet: + resources: properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object type: object - httpGet: + securityContext: properties: - host: - type: string - httpHeaders: - items: - properties: - name: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: type: string - value: + type: array + drop: + items: type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + type: array + type: object + privileged: + type: boolean + procMount: type: string - required: - - port + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object type: object - tcpSocket: + startupProbe: properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: items: - type: string + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: + volumeMounts: items: properties: + mountPath: + type: string + mountPropagation: + type: string name: type: string - value: + readOnly: + type: boolean + subPath: + type: string + subPathExpr: type: string required: + - mountPath - name - - value type: object type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + workingDir: type: string required: - - port + - name type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + type: array + volumeMounts: + items: properties: - host: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - mountPath + - name type: object - timeoutSeconds: - format: int32 - type: integer - type: object - name: + type: array + required: + - containers + type: object + daemon: + type: boolean + dag: + properties: + failFast: + type: boolean + target: + type: string + tasks: + items: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + continueOn: + properties: + error: + type: boolean + failed: + type: boolean + type: object + dependencies: + items: + type: string + type: array + depends: + type: string + hooks: + additionalProperties: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + template: + type: string + required: + - template + type: object + type: object + name: + type: string + onExit: + type: string + template: + type: string + templateRef: + properties: + clusterScope: + type: boolean + name: + type: string + template: + type: string + type: object + when: + type: string + withItems: + items: + type: object + type: array + withParam: + type: string + withSequence: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + end: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + format: + type: string + start: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + required: + - name + type: object + type: array + required: + - tasks + type: object + data: + properties: + source: + properties: + artifactPaths: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: object + transformation: + items: + properties: + expression: + type: string + required: + - expression + type: object + type: array + required: + - source + - transformation + type: object + executor: + properties: + serviceAccountName: + type: string + type: object + failFast: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + inputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + memoize: + properties: + cache: + properties: + configMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - configMap + type: object + key: + type: string + maxAge: + type: string + required: + - cache + - key + - maxAge + type: object + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + metrics: + properties: + prometheus: + items: + properties: + counter: + properties: + value: + type: string + required: + - value + type: object + gauge: + properties: + realtime: + type: boolean + value: + type: string + required: + - realtime + - value + type: object + help: + type: string + histogram: + properties: + buckets: + items: + type: number + type: array + value: + type: string + required: + - buckets + - value + type: object + labels: + items: + properties: + key: + type: string + value: + type: string + required: + - key + - value + type: object + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + outputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + exitCode: + type: string + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + result: + type: string + type: object + parallelism: + format: int64 + type: integer + podSpecPatch: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + resource: + properties: + action: + type: string + failureCondition: + type: string + flags: + items: + type: string + type: array + manifest: + type: string + mergeStrategy: + type: string + setOwnerReference: + type: boolean + successCondition: + type: string + required: + - action + type: object + retryStrategy: + properties: + affinity: + properties: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object + schedulerName: + type: string + script: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + source: + type: string + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - image + - source + type: object + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + sidecars: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + steps: + items: + type: array + type: array + suspend: + properties: + duration: + type: string + type: object + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + type: object + timeout: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + type: array + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + ttlStrategy: + properties: + secondsAfterCompletion: + format: int32 + type: integer + secondsAfterFailure: + format: int32 + type: integer + secondsAfterSuccess: + format: int32 + type: integer + type: object + volumeClaimGC: + properties: + strategy: + type: string + type: object + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + capacity: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + phase: + type: string + type: object + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + workflowTemplateRef: + properties: + clusterScope: + type: boolean + name: + type: string + type: object + type: object + status: + properties: + artifactRepositoryRef: + properties: + configMap: + type: string + default: + type: boolean + key: + type: string + namespace: + type: string + type: object + compressedNodes: + type: string + conditions: + items: + properties: + message: + type: string + status: + type: string + type: + type: string + type: object + type: array + estimatedDuration: + type: integer + finishedAt: + format: date-time + type: string + message: + type: string + nodes: + additionalProperties: + properties: + boundaryID: + type: string + children: + items: + type: string + type: array + daemoned: + type: boolean + displayName: + type: string + estimatedDuration: + type: integer + finishedAt: + format: date-time + type: string + hostNodeName: + type: string + id: + type: string + inputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + memoizationStatus: + properties: + cacheName: + type: string + hit: + type: boolean + key: + type: string + required: + - cacheName + - hit + - key + type: object + message: + type: string + name: + type: string + outboundNodes: + items: + type: string + type: array + outputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + exitCode: + type: string + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + result: + type: string + type: object + phase: + type: string + podIP: + type: string + progress: + type: string + resourcesDuration: + additionalProperties: + format: int64 + type: integer + type: object + startedAt: + format: date-time + type: string + synchronizationStatus: + properties: + waiting: + type: string + type: object + templateName: + type: string + templateRef: + properties: + clusterScope: + type: boolean + name: + type: string + template: + type: string + type: object + templateScope: + type: string + type: + type: string + required: + - id + - name + - type + type: object + type: object + offloadNodeStatusVersion: + type: string + outputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + exitCode: + type: string + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + result: + type: string + type: object + persistentVolumeClaims: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + phase: + type: string + progress: + type: string + resourcesDuration: + additionalProperties: + format: int64 + type: integer + type: object + startedAt: + format: date-time + type: string + storedTemplates: + additionalProperties: + properties: + activeDeadlineSeconds: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + archiveLocation: + properties: + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + raw: + properties: + data: + type: string + required: + - data + type: object + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + type: object + automountServiceAccountToken: + type: boolean + container: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + containerSet: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + dependencies: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + required: + - containers + type: object + daemon: + type: boolean + dag: + properties: + failFast: + type: boolean + target: + type: string + tasks: + items: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + continueOn: + properties: + error: + type: boolean + failed: + type: boolean + type: object + dependencies: + items: + type: string + type: array + depends: + type: string + hooks: + additionalProperties: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + template: + type: string + required: + - template + type: object + type: object + name: + type: string + onExit: + type: string + template: + type: string + templateRef: + properties: + clusterScope: + type: boolean + name: + type: string + template: + type: string + type: object + when: + type: string + withItems: + items: + type: object + type: array + withParam: + type: string + withSequence: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + end: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + format: + type: string + start: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + required: + - name + type: object + type: array + required: + - tasks + type: object + data: + properties: + source: + properties: + artifactPaths: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: object + transformation: + items: + properties: + expression: + type: string + required: + - expression + type: object + type: array + required: + - source + - transformation + type: object + executor: + properties: + serviceAccountName: + type: string + type: object + failFast: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + inputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + memoize: + properties: + cache: + properties: + configMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - configMap + type: object + key: + type: string + maxAge: + type: string + required: + - cache + - key + - maxAge + type: object + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + metrics: + properties: + prometheus: + items: + properties: + counter: + properties: + value: + type: string + required: + - value + type: object + gauge: + properties: + realtime: + type: boolean + value: + type: string + required: + - realtime + - value + type: object + help: + type: string + histogram: + properties: + buckets: + items: + type: number + type: array + value: + type: string + required: + - buckets + - value + type: object + labels: + items: + properties: + key: + type: string + value: + type: string + required: + - key + - value + type: object + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + outputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + exitCode: + type: string + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + result: + type: string + type: object + parallelism: + format: int64 + type: integer + podSpecPatch: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + resource: + properties: + action: + type: string + failureCondition: + type: string + flags: + items: + type: string + type: array + manifest: + type: string + mergeStrategy: + type: string + setOwnerReference: + type: boolean + successCondition: + type: string + required: + - action + type: object + retryStrategy: + properties: + affinity: + properties: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object + schedulerName: + type: string + script: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + source: + type: string + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + - source + type: object + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + sidecars: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + steps: + items: + type: array + type: array + suspend: + properties: + duration: + type: string + type: object + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + type: object + timeout: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + type: object + storedWorkflowTemplateSpec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + artifactRepositoryRef: + properties: + configMap: + type: string + key: + type: string + type: object + automountServiceAccountToken: + type: boolean + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + options: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + searches: + items: + type: string + type: array + type: object + dnsPolicy: + type: string + entrypoint: + type: string + executor: + properties: + serviceAccountName: type: string - ports: + type: object + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + hostNetwork: + type: boolean + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + metrics: + properties: + prometheus: items: properties: - containerPort: - format: int32 - type: integer - hostIP: + counter: + properties: + value: + type: string + required: + - value + type: object + gauge: + properties: + realtime: + type: boolean + value: + type: string + required: + - realtime + - value + type: object + help: type: string - hostPort: - format: int32 - type: integer + histogram: + properties: + buckets: + items: + type: number + type: array + value: + type: string + required: + - buckets + - value + type: object + labels: + items: + properties: + key: + type: string + value: + type: string + required: + - key + - value + type: object + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + nodeSelector: + additionalProperties: + type: string + type: object + onExit: + type: string + parallelism: + format: int64 + type: integer + podDisruptionBudget: + properties: + maxUnavailable: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + minAvailable: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + podGC: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + strategy: + type: string + type: object + podMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + podPriority: + format: int32 + type: integer + podPriorityClassName: + type: string + podSpecPatch: + type: string + priority: + format: int32 + type: integer + retryStrategy: + properties: + affinity: + properties: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object + schedulerName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: name: type: string - protocol: + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + shutdown: + type: string + suspend: + type: boolean + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + type: object + templateDefaults: + properties: + activeDeadlineSeconds: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + archiveLocation: + properties: + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + raw: + properties: + data: + type: string + required: + - data + type: object + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + type: object + automountServiceAccountToken: + type: boolean + container: + properties: + args: + items: + type: string + type: array + command: + items: type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: properties: - command: - items: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: type: string - type: array + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer type: object - failureThreshold: - format: int32 - type: integer - httpGet: + resources: properties: - host: - type: string - httpHeaders: - items: - properties: - name: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: type: string - value: + type: array + drop: + items: type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + type: array + type: object + privileged: + type: boolean + procMount: type: string - required: - - port + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + startupProbe: properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name type: object - securityContext: + containerSet: properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + dependencies: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: type: string - type: array - drop: - items: + imagePullPolicy: type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: properties: - name: - type: string - value: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: type: string - required: - - name - - value + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + required: + - containers type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - workingDir: - type: string - required: - - name - type: object - daemon: - type: boolean - dag: - properties: - failFast: + daemon: type: boolean - target: - type: string - tasks: - items: - properties: - arguments: + dag: + properties: + failFast: + type: boolean + target: + type: string + tasks: + items: properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: + arguments: + properties: + artifacts: + items: properties: - passwordSecret: + archive: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object type: object - url: - type: string - usernameSecret: + archiveLogs: + type: boolean + artifactory: properties: - key: - type: string - name: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: type: string - optional: - type: boolean + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - - key + - url type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: + from: type: string - key: + fromExpression: type: string - serviceAccountKeySecret: + gcs: properties: - key: - type: string - name: + bucket: type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: key: type: string - name: - type: string - optional: - type: boolean + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - key type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: + git: properties: - key: - type: string - name: - type: string - optional: + depth: + format: int64 + type: integer + disableSubmodules: type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: type: string - name: + revision: type: string - optional: - type: boolean + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - - key + - repo type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: - type: string - type: array - force: - type: boolean - hdfsUser: + globalName: type: string - krbCCacheSecret: + hdfs: properties: - key: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: type: string - name: + krbServicePrincipalName: type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: + krbUsername: type: string - name: + path: type: string - optional: - type: boolean required: - - key + - path type: object - krbKeytabSecret: + http: properties: - key: - type: string - name: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: type: string - optional: - type: boolean required: - - key + - url type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: + mode: + format: int32 + type: integer + name: type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: + optional: + type: boolean + oss: properties: - key: - type: string - name: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: type: string - optional: + createBucketIfNotPresent: type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: + endpoint: + type: string key: type: string - name: + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: type: string - optional: - type: boolean required: - key type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: + path: type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: + raw: properties: - key: - type: string - name: + data: type: string - optional: - type: boolean required: - - key + - data type: object - bucket: - type: string - endpoint: - type: string - insecure: + recurseMode: type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: + s3: properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean key: type: string - name: + region: type: string - optional: + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: type: boolean - required: - - key type: object - useSDKCreds: - type: boolean + subPath: + type: string required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret + - name type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: - items: - type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: + type: array + parameters: + items: properties: default: type: string - event: - type: string - jqFilter: - type: string - jsonPath: + enum: + items: + type: string + type: array + globalName: type: string - parameter: + name: type: string - path: + value: type: string - supplied: + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object type: object + required: + - name type: object - required: - - name - type: object + type: array + type: object + continueOn: + properties: + error: + type: boolean + failed: + type: boolean + type: object + dependencies: + items: + type: string type: array - type: object - continueOn: - properties: - error: - type: boolean - failed: - type: boolean - type: object - dependencies: - items: - type: string - type: array - depends: - type: string - name: - type: string - onExit: - type: string - template: - type: string - templateRef: - properties: - clusterScope: - type: boolean - name: - type: string - runtimeResolution: - type: boolean - template: - type: string - type: object - when: - type: string - withItems: - items: - type: object - type: array - withParam: - type: string - withSequence: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - end: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - format: + depends: type: string - start: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - type: object - required: - - name - type: object - type: array - required: - - tasks - type: object - executor: - properties: - serviceAccountName: - type: string - type: object - hostAliases: - items: - properties: - hostnames: - items: - type: string - type: array - ip: - type: string - type: object - type: array - initContainers: - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - secretKeyRef: + hooks: + additionalProperties: properties: - key: - type: string - name: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + template: type: string - optional: - type: boolean required: - - key + - template type: object - type: object - required: - - name - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array type: object - httpGet: + name: + type: string + onExit: + type: string + template: + type: string + templateRef: properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + clusterScope: + type: boolean + name: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + template: type: string - required: - - port type: object - tcpSocket: + when: + type: string + withItems: + items: + type: object + type: array + withParam: + type: string + withSequence: properties: - host: - type: string - port: + count: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: + end: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: + format: type: string - port: + start: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true - required: - - port type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - mirrorVolumeMounts: - type: boolean - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array + - name type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + type: array + required: + - tasks + type: object + data: + properties: + source: + properties: + artifactPaths: + properties: + archive: properties: - name: - type: string - value: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - - name - - value + - url type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + from: type: string - type: array - drop: - items: + fromExpression: type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + optional: + type: boolean + oss: properties: - name: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: type: string - value: + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: type: string required: - - name - - value + - key type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: object + transformation: + items: properties: - host: + expression: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - expression type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: + type: array + required: + - source + - transformation + type: object + executor: + properties: + serviceAccountName: + type: string + type: object + failFast: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: type: string - required: - - mountPath - - name - type: object - type: array - workingDir: - type: string - required: - - name - type: object - type: array - inputs: - properties: - artifacts: + type: array + ip: + type: string + type: object + type: array + initContainers: items: properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: + postStart: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: + preStop: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object type: object - required: - - bucket - - key type: object - git: + livenessProbe: properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: + exec: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + command: + items: + type: string + type: array type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: + failureThreshold: + format: int32 + type: integer + httpGet: properties: - key: + host: type: string - name: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - optional: - type: boolean required: - - key + - port type: object - usernameSecret: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object - required: - - repo + timeoutSeconds: + format: int32 + type: integer type: object - globalName: + mirrorVolumeMounts: + type: boolean + name: type: string - hdfs: - properties: - addresses: - items: + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + command: + items: + type: string + type: array type: object - krbConfigConfigMap: + failureThreshold: + format: int32 + type: integer + httpGet: properties: - key: + host: type: string - name: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - optional: - type: boolean required: - - key + - port type: object - krbKeytabSecret: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path + timeoutSeconds: + format: int32 + type: integer type: object - http: + resources: properties: - headers: - items: - properties: - name: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: type: string - value: + type: array + drop: + items: type: string - required: - - name - - value - type: object - type: array - url: + type: array + type: object + privileged: + type: boolean + procMount: type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: properties: - key: + localhostProfile: type: string - name: + type: type: string - optional: - type: boolean required: - - key + - type type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: + windowsOptions: properties: - key: + gmsaCredentialSpec: type: string - name: + gmsaCredentialSpecName: + type: string + runAsUserName: type: string - optional: - type: boolean - required: - - key type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data type: object - recurseMode: - type: boolean - s3: + startupProbe: properties: - accessKeySecret: + exec: properties: - key: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: type: string - name: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - optional: - type: boolean required: - - key + - port type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret + timeoutSeconds: + format: int32 + type: integer type: object - subPath: + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: + terminationMessagePolicy: type: string - enum: + tty: + type: boolean + volumeDevices: items: - type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object - required: - - name - type: object - type: array - type: object - memoize: - properties: - cache: - properties: - configMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - configMap - type: object - key: - type: string - maxAge: - type: string - required: - - cache - - key - - maxAge - type: object - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - metrics: - properties: - prometheus: - items: - properties: - counter: - properties: - value: - type: string - required: - - value - type: object - gauge: - properties: - realtime: - type: boolean - value: - type: string - required: - - realtime - - value - type: object - help: - type: string - histogram: - properties: - buckets: - items: - type: number - type: array - value: - type: string - required: - - buckets - - value - type: object - labels: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: items: properties: - key: + mountPath: type: string - value: + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: type: string required: - - key - - value + - mountPath + - name type: object type: array - name: - type: string - when: + workingDir: type: string required: - - help - name type: object type: array - required: - - prometheus - type: object - name: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - outputs: - properties: - artifacts: - items: - properties: - archive: + inputs: + properties: + artifacts: + items: properties: - none: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object type: object - tar: + archiveLogs: + type: boolean + artifactory: properties: - compressionLevel: - format: int32 + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo type: object - zip: + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: + http: properties: - key: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: type: string - name: + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: type: string - optional: + createBucketIfNotPresent: type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: + endpoint: + type: string key: type: string - name: + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: type: string - optional: - type: boolean required: - key type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: + path: type: string - serviceAccountKeySecret: + raw: properties: - key: - type: string - name: + data: type: string - optional: - type: boolean required: - - key + - data type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: + recurseMode: type: boolean - passwordSecret: + s3: properties: - key: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: type: string - name: + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: type: string - optional: + insecure: type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: key: type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: + region: type: string - name: + roleARN: type: string - optional: + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: type: boolean - required: - - key type: object + subPath: + type: string required: - - repo + - name type: object - globalName: - type: string - hdfs: + type: array + parameters: + items: properties: - addresses: + default: + type: string + enum: items: type: string type: array - force: - type: boolean - hdfsUser: + globalName: type: string - krbCCacheSecret: + name: + type: string + value: + type: string + valueFrom: properties: - key: + default: type: string - name: + event: type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: + expression: type: string - name: + jqFilter: type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: + jsonPath: type: string - name: + parameter: type: string - optional: - type: boolean - required: - - key + path: + type: string + supplied: + type: object type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: - type: string required: - - url + - name type: object - mode: - format: int32 - type: integer - name: + type: array + type: object + memoize: + properties: + cache: + properties: + configMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - configMap + type: object + key: + type: string + maxAge: + type: string + required: + - cache + - key + - maxAge + type: object + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: type: string - optional: - type: boolean - oss: + type: object + type: object + metrics: + properties: + prometheus: + items: properties: - accessKeySecret: + counter: properties: - key: - type: string - name: + value: type: string - optional: - type: boolean required: - - key + - value type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: + gauge: properties: - key: - type: string - name: - type: string - optional: + realtime: type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: + value: type: string - optional: - type: boolean required: - - key + - realtime + - value type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: + help: type: string - secretKeySecret: + histogram: properties: - key: - type: string - name: + buckets: + items: + type: number + type: array + value: type: string - optional: - type: boolean required: - - key + - buckets + - value type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - exitCode: - type: string - parameters: - items: - properties: - default: - type: string - enum: - items: - type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: + labels: + items: + properties: + key: + type: string + value: + type: string + required: + - key + - value + type: object + type: array + name: type: string - path: + when: type: string - supplied: - type: object + required: + - help + - name type: object - required: - - name - type: object - type: array - result: - type: string - type: object - parallelism: - format: int64 - type: integer - podSpecPatch: - type: string - priority: - format: int32 - type: integer - priorityClassName: - type: string - resource: - properties: - action: - type: string - failureCondition: - type: string - flags: - items: - type: string - type: array - manifest: - type: string - mergeStrategy: - type: string - setOwnerReference: - type: boolean - successCondition: - type: string - required: - - action - type: object - retryStrategy: - properties: - backoff: - properties: - duration: - type: string - factor: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - maxDuration: - type: string + type: array + required: + - prometheus type: object - limit: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - retryPolicy: + name: type: string - type: object - schedulerName: - type: string - script: - properties: - args: - items: - type: string - type: array - command: - items: + nodeSelector: + additionalProperties: type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: + type: object + outputs: + properties: + artifacts: + items: properties: - configMapKeyRef: + archive: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object type: object - fieldRef: + archiveLogs: + type: boolean + artifactory: properties: - apiVersion: - type: string - fieldPath: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - - fieldPath + - url type: object - resourceFieldRef: + from: + type: string + fromExpression: + type: string + gcs: properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: + bucket: type: string - required: - - resource - type: object - secretKeyRef: - properties: key: type: string - name: - type: string - optional: - type: boolean + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - key type: object - type: object - required: - - name - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: properties: - name: + key: type: string - value: + name: type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: + repo: type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: + revision: + type: string + sshPrivateKeySecret: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: + required: + - repo + type: object + globalName: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + hdfs: properties: - name: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: type: string - value: + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: type: string required: - - name - - value + - path type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + http: properties: - name: - type: string - value: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: type: string required: - - name - - value + - url type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: type: string - type: array - drop: - items: + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: type: string - type: array - type: object - privileged: - type: boolean - procMount: + required: + - name + type: object + type: array + exitCode: type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - source: - type: string - startupProbe: - properties: - exec: - properties: - command: - items: + parameters: + items: + properties: + default: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: properties: - name: + default: type: string - value: + event: type: string - required: - - name - - value + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer + required: + - name + type: object + type: array + result: + type: string type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - workingDir: - type: string - required: - - name - - source - type: object - securityContext: - properties: - fsGroup: - format: int64 - type: integer - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: + parallelism: format: int64 type: integer - seLinuxOptions: + podSpecPatch: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + resource: properties: - level: + action: type: string - role: + failureCondition: type: string - type: + flags: + items: + type: string + type: array + manifest: type: string - user: + mergeStrategy: + type: string + setOwnerReference: + type: boolean + successCondition: type: string + required: + - action type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - windowsOptions: + retryStrategy: properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: + affinity: + properties: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: type: string type: object - type: object - serviceAccountName: - type: string - sidecars: - items: - properties: - args: - items: + schedulerName: + type: string + script: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: type: string - type: array - command: - items: + imagePullPolicy: type: string - type: array - env: - items: + lifecycle: properties: - name: - type: string - value: - type: string - valueFrom: + postStart: properties: - configMapKeyRef: + exec: properties: - key: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - name: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - optional: - type: boolean required: - - key + - port type: object - fieldRef: + tcpSocket: properties: - apiVersion: - type: string - fieldPath: + host: type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - fieldPath + - port type: object - resourceFieldRef: + type: object + preStop: + properties: + exec: properties: - containerName: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - divisor: + port: anyOf: - type: integer - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - resource: + scheme: type: string required: - - resource + - port type: object - secretKeyRef: + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object type: object - required: - - name type: object - type: array - envFrom: - items: + livenessProbe: properties: - configMapRef: + exec: properties: - name: - type: string - optional: - type: boolean + command: + items: + type: string + type: array type: object - prefix: - type: string - secretRef: + failureThreshold: + format: int32 + type: integer + httpGet: properties: - name: + host: type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - mirrorVolumeMounts: - type: boolean - name: - type: string - ports: - items: - properties: - containerPort: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: format: int32 type: integer - hostIP: - type: string - hostPort: + periodSeconds: format: int32 type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + containerPort: + format: int32 + type: integer + hostIP: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + hostPort: + format: int32 + type: integer + name: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + protocol: + default: TCP type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true + - containerPort type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: type: string - type: array - drop: - items: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: + type: object + requests: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name + type: object type: object - type: array - workingDir: - type: string - required: - - name - type: object - type: array - steps: - items: - type: array - type: array - suspend: - properties: - duration: - type: string - type: object - synchronization: - properties: - mutex: - properties: - name: - type: string - type: object - semaphore: - properties: - configMapKeyRef: + securityContext: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - type: object - type: object - template: - type: string - templateRef: - properties: - clusterScope: - type: boolean - name: - type: string - runtimeResolution: - type: boolean - template: - type: string - type: object - timeout: - type: string - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + allowPrivilegeEscalation: + type: boolean + capabilities: properties: - key: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: type: string - mode: - format: int32 - type: integer + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + source: + type: string + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array path: type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string required: - - key - - path + - port type: object - type: array - name: - type: string - optional: - type: boolean - type: object - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: properties: + devicePath: + type: string name: type: string + required: + - devicePath + - name type: object - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer + type: array + volumeMounts: items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + - source + type: object + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: type: string - type: array - wwids: - items: + role: type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + type: type: string - type: object - readOnly: - type: boolean - secretRef: + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: properties: name: type: string + value: + type: string + required: + - name + - value type: object - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + sidecars: + items: properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: + args: items: type: string type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: items: properties: - configMap: + configMapRef: properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array name: type: string optional: type: boolean type: object - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path - type: object - type: array - type: object - secret: + prefix: + type: string + secretRef: properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array name: type: string optional: type: boolean type: object - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object type: object type: array - required: - - sources - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string image: type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: + imagePullPolicy: type: string - readOnly: - type: boolean - secretRef: + lifecycle: properties: - name: - type: string - type: object - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name - type: object - type: array - required: - - name - type: object - type: object - storedWorkflowTemplateSpec: - properties: - activeDeadlineSeconds: - format: int64 - type: integer - affinity: - properties: - nodeAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: + postStart: + properties: + exec: properties: - key: - type: string - operator: - type: string - values: + command: items: type: string type: array - required: - - key - - operator type: object - type: array - type: object - weight: - format: int32 - type: integer - required: - - preference - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: + httpGet: properties: - key: - type: string - operator: + host: type: string - values: + httpHeaders: items: - type: string + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string required: - - key - - operator + - port type: object - type: array - matchFields: - items: + tcpSocket: properties: - key: - type: string - operator: + host: type: string - values: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: items: type: string type: array - required: - - key - - operator type: object - type: array - type: object - type: array - required: - - nodeSelectorTerms - type: object - type: object - podAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: + httpGet: properties: - key: - type: string - operator: + host: type: string - values: + httpHeaders: items: - type: string + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string required: - - key - - operator + - port type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: + tcpSocket: properties: - key: - type: string - operator: + host: type: string - values: - items: - type: string - type: array + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key - - operator + - port type: object - type: array - matchLabels: - additionalProperties: + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - type: object - type: object - arguments: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: properties: - compressionLevel: + containerPort: format: int32 type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: + hostIP: type: string + hostPort: + format: int32 + type: integer name: type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: + protocol: + default: TCP type: string - optional: - type: boolean required: - - key + - containerPort type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - name: + level: type: string - value: + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: type: string required: - - name - - value + - type type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: properties: - key: + devicePath: type: string name: type: string - optional: - type: boolean required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: + - devicePath + - name + type: object + type: array + volumeMounts: + items: properties: - key: + mountPath: + type: string + mountPropagation: type: string name: type: string - optional: + readOnly: type: boolean + subPath: + type: string + subPathExpr: + type: string required: - - key + - mountPath + - name type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: - items: + type: array + workingDir: type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object - required: - - name - type: object - type: array - type: object - artifactRepositoryRef: - properties: - configMap: - type: string - key: - type: string - type: object - automountServiceAccountToken: - type: boolean - dnsConfig: - properties: - nameservers: - items: - type: string - type: array - options: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - searches: - items: - type: string - type: array - type: object - dnsPolicy: - type: string - entrypoint: - type: string - executor: - properties: - serviceAccountName: - type: string - type: object - hostAliases: - items: - properties: - hostnames: + required: + - name + type: object + type: array + steps: items: - type: string + type: array type: array - ip: - type: string - type: object - type: array - hostNetwork: - type: boolean - imagePullSecrets: - items: - properties: - name: - type: string - type: object - type: array - metrics: - properties: - prometheus: - items: + suspend: properties: - counter: - properties: - value: - type: string - required: - - value - type: object - gauge: - properties: - realtime: - type: boolean - value: - type: string - required: - - realtime - - value - type: object - help: + duration: type: string - histogram: + type: object + synchronization: + properties: + mutex: properties: - buckets: - items: - type: number - type: array - value: + name: type: string - required: - - buckets - - value type: object - labels: - items: - properties: - key: - type: string - value: - type: string - required: - - key - - value - type: object - type: array - name: - type: string - when: - type: string - required: - - help - - name - type: object - type: array - required: - - prometheus - type: object - nodeSelector: - additionalProperties: - type: string - type: object - onExit: - type: string - parallelism: - format: int64 - type: integer - podDisruptionBudget: - properties: - maxUnavailable: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - minAvailable: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - selector: - properties: - matchExpressions: - items: + semaphore: properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - podGC: - properties: - strategy: - type: string - type: object - podPriority: - format: int32 - type: integer - podPriorityClassName: - type: string - podSpecPatch: - type: string - priority: - format: int32 - type: integer - retryStrategy: - properties: - backoff: - properties: - duration: - type: string - factor: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - maxDuration: - type: string - type: object - limit: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - retryPolicy: - type: string - type: object - schedulerName: - type: string - securityContext: - properties: - fsGroup: - format: int64 - type: integer - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - serviceAccountName: - type: string - shutdown: - type: string - suspend: - type: boolean - synchronization: - properties: - mutex: - properties: - name: - type: string - type: object - semaphore: - properties: - configMapKeyRef: + type: object + timeout: + type: string + tolerations: + items: properties: + effect: + type: string key: type: string - name: + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: type: string - optional: - type: boolean - required: - - key type: object - type: object - type: object - templates: - items: - properties: - activeDeadlineSeconds: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - affinity: - properties: - nodeAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - weight: - format: int32 - type: integer - required: - - preference - - weight + name: + type: string type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: + accessModes: items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object + type: string type: array - type: object - type: array - required: - - nodeSelectorTerms - type: object - type: object - podAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: properties: matchExpressions: items: @@ -14496,1486 +28662,1639 @@ spec: type: string type: object type: object - namespaces: + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: + optional: + type: boolean + type: object + downwardAPI: + properties: items: - properties: - key: - type: string - operator: - type: string - values: - items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + resourceFieldRef: + properties: + containerName: type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: + type: array + type: object + secret: + properties: items: - properties: - key: - type: string - operator: - type: string - values: - items: + items: + properties: + key: type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - type: object - type: object - archiveLocation: - properties: - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - hdfs: - properties: - addresses: - items: + readOnly: + type: boolean + registry: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: - type: string - required: - - url - type: object - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - raw: - properties: - data: - type: string - required: - - data - type: object - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - type: object - arguments: - properties: - artifacts: - items: + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: properties: - archive: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object + name: + type: string type: object - archiveLogs: + sslEnabled: type: boolean - artifactory: + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: + name: type: string - usernameSecret: - properties: - key: + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + templates: + items: + properties: + activeDeadlineSeconds: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: type: string - name: + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + archiveLocation: + properties: + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: properties: - bucket: - type: string key: type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object + name: + type: string + optional: + type: boolean required: - - bucket - key type: object - git: + url: + type: string + usernameSecret: properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: + key: type: string - revision: + name: type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object + optional: + type: boolean required: - - repo + - key type: object - globalName: + required: + - url + type: object + gcs: + properties: + bucket: type: string - hdfs: + key: + type: string + serviceAccountKeySecret: properties: - addresses: - items: - type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: + key: type: string - path: + name: type: string + optional: + type: boolean required: - - addresses - - path + - key type: object - http: + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: + key: + type: string + name: type: string + optional: + type: boolean required: - - url + - key type: object - mode: - format: int32 - type: integer - name: + repo: type: string - optional: - type: boolean - oss: + revision: + type: string + sshPrivateKeySecret: properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: + key: type: string - endpoint: + name: type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: key: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object + name: + type: string + optional: + type: boolean required: - - accessKeySecret - - bucket - - endpoint - key - - secretKeySecret type: object - path: + required: + - repo + type: object + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: type: string - raw: + krbCCacheSecret: properties: - data: + key: type: string + name: + type: string + optional: + type: boolean required: - - data + - key type: object - recurseMode: - type: boolean - s3: + krbConfigConfigMap: properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: + key: type: string - endpoint: + name: type: string - insecure: + optional: type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: key: type: string - region: - type: string - roleARN: + name: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: + optional: type: boolean required: - - accessKeySecret - - bucket - - endpoint - key - - secretKeySecret type: object - subPath: + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: type: string required: - - name + - path type: object - type: array - parameters: - items: + http: properties: - default: - type: string - enum: + headers: items: - type: string + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object type: array - globalName: - type: string - name: - type: string - value: + url: type: string - valueFrom: + required: + - url + type: object + oss: + properties: + accessKeySecret: properties: - default: - type: string - event: - type: string - jqFilter: + key: type: string - jsonPath: + name: type: string - parameter: + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: type: string - path: + name: type: string - supplied: - type: object + optional: + type: boolean + required: + - key type: object + securityToken: + type: string required: - - name + - key type: object - type: array - type: object - automountServiceAccountToken: - type: boolean - container: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: + raw: properties: - name: - type: string - value: + data: type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - type: object required: - - name + - data type: object - type: array - envFrom: - items: + s3: properties: - configMapRef: + accessKeySecret: properties: + key: + type: string name: type: string optional: type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean type: object - prefix: + endpoint: type: string - secretRef: + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: properties: + key: + type: string name: type: string optional: type: boolean + required: + - key type: object + useSDKCreds: + type: boolean type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: + type: object + automountServiceAccountToken: + type: boolean + container: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: + name: + type: string + value: + type: string + valueFrom: properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object type: object + required: + - name type: object - preStop: + type: array + envFrom: + items: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: + configMapRef: properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + name: type: string - required: - - port + optional: + type: boolean type: object - tcpSocket: + prefix: + type: string + secretRef: properties: - host: + name: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port + optional: + type: boolean type: object type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: properties: - name: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - value: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string required: - - name - - value + - port type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: properties: - containerPort: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: format: int32 type: integer - hostIP: - type: string - hostPort: + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: format: int32 type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: properties: - host: + containerPort: + format: int32 + type: integer + hostIP: type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + hostPort: + format: int32 + type: integer + name: type: string - port: + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: + type: object + requests: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: type: string - type: array - drop: - items: + role: type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: properties: - level: - type: string - role: - type: string - type: + devicePath: type: string - user: + name: type: string + required: + - devicePath + - name type: object - windowsOptions: + type: array + volumeMounts: + items: properties: - gmsaCredentialSpec: + mountPath: type: string - gmsaCredentialSpecName: + mountPropagation: type: string - runAsUserName: + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: type: string + required: + - mountPath + - name type: object - type: object - startupProbe: - properties: - exec: + type: array + workingDir: + type: string + required: + - name + type: object + containerSet: + properties: + containers: + items: properties: + args: + items: + type: string + type: array command: items: type: string type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: + dependencies: + items: + type: string + type: array + env: items: properties: name: type: string value: type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - workingDir: - type: string - required: - - name - type: object - daemon: - type: boolean - dag: - properties: - failFast: - type: boolean - target: - type: string - tasks: - items: - properties: - arguments: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - globalName: - type: string - hdfs: + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: properties: - addresses: + command: items: type: string type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path type: object - http: + httpGet: properties: - headers: + host: + type: string + httpHeaders: items: properties: name: @@ -15986,4222 +30305,5785 @@ spec: - name - value type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: - items: - type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: + type: array + path: type: string - jqFilter: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - jsonPath: + required: + - port + type: object + tcpSocket: + properties: + host: type: string - parameter: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array path: type: string - supplied: - type: object + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port type: object - required: - - name type: object - type: array - type: object - continueOn: - properties: - error: - type: boolean - failed: - type: boolean - type: object - dependencies: - items: - type: string - type: array - depends: - type: string - name: - type: string - onExit: - type: string - template: - type: string - templateRef: - properties: - clusterScope: - type: boolean - name: - type: string - runtimeResolution: - type: boolean - template: - type: string - type: object - when: - type: string - withItems: - items: type: object - type: array - withParam: - type: string - withSequence: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - end: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - format: - type: string - start: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - type: object - required: - - name - type: object - type: array - required: - - tasks - type: object - executor: - properties: - serviceAccountName: - type: string - type: object - hostAliases: - items: - properties: - hostnames: - items: - type: string - type: array - ip: - type: string - type: object - type: array - initContainers: - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: + livenessProbe: properties: - configMapKeyRef: + exec: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + command: + items: + type: string + type: array type: object - fieldRef: + failureThreshold: + format: int32 + type: integer + httpGet: properties: - apiVersion: - type: string - fieldPath: + host: type: string - required: - - fieldPath - type: object - resourceFieldRef: - properties: - containerName: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - divisor: + port: anyOf: - type: integer - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - resource: + scheme: type: string required: - - resource + - port type: object - secretKeyRef: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object - type: object - required: - - name - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + containerPort: + format: int32 + type: integer + hostIP: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + hostPort: + format: int32 + type: integer + name: type: string - required: - - port - type: object - tcpSocket: - properties: - host: + protocol: + default: TCP type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - containerPort type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: + type: object + requests: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: properties: - name: - type: string - value: - type: string - required: - - name - - value + add: + items: + type: string + type: array + drop: + items: + type: string + type: array type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - mirrorVolumeMounts: - type: boolean - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - name: + level: type: string - value: + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: type: string required: - - name - - value + - type type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + windowsOptions: properties: - name: + gmsaCredentialSpec: type: string - value: + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string required: - - name - - value + - port type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + required: + - containers + type: object + daemon: + type: boolean + dag: + properties: + failFast: type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: + target: type: string - tty: - type: boolean - volumeDevices: + tasks: items: properties: - devicePath: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + continueOn: + properties: + error: + type: boolean + failed: + type: boolean + type: object + dependencies: + items: + type: string + type: array + depends: type: string + hooks: + additionalProperties: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + template: + type: string + required: + - template + type: object + type: object name: type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: + onExit: type: string - name: + template: type: string - readOnly: - type: boolean - subPath: + templateRef: + properties: + clusterScope: + type: boolean + name: + type: string + template: + type: string + type: object + when: type: string - subPathExpr: + withItems: + items: + type: object + type: array + withParam: type: string + withSequence: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + end: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + format: + type: string + start: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object required: - - mountPath - name type: object type: array - workingDir: - type: string required: - - name + - tasks type: object - type: array - inputs: - properties: - artifacts: - items: + data: + properties: + source: properties: - archive: + artifactPaths: properties: - none: - type: object - tar: + archive: properties: - compressionLevel: - format: int32 - type: integer + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object type: object - zip: + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: + from: + type: string + fromExpression: + type: string + gcs: properties: - key: + bucket: type: string - name: + key: type: string - optional: - type: boolean + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - key type: object - url: - type: string - usernameSecret: + git: properties: - key: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: type: string - name: + revision: type: string - optional: - type: boolean + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - - key + - repo type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: + globalName: type: string - serviceAccountKeySecret: + hdfs: properties: - key: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: type: string - name: + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: type: string - optional: - type: boolean required: - - key + - path type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: + name: + type: string + optional: type: boolean - passwordSecret: + oss: properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string key: type: string - name: + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: type: string - optional: - type: boolean required: - key type: object - repo: - type: string - revision: + path: type: string - sshPrivateKeySecret: + raw: properties: - key: - type: string - name: + data: type: string - optional: - type: boolean required: - - key + - data type: object - usernameSecret: + recurseMode: + type: boolean + s3: properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean key: type: string - name: + region: type: string - optional: + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: type: boolean - required: - - key type: object + subPath: + type: string required: - - repo + - name type: object - globalName: + type: object + transformation: + items: + properties: + expression: + type: string + required: + - expression + type: object + type: array + required: + - source + - transformation + type: object + executor: + properties: + serviceAccountName: + type: string + type: object + failFast: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: type: string - hdfs: + type: array + ip: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: properties: - addresses: - items: - type: string - type: array - force: - type: boolean - hdfsUser: + name: type: string - krbCCacheSecret: + value: + type: string + valueFrom: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object type: object - krbConfigConfigMap: + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: properties: - key: - type: string name: type: string optional: type: boolean - required: - - key type: object - krbKeytabSecret: + prefix: + type: string + secretRef: properties: - key: - type: string name: type: string optional: type: boolean - required: - - key type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: type: string - path: + hostPort: + format: int32 + type: integer + name: type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: + protocol: + default: TCP type: string required: - - url + - containerPort type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: type: string - name: + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: type: string - key: + name: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret + - devicePath + - name type: object - path: - type: string - raw: + type: array + volumeMounts: + items: properties: - data: + mountPath: type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: + mountPropagation: type: string - endpoint: + name: type: string - insecure: + readOnly: type: boolean - key: + subPath: type: string - region: - type: string - roleARN: + subPathExpr: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: - items: - type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object + - mountPath + - name type: object - required: - - name - type: object - type: array - type: object - memoize: - properties: - cache: - properties: - configMap: + type: array + workingDir: + type: string + required: + - name + type: object + type: array + inputs: + properties: + artifacts: + items: properties: - key: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer name: type: string optional: type: boolean - required: - - key - type: object - required: - - configMap - type: object - key: - type: string - maxAge: - type: string - required: - - cache - - key - - maxAge - type: object - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - metrics: - properties: - prometheus: - items: - properties: - counter: - properties: - value: - type: string - required: - - value - type: object - gauge: - properties: - realtime: - type: boolean - value: - type: string - required: - - realtime - - value - type: object - help: - type: string - histogram: - properties: - buckets: - items: - type: number - type: array - value: - type: string - required: - - buckets - - value - type: object - labels: - items: + oss: properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string key: type: string - value: + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: type: string required: - key - - value type: object - type: array - name: - type: string - when: - type: string - required: - - help - - name - type: object - type: array - required: - - prometheus - type: object - name: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - outputs: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + memoize: + properties: + cache: + properties: + configMap: properties: - bucket: - type: string key: type: string - serviceAccountKeySecret: + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - configMap + type: object + key: + type: string + maxAge: + type: string + required: + - cache + - key + - maxAge + type: object + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + metrics: + properties: + prometheus: + items: + properties: + counter: + properties: + value: + type: string + required: + - value + type: object + gauge: + properties: + realtime: + type: boolean + value: + type: string + required: + - realtime + - value + type: object + help: + type: string + histogram: + properties: + buckets: + items: + type: number + type: array + value: + type: string + required: + - buckets + - value + type: object + labels: + items: properties: key: type: string - name: + value: type: string - optional: - type: boolean required: - key + - value type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + outputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: + createBucketIfNotPresent: + type: boolean + endpoint: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: type: string + name: + type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + exitCode: + type: string + parameters: + items: + properties: + default: + type: string + enum: + items: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + result: + type: string + type: object + parallelism: + format: int64 + type: integer + podSpecPatch: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + resource: + properties: + action: + type: string + failureCondition: + type: string + flags: + items: + type: string + type: array + manifest: + type: string + mergeStrategy: + type: string + setOwnerReference: + type: boolean + successCondition: + type: string + required: + - action + type: object + retryStrategy: + properties: + affinity: + properties: + nodeAntiAffinity: type: object - subPath: - type: string - required: - - name type: object - type: array - exitCode: - type: string - parameters: - items: + backoff: properties: - default: - type: string - enum: - items: - type: string - type: array - globalName: + duration: type: string - name: - type: string - value: + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object - required: - - name type: object - type: array - result: - type: string - type: object - parallelism: - format: int64 - type: integer - podSpecPatch: - type: string - priority: - format: int32 - type: integer - priorityClassName: - type: string - resource: - properties: - action: - type: string - failureCondition: - type: string - flags: - items: + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: type: string - type: array - manifest: - type: string - mergeStrategy: - type: string - setOwnerReference: - type: boolean - successCondition: - type: string - required: - - action - type: object - retryStrategy: - properties: - backoff: - properties: - duration: + type: object + schedulerName: + type: string + script: + properties: + args: + items: type: string - factor: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - maxDuration: + type: array + command: + items: type: string - type: object - limit: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - retryPolicy: - type: string - type: object - schedulerName: - type: string - script: - properties: - args: - items: + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: type: string - type: array - command: - items: + imagePullPolicy: type: string - type: array - env: - items: + lifecycle: properties: - name: - type: string - value: - type: string - valueFrom: + postStart: properties: - configMapKeyRef: + exec: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + command: + items: + type: string + type: array type: object - fieldRef: + httpGet: properties: - apiVersion: - type: string - fieldPath: + host: type: string - required: - - fieldPath - type: object - resourceFieldRef: - properties: - containerName: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - divisor: + port: anyOf: - type: integer - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - resource: + scheme: type: string required: - - resource + - port type: object - secretKeyRef: + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object type: object - required: - - name - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: + preStop: properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + exec: properties: - name: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - value: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string required: - - name - - value + - port type: object - type: array - path: + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + hostPort: + format: int32 + type: integer + name: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + protocol: + default: TCP type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - containerPort type: object - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: properties: - containerPort: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: format: int32 type: integer - hostIP: - type: string - hostPort: + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: format: int32 type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: + type: object + requests: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: type: string - type: array - drop: - items: + role: type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - source: - type: string - startupProbe: - properties: - exec: - properties: - command: - items: + type: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + source: + type: string + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + name: type: string required: - - port + - devicePath + - name type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + type: array + volumeMounts: + items: properties: - host: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - mountPath + - name type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: + type: array + workingDir: + type: string + required: + - name + - source + type: object + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - devicePath: - type: string - name: + level: type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: - properties: - mountPath: + role: type: string - mountPropagation: + type: type: string - name: + user: type: string - readOnly: - type: boolean - subPath: + type: object + seccompProfile: + properties: + localhostProfile: type: string - subPathExpr: + type: type: string required: - - mountPath - - name + - type type: object - type: array - workingDir: - type: string - required: - - name - - source - type: object - securityContext: - properties: - fsGroup: - format: int64 - type: integer - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - sysctls: - items: + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: properties: - name: + gmsaCredentialSpec: type: string - value: + gmsaCredentialSpecName: + type: string + runAsUserName: type: string - required: - - name - - value type: object - type: array - windowsOptions: + type: object + serviceAccountName: + type: string + sidecars: + items: properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - serviceAccountName: - type: string - sidecars: - items: - properties: - args: - items: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: type: string - type: array - command: - items: + imagePullPolicy: type: string - type: array - env: - items: + lifecycle: properties: - name: - type: string - value: - type: string - valueFrom: + postStart: properties: - configMapKeyRef: + exec: properties: - key: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - name: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - optional: - type: boolean required: - - key + - port type: object - fieldRef: + tcpSocket: properties: - apiVersion: - type: string - fieldPath: + host: type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - fieldPath + - port type: object - resourceFieldRef: + type: object + preStop: + properties: + exec: properties: - containerName: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - divisor: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: anyOf: - type: integer - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - resource: + scheme: type: string required: - - resource + - port type: object - secretKeyRef: + tcpSocket: properties: - key: + host: type: string - name: - type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object type: object - required: - - name type: object - type: array - envFrom: - items: + livenessProbe: properties: - configMapRef: + exec: properties: - name: - type: string - optional: - type: boolean + command: + items: + type: string + type: array type: object - prefix: - type: string - secretRef: + failureThreshold: + format: int32 + type: integer + httpGet: properties: - name: + host: type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: properties: - host: + containerPort: + format: int32 + type: integer + hostIP: type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + hostPort: + format: int32 + type: integer + name: type: string - port: + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: + type: object + requests: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - mirrorVolumeMounts: - type: boolean - name: - type: string - ports: - items: + type: object + type: object + securityContext: properties: - containerPort: - format: int32 - type: integer - hostIP: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: type: string - hostPort: - format: int32 + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 type: integer - name: - type: string - protocol: - type: string - required: - - containerPort + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + devicePath: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + name: type: string required: - - port + - devicePath + - name type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + type: array + volumeMounts: + items: properties: - host: + mountPath: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: + mountPropagation: type: string - role: + name: type: string - type: + readOnly: + type: boolean + subPath: type: string - user: + subPathExpr: type: string + required: + - mountPath + - name type: object - windowsOptions: + type: array + workingDir: + type: string + required: + - name + type: object + type: array + steps: + items: + type: array + type: array + suspend: + properties: + duration: + type: string + type: object + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: + key: type: string - runAsUserName: + name: type: string + optional: + type: boolean + required: + - key type: object type: object - startupProbe: - properties: - exec: - properties: - command: - items: + type: object + timeout: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: type: string - httpHeaders: - items: + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: properties: - name: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: type: string - value: + volumeMode: + type: string + volumeName: type: string - required: - - name - - value type: object - type: array - path: + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + type: array + wwids: + items: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: properties: - devicePath: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: type: string - name: + pdID: type: string required: - - devicePath - - name + - pdID type: object - type: array - volumeMounts: - items: + portworxVolume: properties: - mountPath: + fsType: type: string - mountPropagation: + readOnly: + type: boolean + volumeID: type: string - name: + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: type: string readOnly: type: boolean - subPath: + registry: type: string - subPathExpr: + tenant: + type: string + user: + type: string + volume: type: string required: - - mountPath - - name + - registry + - volume type: object - type: array - workingDir: - type: string - required: - - name - type: object - type: array - steps: - items: - type: array - type: array - suspend: - properties: - duration: - type: string - type: object - synchronization: - properties: - mutex: - properties: - name: - type: string - type: object - semaphore: - properties: - configMapKeyRef: + rbd: properties: - key: + fsType: type: string - name: + image: type: string - optional: + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string required: - - key + - image + - monitors type: object - type: object - type: object - template: - type: string - templateRef: - properties: - clusterScope: - type: boolean - name: - type: string - runtimeResolution: - type: boolean - template: - type: string - type: object - timeout: - type: string - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: + scaleIO: + properties: + fsType: type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: properties: - key: - type: string - mode: - format: int32 - type: integer - path: + name: type: string - required: - - key - - path type: object - type: array - name: - type: string - optional: - type: boolean - type: object - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - readOnly: - type: boolean - volumeAttributes: - additionalProperties: + sslEnabled: + type: boolean + storageMode: type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: + name: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: + volumeName: type: string - type: array - wwids: - items: + volumeNamespace: type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + type: object + vsphereVolume: + properties: + fsType: type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: + storagePolicyID: type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + type: array + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + ttlStrategy: + properties: + secondsAfterCompletion: + format: int32 + type: integer + secondsAfterFailure: + format: int32 + type: integer + secondsAfterSuccess: + format: int32 + type: integer + type: object + volumeClaimGC: + properties: + strategy: + type: string + type: object + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: properties: - claimName: + apiGroup: type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: + kind: type: string - pdID: + name: type: string required: - - pdID + - kind + - name type: object - portworxVolume: + resources: properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object type: object - projected: + selector: properties: - defaultMode: - format: int32 - type: integer - sources: + matchExpressions: items: properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator type: object type: array - required: - - sources + matchLabels: + additionalProperties: + type: string + type: object type: object - quobyte: + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + capacity: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + phase: + type: string + type: object + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: + name: type: string - required: - - registry - - volume type: object - rbd: + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - user: + name: type: string - required: - - image - - monitors type: object - scaleIO: + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: + name: type: string - required: - - gateway - - secretRef - - system type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: properties: - key: + apiVersion: type: string - mode: - format: int32 - type: integer - path: + fieldPath: type: string required: - - key - - path + - fieldPath type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: + metadata: + type: object + spec: properties: - name: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: type: string type: object - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string required: - - volumePath + - spec type: object - required: - - name type: object - type: array - required: - - name - type: object - type: array - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - ttlSecondsAfterFinished: - format: int32 - type: integer - ttlStrategy: - properties: - secondsAfterCompletion: - format: int32 - type: integer - secondsAfterFailure: - format: int32 - type: integer - secondsAfterSuccess: - format: int32 - type: integer - type: object - volumeClaimGC: - properties: - strategy: - type: string - type: object - volumeClaimTemplates: - items: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - accessModes: - items: + fc: + properties: + fsType: type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: type: string - name: + type: array + wwids: + items: type: string - required: - - kind - - name - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: + type: array + type: object + flexVolume: + properties: + driver: type: string - type: array - capacity: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - conditions: - items: + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: + name: type: string - required: - - status - - type type: object - type: array - phase: - type: string - type: object - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: type: string - type: object - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + type: array + readOnly: + type: boolean + secretRef: properties: - key: - type: string - mode: - format: int32 - type: integer - path: + name: type: string - required: - - key - - path type: object - type: array - name: - type: string - optional: - type: boolean - type: object - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - readOnly: - type: boolean - volumeAttributes: - additionalProperties: + targetPortal: type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: type: string - type: array - wwids: - items: + readOnly: + type: boolean + registry: type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + tenant: type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: + user: type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - required: - - sources - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: + image: + type: string + keyring: + type: string + monitors: + items: type: string - type: object - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: properties: - key: + name: type: string - mode: - format: int32 - type: integer - path: + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: type: string - required: - - key - - path type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name - type: object - type: array - workflowTemplateRef: - properties: - clusterScope: - type: boolean - name: - type: string - type: object - type: object - synchronization: - properties: - mutex: - properties: - holding: - items: - properties: - holder: - type: string - mutex: - type: string - type: object - type: array - x-kubernetes-list-type: atomic - waiting: - items: - properties: - holder: - type: string - mutex: - type: string - type: object - type: array - x-kubernetes-list-type: atomic - type: object - semaphore: - properties: - holding: - items: - properties: - holders: - items: + sslEnabled: + type: boolean + storageMode: type: string - type: array - x-kubernetes-list-type: atomic - semaphore: - type: string - type: object - type: array - waiting: - items: - properties: - holders: + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: type: string - type: array - x-kubernetes-list-type: atomic - semaphore: - type: string - type: object - type: array - type: object - type: object - type: object - required: - - metadata - - spec - type: object - version: v1alpha1 - versions: - - name: v1alpha1 + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + workflowTemplateRef: + properties: + clusterScope: + type: boolean + name: + type: string + type: object + type: object + synchronization: + properties: + mutex: + properties: + holding: + items: + properties: + holder: + type: string + mutex: + type: string + type: object + type: array + x-kubernetes-list-type: atomic + waiting: + items: + properties: + holder: + type: string + mutex: + type: string + type: object + type: array + x-kubernetes-list-type: atomic + type: object + semaphore: + properties: + holding: + items: + properties: + holders: + items: + type: string + type: array + x-kubernetes-list-type: atomic + semaphore: + type: string + type: object + type: array + waiting: + items: + properties: + holders: + items: + type: string + type: array + x-kubernetes-list-type: atomic + semaphore: + type: string + type: object + type: array + type: object + type: object + type: object + required: + - metadata + - spec + type: object served: true storage: true + subresources: {} diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml index 725a2f3026..b5662e7c54 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml @@ -1,5 +1,5 @@ # This is an auto-generated file. DO NOT EDIT -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workflowtemplates.argoproj.io @@ -13,6690 +13,14026 @@ spec: - wftmpl singular: workflowtemplate scope: Namespaced - validation: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - activeDeadlineSeconds: - format: int64 - type: integer - affinity: - properties: - nodeAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + operator: type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - weight: - format: int32 - type: integer - required: - - preference - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + operator: type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - type: array - required: - - nodeSelectorTerms - type: object - type: object - podAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: + values: + items: type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: array + required: + - key + - operator type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: + nodeSelectorTerms: items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - operator: + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: array + required: + - key + - operator type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer + type: array + type: object + type: array required: - - podAffinityTerm - - weight + - nodeSelectorTerms type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: properties: - key: - type: string - operator: - type: string - values: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object type: array - required: - - key - - operator + matchLabels: + additionalProperties: + type: string + type: object type: object - type: array - matchLabels: - additionalProperties: + namespaces: + items: + type: string + type: array + topologyKey: type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - type: object - type: object - arguments: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: + type: array + topologyKey: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: properties: - name: - type: string - value: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: type: string required: - - name - - value + - topologyKey type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: items: - type: string + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object - required: - - name - type: object - type: array - type: object - artifactRepositoryRef: - properties: - configMap: - type: string - key: - type: string - type: object - automountServiceAccountToken: - type: boolean - dnsConfig: - properties: - nameservers: - items: - type: string - type: array - options: - items: - properties: - name: - type: string - value: - type: string type: object - type: array - searches: - items: - type: string - type: array - type: object - dnsPolicy: - type: string - entrypoint: - type: string - executor: - properties: - serviceAccountName: - type: string - type: object - hostAliases: - items: - properties: - hostnames: - items: - type: string - type: array - ip: - type: string type: object - type: array - hostNetwork: - type: boolean - imagePullSecrets: - items: + arguments: properties: - name: - type: string - type: object - type: array - metrics: - properties: - prometheus: - items: - properties: - counter: - properties: - value: - type: string - required: - - value - type: object - gauge: - properties: - realtime: - type: boolean - value: - type: string - required: - - realtime - - value - type: object - help: - type: string - histogram: - properties: - buckets: - items: - type: number - type: array - value: - type: string - required: - - buckets - - value - type: object - labels: - items: + artifacts: + items: + properties: + archive: properties: - key: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: type: string - value: + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object required: - key - - value type: object - type: array - name: - type: string - when: - type: string - required: - - help - - name - type: object - type: array - required: - - prometheus - type: object - nodeSelector: - additionalProperties: - type: string - type: object - onExit: - type: string - parallelism: - format: int64 - type: integer - podDisruptionBudget: - properties: - maxUnavailable: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - minAvailable: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - podGC: - properties: - strategy: - type: string - type: object - podPriority: - format: int32 - type: integer - podPriorityClassName: - type: string - podSpecPatch: - type: string - priority: - format: int32 - type: integer - retryStrategy: - properties: - backoff: - properties: - duration: - type: string - factor: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - maxDuration: - type: string - type: object - limit: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - retryPolicy: - type: string - type: object - schedulerName: - type: string - securityContext: - properties: - fsGroup: - format: int64 - type: integer - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - serviceAccountName: - type: string - shutdown: - type: string - suspend: - type: boolean - synchronization: - properties: - mutex: - properties: - name: - type: string - type: object - semaphore: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - type: object - type: object - templates: - items: - properties: - activeDeadlineSeconds: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - affinity: - properties: - nodeAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + revision: + type: string + sshPrivateKeySecret: properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - weight: - format: int32 - type: integer + key: + type: string + name: + type: string + optional: + type: boolean required: - - preference - - weight + - key type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - type: array - required: - - nodeSelectorTerms - type: object - type: object - podAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + usernameSecret: properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer + key: + type: string + name: + type: string + optional: + type: boolean required: - - podAffinityTerm - - weight + - key type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: + key: type: string + name: + type: string + optional: + type: boolean required: - - topologyKey + - key type: object - type: array - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + krbConfigConfigMap: properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer + key: + type: string + name: + type: string + optional: + type: boolean required: - - podAffinityTerm - - weight + - key type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + krbKeytabSecret: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: type: string - type: array - topologyKey: + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - topologyKey + - key type: object - type: array - type: object - type: object - archiveLocation: - properties: - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: + bucket: type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - hdfs: - properties: - addresses: - items: + createBucketIfNotPresent: + type: boolean + endpoint: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: - type: string - required: - - url - type: object - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - raw: - properties: - data: - type: string - required: - - data - type: object - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - type: object - arguments: - properties: - artifacts: - items: - properties: - archive: + key: + type: string + lifecycleRule: properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer type: object - archiveLogs: - type: boolean - artifactory: + secretKeySecret: properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: + key: type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object + name: + type: string + optional: + type: boolean required: - - url + - key type: object - from: + securityToken: type: string - gcs: + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: properties: - bucket: - type: string key: type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object + name: + type: string + optional: + type: boolean required: - - bucket - key type: object - git: + bucket: + type: string + createBucketIfNotPresent: properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: + objectLocking: type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo type: object - globalName: + endpoint: type: string - hdfs: - properties: - addresses: - items: - type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: + insecure: type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: + key: type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: + region: + type: string + roleARN: + type: string + secretKeySecret: properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean key: type: string - region: - type: string - roleARN: + name: type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: + optional: type: boolean required: - - accessKeySecret - - bucket - - endpoint - key - - secretKeySecret type: object - subPath: - type: string - required: - - name + useSDKCreds: + type: boolean type: object - type: array - parameters: - items: + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: properties: default: type: string - enum: - items: - type: string - type: array - globalName: + event: type: string - name: + expression: type: string - value: + jqFilter: type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: type: object - required: - - name type: object - type: array - type: object - automountServiceAccountToken: - type: boolean - container: - properties: - args: - items: + required: + - name + type: object + type: array + type: object + artifactRepositoryRef: + properties: + configMap: + type: string + key: + type: string + type: object + automountServiceAccountToken: + type: boolean + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + options: + items: + properties: + name: type: string - type: array - command: - items: + value: type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - type: object + type: object + type: array + searches: + items: + type: string + type: array + type: object + dnsPolicy: + type: string + entrypoint: + type: string + executor: + properties: + serviceAccountName: + type: string + type: object + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + hostNetwork: + type: boolean + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + metrics: + properties: + prometheus: + items: + properties: + counter: + properties: + value: + type: string required: - - name + - value + type: object + gauge: + properties: + realtime: + type: boolean + value: + type: string + required: + - realtime + - value + type: object + help: + type: string + histogram: + properties: + buckets: + items: + type: number + type: array + value: + type: string + required: + - buckets + - value + type: object + labels: + items: + properties: + key: + type: string + value: + type: string + required: + - key + - value + type: object + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + nodeSelector: + additionalProperties: + type: string + type: object + onExit: + type: string + parallelism: + format: int64 + type: integer + podDisruptionBudget: + properties: + maxUnavailable: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + minAvailable: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator type: object type: array - envFrom: + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + podGC: + properties: + labelSelector: + properties: + matchExpressions: items: properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: + key: type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator type: object type: array - image: + matchLabels: + additionalProperties: + type: string + type: object + type: object + strategy: + type: string + type: object + podMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + podPriority: + format: int32 + type: integer + podPriorityClassName: + type: string + podSpecPatch: + type: string + priority: + format: int32 + type: integer + retryStrategy: + properties: + affinity: + properties: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: type: string - imagePullPolicy: + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: type: string - lifecycle: + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object + schedulerName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + shutdown: + type: string + suspend: + type: boolean + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key type: object - livenessProbe: + type: object + type: object + templateDefaults: + properties: + activeDeadlineSeconds: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + affinity: + properties: + nodeAffinity: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: properties: - host: - type: string - httpHeaders: + nodeSelectorTerms: items: properties: - name: - type: string - value: - type: string - required: - - name - - value + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array type: object type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - nodeSelectorTerms type: object - timeoutSeconds: - format: int32 - type: integer type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: + podAffinity: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: properties: - name: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: type: string - value: + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: type: string required: - - name - - value + - topologyKey type: object - type: array - path: + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + archiveLocation: + properties: + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + name: type: string + optional: + type: boolean required: - - port + - key type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + url: + type: string + usernameSecret: properties: - host: + key: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true + name: + type: string + optional: + type: boolean required: - - port + - key type: object - timeoutSeconds: - format: int32 - type: integer + required: + - url type: object - resources: + gcs: properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key type: object + required: + - key type: object - securityContext: + git: properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: + depth: format: int64 type: integer - runAsNonRoot: + disableSubmodules: type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: properties: - level: + key: type: string - role: + name: type: string - type: + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: type: string - user: + name: type: string + optional: + type: boolean + required: + - key type: object - windowsOptions: + usernameSecret: properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: + key: type: string - runAsUserName: + name: type: string + optional: + type: boolean + required: + - key type: object + required: + - repo type: object - startupProbe: + hdfs: properties: - exec: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: properties: - command: - items: - type: string - type: array + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key type: object - failureThreshold: - format: int32 - type: integer - httpGet: + krbConfigConfigMap: properties: - host: + key: type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + name: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - port + - key type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + oss: + properties: + accessKeySecret: properties: - host: + key: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true + name: + type: string + optional: + type: boolean required: - - port + - key type: object - timeoutSeconds: - format: int32 - type: integer + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: + raw: + properties: + data: + type: string + required: + - data + type: object + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + type: object + automountServiceAccountToken: + type: boolean + container: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: items: properties: - devicePath: - type: string name: type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object required: - - devicePath - name type: object type: array - volumeMounts: + envFrom: items: properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: type: string - required: - - mountPath - - name + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object type: object type: array - workingDir: + image: type: string - required: - - image - type: object - daemon: - type: boolean - dag: - properties: - failFast: - type: boolean - target: + imagePullPolicy: type: string - tasks: - items: - properties: - arguments: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + containerSet: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + dependencies: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + required: + - containers + type: object + daemon: + type: boolean + dag: + properties: + failFast: + type: boolean + target: + type: string + tasks: + items: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + continueOn: + properties: + error: + type: boolean + failed: + type: boolean + type: object + dependencies: + items: + type: string + type: array + depends: + type: string + hooks: + additionalProperties: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + template: + type: string + required: + - template + type: object + type: object + name: + type: string + onExit: + type: string + template: + type: string + templateRef: + properties: + clusterScope: + type: boolean + name: + type: string + template: + type: string + type: object + when: + type: string + withItems: + items: + type: object + type: array + withParam: + type: string + withSequence: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + end: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + format: + type: string + start: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + required: + - name + type: object + type: array + required: + - tasks + type: object + data: + properties: + source: + properties: + artifactPaths: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: object + transformation: + items: + properties: + expression: + type: string + required: + - expression + type: object + type: array + required: + - source + - transformation + type: object + executor: + properties: + serviceAccountName: + type: string + type: object + failFast: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + inputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + memoize: + properties: + cache: + properties: + configMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - configMap + type: object + key: + type: string + maxAge: + type: string + required: + - cache + - key + - maxAge + type: object + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + metrics: + properties: + prometheus: + items: + properties: + counter: + properties: + value: + type: string + required: + - value + type: object + gauge: + properties: + realtime: + type: boolean + value: + type: string + required: + - realtime + - value + type: object + help: + type: string + histogram: + properties: + buckets: + items: + type: number + type: array + value: + type: string + required: + - buckets + - value + type: object + labels: + items: + properties: + key: + type: string + value: + type: string + required: + - key + - value + type: object + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + outputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + exitCode: + type: string + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + result: + type: string + type: object + parallelism: + format: int64 + type: integer + podSpecPatch: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + resource: + properties: + action: + type: string + failureCondition: + type: string + flags: + items: + type: string + type: array + manifest: + type: string + mergeStrategy: + type: string + setOwnerReference: + type: boolean + successCondition: + type: string + required: + - action + type: object + retryStrategy: + properties: + affinity: + properties: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object + schedulerName: + type: string + script: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + source: + type: string + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + - source + type: object + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + sidecars: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + steps: + items: + type: array + type: array + suspend: + properties: + duration: + type: string + type: object + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + type: object + timeout: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + templates: + items: + properties: + activeDeadlineSeconds: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - name: + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: type: string - optional: - type: boolean - required: - - key + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - repo: + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + archiveLocation: + properties: + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + raw: + properties: + data: + type: string + required: + - data + type: object + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + type: object + automountServiceAccountToken: + type: boolean + container: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - image + type: object + containerSet: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + dependencies: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - revision: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object required: - - repo + - port type: object - globalName: + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - hdfs: - properties: - addresses: - items: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + required: + - containers + type: object + daemon: + type: boolean + dag: + properties: + failFast: + type: boolean + target: + type: string + tasks: + items: + properties: + arguments: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + usernameSecret: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: type: string - name: + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + parameters: + items: + properties: + default: + type: string + enum: + items: type: string - secretKeySecret: + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + type: object + continueOn: + properties: + error: + type: boolean + failed: + type: boolean + type: object + dependencies: + items: + type: string + type: array + depends: + type: string + hooks: + additionalProperties: + properties: + arguments: + properties: + artifacts: + items: properties: - key: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: type: string - name: + fromExpression: type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer name: type: string optional: type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string required: - - key + - name type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: + type: array + parameters: + items: properties: - key: + default: + type: string + enum: + items: + type: string + type: array + globalName: type: string name: type: string - optional: - type: boolean + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object required: - - key + - name type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: - items: + type: array + type: object + template: + type: string + required: + - template + type: object + type: object + name: + type: string + onExit: + type: string + template: + type: string + templateRef: + properties: + clusterScope: + type: boolean + name: + type: string + template: + type: string + type: object + when: + type: string + withItems: + items: + type: object + type: array + withParam: + type: string + withSequence: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + end: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + format: + type: string + start: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + required: + - name + type: object + type: array + required: + - tasks + type: object + data: + properties: + source: + properties: + artifactPaths: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: type: string - type: array - globalName: - type: string - name: + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: type: string - value: + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: type: string - valueFrom: + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: + name: type: string - path: + value: type: string - supplied: - type: object + required: + - name + - value type: object - required: - - name - type: object - type: array - type: object - continueOn: - properties: - error: + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: type: boolean - failed: + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name type: object - dependencies: - items: + type: object + transformation: + items: + properties: + expression: type: string - type: array - depends: - type: string - name: + required: + - expression + type: object + type: array + required: + - source + - transformation + type: object + executor: + properties: + serviceAccountName: + type: string + type: object + failFast: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: type: string - onExit: + type: array + ip: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: type: string - template: + type: array + command: + items: type: string - templateRef: + type: array + env: + items: properties: - clusterScope: - type: boolean name: type: string - runtimeResolution: - type: boolean - template: + value: type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name type: object - when: - type: string - withItems: - items: - type: object - type: array - withParam: - type: string - withSequence: + type: array + envFrom: + items: properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - end: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - format: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: type: string - start: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object type: object - required: - - name - type: object - type: array - required: - - tasks - type: object - executor: - properties: - serviceAccountName: - type: string - type: object - hostAliases: - items: - properties: - hostnames: - items: - type: string - type: array - ip: - type: string - type: object - type: array - initContainers: - items: - properties: - args: - items: + type: array + image: type: string - type: array - command: - items: + imagePullPolicy: type: string - type: array - env: - items: + lifecycle: properties: - name: - type: string - value: - type: string - valueFrom: + postStart: properties: - configMapKeyRef: + exec: properties: - key: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - name: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - optional: - type: boolean required: - - key + - port type: object - fieldRef: + tcpSocket: properties: - apiVersion: - type: string - fieldPath: + host: type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - fieldPath + - port type: object - resourceFieldRef: + type: object + preStop: + properties: + exec: properties: - containerName: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - divisor: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: anyOf: - type: integer - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - resource: + scheme: type: string required: - - resource + - port type: object - secretKeyRef: + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object type: object - required: - - name type: object - type: array - envFrom: - items: + livenessProbe: properties: - configMapRef: + exec: properties: - name: - type: string - optional: - type: boolean + command: + items: + type: string + type: array type: object - prefix: - type: string - secretRef: + failureThreshold: + format: int32 + type: integer + httpGet: properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: + host: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - mirrorVolumeMounts: - type: boolean - name: - type: string - ports: - items: - properties: - containerPort: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: format: int32 type: integer - hostIP: - type: string - hostPort: + periodSeconds: format: int32 type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + containerPort: + format: int32 + type: integer + hostIP: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + hostPort: + format: int32 + type: integer + name: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + protocol: + default: TCP type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true + - containerPort type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: type: string - type: array - drop: - items: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: + type: object + requests: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name + type: object type: object - type: array - volumeMounts: - items: + securityContext: properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: + allowPrivilegeEscalation: type: boolean - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - workingDir: - type: string - required: - - name - type: object - type: array - inputs: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: + capabilities: + properties: + add: + items: type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: + type: array + drop: + items: type: string - name: + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: properties: - bucket: - type: string - key: + devicePath: + type: string + name: type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object required: - - bucket - - key + - devicePath + - name type: object - git: + type: array + volumeMounts: + items: properties: - depth: - format: int64 - type: integer - fetch: - items: - type: string - type: array - insecureIgnoreHostKey: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: + subPath: type: string - revision: + subPathExpr: type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object required: - - repo + - mountPath + - name type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: + type: array + workingDir: + type: string + required: + - name + type: object + type: array + inputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbKeytabSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - parameters: - items: - properties: - default: - type: string - enum: - items: + useSDKCreds: + type: boolean + type: object + subPath: type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object - required: - - name - type: object - type: array - type: object - memoize: - properties: - cache: - properties: - configMap: + required: + - name + type: object + type: array + parameters: + items: properties: - key: + default: + type: string + enum: + items: + type: string + type: array + globalName: type: string name: type: string - optional: - type: boolean + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object required: - - key + - name type: object - required: - - configMap - type: object - key: - type: string - maxAge: - type: string - required: - - cache - - key - - maxAge - type: object - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - metrics: - properties: - prometheus: - items: + type: array + type: object + memoize: + properties: + cache: properties: - counter: - properties: - value: - type: string - required: - - value - type: object - gauge: + configMap: properties: - realtime: - type: boolean - value: + key: type: string - required: - - realtime - - value - type: object - help: - type: string - histogram: - properties: - buckets: - items: - type: number - type: array - value: + name: type: string + optional: + type: boolean required: - - buckets - - value + - key type: object - labels: - items: + required: + - configMap + type: object + key: + type: string + maxAge: + type: string + required: + - cache + - key + - maxAge + type: object + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + metrics: + properties: + prometheus: + items: + properties: + counter: properties: - key: - type: string value: type: string required: - - key - value type: object - type: array - name: - type: string - when: - type: string - required: - - help - - name - type: object - type: array - required: - - prometheus - type: object - name: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - outputs: - properties: - artifacts: - items: - properties: - archive: - properties: - none: - type: object - tar: - properties: - compressionLevel: - format: int32 - type: integer - type: object - zip: - type: object - type: object - archiveLogs: - type: boolean - artifactory: - properties: - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - url: - type: string - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - url - type: object - from: - type: string - gcs: - properties: - bucket: - type: string - key: - type: string - serviceAccountKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - bucket - - key - type: object - git: - properties: - depth: - format: int64 - type: integer - fetch: - items: + gauge: + properties: + realtime: + type: boolean + value: type: string - type: array - insecureIgnoreHostKey: - type: boolean - passwordSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - repo: - type: string - revision: - type: string - sshPrivateKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - usernameSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - repo - type: object - globalName: - type: string - hdfs: - properties: - addresses: - items: + required: + - realtime + - value + type: object + help: + type: string + histogram: + properties: + buckets: + items: + type: number + type: array + value: type: string - type: array - force: - type: boolean - hdfsUser: - type: string - krbCCacheSecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - krbConfigConfigMap: + required: + - buckets + - value + type: object + labels: + items: properties: key: type: string - name: + value: type: string - optional: - type: boolean required: - key + - value type: object - krbKeytabSecret: - properties: - key: + type: array + name: + type: string + when: + type: string + required: + - help + - name + type: object + type: array + required: + - prometheus + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + outputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: type: string - name: + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: type: string - optional: - type: boolean - required: - - key - type: object - krbRealm: - type: string - krbServicePrincipalName: - type: string - krbUsername: - type: string - path: - type: string - required: - - addresses - - path - type: object - http: - properties: - headers: - items: + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: type: string + optional: + type: boolean required: - - name - - value + - key type: object - type: array - url: - type: string - required: - - url - type: object - mode: - format: int32 - type: integer - name: - type: string - optional: - type: boolean - oss: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - key: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - path: - type: string - raw: - properties: - data: - type: string - required: - - data - type: object - recurseMode: - type: boolean - s3: - properties: - accessKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - bucket: - type: string - endpoint: - type: string - insecure: - type: boolean - key: - type: string - region: - type: string - roleARN: - type: string - secretKeySecret: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - useSDKCreds: - type: boolean - required: - - accessKeySecret - - bucket - - endpoint - - key - - secretKeySecret - type: object - subPath: - type: string - required: - - name - type: object - type: array - exitCode: - type: string - parameters: - items: - properties: - default: - type: string - enum: - items: + useSDKCreds: + type: boolean + type: object + subPath: type: string - type: array - globalName: - type: string - name: - type: string - value: - type: string - valueFrom: - properties: - default: - type: string - event: - type: string - jqFilter: - type: string - jsonPath: - type: string - parameter: - type: string - path: - type: string - supplied: - type: object - type: object - required: - - name - type: object - type: array - result: - type: string - type: object - parallelism: - format: int64 - type: integer - podSpecPatch: - type: string - priority: - format: int32 - type: integer - priorityClassName: - type: string - resource: - properties: - action: - type: string - failureCondition: - type: string - flags: - items: + required: + - name + type: object + type: array + exitCode: type: string - type: array - manifest: - type: string - mergeStrategy: - type: string - setOwnerReference: - type: boolean - successCondition: - type: string - required: - - action - type: object - retryStrategy: - properties: - backoff: - properties: - duration: - type: string - factor: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - maxDuration: + parameters: + items: + properties: + default: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + result: + type: string + type: object + parallelism: + format: int64 + type: integer + podSpecPatch: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + resource: + properties: + action: + type: string + failureCondition: + type: string + flags: + items: type: string - type: object - limit: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - retryPolicy: - type: string - type: object - schedulerName: - type: string - script: - properties: - args: - items: + type: array + manifest: type: string - type: array - command: - items: + mergeStrategy: type: string - type: array - env: - items: + setOwnerReference: + type: boolean + successCondition: + type: string + required: + - action + type: object + retryStrategy: + properties: + affinity: properties: - name: + nodeAntiAffinity: + type: object + type: object + backoff: + properties: + duration: type: string - value: + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: type: string - valueFrom: + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object + schedulerName: + type: string + script: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: properties: - configMapKeyRef: + exec: properties: - key: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - name: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - optional: - type: boolean required: - - key + - port type: object - fieldRef: + tcpSocket: properties: - apiVersion: - type: string - fieldPath: + host: type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - fieldPath + - port type: object - resourceFieldRef: + type: object + preStop: + properties: + exec: properties: - containerName: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - divisor: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: anyOf: - type: integer - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - resource: + scheme: type: string required: - - resource + - port type: object - secretKeyRef: + tcpSocket: properties: - key: - type: string - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true required: - - key + - port type: object type: object - required: - - name type: object - type: array - envFrom: - items: + livenessProbe: properties: - configMapRef: + exec: properties: - name: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: type: string - optional: - type: boolean + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port type: object - prefix: - type: string - secretRef: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - name: + host: type: string - optional: - type: boolean + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port type: object + timeoutSeconds: + format: int32 + type: integer type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + name: + type: string + ports: + items: properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + containerPort: + format: int32 + type: integer + hostIP: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + hostPort: + format: int32 + type: integer + name: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: properties: - containerPort: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: format: int32 type: integer - hostIP: - type: string - hostPort: + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: format: int32 type: integer - name: - type: string - protocol: - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: + type: object + requests: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + source: + type: string + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: type: string - type: array - drop: - items: + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: properties: - level: - type: string - role: - type: string - type: + devicePath: type: string - user: + name: type: string + required: + - devicePath + - name type: object - windowsOptions: + type: array + volumeMounts: + items: properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: + mountPath: type: string - type: object - type: object - source: - type: string - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: + mountPropagation: type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: + name: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + readOnly: + type: boolean + subPath: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + subPathExpr: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - mountPath + - name type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - volumeMounts: - items: + type: array + workingDir: + type: string + required: + - image + - source + type: object + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - mountPath: - type: string - mountPropagation: + level: type: string - name: + role: type: string - readOnly: - type: boolean - subPath: + type: type: string - subPathExpr: + user: type: string - required: - - mountPath - - name type: object - type: array - workingDir: - type: string - required: - - image - - source - type: object - securityContext: - properties: - fsGroup: - format: int64 - type: integer - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - sysctls: - items: + seccompProfile: properties: - name: + localhostProfile: type: string - value: + type: type: string required: - - name - - value + - type type: object - type: array - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - runAsUserName: - type: string - type: object - type: object - serviceAccountName: - type: string - sidecars: - items: - properties: - args: - items: - type: string - type: array - command: + supplementalGroups: items: - type: string + format: int64 + type: integer type: array - env: + sysctls: items: properties: name: type: string value: type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - type: object required: - name + - value type: object type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: + windowsOptions: properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + sidecars: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - tcpSocket: + name: + type: string + value: + type: string + valueFrom: properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object type: object + required: + - name type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: + type: array + envFrom: + items: properties: - host: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: type: string - httpHeaders: - items: + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: properties: - name: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: type: string - value: + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: type: string required: - - name - - value + - port type: object - type: array - path: + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + mirrorVolumeMounts: + type: boolean + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: + hostPort: + format: int32 + type: integer + name: type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: + protocol: + default: TCP type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - - port + - containerPort type: object - timeoutSeconds: - format: int32 - type: integer - type: object - mirrorVolumeMounts: - type: boolean - name: - type: string - ports: - items: + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: properties: - containerPort: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: format: int32 type: integer - hostIP: - type: string - hostPort: + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: format: int32 type: integer - name: - type: string - protocol: - type: string - required: - - containerPort type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - path: - type: string - port: + resources: + properties: + limits: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: + type: object + requests: + additionalProperties: anyOf: - type: integer - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: type: string - type: array - drop: - items: + role: type: string - type: array + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: + type: array + volumeMounts: + items: properties: - level: + mountPath: type: string - role: + mountPropagation: type: string - type: + name: type: string - user: + readOnly: + type: boolean + subPath: + type: string + subPathExpr: type: string + required: + - mountPath + - name type: object - windowsOptions: + type: array + workingDir: + type: string + required: + - name + type: object + type: array + steps: + items: + type: array + type: array + suspend: + properties: + duration: + type: string + type: object + synchronization: + properties: + mutex: + properties: + name: + type: string + type: object + semaphore: + properties: + configMapKeyRef: properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: + key: type: string - runAsUserName: + name: type: string + optional: + type: boolean + required: + - key type: object type: object - startupProbe: - properties: - exec: - properties: - command: - items: + type: object + timeout: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - httpGet: - properties: - host: + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: type: string - httpHeaders: - items: + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: properties: - name: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: type: string - value: + volumeMode: + type: string + volumeName: type: string - required: - - name - - value type: object - type: array - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: + required: + - spec + type: object + type: object + fc: properties: - devicePath: + fsType: type: string - name: + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object required: - - devicePath - - name + - driver type: object - type: array - volumeMounts: - items: + flocker: properties: - mountPath: + datasetName: type: string - mountPropagation: + datasetUUID: type: string - name: + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: type: string readOnly: type: boolean - subPath: + required: + - pdName + type: object + gitRepo: + properties: + directory: type: string - subPathExpr: + repository: + type: string + revision: type: string required: - - mountPath - - name + - repository type: object - type: array - workingDir: - type: string - required: - - name - type: object - type: array - steps: - items: - type: array - type: array - suspend: - properties: - duration: - type: string - type: object - synchronization: - properties: - mutex: - properties: - name: - type: string - type: object - semaphore: - properties: - configMapKeyRef: + glusterfs: properties: - key: + endpoints: type: string - name: + path: type: string - optional: + readOnly: type: boolean required: - - key + - endpoints + - path type: object - type: object - type: object - template: - type: string - templateRef: - properties: - clusterScope: - type: boolean - name: - type: string - runtimeResolution: - type: boolean - template: - type: string - type: object - timeout: - type: string - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: + hostPath: + properties: + path: type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - readOnly: - type: boolean - volumeAttributes: - additionalProperties: + type: type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: + name: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: + targetPortal: type: string - type: array - wwids: - items: + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + readOnly: + type: boolean + server: type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: + keyring: + type: string + monitors: + items: type: string - type: object - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object + name: + type: string type: object - type: array - required: - - sources - type: object - quobyte: + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + type: array + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + ttlStrategy: + properties: + secondsAfterCompletion: + format: int32 + type: integer + secondsAfterFailure: + format: int32 + type: integer + secondsAfterSuccess: + format: int32 + type: integer + type: object + volumeClaimGC: + properties: + strategy: + type: string + type: object + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: + apiGroup: type: string - user: + kind: type: string - volume: + name: type: string required: - - registry - - volume + - kind + - name type: object - rbd: + resources: properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string + matchLabels: + additionalProperties: + type: string type: object - user: - type: string - required: - - image - - monitors type: object - scaleIO: + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + capacity: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + phase: + type: string + type: object + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: properties: - fsType: + name: type: string - gateway: + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: type: string - protectionDomain: + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: type: string - readOnly: - type: boolean - secretRef: + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + readOnly: + type: boolean + volumeClaimTemplate: + properties: + metadata: + type: object + spec: properties: - name: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: type: string type: object - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string required: - - gateway - - secretRef - - system + - spec type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string type: object - storageos: + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeName: - type: string - volumeNamespace: + name: type: string type: object - vsphereVolume: + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: + name: type: string - required: - - volumePath type: object + targetPortal: + type: string required: - - name + - iqn + - lun + - targetPortal type: object - type: array - required: - - name - type: object - type: array - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - ttlSecondsAfterFinished: - format: int32 - type: integer - ttlStrategy: - properties: - secondsAfterCompletion: - format: int32 - type: integer - secondsAfterFailure: - format: int32 - type: integer - secondsAfterSuccess: - format: int32 - type: integer - type: object - volumeClaimGC: - properties: - strategy: - type: string - type: object - volumeClaimTemplates: - items: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - accessModes: - items: + name: + type: string + nfs: + properties: + path: type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object type: object - type: object - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: + type: array + required: + - sources + type: object + quobyte: + properties: + group: type: string - type: array - capacity: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - phase: - type: string - type: object - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: + readOnly: + type: boolean + registry: type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: type: string - type: object - readOnly: - type: boolean - volumeAttributes: - additionalProperties: + type: array + pool: type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + readOnly: + type: boolean + secretRef: properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: + name: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: + user: type: string - type: array - wwids: - items: + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + gateway: type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: + protectionDomain: type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: + readOnly: + type: boolean + secretRef: properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object + name: + type: string type: object - type: array - required: - - sources - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: + sslEnabled: + type: boolean + storageMode: type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - key: - type: string - mode: - format: int32 - type: integer - path: + name: type: string - required: - - key - - path type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + workflowMetadata: type: object - type: array - workflowMetadata: - type: object - workflowTemplateRef: - properties: - clusterScope: - type: boolean - name: - type: string - type: object - type: object - required: - - metadata - - spec - type: object - version: v1alpha1 - versions: - - name: v1alpha1 + workflowTemplateRef: + properties: + clusterScope: + type: boolean + name: + type: string + type: object + type: object + required: + - metadata + - spec + type: object served: true storage: true diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/kustomization.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/kustomization.yaml index b868dd5f5a..3ccdade18f 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/kustomization.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/kustomization.yaml @@ -1,5 +1,5 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -bases: +resources: - minimal diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_clusterworkflowtemplates.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_clusterworkflowtemplates.yaml index 8285945531..889dfe2f50 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_clusterworkflowtemplates.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_clusterworkflowtemplates.yaml @@ -1,4 +1,4 @@ -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: clusterworkflowtemplates.argoproj.io @@ -13,8 +13,24 @@ spec: - cwft singular: clusterworkflowtemplate scope: Cluster - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_cronworkflows.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_cronworkflows.yaml index e8763df108..812cf11434 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_cronworkflows.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_cronworkflows.yaml @@ -1,4 +1,4 @@ -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: cronworkflows.argoproj.io @@ -13,8 +13,28 @@ spec: - cronwf singular: cronworkflow scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_workfloweventbindings.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_workfloweventbindings.yaml index a58de8e76b..22e2ecf0f6 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_workfloweventbindings.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_workfloweventbindings.yaml @@ -1,4 +1,4 @@ -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workfloweventbindings.argoproj.io @@ -12,8 +12,24 @@ spec: - wfeb singular: workfloweventbinding scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_workflows.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_workflows.yaml index 6abd6bbbf9..6e646adc7d 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_workflows.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_workflows.yaml @@ -1,18 +1,8 @@ -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workflows.argoproj.io spec: - additionalPrinterColumns: - - JSONPath: .status.phase - description: Status of the workflow - name: Status - type: string - - JSONPath: .status.startedAt - description: When the workflow was started - format: date-time - name: Age - type: date group: argoproj.io names: kind: Workflow @@ -22,9 +12,39 @@ spec: - wf singular: workflow scope: Namespaced - subresources: {} - version: v1alpha1 versions: - - name: v1alpha1 + - additionalPrinterColumns: + - description: Status of the workflow + jsonPath: .status.phase + name: Status + type: string + - description: When the workflow was started + format: date-time + jsonPath: .status.startedAt + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true + subresources: {} diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_workflowtemplates.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_workflowtemplates.yaml index 03a7b1e97c..8165ec25b8 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_workflowtemplates.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/crds/minimal/argoproj.io_workflowtemplates.yaml @@ -1,4 +1,4 @@ -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: workflowtemplates.argoproj.io @@ -12,8 +12,24 @@ spec: - wftmpl singular: workflowtemplate scope: Namespaced - version: v1alpha1 versions: - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object served: true storage: true diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/workflow-controller/workflow-controller-deployment.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/workflow-controller/workflow-controller-deployment.yaml index 99f50ea925..3deacb6e02 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/workflow-controller/workflow-controller-deployment.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/workflow-controller/workflow-controller-deployment.yaml @@ -14,28 +14,40 @@ spec: serviceAccountName: argo containers: - name: workflow-controller - image: argoproj/workflow-controller:v2.12.9 + image: docker.io/argoproj/workflow-controller:latest + securityContext: + readOnlyRootFilesystem: true + runAsNonRoot: true + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL command: - workflow-controller args: - --configmap - workflow-controller-configmap - --executor-image - - argoproj/argoexec:v2.12.9 + - argoproj/argoexec:latest + env: + - name: LEADER_ELECTION_IDENTITY + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name ports: - name: metrics containerPort: 9090 - # Periodically check we are listening on the metrics port - # causing a restart if it is not OK. - # This takes advantage of the fact that if the metrics service has died, - # then the controller has died. - # In testing, it appears to take 60-90s from failure to restart. + - containerPort: 6060 livenessProbe: httpGet: - port: metrics - path: /metrics - initialDelaySeconds: 30 - periodSeconds: 30 + port: 6060 + path: /healthz + # Require three failures to tolerate transient errors. + failureThreshold: 3 + initialDelaySeconds: 90 + periodSeconds: 60 + timeoutSeconds: 30 securityContext: runAsNonRoot: true nodeSelector: diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/base/workflow-controller/workflow-controller-metrics-service.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/base/workflow-controller/workflow-controller-metrics-service.yaml index 0bf5b0ccc9..d040adaa08 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/base/workflow-controller/workflow-controller-metrics-service.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/base/workflow-controller/workflow-controller-metrics-service.yaml @@ -2,6 +2,8 @@ apiVersion: v1 kind: Service metadata: name: workflow-controller-metrics + labels: + app: workflow-controller spec: selector: app: workflow-controller diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/cluster-install/argo-server-rbac/argo-server-clusterole.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/cluster-install/argo-server-rbac/argo-server-clusterole.yaml index 37fcf1128a..f954115b00 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/cluster-install/argo-server-rbac/argo-server-clusterole.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/cluster-install/argo-server-rbac/argo-server-clusterole.yaml @@ -47,6 +47,8 @@ rules: - apiGroups: - argoproj.io resources: + - eventsources + - sensors - workflows - workfloweventbindings - workflowtemplates diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/cluster-install/workflow-controller-rbac/kustomization.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/cluster-install/workflow-controller-rbac/kustomization.yaml index 69730fbf9f..0ce4eff69b 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/cluster-install/workflow-controller-rbac/kustomization.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/cluster-install/workflow-controller-rbac/kustomization.yaml @@ -7,13 +7,3 @@ resources: - workflow-controller-clusterrolebinding.yaml - workflow-controller-role.yaml - workflow-controller-rolebinding.yaml - -patches: -- patch: | - apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRoleBinding - metadata: - name: argo-binding - subjects: - - kind: ServiceAccount - name: argo diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/cluster-install/workflow-controller-rbac/workflow-controller-role.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/cluster-install/workflow-controller-rbac/workflow-controller-role.yaml index 7ccf9e809e..861767172e 100755 --- a/manifests/kustomize/third-party/argo/upstream/manifests/cluster-install/workflow-controller-rbac/workflow-controller-role.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/cluster-install/workflow-controller-rbac/workflow-controller-role.yaml @@ -3,9 +3,17 @@ kind: Role metadata: name: argo-role rules: -- apiGroups: - - "" - resources: - - secrets - verbs: - - get \ No newline at end of file + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - get + - update + - apiGroups: + - "" + resources: + - secrets + verbs: + - get diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/namespace-install/argo-server-rbac/argo-server-role.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/namespace-install/argo-server-rbac/argo-server-role.yaml index a23fa8a920..546be63414 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/namespace-install/argo-server-rbac/argo-server-role.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/namespace-install/argo-server-rbac/argo-server-role.yaml @@ -47,6 +47,8 @@ rules: - apiGroups: - argoproj.io resources: + - eventsources + - sensors - workflows - workfloweventbindings - workflowtemplates diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/namespace-install/workflow-controller-rbac/workflow-controller-role.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/namespace-install/workflow-controller-rbac/workflow-controller-role.yaml index c72eee346e..908a73626a 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/namespace-install/workflow-controller-rbac/workflow-controller-role.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/namespace-install/workflow-controller-rbac/workflow-controller-role.yaml @@ -3,94 +3,102 @@ kind: Role metadata: name: argo-role rules: -- apiGroups: - - "" - resources: - - pods - - pods/exec - verbs: - - create - - get - - list - - watch - - update - - patch - - delete -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - watch - - list -- apiGroups: - - "" - resources: - - persistentvolumeclaims - verbs: - - create - - delete - - get -- apiGroups: - - argoproj.io - resources: - - workflows - - workflows/finalizers - verbs: - - get - - list - - watch - - update - - patch - - delete - - create -- apiGroups: - - argoproj.io - resources: - - workflowtemplates - - workflowtemplates/finalizers - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - serviceaccounts - verbs: - - get - - list -- apiGroups: - - "" - resources: - - secrets - verbs: - - get -- apiGroups: - - argoproj.io - resources: - - cronworkflows - - cronworkflows/finalizers - verbs: - - get - - list - - watch - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch -- apiGroups: - - "policy" - resources: - - poddisruptionbudgets - verbs: - - create - - get - - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - get + - update + - apiGroups: + - "" + resources: + - pods + - pods/exec + verbs: + - create + - get + - list + - watch + - update + - patch + - delete + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - create + - delete + - get + - apiGroups: + - argoproj.io + resources: + - workflows + - workflows/finalizers + verbs: + - get + - list + - watch + - update + - patch + - delete + - create + - apiGroups: + - argoproj.io + resources: + - workflowtemplates + - workflowtemplates/finalizers + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - get + - list + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - apiGroups: + - argoproj.io + resources: + - cronworkflows + - cronworkflows/finalizers + verbs: + - get + - list + - watch + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - apiGroups: + - "policy" + resources: + - poddisruptionbudgets + verbs: + - create + - get + - delete diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/artifact-repositories-configmap.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/artifact-repositories-configmap.yaml index 82df052806..cd2033a3d6 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/artifact-repositories-configmap.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/artifact-repositories-configmap.yaml @@ -1,6 +1,14 @@ apiVersion: v1 +kind: ConfigMap +metadata: + name: artifact-repositories + annotations: + # you'll want to change the default over time, e.g. when you move to new storage solution, + # so we recommend you version them from the outset by suffixing the version + workflows.argoproj.io/default-artifact-repository: default-v1 data: - minio: | + default-v1: | + archiveLogs: true s3: bucket: my-bucket endpoint: minio:9000 @@ -11,6 +19,16 @@ data: secretKeySecret: name: my-minio-cred key: secretkey -kind: ConfigMap -metadata: - name: artifact-repositories + my-key: | + archiveLogs: true + s3: + bucket: my-bucket + endpoint: minio:9000 + insecure: true + accessKeySecret: + name: my-minio-cred + key: accesskey + secretKeySecret: + name: my-minio-cred + key: secretkey + empty: "" \ No newline at end of file diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/kubelet-executor-clusterrole.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/kubelet-executor-clusterrole.yaml new file mode 100644 index 0000000000..d667859649 --- /dev/null +++ b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/kubelet-executor-clusterrole.yaml @@ -0,0 +1,12 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: kubelet-executor +rules: + # This allows the kubelet executor. + - apiGroups: + - "" + resources: + - nodes/proxy + verbs: + - get \ No newline at end of file diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/kubelet-executor-default-clusterrolebinding.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/kubelet-executor-default-clusterrolebinding.yaml new file mode 100644 index 0000000000..f0aff8e6c4 --- /dev/null +++ b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/kubelet-executor-default-clusterrolebinding.yaml @@ -0,0 +1,12 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: kubelet-executor-default +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kubelet-executor +subjects: + - kind: ServiceAccount + name: default + namespace: argo diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/kustomization.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/kustomization.yaml index add9be781d..b809453642 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/kustomization.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/kustomization.yaml @@ -7,10 +7,12 @@ resources: - webhooks - argo-server-sso-secret.yaml - workflow-role.yaml + - kubelet-executor-clusterrole.yaml + - kubelet-executor-default-clusterrolebinding.yaml - workflow-default-rolebinding.yaml - cluster-workflow-template-rbac.yaml - artifact-repositories-configmap.yaml patchesStrategicMerge: - overlays/workflow-controller-configmap.yaml - - overlays/argo-server-deployment.yaml \ No newline at end of file + - overlays/argo-server-deployment.yaml diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/minio/kustomization.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/minio/kustomization.yaml index dccbebf654..2d81059de4 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/minio/kustomization.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/minio/kustomization.yaml @@ -2,6 +2,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - - minio-pod.yaml + - minio-deploy.yaml - minio-service.yaml - my-minio-cred-secret.yaml \ No newline at end of file diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/minio/minio-deploy.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/minio/minio-deploy.yaml new file mode 100644 index 0000000000..967b917413 --- /dev/null +++ b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/minio/minio-deploy.yaml @@ -0,0 +1,42 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: minio + labels: + app: minio +spec: + selector: + matchLabels: + app: minio + template: + metadata: + labels: + app: minio + spec: + containers: + - name: main + image: minio/minio:RELEASE.2019-12-17T23-16-33Z + env: + - name: MINIO_ACCESS_KEY + value: admin + - name: MINIO_SECRET_KEY + value: password + ports: + - containerPort: 9000 + command: [minio, server, /data] + lifecycle: + postStart: + exec: + command: [mkdir, -p, /data/my-bucket] + readinessProbe: + httpGet: + path: /minio/health/ready + port: 9000 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + httpGet: + path: /minio/health/live + port: 9000 + initialDelaySeconds: 5 + periodSeconds: 10 \ No newline at end of file diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/overlays/workflow-controller-configmap.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/overlays/workflow-controller-configmap.yaml index 4a118d21dc..c358ece92e 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/overlays/workflow-controller-configmap.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/overlays/workflow-controller-configmap.yaml @@ -1,7 +1,30 @@ apiVersion: v1 data: + executor: | + resources: + requests: + cpu: 10m + memory: 64Mi + containerRuntimeExecutor: docker + containerRuntimeExecutors: | + - name: k8sapi + selector: + matchLabels: + workflows.argoproj.io/container-runtime-executor: k8sapi + - name: emissary + selector: + matchLabels: + workflows.argoproj.io/container-runtime-executor: emissary + images: | + argoproj/argosay:v1: + command: [cowsay] + argoproj/argosay:v2: + command: [/argosay] + docker/whalesay:latest: + command: [cowsay] + python:alpine3.6: + command: [python3] artifactRepository: | - archiveLogs: true s3: bucket: my-bucket endpoint: minio:9000 @@ -13,17 +36,26 @@ data: name: my-minio-cred key: secretkey metricsConfig: | - disableLegacy: true enabled: true path: /metrics port: 9090 + namespaceParallelism: "10" links: | - - name: Example Workflow Link + - name: Workflow Link scope: workflow url: http://logging-facility?namespace=${metadata.namespace}&workflowName=${metadata.name}&startedAt=${status.startedAt}&finishedAt=${status.finishedAt} - - name: Example Pod Link + - name: Pod Link scope: pod url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}&startedAt=${status.startedAt}&finishedAt=${status.finishedAt} + - name: Pod Logs Link + scope: pod-logs + url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}&startedAt=${status.startedAt}&finishedAt=${status.finishedAt} + - name: Event Source Logs Link + scope: event-source-logs + url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}&startedAt=${status.startedAt}&finishedAt=${status.finishedAt} + - name: Sensor Logs Link + scope: sensor-logs + url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}&startedAt=${status.startedAt}&finishedAt=${status.finishedAt} kind: ConfigMap metadata: name: workflow-controller-configmap diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/prometheus/kustomization.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/prometheus/kustomization.yaml new file mode 100644 index 0000000000..4fa48f13b7 --- /dev/null +++ b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/prometheus/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - prometheus-deployment.yaml + - prometheus-config-cluster.yaml + - prometheus-service.yaml diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/prometheus/prometheus-deployment.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/prometheus/prometheus-deployment.yaml new file mode 100644 index 0000000000..7e54cb9619 --- /dev/null +++ b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/prometheus/prometheus-deployment.yaml @@ -0,0 +1,35 @@ +# This manifests creates a minimal Prometheus server to scrape and display the metrics emitted by the workflow +# controller. To open this server, create an external IP for the prometheus service or use kubectl port-forward, +# then open: +# +# localhost:9091/graph +# +# Note: this assumes the workflow-controller is emitting metrics in the default port (9090). This will need to +# be modified if the default is overriden. +apiVersion: apps/v1 +kind: Deployment +metadata: + name: prometheus +spec: + replicas: 1 + selector: + matchLabels: + app: prometheus + template: + metadata: + labels: + app: prometheus + name: prometheus + spec: + containers: + - name: prometheus + image: prom/prometheus + args: + - --config.file=/config/prometheus.yaml + volumeMounts: + - name: config + mountPath: /config + volumes: + - name: config + configMap: + name: prometheus-config diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/prometheus/prometheus-service.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/prometheus/prometheus-service.yaml new file mode 100644 index 0000000000..4f07a56d0f --- /dev/null +++ b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/prometheus/prometheus-service.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Service +metadata: + name: prometheus +spec: + selector: + app: prometheus + ports: + - name: metrics + port: 9090 diff --git a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/workflow-role.yaml b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/workflow-role.yaml index 1585039521..d7f4ee34f5 100644 --- a/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/workflow-role.yaml +++ b/manifests/kustomize/third-party/argo/upstream/manifests/quick-start/base/workflow-role.yaml @@ -1,11 +1,10 @@ -# https://argoproj.github.io/argo/workflow-rbac/ +# https://argoproj.github.io/argo-workflows/workflow-rbac/ apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: workflow-role rules: # pod get/watch is used to identify the container IDs of the current pod - # pod patch is used to annotate the step's outputs back to controller (e.g. artifact location) - apiGroups: - "" resources: @@ -13,6 +12,8 @@ rules: verbs: - get - watch + # pod patch is used to annotate the step's outputs back to controller (e.g. artifact location) + # This is ONLY needed if the step/task has outputs that are used by another step or task. - patch # logs get/watch are used to get the pods logs for script outputs, and for log archival - apiGroups: @@ -22,8 +23,24 @@ rules: verbs: - get - watch + # Only needed if you are running the `k8sapi` executor. + - apiGroups: + - "" + resources: + - pods/exec + verbs: + - create + # Only needed if you are using ConfigMap-based cache for memoization. + - apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - get + - update # This allows one workflow to create another. - # Not needed for the majority of use cases. + # This is only needed for resource templates. - apiGroups: - argoproj.io resources: diff --git a/manifests/kustomize/wi-utils.sh b/manifests/kustomize/wi-utils.sh index f5a06db927..3da163c967 100644 --- a/manifests/kustomize/wi-utils.sh +++ b/manifests/kustomize/wi-utils.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/proxy/Dockerfile b/proxy/Dockerfile index 54c70164e6..c5773e90b1 100644 --- a/proxy/Dockerfile +++ b/proxy/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,9 +13,10 @@ # limitations under the License. # Pin to a specific version of invert proxy agent -FROM gcr.io/inverting-proxy/agent@sha256:2e3c5ecd1a55b32056f3ce0c4aaac05e31b85c361d501bf3f8a81bec14c4fe87 +FROM gcr.io/inverting-proxy/agent@sha256:762c500f748e00753e6b1af0a273e0097130344a793258108b3886789e2fe744 -RUN apt-get update && apt-get install -y curl jq python-pip +# We need --allow-releaseinfo-change, because of https://github.com/kubeflow/pipelines/issues/6311#issuecomment-899224137. +RUN apt update --allow-releaseinfo-change && apt-get install -y curl jq python-pip COPY requirements.txt . RUN python2 -m pip install -r \ requirements.txt --quiet --no-cache-dir \ diff --git a/proxy/attempt-register-vm-on-proxy.sh b/proxy/attempt-register-vm-on-proxy.sh index 3857414cd1..4e7ed0d1fc 100755 --- a/proxy/attempt-register-vm-on-proxy.sh +++ b/proxy/attempt-register-vm-on-proxy.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2019 Google Inc. +# Copyright 2019 The Kubeflow Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/proxy/get_proxy_url.py b/proxy/get_proxy_url.py index 760cd7a8ee..acc55cc3eb 100644 --- a/proxy/get_proxy_url.py +++ b/proxy/get_proxy_url.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/proxy/get_proxy_url_test.py b/proxy/get_proxy_url_test.py index e23e5403a1..1c30e600c8 100644 --- a/proxy/get_proxy_url_test.py +++ b/proxy/get_proxy_url_test.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000..4ff1b32711 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,188 @@ +# +# This file is autogenerated by pip-compile +# To update, run: +# +# pip-compile --output-file=- - +# +absl-py==0.11.0 # via -r -, kfp, ml-metadata, ml-pipelines-sdk, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-metadata, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl +ansiwrap==0.8.4 # via papermill +apache-beam[gcp]==2.31.0 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl +appdirs==1.4.4 # via black +argcomplete==1.12.3 # via ipykernel +argon2-cffi==20.1.0 # via notebook +astunparse==1.6.3 # via tensorflow +attrs==20.3.0 # via jsonschema, ml-metadata, tfx +avro-python3==1.9.2.1 # via apache-beam +backcall==0.2.0 # via ipython +black==21.7b0 # via papermill +bleach==4.0.0 # via nbconvert +cached-property==1.5.2 # via h5py +cachetools==4.2.2 # via apache-beam, google-auth +certifi==2021.5.30 # via -r -, kfp-server-api, kubernetes, minio, requests +cffi==1.14.6 # via argon2-cffi, google-crc32c +charset-normalizer==2.0.4 # via requests +click==7.1.2 # via -r -, black, kfp, papermill, tfx +cloudpickle==1.6.0 # via -r -, kfp +colorama==0.4.4 # via keras-tuner +crcmod==1.7 # via apache-beam +debugpy==1.4.1 # via ipykernel +decorator==5.0.9 # via ipython +defusedxml==0.7.1 # via nbconvert +deprecated==1.2.12 # via -r -, kfp +dill==0.3.1.1 # via apache-beam +docker==4.4.4 # via ml-pipelines-sdk, tfx +docopt==0.6.2 # via hdfs +docstring-parser==0.10 # via -r -, kfp +entrypoints==0.3 # via nbconvert, papermill +fastavro==1.4.4 # via apache-beam +fasteners==0.16.3 # via google-apitools +fire==0.4.0 # via -r -, kfp +flatbuffers==1.12 # via tensorflow +future==0.18.2 # via apache-beam, keras-tuner +gast==0.4.0 # via tensorflow +google-api-core[grpc,grpcgcp]==1.31.2 # via google-api-python-client, google-cloud-aiplatform, google-cloud-bigquery, google-cloud-bigtable, google-cloud-core, google-cloud-datastore, google-cloud-dlp, google-cloud-language, google-cloud-pubsub, google-cloud-spanner, google-cloud-storage, google-cloud-videointelligence, google-cloud-vision +google-api-python-client==1.12.8 # via -r -, google-cloud-profiler, kfp, ml-pipelines-sdk, tfx, tfx-bsl +google-apitools==0.5.31 # via apache-beam, ml-pipelines-sdk, tfx +google-auth-httplib2==0.1.0 # via google-api-python-client, google-cloud-profiler +google-auth-oauthlib==0.4.5 # via tensorboard +google-auth==1.35.0 # via -r -, apache-beam, google-api-core, google-api-python-client, google-auth-httplib2, google-auth-oauthlib, google-cloud-core, google-cloud-profiler, google-cloud-storage, kfp, kubernetes, tensorboard +google-cloud-aiplatform==0.7.1 # via tfx +google-cloud-bigquery==1.28.0 # via -r -, apache-beam, google-cloud-aiplatform, tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl +google-cloud-bigtable==1.7.0 # via apache-beam +google-cloud-core==1.7.2 # via apache-beam, google-cloud-bigquery, google-cloud-bigtable, google-cloud-datastore, google-cloud-spanner, google-cloud-storage +google-cloud-datastore==1.15.3 # via apache-beam +google-cloud-dlp==1.0.0 # via apache-beam +google-cloud-language==1.3.0 # via apache-beam +google-cloud-profiler==3.0.5 # via apache-beam +google-cloud-pubsub==1.7.0 # via apache-beam +google-cloud-spanner==1.19.1 # via apache-beam +google-cloud-storage==1.42.0 # via -r -, google-cloud-aiplatform, kfp +google-cloud-videointelligence==1.16.1 # via apache-beam +google-cloud-vision==1.0.0 # via apache-beam +google-crc32c==1.1.2 # via google-resumable-media +google-pasta==0.2.0 # via tensorflow +google-resumable-media==1.3.3 # via google-cloud-bigquery, google-cloud-storage +googleapis-common-protos[grpc]==1.53.0 # via google-api-core, grpc-google-iam-v1, tensorflow-metadata +grpc-google-iam-v1==0.12.3 # via google-cloud-bigtable, google-cloud-pubsub, google-cloud-spanner +grpcio-gcp==0.2.2 # via apache-beam, google-api-core +grpcio==1.34.1 # via apache-beam, google-api-core, googleapis-common-protos, grpc-google-iam-v1, grpcio-gcp, ml-metadata, tensorboard, tensorflow, tensorflow-serving-api, tfx +h5py==3.1.0 # via tensorflow +hdfs==2.6.0 # via apache-beam +httplib2==0.19.1 # via apache-beam, google-api-python-client, google-apitools, google-auth-httplib2, oauth2client +idna==3.2 # via requests +importlib-metadata==4.6.4 # via argcomplete, ipykernel, jsonschema, markdown +ipykernel==6.2.0 # via ipywidgets, notebook +ipython-genutils==0.2.0 # via nbformat, notebook, traitlets +ipython==7.26.0 # via ipykernel, ipywidgets, tensorflow-model-analysis +ipywidgets==7.6.3 # via tensorflow-model-analysis +jedi==0.18.0 # via ipython +jinja2==2.11.3 # via ml-pipelines-sdk, nbconvert, notebook, tfx +joblib==0.14.1 # via scikit-learn, tensorflow-data-validation +jsonschema==3.2.0 # via -r -, kfp, nbformat +junit-xml==1.9 # via -r - +jupyter-client==6.1.12 # via ipykernel, nbclient, notebook +jupyter-core==4.7.1 # via jupyter-client, nbconvert, nbformat, notebook +jupyterlab-pygments==0.1.2 # via nbconvert +jupyterlab-widgets==1.0.0 # via ipywidgets +keras-nightly==2.5.0.dev2021032900 # via tensorflow +keras-preprocessing==1.1.2 # via tensorflow +keras-tuner==1.0.1 # via tfx +kfp-pipeline-spec==0.1.9 # via -r -, kfp +kfp-server-api==1.6.0 # via -r -, kfp +kfp==1.7.1 # via -r - +kubernetes==12.0.1 # via -r -, kfp, tfx +markdown==3.3.4 # via tensorboard +markupsafe==2.0.1 # via jinja2 +matplotlib-inline==0.1.2 # via ipykernel, ipython +minio==7.1.0 # via -r - +mistune==0.8.4 # via nbconvert +ml-metadata==1.2.0 # via ml-pipelines-sdk, tfx +ml-pipelines-sdk==1.2.0 # via tfx +mypy-extensions==0.4.3 # via black +nbclient==0.5.4 # via nbconvert, papermill +nbconvert==6.1.0 # via notebook +nbformat==5.1.3 # via ipywidgets, nbclient, nbconvert, notebook, papermill +nest-asyncio==1.5.1 # via nbclient +notebook==6.4.3 # via widgetsnbextension +numpy==1.19.5 # via apache-beam, h5py, keras-preprocessing, keras-tuner, opt-einsum, pandas, pyarrow, scikit-learn, scipy, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-hub, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl +oauth2client==4.1.3 # via apache-beam, google-apitools +oauthlib==3.1.1 # via requests-oauthlib +opt-einsum==3.3.0 # via tensorflow +packaging==20.9 # via bleach, google-api-core, ml-pipelines-sdk, tfx +pandas==1.3.2 # via tensorflow-data-validation, tensorflow-model-analysis, tfx-bsl +pandocfilters==1.4.3 # via nbconvert +papermill==2.3.3 # via -r - +parso==0.8.2 # via jedi +pathspec==0.9.0 # via black +pexpect==4.8.0 # via ipython +pickleshare==0.7.5 # via ipython +portpicker==1.4.0 # via ml-pipelines-sdk, tfx +prometheus-client==0.11.0 # via notebook +prompt-toolkit==3.0.19 # via ipython +proto-plus==1.19.0 # via google-cloud-aiplatform +protobuf==3.17.3 # via apache-beam, google-api-core, google-cloud-profiler, googleapis-common-protos, kfp, kfp-pipeline-spec, ml-metadata, ml-pipelines-sdk, proto-plus, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-hub, tensorflow-metadata, tensorflow-model-analysis, tensorflow-serving-api, tensorflow-transform, tfx, tfx-bsl +ptyprocess==0.7.0 # via pexpect, terminado +pyarrow==2.0.0 # via apache-beam, tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl +pyasn1-modules==0.2.8 # via google-auth, oauth2client +pyasn1==0.4.8 # via oauth2client, pyasn1-modules, rsa +pycparser==2.20 # via cffi +pydot==1.4.2 # via apache-beam, tensorflow-transform +pygments==2.10.0 # via ipython, jupyterlab-pygments, nbconvert +pymongo==3.12.0 # via apache-beam +pyparsing==2.4.7 # via httplib2, packaging, pydot +pyrsistent==0.18.0 # via jsonschema +python-dateutil==2.8.2 # via -r -, apache-beam, jupyter-client, kfp-server-api, kubernetes, pandas +pytz==2021.1 # via apache-beam, google-api-core, pandas +pyyaml==5.4.1 # via -r -, kfp, kubernetes, papermill, tfx, yamale +pyzmq==22.2.1 # via jupyter-client, notebook +regex==2021.8.3 # via black +requests-oauthlib==1.3.0 # via google-auth-oauthlib, kubernetes +requests-toolbelt==0.9.1 # via -r -, kfp +requests==2.26.0 # via apache-beam, docker, google-api-core, google-cloud-profiler, google-cloud-storage, hdfs, keras-tuner, kubernetes, papermill, requests-oauthlib, requests-toolbelt, tensorboard +rsa==4.7.2 # via google-auth, oauth2client +scikit-learn==0.24.2 # via keras-tuner +scipy==1.7.1 # via keras-tuner, scikit-learn, tensorflow-model-analysis +send2trash==1.8.0 # via notebook +six==1.15.0 # via -r -, absl-py, argon2-cffi, astunparse, bleach, docker, fasteners, fire, google-api-core, google-api-python-client, google-apitools, google-auth, google-auth-httplib2, google-cloud-bigquery, google-cloud-core, google-pasta, google-resumable-media, grpcio, hdfs, jsonschema, junit-xml, keras-preprocessing, kfp-server-api, kubernetes, ml-metadata, oauth2client, protobuf, python-dateutil, tensorflow, tensorflow-data-validation, tensorflow-model-analysis +strip-hints==0.1.10 # via -r -, kfp +tabulate==0.8.9 # via -r -, keras-tuner, kfp +tenacity==8.0.1 # via papermill +tensorboard-data-server==0.6.1 # via tensorboard +tensorboard-plugin-wit==1.8.0 # via tensorboard +tensorboard==2.6.0 # via tensorflow +tensorflow-data-validation==1.2.0 # via tfx +tensorflow-estimator==2.5.0 # via tensorflow +tensorflow-hub==0.12.0 # via tfx +tensorflow-metadata==1.2.0 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx-bsl +tensorflow-model-analysis==0.33.0 # via tfx +tensorflow-serving-api==2.5.1 # via tfx, tfx-bsl +tensorflow-transform==1.2.0 # via tfx +tensorflow==2.5.1 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-serving-api, tensorflow-transform, tfx, tfx-bsl +termcolor==1.1.0 # via fire, tensorflow +terminado==0.11.0 # via notebook +terminaltables==3.1.0 # via keras-tuner +testpath==0.5.0 # via nbconvert +textwrap3==0.9.2 # via ansiwrap +tfx-bsl==1.2.0 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx +tfx==1.2.0 # via -r - +threadpoolctl==2.2.0 # via scikit-learn +tomli==1.2.1 # via black +tornado==6.1 # via ipykernel, jupyter-client, notebook, terminado +tqdm==4.62.1 # via keras-tuner, papermill +traitlets==5.0.5 # via ipykernel, ipython, ipywidgets, jupyter-client, jupyter-core, matplotlib-inline, nbclient, nbconvert, nbformat, notebook +typed-ast==1.4.3 # via black +typing-extensions==3.7.4.3 # via apache-beam, black, importlib-metadata, tensorflow +uritemplate==3.0.1 # via google-api-python-client +urllib3==1.26.6 # via -r -, kfp-server-api, kubernetes, minio, requests +wcwidth==0.2.5 # via prompt-toolkit +webencodings==0.5.1 # via bleach +websocket-client==1.2.1 # via docker, kubernetes +werkzeug==2.0.1 # via tensorboard +wheel==0.37.0 # via astunparse, strip-hints, tensorboard, tensorflow +widgetsnbextension==3.5.1 # via ipywidgets +wrapt==1.12.1 # via deprecated, tensorflow +yamale==3.0.8 # via -r - +zipp==3.5.0 # via importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/samples/test/README.md b/samples/test/README.md deleted file mode 100644 index 44f22f51ac..0000000000 --- a/samples/test/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Test Samples - -These samples are built for testing purposes only. - -The [config.yaml](./config.yaml) holds test config for kubeflow-pipelines-samples-v2 test. -Refer to [V2 samples test documentation](https://github.com/kubeflow/pipelines/tree/master/v2/test) for more details. diff --git a/samples/test/config.yaml b/samples/test/config.yaml deleted file mode 100644 index 6ec757298b..0000000000 --- a/samples/test/config.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright 2021 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# kubeflow-pipelines-samples-v2 test config -# Documentation: https://github.com/kubeflow/pipelines/tree/master/v2/test -# -#### config format -# -# Each item in the list corresponds to test for one sample. -# -# The field `path` corresponds to the test's python module path -# e.g. if folder path is `samples/test/fail_test.py`, then module path is -# `samples.test.fail_test`. -- name: fail - path: samples.test.fail_test -- name: two_step - path: samples.test.two_step_test diff --git a/samples/test/two_step.py b/samples/test/two_step.py deleted file mode 100644 index 204d22bddf..0000000000 --- a/samples/test/two_step.py +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright 2021 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -"""Two step v2-compatible pipeline.""" - -from kfp import components, dsl -from kfp.components import InputPath, OutputPath - - -def preprocess( - uri: str, some_int: int, output_parameter_one: OutputPath(int), - output_dataset_one: OutputPath('Dataset') -): - '''Dummy Preprocess Step.''' - with open(output_dataset_one, 'w') as f: - f.write('Output dataset') - with open(output_parameter_one, 'w') as f: - f.write("{}".format(1234)) - - -def train( - dataset: InputPath('Dataset'), - model: OutputPath('Model'), - num_steps: int = 100 -): - '''Dummy Training Step.''' - - with open(dataset, 'r') as input_file: - input_string = input_file.read() - with open(model, 'w') as output_file: - for i in range(num_steps): - output_file.write( - "Step {}\n{}\n=====\n".format(i, input_string) - ) - - -preprocess_op = components.create_component_from_func( - preprocess, base_image='python:3.9' -) -train_op = components.create_component_from_func(train) - - -@dsl.pipeline(name='two_step_pipeline') -def two_step_pipeline(): - preprocess_task = preprocess_op(uri='uri-to-import', some_int=12) - train_task = train_op( - num_steps=preprocess_task.outputs['output_parameter_one'], - dataset=preprocess_task.outputs['output_dataset_one'] - ) diff --git a/samples/test/util.py b/samples/test/util.py deleted file mode 100644 index 70a99d71d3..0000000000 --- a/samples/test/util.py +++ /dev/null @@ -1,105 +0,0 @@ -import kfp -import os -from typing import Dict, List, Callable, Optional -from dataclasses import dataclass - -MINUTE = 60 - - -def _default_verify_func(run_id, run): - assert run.status == 'Succeeded' - - -@dataclass -class TestCase: - '''Test case for running a KFP sample''' - pipeline_func: Callable - mode: kfp.dsl.PipelineExecutionMode = kfp.dsl.PipelineExecutionMode.V2_COMPATIBLE - arguments: Optional[Dict[str, str]] = None - verify_func: Callable = _default_verify_func - - -def run_pipeline_func(test_cases: List[TestCase]): - """Run a pipeline function and wait for its result. - - :param pipeline_func: pipeline function to run - :type pipeline_func: function - """ - - def test_wrapper(run_pipeline): - for case in test_cases: - result = run_pipeline( - pipeline_func=case.pipeline_func, - mode=case.mode, - arguments=case.arguments or {} - ) - case.verify_func(run=result, run_id=result.id) - - _run_test(test_wrapper) - - -def _run_test(callback): - - def main( - output_directory: Optional[str] = None, # example - host: Optional[str] = None, - external_host: Optional[str] = None, - launcher_image: Optional['URI'] = None, - experiment: str = 'v2_sample_test_samples', - ): - """Test file CLI entrypoint used by Fire. - - :param host: Hostname pipelines can access, defaults to 'http://ml-pipeline:8888'. - :type host: str, optional - :param external_host: External hostname users can access from their browsers. - :type external_host: str, optional - :param output_directory: pipeline output directory that holds intermediate - artifacts, example gs://your-bucket/path/to/workdir. - :type output_directory: str, optional - :param launcher_image: override launcher image, only used in V2_COMPATIBLE mode - :type launcher_image: URI, optional - :param experiment: experiment the run is added to, defaults to 'v2_sample_test_samples' - :type experiment: str, optional - """ - - # Default to env values, so people can set up their env and run these - # tests without specifying any commands. - if host is None: - host = os.getenv('KFP_HOST', 'http://ml-pipeline:8888') - if external_host is None: - external_host = host - if output_directory is None: - output_directory = os.getenv('KFP_OUTPUT_DIRECTORY') - - client = kfp.Client(host=host) - - def run_pipeline( - pipeline_func: Callable, - mode: kfp.dsl.PipelineExecutionMode = kfp.dsl.PipelineExecutionMode. - V2_COMPATIBLE, - arguments: dict = {}, - ): - run_result = client.create_run_from_pipeline_func( - pipeline_func, - mode=mode, - arguments={ - kfp.dsl.ROOT_PARAMETER_NAME: output_directory, - **arguments - }, - launcher_image=launcher_image, - experiment_name=experiment, - ) - print("Run details page URL:") - print(f"{external_host}/#/runs/details/{run_result.run_id}") - run_response = run_result.wait_for_run_completion(10 * MINUTE) - run = run_response.run - from pprint import pprint - # Hide detailed information - run.pipeline_spec.workflow_manifest = None - pprint(run) - return run - - callback(run_pipeline=run_pipeline) - - import fire - fire.Fire(main) diff --git a/sdk/python/tests/compiler/testdata/uri_artifacts.py b/sdk/python/tests/compiler/testdata/uri_artifacts.py index 6b16adbea9..dc0ddd42ad 100644 --- a/sdk/python/tests/compiler/testdata/uri_artifacts.py +++ b/sdk/python/tests/compiler/testdata/uri_artifacts.py @@ -41,7 +41,7 @@ def get_code(self, ): inputs: - {name: text, type: String, description: 'Content to be written to GCS'} outputs: -- {name: output_gcs_path, type: GCSPath, description: 'GCS file path'} +- {name: output_gcs_path, type: Artifact, description: 'GCS file path'} implementation: container: image: google/cloud-sdk:slim @@ -58,7 +58,7 @@ def get_code(self, ): read_from_gcs = components.load_component_from_text(""" name: Read from GCS inputs: -- {name: input_gcs_path, type: GCSPath, description: 'GCS file path'} +- {name: input_gcs_path, type: Artifact, description: 'GCS file path'} implementation: container: image: google/cloud-sdk:slim @@ -115,4 +115,4 @@ def uri_artifact(text: str = 'Hello world!'): if __name__ == '__main__': - compiler.Compiler().compile(uri_artifact, __file__ + '.tar.gz') + compiler.Compiler(mode=dsl.PipelineExecutionMode.V2_COMPATIBLE).compile(uri_artifact, __file__.replace('.py', '.yaml')) diff --git a/test/api-integration-test/Dockerfile b/test/api-integration-test/Dockerfile index da6b029a98..c6284e2574 100644 --- a/test/api-integration-test/Dockerfile +++ b/test/api-integration-test/Dockerfile @@ -1,7 +1,7 @@ # This image has the script to kick off the ML pipeline API integration test, # and upload the result to GCS -FROM golang:1.13.15 +FROM golang:1.16 RUN curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz RUN mkdir -p /usr/local/gcloud @@ -10,8 +10,7 @@ RUN /usr/local/gcloud/google-cloud-sdk/install.sh ENV PATH $PATH:/usr/local/gcloud/google-cloud-sdk/bin # install go-junit-report. It converts go test result to junit xml. -RUN go get -u github.com/jstemmer/go-junit-report -RUN go build github.com/jstemmer/go-junit-report +RUN go install github.com/jstemmer/go-junit-report@latest COPY . /go/src/github.com/kubeflow/pipelines diff --git a/test/api-integration-test/run_test.sh b/test/api-integration-test/run_test.sh index b8a7a9b496..225c13dc41 100755 --- a/test/api-integration-test/run_test.sh +++ b/test/api-integration-test/run_test.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/build-images.sh b/test/build-images.sh index 7f28f019d2..24dea29894 100755 --- a/test/build-images.sh +++ b/test/build-images.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/build_image.yaml b/test/build_image.yaml index 8c8a73bebb..d4fba94458 100644 --- a/test/build_image.yaml +++ b/test/build_image.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -122,6 +122,8 @@ spec: sidecars: - name: dind image: docker:17.10-dind + command: + - dockerd-entrypoint.sh securityContext: privileged: true mirrorVolumeMounts: true diff --git a/test/check-argo-status.sh b/test/check-argo-status.sh index ecd328eac0..7e48cee019 100755 --- a/test/check-argo-status.sh +++ b/test/check-argo-status.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/check-build-image-status.sh b/test/check-build-image-status.sh index 7e93433a76..7fb8694ae7 100755 --- a/test/check-build-image-status.sh +++ b/test/check-build-image-status.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/component_test.yaml b/test/component_test.yaml index b3c75469f9..133da1f7fd 100644 --- a/test/component_test.yaml +++ b/test/component_test.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -98,6 +98,8 @@ spec: container: image: "{{workflow.parameters.image-builder-image}}" imagePullPolicy: 'Always' + command: + - /build.sh args: [ "--image-build-context-gcs-uri", "{{inputs.parameters.image-build-context-gcs-uri}}", "--docker_path", "{{inputs.parameters.docker-path}}", @@ -110,6 +112,8 @@ spec: sidecars: - name: dind image: docker:17.10-dind + command: + - dockerd-entrypoint.sh securityContext: privileged: true mirrorVolumeMounts: true @@ -127,6 +131,9 @@ spec: - name: test-name container: image: "{{inputs.parameters.sample-tests-image}}" + command: + - "python3" + - "/python/src/github.com/kubeflow/pipelines/test/sample-test/sample_test_launcher.py" args: [ "component_test", "run_test", "--results-gcs-dir", "{{inputs.parameters.test-results-gcs-dir}}", diff --git a/test/deploy-cluster.sh b/test/deploy-cluster.sh index d60ec3f47d..3abaf4b674 100755 --- a/test/deploy-cluster.sh +++ b/test/deploy-cluster.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -81,7 +81,10 @@ else SCOPE_ARG="--scopes=storage-rw,cloud-platform" fi # Use regular release channel to keep up with newly created clusters in Google Cloud Marketplace. - gcloud container clusters create ${TEST_CLUSTER} --release-channel regular ${SCOPE_ARG} ${NODE_POOL_CONFIG_ARG} ${WI_ARG} + # Uncomment the line below when we start to supporter non-docker container + # gcloud container clusters create ${TEST_CLUSTER} --release-channel regular ${SCOPE_ARG} ${NODE_POOL_CONFIG_ARG} ${WI_ARG} + # Temporarily pin k8s version to 1.18 since k8s version 1.19 or above does not support docker + gcloud container clusters create ${TEST_CLUSTER} --cluster-version 1.18 ${SCOPE_ARG} ${NODE_POOL_CONFIG_ARG} ${WI_ARG} fi gcloud container clusters get-credentials ${TEST_CLUSTER} diff --git a/test/deploy-pipeline-lite.sh b/test/deploy-pipeline-lite.sh index 61dbfc24e6..f63c8fe6e4 100755 --- a/test/deploy-pipeline-lite.sh +++ b/test/deploy-pipeline-lite.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -128,7 +128,9 @@ if [ "$ENABLE_WORKLOAD_IDENTITY" = true ]; then --role="roles/editor" source "$DIR/../manifests/kustomize/wi-utils.sh" - verify_workload_identity_binding "pipeline-runner" $NAMESPACE + # TODO(Bobgy): re-enable this after temporary flakiness is resolved. + # verify_workload_identity_binding "pipeline-runner" $NAMESPACE + sleep 30 fi popd diff --git a/test/deploy-pipeline-mkp-cli.sh b/test/deploy-pipeline-mkp-cli.sh index 4918d11e42..440b4f5d02 100755 --- a/test/deploy-pipeline-mkp-cli.sh +++ b/test/deploy-pipeline-mkp-cli.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/e2e_test_gke_v2.yaml b/test/e2e_test_gke_v2.yaml index e72874c224..553586ed01 100644 --- a/test/e2e_test_gke_v2.yaml +++ b/test/e2e_test_gke_v2.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -127,7 +127,6 @@ spec: - name: test-name value: "{{item}}" withItems: - - condition - exit_handler - recursion - sequential @@ -199,6 +198,8 @@ spec: container: image: "{{workflow.parameters.image-builder-image}}" imagePullPolicy: 'Always' + command: + - /build.sh args: [ "--image-build-context-gcs-uri", "{{inputs.parameters.image-build-context-gcs-uri}}", "--docker_path", "{{inputs.parameters.docker-path}}", @@ -211,6 +212,8 @@ spec: sidecars: - name: dind image: docker:17.10-dind + command: + - dockerd-entrypoint.sh securityContext: privileged: true mirrorVolumeMounts: true @@ -222,6 +225,8 @@ spec: - name: initialization-test-image container: image: "{{inputs.parameters.initialization-test-image}}" + command: + - /go/src/github.com/kubeflow/pipelines/test/initialization-test/run_test.sh args: [ "--results-gcs-dir", "{{inputs.parameters.test-results-gcs-dir}}", ] @@ -233,6 +238,8 @@ spec: - name: api-integration-test-image container: image: "{{inputs.parameters.api-integration-test-image}}" + command: + - /go/src/github.com/kubeflow/pipelines/test/api-integration-test/run_test.sh args: [ "--results-gcs-dir", "{{inputs.parameters.test-results-gcs-dir}}", ] @@ -244,6 +251,8 @@ spec: - name: frontend-integration-tests-image container: image: "{{inputs.parameters.frontend-integration-tests-image}}" + command: + - ./run_test.sh args: [ "--results-gcs-dir", "{{inputs.parameters.test-results-gcs-dir}}", ] @@ -259,6 +268,9 @@ spec: - name: test-name container: image: "{{inputs.parameters.sample-tests-image}}" + command: + - "python3" + - "/python/src/github.com/kubeflow/pipelines/test/sample-test/sample_test_launcher.py" args: [ "sample_test", "run_test", "--results-gcs-dir", "{{inputs.parameters.test-results-gcs-dir}}", @@ -273,6 +285,8 @@ spec: - name: api-integration-test-image container: image: "{{inputs.parameters.api-integration-test-image}}" + command: + - "/go/src/github.com/kubeflow/pipelines/test/api-integration-test/run_test.sh" args: [ "--results-gcs-dir", "{{inputs.parameters.test-results-gcs-dir}}", "--run_upgrade_tests_preparation", @@ -285,6 +299,8 @@ spec: - name: api-integration-test-image container: image: "{{inputs.parameters.api-integration-test-image}}" + command: + - "/go/src/github.com/kubeflow/pipelines/test/api-integration-test/run_test.sh" args: [ "--results-gcs-dir", "{{inputs.parameters.test-results-gcs-dir}}", "--run_upgrade_tests_verification", diff --git a/test/frontend-integration-test/helloworld.spec.js b/test/frontend-integration-test/helloworld.spec.js index 435767ee34..f85a6c03bf 100644 --- a/test/frontend-integration-test/helloworld.spec.js +++ b/test/frontend-integration-test/helloworld.spec.js @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/test/frontend-integration-test/helloworld.yaml b/test/frontend-integration-test/helloworld.yaml index bbd898481c..bacd25645b 100644 --- a/test/frontend-integration-test/helloworld.yaml +++ b/test/frontend-integration-test/helloworld.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/frontend-integration-test/package-lock.json b/test/frontend-integration-test/package-lock.json index 669be9a654..ed273d45db 100644 --- a/test/frontend-integration-test/package-lock.json +++ b/test/frontend-integration-test/package-lock.json @@ -936,9 +936,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.get": { "version": "4.4.2", diff --git a/test/frontend-integration-test/package.json b/test/frontend-integration-test/package.json index a7168f6a62..cb0b5af878 100644 --- a/test/frontend-integration-test/package.json +++ b/test/frontend-integration-test/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "description": "Visual regression end to end test package for ML Pipelines", "dependencies": { - "lodash": ">=4.17.19", + "lodash": ">=4.17.21", "mocha": "^5.2.0", "wait-port": "^0.2.2", "wdio-junit-reporter": "^0.4.4", diff --git a/test/frontend-integration-test/run_test.sh b/test/frontend-integration-test/run_test.sh index 05a4366b1a..eaa4965afe 100755 --- a/test/frontend-integration-test/run_test.sh +++ b/test/frontend-integration-test/run_test.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -55,6 +55,15 @@ fi npm install +function clean_up() { + set +e + + echo "Stopping background jobs..." + kill -15 %1 + kill -15 %2 +} +trap clean_up EXIT SIGINT SIGTERM + # Port forward the UI so tests can work against localhost POD=`kubectl get pods -n ${NAMESPACE} -l app=ml-pipeline-ui -o jsonpath='{.items[0].metadata.name}'` kubectl port-forward -n ${NAMESPACE} ${POD} 3000:3000 & diff --git a/test/frontend-integration-test/selenium-standalone-chrome-gcloud-nodejs.Docker/Makefile b/test/frontend-integration-test/selenium-standalone-chrome-gcloud-nodejs.Docker/Makefile index 29d64f5d57..0bf51323c2 100644 --- a/test/frontend-integration-test/selenium-standalone-chrome-gcloud-nodejs.Docker/Makefile +++ b/test/frontend-integration-test/selenium-standalone-chrome-gcloud-nodejs.Docker/Makefile @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/frontend-integration-test/tensorboard-example.spec.js b/test/frontend-integration-test/tensorboard-example.spec.js index b50528b0ce..0dc86f255e 100644 --- a/test/frontend-integration-test/tensorboard-example.spec.js +++ b/test/frontend-integration-test/tensorboard-example.spec.js @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/test/frontend-integration-test/tensorboard-example.yaml b/test/frontend-integration-test/tensorboard-example.yaml index eb6bf8d82b..14bb4a5fbf 100644 --- a/test/frontend-integration-test/tensorboard-example.yaml +++ b/test/frontend-integration-test/tensorboard-example.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/frontend-integration-test/wdio.conf.js b/test/frontend-integration-test/wdio.conf.js index 73efc48d25..06375a2e90 100644 --- a/test/frontend-integration-test/wdio.conf.js +++ b/test/frontend-integration-test/wdio.conf.js @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2018 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/test/imagebuilder/Makefile b/test/imagebuilder/Makefile index 6ad9083758..e04bd1b319 100644 --- a/test/imagebuilder/Makefile +++ b/test/imagebuilder/Makefile @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/imagebuilder/build.sh b/test/imagebuilder/build.sh index 1203ba457c..e0fe0110c5 100755 --- a/test/imagebuilder/build.sh +++ b/test/imagebuilder/build.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/initialization-test/Dockerfile b/test/initialization-test/Dockerfile index d7a74600a9..751db10ec8 100644 --- a/test/initialization-test/Dockerfile +++ b/test/initialization-test/Dockerfile @@ -1,7 +1,7 @@ # This image has the script to kick off the ML pipeline initialization test, # and upload the result to GCS -FROM golang:1.13.15 +FROM golang:1.16 RUN curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz RUN mkdir -p /usr/local/gcloud @@ -10,8 +10,7 @@ RUN /usr/local/gcloud/google-cloud-sdk/install.sh ENV PATH $PATH:/usr/local/gcloud/google-cloud-sdk/bin # install go-junit-report. It converts go test result to junit xml. -RUN go get -u github.com/jstemmer/go-junit-report -RUN go build github.com/jstemmer/go-junit-report +RUN go install github.com/jstemmer/go-junit-report@latest COPY . /go/src/github.com/kubeflow/pipelines diff --git a/test/initialization-test/run_test.sh b/test/initialization-test/run_test.sh index f7c97790a3..55dc205c8a 100755 --- a/test/initialization-test/run_test.sh +++ b/test/initialization-test/run_test.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/install-argo-cli.sh b/test/install-argo-cli.sh index b3d55b49d2..434ac974ac 100755 --- a/test/install-argo-cli.sh +++ b/test/install-argo-cli.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2021 Google LLC +# Copyright 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,13 +18,14 @@ set -ex DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null && pwd)" REPO_ROOT="${DIR}/.." -ARGO_VERSION="$(cat ${REPO_ROOT}/third_party/argo/VERSION)" +# ARGO_VERSION="$(cat ${REPO_ROOT}/third_party/argo/VERSION)" OS=${OS:-"linux-amd64"} +ARGO_VERSION=v3.1.6 # if argo is not installed if ! which argo; then echo "install argo" - curl -sLO "https://github.com/argoproj/argo/releases/download/${ARGO_VERSION}/argo-${OS}.gz" + curl -sLO "https://github.com/argoproj/argo-workflows/releases/download/${ARGO_VERSION}/argo-${OS}.gz" gunzip "argo-${OS}.gz" chmod +x "argo-${OS}" mv "argo-${OS}" /usr/local/bin/argo diff --git a/test/install-argo.sh b/test/install-argo.sh index c57472f576..c155394af5 100755 --- a/test/install-argo.sh +++ b/test/install-argo.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -29,7 +29,7 @@ kubectl create clusterrolebinding DEFAULT_BINDING --clusterrole=cluster-admin -- # No need to install here, it comes with kfp lite deployment # kubectl create ns argo --dry-run -o yaml | kubectl apply -f - -# kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo/$ARGO_VERSION/manifests/install.yaml +# kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo-workflows/$ARGO_VERSION/manifests/install.yaml ARGO_KSA="test-runner" @@ -52,5 +52,6 @@ if [ "$ENABLE_WORKLOAD_IDENTITY" = true ]; then > /dev/null # hide verbose output retry bind_gsa_and_ksa $ARGO_GSA $ARGO_KSA $PROJECT $NAMESPACE - verify_workload_identity_binding $ARGO_KSA $NAMESPACE + # TODO(Bobgy): re-enable this after temporary flakiness is resolved. + # verify_workload_identity_binding $ARGO_KSA $NAMESPACE fi diff --git a/test/kfp-functional-test/constants.py b/test/kfp-functional-test/constants.py index b3709b53df..fd88b6f420 100644 --- a/test/kfp-functional-test/constants.py +++ b/test/kfp-functional-test/constants.py @@ -1,4 +1,4 @@ -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/kfp-functional-test/kfp-functional-test.sh b/test/kfp-functional-test/kfp-functional-test.sh index cdf9784319..4fb7052fd3 100755 --- a/test/kfp-functional-test/kfp-functional-test.sh +++ b/test/kfp-functional-test/kfp-functional-test.sh @@ -1,5 +1,5 @@ #!/bin/sh -ex -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/kfp-functional-test/run_kfp_functional_test.py b/test/kfp-functional-test/run_kfp_functional_test.py index 1fc1cb1d72..de4298ede1 100644 --- a/test/kfp-functional-test/run_kfp_functional_test.py +++ b/test/kfp-functional-test/run_kfp_functional_test.py @@ -1,4 +1,4 @@ -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/postsubmit-tests-with-pipeline-deployment.sh b/test/postsubmit-tests-with-pipeline-deployment.sh index d1f56eb5a4..e7ed5c5712 100755 --- a/test/postsubmit-tests-with-pipeline-deployment.sh +++ b/test/postsubmit-tests-with-pipeline-deployment.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/presubmit-backend-test.sh b/test/presubmit-backend-test.sh index e1adf91d52..34c8b43c4d 100755 --- a/test/presubmit-backend-test.sh +++ b/test/presubmit-backend-test.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/presubmit-backend-visualization.sh b/test/presubmit-backend-visualization.sh index 1e8e68f952..832e757c60 100755 --- a/test/presubmit-backend-visualization.sh +++ b/test/presubmit-backend-visualization.sh @@ -18,6 +18,6 @@ source_root=$(pwd) # Visualization test cd "$source_root/backend/src/apiserver/visualization" python3 -m pip install --upgrade pip -python3 -m pip install -r requirements-test.txt +python3 -m pip install -r requirements.txt -r requirements-test.txt python3 test_exporter.py python3 test_server.py diff --git a/test/presubmit-tests-mkp.sh b/test/presubmit-tests-mkp.sh index c1723be87b..f50027cdb3 100755 --- a/test/presubmit-tests-mkp.sh +++ b/test/presubmit-tests-mkp.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/presubmit-tests-sdk.sh b/test/presubmit-tests-sdk.sh index a1ce8616b3..d0f0f65869 100755 --- a/test/presubmit-tests-sdk.sh +++ b/test/presubmit-tests-sdk.sh @@ -18,7 +18,7 @@ source_root=$(pwd) python3 -m pip install --upgrade pip python3 -m pip install coverage==4.5.4 coveralls==1.9.2 python3 -m pip install mock # TODO: Remove when added to requirements -python3 -m pip install -r "$source_root/sdk/python/requirements.txt" +python3 -m pip install -r "$source_root/sdk/python/requirements-test.txt" python3 -m pip install --upgrade protobuf # Testing the component authoring library diff --git a/test/presubmit-tests-tfx.sh b/test/presubmit-tests-tfx.sh index e78037a6e5..3c89ac71a2 100755 --- a/test/presubmit-tests-tfx.sh +++ b/test/presubmit-tests-tfx.sh @@ -17,6 +17,8 @@ source_root=$(pwd) # TODO(#5051) Unpin pip version once we figure out how to make the new dependency resolver in pip 20.3+ work in our case. python3 -m pip install --upgrade pip==20.2.3 +# TODO: unpin google-cloud-bigquery once TFX revert https://github.com/tensorflow/tfx/commit/f8c1dea2095197ceda60e1c4d67c4c90fc17ed44 +python3 -m pip install --upgrade google-cloud-bigquery==1.28.0 python3 -m pip install -r "$source_root/sdk/python/requirements.txt" # Additional dependencies #pip3 install coverage==4.5.4 coveralls==1.9.2 six>=1.13.0 @@ -41,24 +43,18 @@ chmod +x bazel_installer.sh cd $source_root git clone --depth 1 https://github.com/tensorflow/tfx.git cd $source_root/tfx -python3 -m pip install . --upgrade --use-feature=2020-resolver \ +python3 -m pip install .[test] --upgrade \ --extra-index-url https://pypi-nightly.tensorflow.org/simple -# Three KFP-related unittests -cd $source_root/tfx/tfx/orchestration/kubeflow -python3 kubeflow_dag_runner_test.py -python3 base_component_test.py -cd $source_root/tfx/tfx/orchestration/kubeflow/v2 -python3 compiler_utils_test.py -python3 kubeflow_v2_dag_runner_test.py -python3 parameter_utils_test.py -python3 pipeline_builder_test.py -python3 step_builder_test.py -cd $source_root/tfx/tfx/orchestration/kubeflow/v2/container -python3 kubeflow_v2_entrypoint_utils_test.py -python3 kubeflow_v2_run_executor_test.py -cd $source_root/tfx/tfx/orchestration/kubeflow/v2/file_based_example_gen -python3 driver_test.py -cd $source_root/tfx/tfx/examples/chicago_taxi_pipeline -python3 taxi_pipeline_kubeflow_gcp_test.py -python3 taxi_pipeline_kubeflow_local_test.py +# KFP-related tests +python3 $source_root/tfx/tfx/orchestration/kubeflow/kubeflow_dag_runner_test.py +python3 $source_root/tfx/tfx/orchestration/kubeflow/base_component_test.py +python3 $source_root/tfx/tfx/orchestration/kubeflow/v2/compiler_utils_test.py +python3 $source_root/tfx/tfx/orchestration/kubeflow/v2/kubeflow_v2_dag_runner_test.py +python3 $source_root/tfx/tfx/orchestration/kubeflow/v2/parameter_utils_test.py +python3 $source_root/tfx/tfx/orchestration/kubeflow/v2/pipeline_builder_test.py +python3 $source_root/tfx/tfx/orchestration/kubeflow/v2/step_builder_test.py +python3 $source_root/tfx/tfx/orchestration/kubeflow/v2/container/kubeflow_v2_entrypoint_utils_test.py +python3 $source_root/tfx/tfx/orchestration/kubeflow/v2/container/kubeflow_v2_run_executor_test.py +python3 $source_root/tfx/tfx/orchestration/kubeflow/v2/file_based_example_gen/driver_test.py +python3 $source_root/tfx/tfx/examples/penguin/penguin_pipeline_kubeflow_test.py diff --git a/test/presubmit-tests-with-pipeline-deployment.sh b/test/presubmit-tests-with-pipeline-deployment.sh index ae9bf23886..63cb55c3b6 100755 --- a/test/presubmit-tests-with-pipeline-deployment.sh +++ b/test/presubmit-tests-with-pipeline-deployment.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/release/Dockerfile.release b/test/release/Dockerfile.release index eb0e294f28..f1036ac91f 100644 --- a/test/release/Dockerfile.release +++ b/test/release/Dockerfile.release @@ -1,3 +1,17 @@ +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # based on KFP backend api client generator dockerfile FROM gcr.io/ml-pipeline-test/api-generator:latest @@ -15,8 +29,12 @@ ENV NODE_PATH $NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH # install java==8 python==3 -RUN apt-get update \ - && apt-get install -y openjdk-8-jdk python3-pip \ +# adoptopenjdk apt repo is needed on debian buster, refer to https://stackoverflow.com/a/59436618/8745218 +RUN apt-get install -y software-properties-common \ + && wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add - \ + && add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ \ + && apt-get update \ + && apt-get install -y adoptopenjdk-8-hotspot python3-pip \ && rm -rf /var/lib/apt/lists/* # install setuptools diff --git a/test/release/Makefile b/test/release/Makefile index f0c2c6d211..349723652c 100644 --- a/test/release/Makefile +++ b/test/release/Makefile @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018, 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -30,17 +30,20 @@ release-in-place: # This script updates the repo according to the VERSION file. ./bump-version-docker.sh +# Build a release image locally using docker. .PHONY: build build: docker build -t $(REMOTE) - < Dockerfile.release +# Push locally built release image to remote container registry, +# so that others can use the new image next time. .PHONY: push push: build # Only some maintainers have access to push, # contact @Bobgy @capri-xiyue @zijianjoy if you have any needs. docker push $(REMOTE) +# Run the docker image interactively in shell as current user. .PHONY: dev dev: - # Run the docker image interactively in shell as current user. docker run -it -u $$(id -u):$$(id -g) $(REMOTE) /bin/bash diff --git a/test/release/bump-version-docker.sh b/test/release/bump-version-docker.sh index de0ea5ee89..c41ebb4acc 100755 --- a/test/release/bump-version-docker.sh +++ b/test/release/bump-version-docker.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/release/bump-version-in-place.sh b/test/release/bump-version-in-place.sh index 5f12a29ca1..5396ec770e 100755 --- a/test/release/bump-version-in-place.sh +++ b/test/release/bump-version-in-place.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -42,6 +42,7 @@ sed -i.bak -e 's|\([ (]\)#\([0-9]\+\)|\1[\\#\2](https://github.com/kubeflow/pipe "$REPO_ROOT/components/release-in-place.sh" $TAG_NAME "$REPO_ROOT/manifests/gcp_marketplace/hack/release.sh" $TAG_NAME "$REPO_ROOT/manifests/kustomize/hack/release.sh" $TAG_NAME -"$REPO_ROOT/sdk/hack/release.sh" $TAG_NAME +# De-couple SDK release for now. +# "$REPO_ROOT/sdk/hack/release.sh" $TAG_NAME "$REPO_ROOT/backend/api/hack/generator.sh" "$REPO_ROOT/backend/api/build_kfp_server_api_python_package.sh" diff --git a/test/release/check-release-needed-tools.sh b/test/release/check-release-needed-tools.sh index 5666928f73..ff7b0330f0 100755 --- a/test/release/check-release-needed-tools.sh +++ b/test/release/check-release-needed-tools.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/release/release.sh b/test/release/release.sh index 722d74b605..c3a3863726 100755 --- a/test/release/release.sh +++ b/test/release/release.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -26,8 +26,13 @@ if [[ -z "$BRANCH" || -z "$TAG" ]]; then fi # Checking out the repo's release branch -clone_dir=$(mktemp -d) -git clone "git@github.com:${REPO}.git" "$clone_dir" +clone_dir="$(mktemp -d)" +# Use GitHub CLI if found, otherwise use git clone. +if which gh; then + gh repo clone github.com/${REPO} "${clone_dir}" +else + git clone "git@github.com:${REPO}.git" "${clone_dir}" +fi cd "$clone_dir" git checkout "$BRANCH" diff --git a/test/sample-test/Dockerfile b/test/sample-test/Dockerfile index cfc3f1ced5..fbaaaeea2e 100644 --- a/test/sample-test/Dockerfile +++ b/test/sample-test/Dockerfile @@ -1,6 +1,6 @@ # This image has the script to kick off the ML pipeline sample e2e test, -FROM google/cloud-sdk:315.0.0 +FROM google/cloud-sdk:352.0.0 RUN apt-get update -y RUN apt-get install --no-install-recommends -y -q libssl-dev libffi-dev wget ssh @@ -10,22 +10,20 @@ RUN wget https://bootstrap.pypa.io/get-pip.py && python3 get-pip.py COPY ./test/sample-test/requirements.txt /python/src/github.com/kubeflow/pipelines/test/sample-test/requirements.txt RUN pip3 install -r /python/src/github.com/kubeflow/pipelines/test/sample-test/requirements.txt - # Install KFP server API from commit. COPY ./backend/api/python_http_client /python_http_client -RUN cd /python_http_client && python3 setup.py install - # Install python client, including DSL compiler. COPY ./sdk/python /sdk/python -RUN cd /sdk/python && python3 setup.py install +RUN pip3 install -e /python_http_client -e /sdk/python +# Copy sample test and samples source code. COPY ./test/sample-test /python/src/github.com/kubeflow/pipelines/test/sample-test COPY ./samples /python/src/github.com/kubeflow/pipelines/samples RUN cd /python/src/github.com/kubeflow/pipelines # Downloading Argo CLI so that the samples are validated -ENV ARGO_VERSION v2.12.9 -RUN curl -sLO https://github.com/argoproj/argo/releases/download/${ARGO_VERSION}/argo-linux-amd64.gz && \ +ENV ARGO_VERSION v3.1.5 +RUN curl -sLO https://github.com/argoproj/argo-workflows/releases/download/${ARGO_VERSION}/argo-linux-amd64.gz && \ gunzip argo-linux-amd64.gz && \ chmod +x argo-linux-amd64 && \ mv ./argo-linux-amd64 /usr/local/bin/argo diff --git a/test/sample-test/README.md b/test/sample-test/README.md index 1ef27f9c36..5736145afa 100644 --- a/test/sample-test/README.md +++ b/test/sample-test/README.md @@ -4,9 +4,15 @@ [pip-tools](https://github.com/jazzband/pip-tools) is used to manage python dependencies. To update dependencies: -1. edit [requirements.in](requirements.in) + +1. (optional) edit [requirements.in](requirements.in) 1. run - ``` + + ```bash ./hack/update_requirements.sh ``` + to update and pin the transitive dependencies. + +Some dependencies are resolved at the time running this command, so without editing +requirements.in, the result will still change over time. diff --git a/test/sample-test/check_notebook_results.py b/test/sample-test/check_notebook_results.py index a8502fbafd..b46cecf285 100644 --- a/test/sample-test/check_notebook_results.py +++ b/test/sample-test/check_notebook_results.py @@ -1,4 +1,4 @@ -# Copyright 2018-2021 Google LLC +# Copyright 2018-2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/ai_platform.config.yaml b/test/sample-test/configs/ai_platform.config.yaml index 6f1ee86b46..7d91ca45b1 100644 --- a/test/sample-test/configs/ai_platform.config.yaml +++ b/test/sample-test/configs/ai_platform.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/container_build.config.yaml b/test/sample-test/configs/container_build.config.yaml index 560eb0b2ed..be5b63eb4c 100644 --- a/test/sample-test/configs/container_build.config.yaml +++ b/test/sample-test/configs/container_build.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/dataflow.config.yaml b/test/sample-test/configs/dataflow.config.yaml index 8228f12081..bfb1408689 100644 --- a/test/sample-test/configs/dataflow.config.yaml +++ b/test/sample-test/configs/dataflow.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/default.config.yaml b/test/sample-test/configs/default.config.yaml index 8c9c4d57aa..edb9dfc224 100644 --- a/test/sample-test/configs/default.config.yaml +++ b/test/sample-test/configs/default.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/dsl_static_type_checking.config.yaml b/test/sample-test/configs/dsl_static_type_checking.config.yaml index 0b43ffbca4..471f7d8495 100644 --- a/test/sample-test/configs/dsl_static_type_checking.config.yaml +++ b/test/sample-test/configs/dsl_static_type_checking.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/imagepullsecrets.config.yaml b/test/sample-test/configs/imagepullsecrets.config.yaml index ea3c8ad2be..7e6074d339 100644 --- a/test/sample-test/configs/imagepullsecrets.config.yaml +++ b/test/sample-test/configs/imagepullsecrets.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/kubeflow_tf_serving.config.yaml b/test/sample-test/configs/kubeflow_tf_serving.config.yaml index 0692aa9f0a..51c5c90815 100644 --- a/test/sample-test/configs/kubeflow_tf_serving.config.yaml +++ b/test/sample-test/configs/kubeflow_tf_serving.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/multiple_outputs.config.yaml b/test/sample-test/configs/multiple_outputs.config.yaml index 3b55b6b470..87eff63800 100644 --- a/test/sample-test/configs/multiple_outputs.config.yaml +++ b/test/sample-test/configs/multiple_outputs.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/parallelism_sub_dag.yaml b/test/sample-test/configs/parallelism_sub_dag.yaml index 393d40cf23..6f95552f4e 100644 --- a/test/sample-test/configs/parallelism_sub_dag.yaml +++ b/test/sample-test/configs/parallelism_sub_dag.yaml @@ -1,4 +1,4 @@ -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/parameterized_tfx_oss.config.yaml b/test/sample-test/configs/parameterized_tfx_oss.config.yaml index f0d70636c0..4d7c236e8c 100644 --- a/test/sample-test/configs/parameterized_tfx_oss.config.yaml +++ b/test/sample-test/configs/parameterized_tfx_oss.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,4 +15,5 @@ test_name: parameterized_tfx_oss arguments: output: -run_pipeline: True \ No newline at end of file + push_destination: '{"filesystem":{"base_directory":"gs://ml-pipeline-test/serving_model/tfx_taxi_simple"}}' +run_pipeline: True diff --git a/test/sample-test/configs/preemptible_tpu_gpu.config.yaml b/test/sample-test/configs/preemptible_tpu_gpu.config.yaml index e3d10fc812..322cb6a2be 100644 --- a/test/sample-test/configs/preemptible_tpu_gpu.config.yaml +++ b/test/sample-test/configs/preemptible_tpu_gpu.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/retry.config.yaml b/test/sample-test/configs/retry.config.yaml index 6db0fadc70..94ae8f9764 100644 --- a/test/sample-test/configs/retry.config.yaml +++ b/test/sample-test/configs/retry.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/schema.config.yaml b/test/sample-test/configs/schema.config.yaml index 852ed24d86..d5bb047a41 100644 --- a/test/sample-test/configs/schema.config.yaml +++ b/test/sample-test/configs/schema.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/sidecar.config.yaml b/test/sample-test/configs/sidecar.config.yaml index 51e1e1b416..1725438d52 100644 --- a/test/sample-test/configs/sidecar.config.yaml +++ b/test/sample-test/configs/sidecar.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019, 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,5 +13,3 @@ # limitations under the License. test_name: sidecar -arguments: - sleep_sec: 100 diff --git a/test/sample-test/configs/volume_ops.config.yaml b/test/sample-test/configs/volume_ops.config.yaml index 40dd4ed071..3823b8f305 100644 --- a/test/sample-test/configs/volume_ops.config.yaml +++ b/test/sample-test/configs/volume_ops.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/volume_snapshot_ops.config.yaml b/test/sample-test/configs/volume_snapshot_ops.config.yaml index 001db5b34b..003de418ef 100644 --- a/test/sample-test/configs/volume_snapshot_ops.config.yaml +++ b/test/sample-test/configs/volume_snapshot_ops.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/configs/xgboost_training_cm.config.yaml b/test/sample-test/configs/xgboost_training_cm.config.yaml index 7f218ae621..214b962216 100644 --- a/test/sample-test/configs/xgboost_training_cm.config.yaml +++ b/test/sample-test/configs/xgboost_training_cm.config.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/constants.py b/test/sample-test/constants.py index bda300b628..ba3ce45332 100644 --- a/test/sample-test/constants.py +++ b/test/sample-test/constants.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/hack/update_requirements.sh b/test/sample-test/hack/update_requirements.sh index eeada34538..2357eaceea 100755 --- a/test/sample-test/hack/update_requirements.sh +++ b/test/sample-test/hack/update_requirements.sh @@ -1,6 +1,23 @@ #!/bin/bash +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + set -ex -cat ../../sdk/python/requirements.in ../../backend/requirements.in requirements.in | \ - ../../backend/update_requirements.sh google/cloud-sdk:315.0.0 >requirements.txt +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null && pwd)" +REPO_ROOT="${DIR}/../../.." + +cat "${REPO_ROOT}/sdk/python/requirements.in" "${REPO_ROOT}/backend/api/python_http_client/requirements.txt" "${REPO_ROOT}/backend/requirements.in" "${DIR}/../requirements.in" | \ + "${REPO_ROOT}/hack/update-requirements.sh" google/cloud-sdk:352.0.0 >"${DIR}/../requirements.txt" diff --git a/test/sample-test/requirements.in b/test/sample-test/requirements.in index e04c2e3f06..45ae0af0de 100644 --- a/test/sample-test/requirements.in +++ b/test/sample-test/requirements.in @@ -5,5 +5,5 @@ fire yamale kubernetes -google-cloud-bigquery==1.17.0 -google-cloud-storage==1.17.0 +google-cloud-bigquery<2 +google-cloud-storage<2 diff --git a/test/sample-test/requirements.txt b/test/sample-test/requirements.txt index e3eb68c3c3..4ff1b32711 100644 --- a/test/sample-test/requirements.txt +++ b/test/sample-test/requirements.txt @@ -4,183 +4,185 @@ # # pip-compile --output-file=- - # -absl-py==0.10.0 # via ml-metadata, ml-pipelines-sdk, tensorboard, tensorflow, tensorflow-cloud, tensorflow-data-validation, tensorflow-datasets, tensorflow-metadata, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl +absl-py==0.11.0 # via -r -, kfp, ml-metadata, ml-pipelines-sdk, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-metadata, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl ansiwrap==0.8.4 # via papermill -apache-beam[gcp]==2.28.0 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl +apache-beam[gcp]==2.31.0 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl appdirs==1.4.4 # via black +argcomplete==1.12.3 # via ipykernel argon2-cffi==20.1.0 # via notebook astunparse==1.6.3 # via tensorflow -async-generator==1.10 # via nbclient -attrs==20.3.0 # via jsonschema, ml-metadata, tensorflow-datasets, tfx +attrs==20.3.0 # via jsonschema, ml-metadata, tfx avro-python3==1.9.2.1 # via apache-beam backcall==0.2.0 # via ipython -black==20.8b1 # via papermill -bleach==3.3.0 # via nbconvert -cachetools==4.2.1 # via apache-beam, google-auth -certifi==2020.12.5 # via kfp-server-api, kubernetes, minio, requests -cffi==1.14.5 # via argon2-cffi, google-crc32c -chardet==4.0.0 # via requests -click==7.1.2 # via -r -, black, papermill, tfx -cloudpickle==1.6.0 # via -r - +black==21.7b0 # via papermill +bleach==4.0.0 # via nbconvert +cached-property==1.5.2 # via h5py +cachetools==4.2.2 # via apache-beam, google-auth +certifi==2021.5.30 # via -r -, kfp-server-api, kubernetes, minio, requests +cffi==1.14.6 # via argon2-cffi, google-crc32c +charset-normalizer==2.0.4 # via requests +click==7.1.2 # via -r -, black, kfp, papermill, tfx +cloudpickle==1.6.0 # via -r -, kfp colorama==0.4.4 # via keras-tuner crcmod==1.7 # via apache-beam -decorator==4.4.2 # via ipython -defusedxml==0.6.0 # via nbconvert -deprecated==1.2.11 # via -r - -dill==0.3.1.1 # via apache-beam, tensorflow-datasets -docker==4.4.3 # via ml-pipelines-sdk, tensorflow-cloud, tfx +debugpy==1.4.1 # via ipykernel +decorator==5.0.9 # via ipython +defusedxml==0.7.1 # via nbconvert +deprecated==1.2.12 # via -r -, kfp +dill==0.3.1.1 # via apache-beam +docker==4.4.4 # via ml-pipelines-sdk, tfx docopt==0.6.2 # via hdfs -docstring-parser==0.7.3 # via -r - +docstring-parser==0.10 # via -r -, kfp entrypoints==0.3 # via nbconvert, papermill -fastavro==1.3.2 # via apache-beam -fasteners==0.16 # via google-apitools -fire==0.4.0 # via -r - +fastavro==1.4.4 # via apache-beam +fasteners==0.16.3 # via google-apitools +fire==0.4.0 # via -r -, kfp flatbuffers==1.12 # via tensorflow -future==0.18.2 # via apache-beam, keras-tuner, tensorflow-datasets -gast==0.3.3 # via tensorflow -google-api-core[grpc,grpcgcp]==1.26.0 # via google-api-python-client, google-cloud-bigtable, google-cloud-build, google-cloud-core, google-cloud-datastore, google-cloud-dlp, google-cloud-language, google-cloud-pubsub, google-cloud-spanner, google-cloud-videointelligence, google-cloud-vision -google-api-python-client==1.12.8 # via tensorflow-cloud, tfx, tfx-bsl -google-apitools==0.5.31 # via apache-beam -google-auth-httplib2==0.0.4 # via google-api-python-client -google-auth-oauthlib==0.4.2 # via tensorboard -google-auth==1.27.0 # via -r -, apache-beam, google-api-core, google-api-python-client, google-auth-httplib2, google-auth-oauthlib, google-cloud-core, google-cloud-storage, kubernetes, tensorboard, tensorflow-cloud -google-cloud-bigquery==1.17.0 # via -r -, apache-beam +future==0.18.2 # via apache-beam, keras-tuner +gast==0.4.0 # via tensorflow +google-api-core[grpc,grpcgcp]==1.31.2 # via google-api-python-client, google-cloud-aiplatform, google-cloud-bigquery, google-cloud-bigtable, google-cloud-core, google-cloud-datastore, google-cloud-dlp, google-cloud-language, google-cloud-pubsub, google-cloud-spanner, google-cloud-storage, google-cloud-videointelligence, google-cloud-vision +google-api-python-client==1.12.8 # via -r -, google-cloud-profiler, kfp, ml-pipelines-sdk, tfx, tfx-bsl +google-apitools==0.5.31 # via apache-beam, ml-pipelines-sdk, tfx +google-auth-httplib2==0.1.0 # via google-api-python-client, google-cloud-profiler +google-auth-oauthlib==0.4.5 # via tensorboard +google-auth==1.35.0 # via -r -, apache-beam, google-api-core, google-api-python-client, google-auth-httplib2, google-auth-oauthlib, google-cloud-core, google-cloud-profiler, google-cloud-storage, kfp, kubernetes, tensorboard +google-cloud-aiplatform==0.7.1 # via tfx +google-cloud-bigquery==1.28.0 # via -r -, apache-beam, google-cloud-aiplatform, tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl google-cloud-bigtable==1.7.0 # via apache-beam -google-cloud-build==2.0.0 # via apache-beam -google-cloud-core==1.6.0 # via apache-beam, google-cloud-bigquery, google-cloud-bigtable, google-cloud-datastore, google-cloud-spanner, google-cloud-storage +google-cloud-core==1.7.2 # via apache-beam, google-cloud-bigquery, google-cloud-bigtable, google-cloud-datastore, google-cloud-spanner, google-cloud-storage google-cloud-datastore==1.15.3 # via apache-beam google-cloud-dlp==1.0.0 # via apache-beam google-cloud-language==1.3.0 # via apache-beam +google-cloud-profiler==3.0.5 # via apache-beam google-cloud-pubsub==1.7.0 # via apache-beam google-cloud-spanner==1.19.1 # via apache-beam -google-cloud-storage==1.17.0 # via -r -, tensorflow-cloud +google-cloud-storage==1.42.0 # via -r -, google-cloud-aiplatform, kfp google-cloud-videointelligence==1.16.1 # via apache-beam google-cloud-vision==1.0.0 # via apache-beam google-crc32c==1.1.2 # via google-resumable-media google-pasta==0.2.0 # via tensorflow -google-resumable-media==1.2.0 # via google-cloud-bigquery, google-cloud-storage -googleapis-common-protos[grpc]==1.52.0 # via google-api-core, grpc-google-iam-v1, tensorflow-metadata +google-resumable-media==1.3.3 # via google-cloud-bigquery, google-cloud-storage +googleapis-common-protos[grpc]==1.53.0 # via google-api-core, grpc-google-iam-v1, tensorflow-metadata grpc-google-iam-v1==0.12.3 # via google-cloud-bigtable, google-cloud-pubsub, google-cloud-spanner grpcio-gcp==0.2.2 # via apache-beam, google-api-core -grpcio==1.32.0 # via apache-beam, google-api-core, googleapis-common-protos, grpc-google-iam-v1, grpcio-gcp, ml-metadata, tensorboard, tensorflow, tensorflow-serving-api, tfx -h5py==2.10.0 # via tensorflow +grpcio==1.34.1 # via apache-beam, google-api-core, googleapis-common-protos, grpc-google-iam-v1, grpcio-gcp, ml-metadata, tensorboard, tensorflow, tensorflow-serving-api, tfx +h5py==3.1.0 # via tensorflow hdfs==2.6.0 # via apache-beam -httplib2==0.17.4 # via apache-beam, google-api-python-client, google-apitools, google-auth-httplib2, oauth2client -idna==2.10 # via requests -importlib-metadata==3.6.0 # via jsonschema, markdown -ipykernel==5.5.0 # via ipywidgets, notebook +httplib2==0.19.1 # via apache-beam, google-api-python-client, google-apitools, google-auth-httplib2, oauth2client +idna==3.2 # via requests +importlib-metadata==4.6.4 # via argcomplete, ipykernel, jsonschema, markdown +ipykernel==6.2.0 # via ipywidgets, notebook ipython-genutils==0.2.0 # via nbformat, notebook, traitlets -ipython==7.20.0 # via ipykernel, ipywidgets, tensorflow-model-analysis +ipython==7.26.0 # via ipykernel, ipywidgets, tensorflow-model-analysis ipywidgets==7.6.3 # via tensorflow-model-analysis jedi==0.18.0 # via ipython jinja2==2.11.3 # via ml-pipelines-sdk, nbconvert, notebook, tfx joblib==0.14.1 # via scikit-learn, tensorflow-data-validation -jsonschema==3.2.0 # via -r -, nbformat +jsonschema==3.2.0 # via -r -, kfp, nbformat junit-xml==1.9 # via -r - -jupyter-client==6.1.11 # via ipykernel, nbclient, notebook +jupyter-client==6.1.12 # via ipykernel, nbclient, notebook jupyter-core==4.7.1 # via jupyter-client, nbconvert, nbformat, notebook jupyterlab-pygments==0.1.2 # via nbconvert jupyterlab-widgets==1.0.0 # via ipywidgets +keras-nightly==2.5.0.dev2021032900 # via tensorflow keras-preprocessing==1.1.2 # via tensorflow -keras-tuner==1.0.1 # via tensorflow-cloud, tfx -kfp-server-api==1.3.0 # via -r - -kubernetes==11.0.0 # via -r -, tfx -libcst==0.3.17 # via google-cloud-build -markdown==3.3.3 # via tensorboard -markupsafe==1.1.1 # via jinja2 -minio==7.0.2 # via -r - +keras-tuner==1.0.1 # via tfx +kfp-pipeline-spec==0.1.9 # via -r -, kfp +kfp-server-api==1.6.0 # via -r -, kfp +kfp==1.7.1 # via -r - +kubernetes==12.0.1 # via -r -, kfp, tfx +markdown==3.3.4 # via tensorboard +markupsafe==2.0.1 # via jinja2 +matplotlib-inline==0.1.2 # via ipykernel, ipython +minio==7.1.0 # via -r - mistune==0.8.4 # via nbconvert -ml-metadata==0.27.0 # via ml-pipelines-sdk, tfx -ml-pipelines-sdk==0.27.0 # via tfx -mock==2.0.0 # via apache-beam -mypy-extensions==0.4.3 # via black, typing-inspect -nbclient==0.5.2 # via nbconvert, papermill -nbconvert==6.0.7 # via notebook -nbformat==5.1.2 # via ipywidgets, nbclient, nbconvert, notebook, papermill +ml-metadata==1.2.0 # via ml-pipelines-sdk, tfx +ml-pipelines-sdk==1.2.0 # via tfx +mypy-extensions==0.4.3 # via black +nbclient==0.5.4 # via nbconvert, papermill +nbconvert==6.1.0 # via notebook +nbformat==5.1.3 # via ipywidgets, nbclient, nbconvert, notebook, papermill nest-asyncio==1.5.1 # via nbclient -notebook==6.2.0 # via widgetsnbextension -numpy==1.19.5 # via apache-beam, h5py, keras-preprocessing, keras-tuner, opt-einsum, pandas, pyarrow, scikit-learn, scipy, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-datasets, tensorflow-hub, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl +notebook==6.4.3 # via widgetsnbextension +numpy==1.19.5 # via apache-beam, h5py, keras-preprocessing, keras-tuner, opt-einsum, pandas, pyarrow, scikit-learn, scipy, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-hub, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl oauth2client==4.1.3 # via apache-beam, google-apitools -oauthlib==3.1.0 # via requests-oauthlib +oauthlib==3.1.1 # via requests-oauthlib opt-einsum==3.3.0 # via tensorflow -packaging==20.9 # via bleach, google-api-core -pandas==1.2.2 # via tensorflow-data-validation, tensorflow-model-analysis, tfx-bsl +packaging==20.9 # via bleach, google-api-core, ml-pipelines-sdk, tfx +pandas==1.3.2 # via tensorflow-data-validation, tensorflow-model-analysis, tfx-bsl pandocfilters==1.4.3 # via nbconvert -papermill==2.3.2 # via -r - -parso==0.8.1 # via jedi -pathspec==0.8.1 # via black -pbr==5.5.1 # via mock +papermill==2.3.3 # via -r - +parso==0.8.2 # via jedi +pathspec==0.9.0 # via black pexpect==4.8.0 # via ipython pickleshare==0.7.5 # via ipython -prometheus-client==0.9.0 # via notebook -promise==2.3 # via tensorflow-datasets -prompt-toolkit==3.0.16 # via ipython -proto-plus==1.13.0 # via google-cloud-build -protobuf==3.15.2 # via apache-beam, google-api-core, google-cloud-bigquery, googleapis-common-protos, ml-metadata, ml-pipelines-sdk, proto-plus, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-datasets, tensorflow-hub, tensorflow-metadata, tensorflow-model-analysis, tensorflow-serving-api, tensorflow-transform, tfx, tfx-bsl +portpicker==1.4.0 # via ml-pipelines-sdk, tfx +prometheus-client==0.11.0 # via notebook +prompt-toolkit==3.0.19 # via ipython +proto-plus==1.19.0 # via google-cloud-aiplatform +protobuf==3.17.3 # via apache-beam, google-api-core, google-cloud-profiler, googleapis-common-protos, kfp, kfp-pipeline-spec, ml-metadata, ml-pipelines-sdk, proto-plus, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-hub, tensorflow-metadata, tensorflow-model-analysis, tensorflow-serving-api, tensorflow-transform, tfx, tfx-bsl ptyprocess==0.7.0 # via pexpect, terminado pyarrow==2.0.0 # via apache-beam, tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx, tfx-bsl pyasn1-modules==0.2.8 # via google-auth, oauth2client pyasn1==0.4.8 # via oauth2client, pyasn1-modules, rsa pycparser==2.20 # via cffi pydot==1.4.2 # via apache-beam, tensorflow-transform -pygments==2.8.0 # via ipython, jupyterlab-pygments, nbconvert -pymongo==3.11.3 # via apache-beam -pyparsing==2.4.7 # via packaging, pydot -pyrsistent==0.17.3 # via jsonschema -python-dateutil==2.8.1 # via apache-beam, jupyter-client, kfp-server-api, kubernetes, pandas +pygments==2.10.0 # via ipython, jupyterlab-pygments, nbconvert +pymongo==3.12.0 # via apache-beam +pyparsing==2.4.7 # via httplib2, packaging, pydot +pyrsistent==0.18.0 # via jsonschema +python-dateutil==2.8.2 # via -r -, apache-beam, jupyter-client, kfp-server-api, kubernetes, pandas pytz==2021.1 # via apache-beam, google-api-core, pandas -pyyaml==5.4.1 # via -r -, kubernetes, libcst, papermill, tfx, yamale -pyzmq==22.0.3 # via jupyter-client, notebook -regex==2020.11.13 # via black +pyyaml==5.4.1 # via -r -, kfp, kubernetes, papermill, tfx, yamale +pyzmq==22.2.1 # via jupyter-client, notebook +regex==2021.8.3 # via black requests-oauthlib==1.3.0 # via google-auth-oauthlib, kubernetes -requests-toolbelt==0.9.1 # via -r - -requests==2.25.1 # via apache-beam, docker, google-api-core, hdfs, keras-tuner, kubernetes, papermill, requests-oauthlib, requests-toolbelt, tensorboard, tensorflow-datasets +requests-toolbelt==0.9.1 # via -r -, kfp +requests==2.26.0 # via apache-beam, docker, google-api-core, google-cloud-profiler, google-cloud-storage, hdfs, keras-tuner, kubernetes, papermill, requests-oauthlib, requests-toolbelt, tensorboard rsa==4.7.2 # via google-auth, oauth2client -scikit-learn==0.24.1 # via keras-tuner -scipy==1.6.1 # via keras-tuner, scikit-learn, tensorflow-model-analysis -send2trash==1.5.0 # via notebook -six==1.15.0 # via absl-py, argon2-cffi, astunparse, bleach, docker, fasteners, fire, google-api-core, google-api-python-client, google-apitools, google-auth, google-auth-httplib2, google-cloud-core, google-pasta, google-resumable-media, grpcio, h5py, hdfs, jsonschema, junit-xml, keras-preprocessing, kfp-server-api, kubernetes, ml-metadata, ml-pipelines-sdk, mock, oauth2client, promise, protobuf, python-dateutil, tenacity, tensorboard, tensorflow, tensorflow-data-validation, tensorflow-datasets, tensorflow-hub, tensorflow-model-analysis, tensorflow-transform, tfx, websocket-client -strip-hints==0.1.9 # via -r - -tabulate==0.8.9 # via -r -, keras-tuner -tenacity==6.3.1 # via papermill +scikit-learn==0.24.2 # via keras-tuner +scipy==1.7.1 # via keras-tuner, scikit-learn, tensorflow-model-analysis +send2trash==1.8.0 # via notebook +six==1.15.0 # via -r -, absl-py, argon2-cffi, astunparse, bleach, docker, fasteners, fire, google-api-core, google-api-python-client, google-apitools, google-auth, google-auth-httplib2, google-cloud-bigquery, google-cloud-core, google-pasta, google-resumable-media, grpcio, hdfs, jsonschema, junit-xml, keras-preprocessing, kfp-server-api, kubernetes, ml-metadata, oauth2client, protobuf, python-dateutil, tensorflow, tensorflow-data-validation, tensorflow-model-analysis +strip-hints==0.1.10 # via -r -, kfp +tabulate==0.8.9 # via -r -, keras-tuner, kfp +tenacity==8.0.1 # via papermill +tensorboard-data-server==0.6.1 # via tensorboard tensorboard-plugin-wit==1.8.0 # via tensorboard -tensorboard==2.4.1 # via tensorflow, tensorflow-cloud -tensorflow-cloud==0.1.13 # via tfx -tensorflow-data-validation==0.27.0 # via tfx -tensorflow-datasets==3.0.0 # via tensorflow-cloud -tensorflow-estimator==2.4.0 # via tensorflow -tensorflow-hub==0.9.0 # via tfx -tensorflow-metadata==0.27.0 # via tensorflow-data-validation, tensorflow-datasets, tensorflow-model-analysis, tensorflow-transform, tfx-bsl -tensorflow-model-analysis==0.27.0 # via tfx -tensorflow-serving-api==2.4.1 # via tfx, tfx-bsl -tensorflow-transform==0.27.0 # via tfx -tensorflow==2.4.1 # via tensorflow-cloud, tensorflow-data-validation, tensorflow-model-analysis, tensorflow-serving-api, tensorflow-transform, tfx, tfx-bsl -termcolor==1.1.0 # via fire, tensorflow, tensorflow-datasets -terminado==0.9.2 # via notebook +tensorboard==2.6.0 # via tensorflow +tensorflow-data-validation==1.2.0 # via tfx +tensorflow-estimator==2.5.0 # via tensorflow +tensorflow-hub==0.12.0 # via tfx +tensorflow-metadata==1.2.0 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx-bsl +tensorflow-model-analysis==0.33.0 # via tfx +tensorflow-serving-api==2.5.1 # via tfx, tfx-bsl +tensorflow-transform==1.2.0 # via tfx +tensorflow==2.5.1 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-serving-api, tensorflow-transform, tfx, tfx-bsl +termcolor==1.1.0 # via fire, tensorflow +terminado==0.11.0 # via notebook terminaltables==3.1.0 # via keras-tuner -testpath==0.4.4 # via nbconvert +testpath==0.5.0 # via nbconvert textwrap3==0.9.2 # via ansiwrap -tfx-bsl==0.27.1 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx -tfx==0.27.0 # via -r - -threadpoolctl==2.1.0 # via scikit-learn -toml==0.10.2 # via black +tfx-bsl==1.2.0 # via tensorflow-data-validation, tensorflow-model-analysis, tensorflow-transform, tfx +tfx==1.2.0 # via -r - +threadpoolctl==2.2.0 # via scikit-learn +tomli==1.2.1 # via black tornado==6.1 # via ipykernel, jupyter-client, notebook, terminado -tqdm==4.57.0 # via keras-tuner, papermill, tensorflow-datasets -traitlets==5.0.5 # via ipykernel, ipython, ipywidgets, jupyter-client, jupyter-core, nbclient, nbconvert, nbformat, notebook -typed-ast==1.4.2 # via black -typing-extensions==3.7.4.3 # via apache-beam, black, importlib-metadata, libcst, tensorflow, typing-inspect -typing-inspect==0.6.0 # via libcst +tqdm==4.62.1 # via keras-tuner, papermill +traitlets==5.0.5 # via ipykernel, ipython, ipywidgets, jupyter-client, jupyter-core, matplotlib-inline, nbclient, nbconvert, nbformat, notebook +typed-ast==1.4.3 # via black +typing-extensions==3.7.4.3 # via apache-beam, black, importlib-metadata, tensorflow uritemplate==3.0.1 # via google-api-python-client -urllib3==1.26.3 # via kfp-server-api, kubernetes, minio, requests +urllib3==1.26.6 # via -r -, kfp-server-api, kubernetes, minio, requests wcwidth==0.2.5 # via prompt-toolkit webencodings==0.5.1 # via bleach -websocket-client==0.57.0 # via docker, kubernetes -werkzeug==1.0.1 # via tensorboard -wheel==0.36.2 # via astunparse, strip-hints, tensorboard, tensorflow +websocket-client==1.2.1 # via docker, kubernetes +werkzeug==2.0.1 # via tensorboard +wheel==0.37.0 # via astunparse, strip-hints, tensorboard, tensorflow widgetsnbextension==3.5.1 # via ipywidgets -wrapt==1.12.1 # via deprecated, tensorflow, tensorflow-datasets -yamale==3.0.4 # via -r - -zipp==3.4.0 # via importlib-metadata +wrapt==1.12.1 # via deprecated, tensorflow +yamale==3.0.8 # via -r - +zipp==3.5.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/test/sample-test/run_resnet_cmle_test.py b/test/sample-test/run_resnet_cmle_test.py index 85fd315e59..bce46c1340 100644 --- a/test/sample-test/run_resnet_cmle_test.py +++ b/test/sample-test/run_resnet_cmle_test.py @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/run_sample_test.py b/test/sample-test/run_sample_test.py index c6b07c8564..2ec1765217 100644 --- a/test/sample-test/run_sample_test.py +++ b/test/sample-test/run_sample_test.py @@ -1,4 +1,4 @@ -# Copyright 2019-2021 Google LLC +# Copyright 2019-2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/sample_test_launcher.py b/test/sample-test/sample_test_launcher.py index 57cc9cb110..f9bd30a27f 100644 --- a/test/sample-test/sample_test_launcher.py +++ b/test/sample-test/sample_test_launcher.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/unittests/utils_tests.py b/test/sample-test/unittests/utils_tests.py index 8de1f218a5..ab5fb6b89e 100644 --- a/test/sample-test/unittests/utils_tests.py +++ b/test/sample-test/unittests/utils_tests.py @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample-test/utils.py b/test/sample-test/utils.py index 348e54f805..a2a0af8e3d 100644 --- a/test/sample-test/utils.py +++ b/test/sample-test/utils.py @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/sample_test.yaml b/test/sample_test.yaml index f55fef929d..a52c222790 100644 --- a/test/sample_test.yaml +++ b/test/sample_test.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -76,9 +76,6 @@ spec: - retry - preemptible_tpu_gpu - volume_snapshot_ops - - loop_output - - loop_parameter - - loop_static - resource_ops - multiple_outputs - caching @@ -133,6 +130,8 @@ spec: container: image: "{{workflow.parameters.image-builder-image}}" imagePullPolicy: 'Always' + command: + - /build.sh args: [ "--image-build-context-gcs-uri", "{{inputs.parameters.image-build-context-gcs-uri}}", "--docker_path", "{{inputs.parameters.docker-path}}", @@ -145,6 +144,8 @@ spec: sidecars: - name: dind image: docker:17.10-dind + command: + - dockerd-entrypoint.sh securityContext: privileged: true mirrorVolumeMounts: true @@ -161,6 +162,9 @@ spec: - name: test-name container: image: "{{inputs.parameters.sample-tests-image}}" + command: + - "python3" + - "/python/src/github.com/kubeflow/pipelines/test/sample-test/sample_test_launcher.py" args: [ "sample_test", "run_test", "--namespace", "{{inputs.parameters.namespace}}", diff --git a/test/tag_for_hosted.sh b/test/tag_for_hosted.sh index e0314303b1..eeeb97b571 100755 --- a/test/tag_for_hosted.sh +++ b/test/tag_for_hosted.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -100,8 +100,8 @@ docker push gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA:$MM_VER # * .cloudbuild.yaml and .release.cloudbuild.yaml # * manifests/kustomize/base/metadata/base/metadata-grpc-deployment.yaml # * test/tag_for_hosted.sh -docker tag gcr.io/tfx-oss-public/ml_metadata_store_server:0.25.1 gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/metadataserver:$SEM_VER -docker tag gcr.io/tfx-oss-public/ml_metadata_store_server:0.25.1 gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/metadataserver:$MM_VER +docker tag gcr.io/tfx-oss-public/ml_metadata_store_server:1.0.0 gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/metadataserver:$SEM_VER +docker tag gcr.io/tfx-oss-public/ml_metadata_store_server:1.0.0 gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/metadataserver:$MM_VER docker push gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/metadataserver:$SEM_VER docker push gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/metadataserver:$MM_VER @@ -120,12 +120,12 @@ docker tag gcr.io/cloudsql-docker/gce-proxy:1.14 gcr.io/$PROJECT_ID/hosted/$COMM docker push gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/cloudsqlproxy:$SEM_VER docker push gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/cloudsqlproxy:$MM_VER -docker tag gcr.io/ml-pipeline/argoexec:v2.12.9-license-compliance gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/argoexecutor:$SEM_VER -docker tag gcr.io/ml-pipeline/argoexec:v2.12.9-license-compliance gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/argoexecutor:$MM_VER +docker tag gcr.io/ml-pipeline/argoexec:v3.1.6-patch-license-compliance gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/argoexecutor:$SEM_VER +docker tag gcr.io/ml-pipeline/argoexec:v3.1.6-patch-license-compliance gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/argoexecutor:$MM_VER docker push gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/argoexecutor:$SEM_VER docker push gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/argoexecutor:$MM_VER -docker tag gcr.io/ml-pipeline/workflow-controller:v2.12.9-license-compliance gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/argoworkflowcontroller:$SEM_VER -docker tag gcr.io/ml-pipeline/workflow-controller:v2.12.9-license-compliance gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/argoworkflowcontroller:$MM_VER +docker tag gcr.io/ml-pipeline/workflow-controller:v3.1.6-patch-license-compliance gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/argoworkflowcontroller:$SEM_VER +docker tag gcr.io/ml-pipeline/workflow-controller:v3.1.6-patch-license-compliance gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/argoworkflowcontroller:$MM_VER docker push gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/argoworkflowcontroller:$SEM_VER docker push gcr.io/$PROJECT_ID/hosted/$COMMIT_SHA/argoworkflowcontroller:$MM_VER diff --git a/test/test-prep.sh b/test/test-prep.sh index 5e95dd36cd..b877a462fc 100755 --- a/test/test-prep.sh +++ b/test/test-prep.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/tools/project-cleaner/go.mod b/test/tools/project-cleaner/go.mod new file mode 100644 index 0000000000..258a71081d --- /dev/null +++ b/test/tools/project-cleaner/go.mod @@ -0,0 +1,12 @@ +module github.com/kubeflow/pipelines/test/tools/project-cleaner + +go 1.16 + +require ( + cloud.google.com/go v0.89.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985 // indirect + google.golang.org/api v0.52.0 // indirect + google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect +) diff --git a/test/tools/project-cleaner/go.sum b/test/tools/project-cleaner/go.sum new file mode 100644 index 0000000000..1c4d2e678a --- /dev/null +++ b/test/tools/project-cleaner/go.sum @@ -0,0 +1,531 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.88.0/go.mod h1:dnKwfYbP9hQhefiUvpbcAyoGSHUrOxR20JVElLiUvEY= +cloud.google.com/go v0.89.0 h1:ZT4GU+y59fC95Mfdn2RtxuzN2gc69dzlVevQK8Ykyqs= +cloud.google.com/go v0.89.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210715191844-86eeefc3e471/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985 h1:4CSI6oo7cOjJKajidEljs9h+uP0rRZBPPPhcCbj5mw8= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 h1:3B43BWw0xEBsLZ/NO1VALz6fppU3481pik+2Ksv45z8= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.52.0 h1:m5FLEd6dp5CU1F0tMWyqDi2XjchviIz8ntzOSz7w8As= +google.golang.org/api v0.52.0/go.mod h1:Him/adpjt0sxtkWViy0b6xyKW/SD71CwdJ7HqJo7SrU= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210721163202-f1cecdd8b78a/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b h1:4xoALQmXxqVdDdLimpPyPeDdsJzo+nFTJw9euAMpqgM= +google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0 h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/test/tools/project-cleaner/main.go b/test/tools/project-cleaner/main.go index 10a1d3c859..7acd99ccd8 100644 --- a/test/tools/project-cleaner/main.go +++ b/test/tools/project-cleaner/main.go @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2019 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package main import ( "context" + "encoding/json" "flag" "fmt" "io/ioutil" @@ -24,7 +25,9 @@ import ( "strings" "time" + compute "cloud.google.com/go/compute/apiv1" "google.golang.org/api/container/v1" + computepb "google.golang.org/genproto/googleapis/cloud/compute/v1" "gopkg.in/yaml.v2" ) @@ -98,10 +101,9 @@ func (p *ProjectCleaner) GKEClusterHandler(resource GCPResource) { continue } - if p.checkForPrefix(cluster.Name, resource.NamePrefixes) && createdTime.Before(elapsedTime) { + if p.checkForPrefix(cluster.Name, resource.NamePrefixes) && createdTime.Before(elapsedTime) { log.Printf("Found cluster: %s for deletion", cluster.Name) - if op, err := svc.Projects.Zones.Clusters.Delete(p.ProjectId, zone, cluster.Name).Do(); - err != nil { + if op, err := svc.Projects.Zones.Clusters.Delete(p.ProjectId, zone, cluster.Name).Do(); err != nil { log.Printf("Encountered error calling delete on cluster: %s Error: %v", cluster.Name, err) } else { @@ -112,6 +114,76 @@ func (p *ProjectCleaner) GKEClusterHandler(resource GCPResource) { } } +func (p *ProjectCleaner) PersistentDiskHandler(resource GCPResource) { + // See https://cloud.google.com/docs/authentication/. + // Use GOOGLE_APPLICATION_CREDENTIALS environment variable to specify a service account key file + // to authenticate to the API. + ctx := context.Background() + c, err := compute.NewDisksRESTClient(ctx) + if err != nil { + log.Fatalf("Could not initialize perisistent disk client: %v", err) + } + defer c.Close() + + for _, zone := range resource.Zones { + filter := `(lastDetachTimestamp != "")` + // maxResults := uint32(5) + // order := "creationTimestamp desc" + req := &computepb.ListDisksRequest{ + Project: p.ProjectId, + Zone: zone, + Filter: &filter, + // OrderBy: &order, + // MaxResults: &maxResults, + } + disk_list, listerr := c.List(ctx, req) + if listerr != nil { + log.Fatalf("Could not get perisistent disk list: %v, zone: %s", listerr, zone) + } + diskmarshal, _ := json.Marshal(disk_list) + log.Printf("disk_list:%s", string(diskmarshal)) + log.Printf("disk_list size:%d", len(disk_list.GetItems())) + + for _, disk := range disk_list.GetItems() { + // If the disk is not detached yet, do not delete the persistent disk. + if len(disk.GetLastDetachTimestamp()) == 0 { + log.Printf("disk: %s doesn't have last detach time, do not delete.", disk.GetName()) + continue + } + log.Printf("disk: %s last detach time: %s", disk.GetName(), disk.GetLastDetachTimestamp()) + + // If the disk has users (attached instances) in form: projects/project/zones/zone/instances/instance, do not delete the persistent disk. + if len(disk.GetUsers()) != 0 { + log.Printf("disk: %s has users: %s, do not delete.", disk.GetName(), disk.GetUsers()) + continue + } + + // Do not delete the persistent disk if this is less than specified hours old. + creationTimestamp := disk.GetCreationTimestamp() + createdTime, _ := time.Parse(time.RFC3339, creationTimestamp) + duration := time.Since(createdTime) + elapsedTime := time.Now().Add(time.Hour * (-1) * time.Duration(resource.TimeLapseInHours)) + if createdTime.After(elapsedTime) { + log.Printf("disk: %s has been: %v old, do not delete.", disk.GetName(), duration) + continue + } + log.Printf("disk: %s has been: %v old, should be deleted.", disk.GetName(), duration) + log.Printf("Deleting disk: %s", disk.GetName()) + + delete_req := &computepb.DeleteDiskRequest{ + Disk: disk.GetName(), + Project: p.ProjectId, + Zone: zone, + } + _, delete_err := c.Delete(ctx, delete_req) + if delete_err != nil { + log.Fatalf("Could not delete perisistent disk: %v", delete_err) + } + log.Printf("Deleted disk: %s", disk.GetName()) + } + } +} + // checkForPrefix - helper function to check if testStr string has any of the prefix specified in // prefixes func (p *ProjectCleaner) checkForPrefix(testStr string, prefixes []string) bool { @@ -131,6 +203,8 @@ func (p *ProjectCleaner) CleanupProject() { switch resource.Resource { case "gke-cluster": p.GKEClusterHandler(resource) + case "disk": + p.PersistentDiskHandler(resource) default: log.Printf("Un-identified resource: %v found in spec. Ignoring", resource.Resource) } diff --git a/test/tools/project-cleaner/project_cleaner.sh b/test/tools/project-cleaner/project_cleaner.sh index 695bf5983c..a3cc926fed 100755 --- a/test/tools/project-cleaner/project_cleaner.sh +++ b/test/tools/project-cleaner/project_cleaner.sh @@ -1,6 +1,6 @@ -#!/bin/bash +#!/bin/sh # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -16,17 +16,11 @@ set -ex -SCRIPT_DIR=$(dirname "${BASH_SOURCE}") -pushd "${SCRIPT_DIR}" - -# Required as this script runs in Prow using kubekins-e2e image. That image uses go-1.12 version -# as a result below packages specified in go.mod file are not discovered. -go get -u "google.golang.org/api/container/v1" -go get -u "gopkg.in/yaml.v2" +SCRIPT_DIR=$(dirname "$0") +cd "${SCRIPT_DIR}" echo "Building project cleaner tool" go build . echo "Executing project cleaner" ./project-cleaner --resource_spec resource_spec.yaml -popd diff --git a/test/tools/project-cleaner/resource_spec.yaml b/test/tools/project-cleaner/resource_spec.yaml index 9d4cb09a69..a83e990e66 100644 --- a/test/tools/project-cleaner/resource_spec.yaml +++ b/test/tools/project-cleaner/resource_spec.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -22,3 +22,7 @@ resources: - sample- - upgrade- time-lapse-hours: 2 + - resource: disk + zones: + - us-east1-b + time-lapse-hours: 24 diff --git a/test/upgrade-tests.sh b/test/upgrade-tests.sh index 221983d554..9534f5784e 100755 --- a/test/upgrade-tests.sh +++ b/test/upgrade-tests.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/upgrade_test_setup.yaml b/test/upgrade_test_setup.yaml index d4618dfce4..e2462c20b6 100644 --- a/test/upgrade_test_setup.yaml +++ b/test/upgrade_test_setup.yaml @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2018 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -87,6 +87,8 @@ spec: container: image: "{{workflow.parameters.image-builder-image}}" imagePullPolicy: 'Always' + command: + - /build.sh args: [ "--image-build-context-gcs-uri", "{{inputs.parameters.image-build-context-gcs-uri}}", "--docker_path", "{{inputs.parameters.docker-path}}", @@ -104,6 +106,8 @@ spec: sidecars: - name: dind image: docker:17.10-dind + command: + - dockerd-entrypoint.sh securityContext: privileged: true mirrorVolumeMounts: true diff --git a/third_party/argo/Dockerfile.argoexec b/third_party/argo/Dockerfile.argoexec index a98ab3f624..e806510b01 100644 --- a/third_party/argo/Dockerfile.argoexec +++ b/third_party/argo/Dockerfile.argoexec @@ -1,4 +1,4 @@ -# Copyright 2019-2021 Google LLC +# Copyright 2019-2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,7 +13,9 @@ # limitations under the License. ARG TAG -FROM argoproj/argoexec:${TAG} +# FROM docker.io/argoproj/argoexec:${TAG} +# Use the following path when we need to fork temporarily. +FROM gcr.io/ml-pipeline-test/argoexec:v3.1.6-patch # Copy notices, licenses and source code. -COPY NOTICES /NOTICES +COPY NOTICES/argoexec /NOTICES diff --git a/third_party/argo/Dockerfile.workflow-controller b/third_party/argo/Dockerfile.workflow-controller index e36ba497bf..95ce3b443d 100644 --- a/third_party/argo/Dockerfile.workflow-controller +++ b/third_party/argo/Dockerfile.workflow-controller @@ -1,4 +1,4 @@ -# Copyright 2019-2021 Google LLC +# Copyright 2019-2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,7 +13,9 @@ # limitations under the License. ARG TAG -FROM argoproj/workflow-controller:${TAG} +# FROM docker.io/argoproj/workflow-controller:${TAG} +# Use the following path when we need to fork temporarily. +FROM gcr.io/ml-pipeline-test/workflow-controller:v3.1.6-patch # Copy notices, licenses and source code. -COPY NOTICES /NOTICES +COPY NOTICES/workflow-controller /NOTICES diff --git a/third_party/argo/README.md b/third_party/argo/README.md index 630c9f4114..8eb0e53e37 100644 --- a/third_party/argo/README.md +++ b/third_party/argo/README.md @@ -14,13 +14,14 @@ NOTE: the following steps will push argo images to gcr.io/ml-pipeline. Prerequisites: * Be an admin to gcr.io/ml-pipeline. +* Install go-licenses/v2 from [Bobgy's current release](https://github.com/Bobgy/go-licenses/releases/tag/v0.0.0-2021-06-23). Make sure the tool is available in PATH. Instructions: 1. Set version of argo you want to upgrade to, for example: ```bash - ARGO_TAG=v2.12.9 + ARGO_TAG=v3.1.6 ``` 1. ```bash @@ -32,7 +33,10 @@ Instructions: ```bash echo "${ARGO_TAG}" > VERSION - # Ensure there are no errors. If there are any issues, update license_dict.csv and retry. + # Ensure there are no errors. If there are any issues, update go-licenses.yaml and retry. + # Also, we need to check licenses-argoexec.csv and licenses-workflow-controller.csv + # manually. Verify all the entries look sane and examine specific modules for license if sth + # is weird. ./imp-1-update-notices.sh # gcloud auth login first, so that you can use docker push to push to gcr.io/ml-pipeline. ./imp-2-build-push-images.sh @@ -40,7 +44,7 @@ Instructions: The `release.sh` script does a few things: - * Use [github.com/Bobgy/go-mod-licenses](github.com/Bobgy/go-mod-licenses) to update NOTICES folder for argo images. + * Use [github.com/Bobgy/go-licenses/v2](https://github.com/Bobgy/go-licenses/tree/main/v2) to prepare NOTICES folder for argo images. * Build license compliant argo images. * Push them to `gcr.io/ml-pipeline/argoexec:${ARGO_TAG}-license-compliance` and `gcr.io/ml-pipeline/workflow-controller:${ARGO_TAG}-license-compliance`. @@ -55,7 +59,6 @@ Instructions: Ideas to improve this process: -* Add a presubmit test that verifies `NOTICES` folder is updated when argo image version is updated. * Write a script that auto updates all occurrences of old argo image tag to the new one. * Reduce occurrences of argo image tag version, and let them use `./VERSION` programmatically when possible. diff --git a/third_party/argo/VERSION b/third_party/argo/VERSION index dd386f89a1..23b17965bf 100644 --- a/third_party/argo/VERSION +++ b/third_party/argo/VERSION @@ -1 +1 @@ -v2.12.9 +v3.1.6-patch diff --git a/third_party/argo/go-licenses.yaml b/third_party/argo/go-licenses.yaml new file mode 100644 index 0000000000..b1a3c9121f --- /dev/null +++ b/third_party/argo/go-licenses.yaml @@ -0,0 +1,110 @@ +module: + go: + version: v3.1.6 + overrides: + - name: github.com/davecgh/go-spew + version: v1.1.1 + license: + path: LICENSE + spdxId: ISC + - name: github.com/docker/spdystream + excludePaths: + - LICENSE.docs # documentations use this license, does not affect us + - name: github.com/gogo/protobuf + version: v1.3.2 + license: + # All files have either BSD-3-Clause or BSD-2-Clause licenses with manual + # inspection. + path: LICENSE + spdxId: BSD-3-Clause / BSD-2-Clause + - name: github.com/googleapis/gax-go/v2 + version: v2.0.5 + license: + path: LICENSE + spdxId: BSD-3-Clause + - name: github.com/googleapis/gnostic + excludePaths: # Test path with different licenses + - plugins/gnostic-swift-generator/examples/bookstore/Tests + - name: github.com/gorilla/websocket + excludePaths: + - examples + - name: github.com/jmespath/go-jmespath + version: v0.3.0 + license: # non-standard license file + path: LICENSE + spdxId: Apache-2.0 + - name: github.com/beorn7/perks + excludePaths: + - README.md # duplicate info compared to LICENSE + - name: github.com/matttproud/golang_protobuf_extensions + excludePaths: + - testdata + - name: github.com/prometheus/common + # license for the two files are already included in + # /internal/bitbucket.org/ww/goautoneg/README.txt + excludePaths: + - internal/bitbucket.org/ww/goautoneg/autoneg.go + - internal/bitbucket.org/ww/goautoneg/autoneg_test.go + - name: github.com/spf13/cobra + # cobra/cmd contains templates for different licenses. + # cobra itself is licensed under those licenses. + excludePaths: + - cobra/cmd + - name: golang.org/x/net + excludePaths: + - html/testdata + - name: google.golang.org/protobuf + version: v1.25.0 + license: + path: LICENSE + # Many files contain license headers, but they are all BSD-3-Clause + spdxId: BSD-3-Clause + - name: gopkg.in/jcmturner/gokrb5.v5 + excludePaths: + - testenv + - name: upper.io/db.v3 + version: v3.6.3 + license: + path: README.md + spdxId: MIT + # The following modules have to be special cased, because we don't have a + # good support for modules not at the root of the repo. + # Refer to https://github.com/google/go-licenses/issues/73. + - name: github.com/Azure/go-autorest/autorest + version: v0.11.18 + license: + url: https://github.com/Azure/go-autorest/blob/autorest/v0.11.1/LICENSE + spdxId: Apache-2.0 + - name: github.com/Azure/go-autorest/autorest/adal + version: v0.9.13 + license: + url: https://github.com/Azure/go-autorest/blob/autorest/adal/v0.9.5/LICENSE + spdxId: Apache-2.0 + - name: github.com/Azure/go-autorest/autorest/date + version: v0.3.0 + license: + url: https://github.com/Azure/go-autorest/blob/autorest/date/v0.3.0/LICENSE + spdxId: Apache-2.0 + - name: github.com/Azure/go-autorest/logger + version: v0.2.1 + license: + url: https://github.com/Azure/go-autorest/blob/logger/v0.2.0/LICENSE + spdxId: Apache-2.0 + - name: github.com/Azure/go-autorest/tracing + version: v0.6.0 + license: + url: https://github.com/Azure/go-autorest/blob/tracing/v0.6.0/LICENSE + spdxId: Apache-2.0 + - name: cloud.google.com/go/storage + version: v1.6.0 + license: + url: https://github.com/googleapis/google-cloud-go/blob/storage/v1.6.0/LICENSE + spdxId: Apache-2.0 + - name: gopkg.in/yaml.v3 + version: v3.0.0-20210107192922-496545a6307b + license: + path: LICENSE + spdxId: MIT / Apache-2.0 # Refer to https://github.com/go-yaml/yaml/blob/496545a6307b/LICENSE + - name: github.com/sergi/go-diff + excludePaths: + - README.md # README.md contains duplicate info about licenses diff --git a/third_party/argo/imp-1-update-notices.sh b/third_party/argo/imp-1-update-notices.sh index 46686bf01f..dd3cb3d7d4 100755 --- a/third_party/argo/imp-1-update-notices.sh +++ b/third_party/argo/imp-1-update-notices.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2021 Google LLC +# Copyright 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -33,9 +33,9 @@ echo "$PATH" | grep "${go_path}/bin" > /dev/null || ( \ echo "\$GOPATH/bin: ${go_path}/bin should be in PATH"; \ echo "https://golang.org/cmd/go/#hdr-GOPATH_and_Modules"; \ exit 1) +which go-licenses >/dev/null || (echo "go-licenses not found in PATH" && exit 1) # Clean up generated files -rm -f "${DIR}/license_info.csv" rm -rf "${DIR}/NOTICES" cd "$WORK_DIR" @@ -44,10 +44,17 @@ cd argo-workflows REPO="${WORK_DIR}/argo-workflows" git checkout "${TAG}" go mod download +make dist/workflow-controller dist/argoexec # Copy manually maintained extra license lookup table to work dir. -cp "${DIR}/license_dict.csv" "${REPO}/" -go-mod-licenses csv -cp "${REPO}/license_info.csv" "${DIR}/" -go-mod-licenses save -cp -r "${REPO}/NOTICES" "${DIR}/" +mkdir -p "${DIR}/NOTICES/workflow-controller" +mkdir -p "${DIR}/NOTICES/argoexec" +echo "Temporary dir:" +echo "${WORK_DIR}" +cp "${DIR}/go-licenses.yaml" . +go-licenses csv dist/workflow-controller > licenses-workflow-controller.csv +cp licenses-workflow-controller.csv "${DIR}/licenses-workflow-controller.csv" +go-licenses csv dist/argoexec > licenses-argoexec.csv +cp licenses-argoexec.csv "${DIR}/licenses-argoexec.csv" +go-licenses save licenses-workflow-controller.csv --save_path "${DIR}/NOTICES/workflow-controller" --force +go-licenses save licenses-argoexec.csv --save_path "${DIR}/NOTICES/argoexec" --force diff --git a/third_party/argo/imp-2-build-push-images.sh b/third_party/argo/imp-2-build-push-images.sh index 7320a53e3a..ec5ff50065 100755 --- a/third_party/argo/imp-2-build-push-images.sh +++ b/third_party/argo/imp-2-build-push-images.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2021 Google LLC +# Copyright 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/third_party/argo/license_dict.csv b/third_party/argo/license_dict.csv deleted file mode 100644 index c113b848dd..0000000000 --- a/third_party/argo/license_dict.csv +++ /dev/null @@ -1,16 +0,0 @@ -dmitri.shuralyov.com/gpu/mtl, https://dmitri.shuralyov.com/gpu/mtl$file/LICENSE, BSD-3-Clause -# Ignore: this is a dev dependency. -github.com/fasthttp-contrib/websocket,,Ignore -# No license file, but mentions it's MIT license in README. -github.com/yudai/pp, https://raw.githubusercontent.com/yudai/pp/master/README.md, MIT -# Main branch is empty, license is on v2 branch. -gopkg.in/square/go-jose.v2, https://raw.githubusercontent.com/square/go-jose/v2/LICENSE, Apache-2.0 -modernc.org/cc, https://gitlab.com/cznic/cc/-/raw/master/LICENSE, BSD-3-Clause -modernc.org/golex, https://gitlab.com/cznic/golex/-/raw/master/LICENSE, BSD-3-Clause -modernc.org/mathutil, https://gitlab.com/cznic/mathutil/-/raw/master/LICENSE, BSD-3-Clause -modernc.org/strutil, https://gitlab.com/cznic/strutil/-/raw/master/LICENSE, BSD-3-Clause -modernc.org/xc, https://gitlab.com/cznic/xc/-/raw/master/LICENSE, BSD-3-Clause -github.com/inconshreveable/mousetrap, https://raw.githubusercontent.com/inconshreveable/mousetrap/master/LICENSE, Apache-2.0 -github.com/jmespath/go-jmespath, https://raw.githubusercontent.com/jmespath/go-jmespath/master/LICENSE, Apache-2.0 -gotest.tools, https://raw.githubusercontent.com/gotestyourself/gotest.tools/main/LICENSE, Apache-2.0 -moul.io/http2curl, https://raw.githubusercontent.com/moul/http2curl/master/LICENSE-APACHE, Apache-2.0 diff --git a/third_party/argo/license_info.csv b/third_party/argo/license_info.csv deleted file mode 100644 index ccf2f4e111..0000000000 --- a/third_party/argo/license_info.csv +++ /dev/null @@ -1,356 +0,0 @@ -# Generated by https://github.com/Bobgy/go-mod-licenses. DO NOT EDIT. -github.com/argoproj/argo/v2,https://raw.githubusercontent.com/argoproj/argo-workflows/master/LICENSE,Apache-2.0 -bou.ke/staticfiles,https://raw.githubusercontent.com/bouk/staticfiles/master/LICENSE.txt,MIT -cloud.google.com/go,https://raw.githubusercontent.com/googleapis/google-cloud-go/master/LICENSE,Apache-2.0 -cloud.google.com/go/bigquery,https://raw.githubusercontent.com/googleapis/google-cloud-go/master/LICENSE,Apache-2.0 -cloud.google.com/go/datastore,https://raw.githubusercontent.com/googleapis/google-cloud-go/master/LICENSE,Apache-2.0 -cloud.google.com/go/pubsub,https://raw.githubusercontent.com/googleapis/google-cloud-go/master/LICENSE,Apache-2.0 -cloud.google.com/go/storage,https://raw.githubusercontent.com/googleapis/google-cloud-go/master/LICENSE,Apache-2.0 -dmitri.shuralyov.com/gpu/mtl,https://dmitri.shuralyov.com/gpu/mtl$file/LICENSE,BSD-3-Clause -github.com/Azure/go-ansiterm,https://raw.githubusercontent.com/Azure/go-ansiterm/master/LICENSE,MIT -github.com/Azure/go-autorest/autorest,https://raw.githubusercontent.com/Azure/go-autorest/master/LICENSE,Apache-2.0 -github.com/Azure/go-autorest/autorest/adal,https://raw.githubusercontent.com/Azure/go-autorest/master/LICENSE,Apache-2.0 -github.com/Azure/go-autorest/autorest/date,https://raw.githubusercontent.com/Azure/go-autorest/master/LICENSE,Apache-2.0 -github.com/Azure/go-autorest/autorest/mocks,https://raw.githubusercontent.com/Azure/go-autorest/master/LICENSE,Apache-2.0 -github.com/Azure/go-autorest/logger,https://raw.githubusercontent.com/Azure/go-autorest/master/LICENSE,Apache-2.0 -github.com/Azure/go-autorest/tracing,https://raw.githubusercontent.com/Azure/go-autorest/master/LICENSE,Apache-2.0 -github.com/BurntSushi/toml,https://raw.githubusercontent.com/BurntSushi/toml/master/COPYING,MIT -github.com/BurntSushi/xgb,https://raw.githubusercontent.com/BurntSushi/xgb/master/LICENSE,BSD-3-Clause -github.com/DATA-DOG/go-sqlmock,https://raw.githubusercontent.com/DATA-DOG/go-sqlmock/master/LICENSE,BSD-3-Clause -github.com/Knetic/govaluate,https://raw.githubusercontent.com/Knetic/govaluate/master/LICENSE,MIT -github.com/NYTimes/gziphandler,https://raw.githubusercontent.com/nytimes/gziphandler/master/LICENSE,Apache-2.0 -github.com/OneOfOne/xxhash,https://raw.githubusercontent.com/OneOfOne/xxhash/master/LICENSE,Apache-2.0 -github.com/PuerkitoBio/purell,https://raw.githubusercontent.com/PuerkitoBio/purell/master/LICENSE,BSD-3-Clause -github.com/PuerkitoBio/urlesc,https://raw.githubusercontent.com/PuerkitoBio/urlesc/master/LICENSE,BSD-3-Clause -github.com/UnnoTed/fileb0x,https://raw.githubusercontent.com/UnnoTed/fileb0x/master/LICENSE,MIT -github.com/agnivade/levenshtein,https://raw.githubusercontent.com/agnivade/levenshtein/master/License.txt,MIT -github.com/ajg/form,https://raw.githubusercontent.com/ajg/form/master/LICENSE,BSD-3-Clause -github.com/alcortesm/tgz,https://raw.githubusercontent.com/alcortesm/tgz/master/LICENSE,MIT -github.com/alecthomas/template,https://raw.githubusercontent.com/alecthomas/template/master/LICENSE,BSD-3-Clause -github.com/alecthomas/units,https://raw.githubusercontent.com/alecthomas/units/master/COPYING,MIT -github.com/aliyun/aliyun-oss-go-sdk,https://raw.githubusercontent.com/aliyun/aliyun-oss-go-sdk/master/LICENSE,MIT -github.com/andreyvit/diff,https://raw.githubusercontent.com/andreyvit/diff/master/LICENSE,MIT -github.com/anmitsu/go-shlex,https://raw.githubusercontent.com/anmitsu/go-shlex/master/LICENSE,MIT -github.com/antihax/optional,https://raw.githubusercontent.com/antihax/optional/master/LICENSE,MIT -github.com/antonmedv/expr,https://raw.githubusercontent.com/antonmedv/expr/master/LICENSE,MIT -github.com/argoproj/pkg,https://raw.githubusercontent.com/argoproj/pkg/master/LICENSE,Apache-2.0 -github.com/armon/consul-api,https://raw.githubusercontent.com/armon/consul-api/master/LICENSE,MPL-2.0 -github.com/armon/go-socks5,https://raw.githubusercontent.com/armon/go-socks5/master/LICENSE,MIT -github.com/asaskevich/govalidator,https://raw.githubusercontent.com/asaskevich/govalidator/master/LICENSE,MIT -github.com/awalterschulze/gographviz,https://raw.githubusercontent.com/awalterschulze/gographviz/master/LICENSE,BSD-3-Clause -github.com/aws/aws-sdk-go,https://raw.githubusercontent.com/aws/aws-sdk-go/master/LICENSE.txt,Apache-2.0 -github.com/baiyubin/aliyun-sts-go-sdk,https://raw.githubusercontent.com/baiyubin/aliyun-sts-go-sdk/master/LICENSE,MIT -github.com/beorn7/perks,https://raw.githubusercontent.com/beorn7/perks/master/LICENSE,MIT -github.com/bgentry/speakeasy,https://raw.githubusercontent.com/bgentry/speakeasy/master/LICENSE,MIT -github.com/blang/semver,https://raw.githubusercontent.com/blang/semver/master/LICENSE,MIT -github.com/blushft/go-diagrams,https://raw.githubusercontent.com/blushft/go-diagrams/master/LICENSE,MIT -github.com/bmatcuk/doublestar,https://raw.githubusercontent.com/bmatcuk/doublestar/master/LICENSE,MIT -github.com/census-instrumentation/opencensus-proto,https://raw.githubusercontent.com/census-instrumentation/opencensus-proto/master/LICENSE,Apache-2.0 -github.com/cespare/xxhash,https://raw.githubusercontent.com/cespare/xxhash/master/LICENSE.txt,MIT -github.com/chzyer/logex,https://raw.githubusercontent.com/chzyer/logex/master/LICENSE,MIT -github.com/chzyer/readline,https://raw.githubusercontent.com/chzyer/readline/master/LICENSE,MIT -github.com/chzyer/test,https://raw.githubusercontent.com/chzyer/test/master/LICENSE,MIT -github.com/client9/misspell,https://raw.githubusercontent.com/client9/misspell/master/LICENSE,MIT -github.com/cncf/udpa/go,https://raw.githubusercontent.com/cncf/udpa/main/LICENSE,Apache-2.0 -github.com/cockroachdb/datadriven,https://raw.githubusercontent.com/cockroachdb/datadriven/master/LICENSE,Apache-2.0 -github.com/colinmarc/hdfs,https://raw.githubusercontent.com/colinmarc/hdfs/master/LICENSE.txt,MIT -github.com/corbym/gocrest,https://raw.githubusercontent.com/corbym/gocrest/master/LICENSE.md,BSD-3-Clause -github.com/coreos/bbolt,https://raw.githubusercontent.com/etcd-io/bbolt/master/LICENSE,MIT -github.com/coreos/etcd,https://raw.githubusercontent.com/etcd-io/etcd/master/LICENSE,Apache-2.0 -github.com/coreos/go-etcd,https://raw.githubusercontent.com/coreos/go-etcd/master/LICENSE,Apache-2.0 -github.com/coreos/go-oidc,https://raw.githubusercontent.com/coreos/go-oidc/v3/LICENSE,Apache-2.0 -github.com/coreos/go-semver,https://raw.githubusercontent.com/coreos/go-semver/master/LICENSE,Apache-2.0 -github.com/coreos/go-systemd,https://raw.githubusercontent.com/coreos/go-systemd/master/LICENSE,Apache-2.0 -github.com/coreos/pkg,https://raw.githubusercontent.com/coreos/pkg/master/LICENSE,Apache-2.0 -github.com/cpuguy83/go-md2man,https://raw.githubusercontent.com/cpuguy83/go-md2man/master/LICENSE.md,MIT -github.com/cpuguy83/go-md2man/v2,https://raw.githubusercontent.com/cpuguy83/go-md2man/master/LICENSE.md,MIT -github.com/creack/pty,https://raw.githubusercontent.com/creack/pty/master/LICENSE,MIT -github.com/dave/jennifer,https://raw.githubusercontent.com/dave/jennifer/master/LICENSE,MIT -github.com/davecgh/go-spew,https://raw.githubusercontent.com/davecgh/go-spew/master/LICENSE,ISC -github.com/dgrijalva/jwt-go,https://raw.githubusercontent.com/dgrijalva/jwt-go/master/LICENSE,MIT -github.com/dgryski/go-sip13,https://raw.githubusercontent.com/dgryski/go-sip13/master/LICENSE,MIT -github.com/docker/docker,https://raw.githubusercontent.com/moby/moby/master/LICENSE,Apache-2.0 -github.com/docker/go-units,https://raw.githubusercontent.com/docker/go-units/master/LICENSE,Apache-2.0 -github.com/docker/spdystream,https://raw.githubusercontent.com/moby/spdystream/master/LICENSE,Apache-2.0 -github.com/dustin/go-humanize,https://raw.githubusercontent.com/dustin/go-humanize/master/LICENSE,MIT -github.com/elazarl/goproxy,https://raw.githubusercontent.com/elazarl/goproxy/master/LICENSE,BSD-3-Clause -github.com/emicklei/go-restful,https://raw.githubusercontent.com/emicklei/go-restful/master/LICENSE,MIT -github.com/emirpasic/gods,https://raw.githubusercontent.com/emirpasic/gods/master/LICENSE,BSD-2-Clause -github.com/envoyproxy/go-control-plane,https://raw.githubusercontent.com/envoyproxy/go-control-plane/main/LICENSE,Apache-2.0 -github.com/envoyproxy/protoc-gen-validate,https://raw.githubusercontent.com/envoyproxy/protoc-gen-validate/main/LICENSE,Apache-2.0 -github.com/evanphx/json-patch,https://raw.githubusercontent.com/evanphx/json-patch/master/LICENSE,BSD-3-Clause -github.com/fatih/color,https://raw.githubusercontent.com/fatih/color/master/LICENSE.md,MIT -github.com/fatih/structs,https://raw.githubusercontent.com/fatih/structs/master/LICENSE,MIT -github.com/flynn/go-shlex,https://raw.githubusercontent.com/flynn-archive/go-shlex/master/COPYING,Apache-2.0 -github.com/fsnotify/fsnotify,https://raw.githubusercontent.com/fsnotify/fsnotify/master/LICENSE,BSD-3-Clause -github.com/gavv/httpexpect/v2,https://raw.githubusercontent.com/gavv/httpexpect/master/LICENSE,MIT -github.com/gdamore/encoding,https://raw.githubusercontent.com/gdamore/encoding/master/LICENSE,Apache-2.0 -github.com/gdamore/tcell,https://raw.githubusercontent.com/gdamore/tcell/master/LICENSE,Apache-2.0 -github.com/ghodss/yaml,https://raw.githubusercontent.com/ghodss/yaml/master/LICENSE,MIT -github.com/gizak/termui/v3,https://raw.githubusercontent.com/gizak/termui/master/LICENSE,MIT -github.com/gliderlabs/ssh,https://raw.githubusercontent.com/gliderlabs/ssh/master/LICENSE,BSD-3-Clause -github.com/globalsign/mgo,https://raw.githubusercontent.com/globalsign/mgo/master/LICENSE,BSD-2-Clause -github.com/go-gl/glfw,https://raw.githubusercontent.com/go-gl/glfw/master/LICENSE,BSD-3-Clause -github.com/go-gl/glfw/v3.3/glfw,https://raw.githubusercontent.com/go-gl/glfw/master/LICENSE,BSD-3-Clause -github.com/go-kit/kit,https://raw.githubusercontent.com/go-kit/kit/master/LICENSE,MIT -github.com/go-logfmt/logfmt,https://raw.githubusercontent.com/go-logfmt/logfmt/master/LICENSE,MIT -github.com/go-logr/logr,https://raw.githubusercontent.com/go-logr/logr/master/LICENSE,Apache-2.0 -github.com/go-openapi/analysis,https://raw.githubusercontent.com/go-openapi/analysis/master/LICENSE,Apache-2.0 -github.com/go-openapi/errors,https://raw.githubusercontent.com/go-openapi/errors/master/LICENSE,Apache-2.0 -github.com/go-openapi/inflect,https://raw.githubusercontent.com/go-openapi/inflect/master/LICENCE,MIT -github.com/go-openapi/jsonpointer,https://raw.githubusercontent.com/go-openapi/jsonpointer/master/LICENSE,Apache-2.0 -github.com/go-openapi/jsonreference,https://raw.githubusercontent.com/go-openapi/jsonreference/master/LICENSE,Apache-2.0 -github.com/go-openapi/loads,https://raw.githubusercontent.com/go-openapi/loads/master/LICENSE,Apache-2.0 -github.com/go-openapi/runtime,https://raw.githubusercontent.com/go-openapi/runtime/master/LICENSE,Apache-2.0 -github.com/go-openapi/spec,https://raw.githubusercontent.com/go-openapi/spec/master/LICENSE,Apache-2.0 -github.com/go-openapi/strfmt,https://raw.githubusercontent.com/go-openapi/strfmt/master/LICENSE,Apache-2.0 -github.com/go-openapi/swag,https://raw.githubusercontent.com/go-openapi/swag/master/LICENSE,Apache-2.0 -github.com/go-openapi/validate,https://raw.githubusercontent.com/go-openapi/validate/master/LICENSE,Apache-2.0 -github.com/go-sql-driver/mysql,https://raw.githubusercontent.com/go-sql-driver/mysql/master/LICENSE,MPL-2.0 -github.com/go-stack/stack,https://raw.githubusercontent.com/go-stack/stack/master/LICENSE.md,MIT -github.com/go-swagger/go-swagger,https://raw.githubusercontent.com/go-swagger/go-swagger/master/LICENSE,Apache-2.0 -github.com/go-swagger/scan-repo-boundary,https://raw.githubusercontent.com/go-swagger/scan-repo-boundary/master/LICENSE,Apache-2.0 -github.com/gobuffalo/attrs,https://raw.githubusercontent.com/gobuffalo/attrs/master/LICENSE,MIT -github.com/gobuffalo/depgen,https://raw.githubusercontent.com/gobuffalo/depgen/master/LICENSE,MIT -github.com/gobuffalo/envy,https://raw.githubusercontent.com/gobuffalo/envy/master/LICENSE,MIT -github.com/gobuffalo/flect,https://raw.githubusercontent.com/gobuffalo/flect/master/LICENSE,MIT -github.com/gobuffalo/genny,https://raw.githubusercontent.com/gobuffalo/genny/master/LICENSE,MIT -github.com/gobuffalo/gitgen,https://raw.githubusercontent.com/gobuffalo/gitgen/master/LICENSE,MIT -github.com/gobuffalo/gogen,https://raw.githubusercontent.com/gobuffalo/gogen/master/LICENSE,MIT -github.com/gobuffalo/logger,https://raw.githubusercontent.com/gobuffalo/logger/master/LICENSE,MIT -github.com/gobuffalo/mapi,https://raw.githubusercontent.com/gobuffalo/mapi/master/LICENSE,MIT -github.com/gobuffalo/packd,https://raw.githubusercontent.com/gobuffalo/packd/master/LICENSE,MIT -github.com/gobuffalo/packr/v2,https://raw.githubusercontent.com/gobuffalo/packr/master/LICENSE.txt,MIT -github.com/gobuffalo/syncx,https://raw.githubusercontent.com/gobuffalo/syncx/master/LICENSE,MIT -github.com/gogo/protobuf,https://raw.githubusercontent.com/gogo/protobuf/master/LICENSE,BSD-3-Clause -github.com/golang/glog,https://raw.githubusercontent.com/golang/glog/master/LICENSE,Apache-2.0 -github.com/golang/groupcache,https://raw.githubusercontent.com/golang/groupcache/master/LICENSE,Apache-2.0 -github.com/golang/mock,https://raw.githubusercontent.com/golang/mock/master/LICENSE,Apache-2.0 -github.com/golang/protobuf,https://raw.githubusercontent.com/golang/protobuf/master/LICENSE,BSD-3-Clause -github.com/golang/snappy,https://raw.githubusercontent.com/golang/snappy/master/LICENSE,BSD-3-Clause -github.com/google/btree,https://raw.githubusercontent.com/google/btree/master/LICENSE,Apache-2.0 -github.com/google/go-cmp,https://raw.githubusercontent.com/google/go-cmp/master/LICENSE,BSD-3-Clause -github.com/google/go-querystring,https://raw.githubusercontent.com/google/go-querystring/master/LICENSE,BSD-3-Clause -github.com/google/gofuzz,https://raw.githubusercontent.com/google/gofuzz/master/LICENSE,Apache-2.0 -github.com/google/martian,https://raw.githubusercontent.com/google/martian/master/LICENSE,Apache-2.0 -github.com/google/pprof,https://raw.githubusercontent.com/google/pprof/master/LICENSE,Apache-2.0 -github.com/google/renameio,https://raw.githubusercontent.com/google/renameio/master/LICENSE,Apache-2.0 -github.com/google/uuid,https://raw.githubusercontent.com/google/uuid/master/LICENSE,BSD-3-Clause -github.com/googleapis/gax-go/v2,https://raw.githubusercontent.com/googleapis/gax-go/master/LICENSE,BSD-3-Clause -github.com/googleapis/gnostic,https://raw.githubusercontent.com/google/gnostic/master/LICENSE,Apache-2.0 -github.com/gophercloud/gophercloud,https://raw.githubusercontent.com/gophercloud/gophercloud/master/LICENSE,Apache-2.0 -github.com/gopherjs/gopherjs,https://raw.githubusercontent.com/gopherjs/gopherjs/master/LICENSE,BSD-2-Clause -github.com/gorilla/handlers,https://raw.githubusercontent.com/gorilla/handlers/master/LICENSE,BSD-2-Clause -github.com/gorilla/websocket,https://raw.githubusercontent.com/gorilla/websocket/master/LICENSE,BSD-2-Clause -github.com/gregjones/httpcache,https://raw.githubusercontent.com/gregjones/httpcache/master/LICENSE.txt,MIT -github.com/grpc-ecosystem/go-grpc-middleware,https://raw.githubusercontent.com/grpc-ecosystem/go-grpc-middleware/master/LICENSE,Apache-2.0 -github.com/grpc-ecosystem/go-grpc-prometheus,https://raw.githubusercontent.com/grpc-ecosystem/go-grpc-prometheus/master/LICENSE,Apache-2.0 -github.com/grpc-ecosystem/grpc-gateway,https://raw.githubusercontent.com/grpc-ecosystem/grpc-gateway/master/LICENSE.txt,BSD-3-Clause -github.com/hashicorp/go-uuid,https://raw.githubusercontent.com/hashicorp/go-uuid/master/LICENSE,MPL-2.0 -github.com/hashicorp/golang-lru,https://raw.githubusercontent.com/hashicorp/golang-lru/master/LICENSE,MPL-2.0 -github.com/hashicorp/hcl,https://raw.githubusercontent.com/hashicorp/hcl/main/LICENSE,MPL-2.0 -github.com/hpcloud/tail,https://raw.githubusercontent.com/hpcloud/tail/master/LICENSE.txt,MIT -github.com/iancoleman/strcase,https://raw.githubusercontent.com/iancoleman/strcase/master/LICENSE,MIT -github.com/ianlancetaylor/demangle,https://raw.githubusercontent.com/ianlancetaylor/demangle/master/LICENSE,BSD-3-Clause -github.com/imdario/mergo,https://raw.githubusercontent.com/imdario/mergo/master/LICENSE,BSD-3-Clause -github.com/imkira/go-interpol,https://raw.githubusercontent.com/imkira/go-interpol/master/LICENSE,MIT -github.com/inconshreveable/mousetrap,https://raw.githubusercontent.com/inconshreveable/mousetrap/master/LICENSE,Apache-2.0 -github.com/jbenet/go-context,https://raw.githubusercontent.com/jbenet/go-context/master/LICENSE,MIT -github.com/jcmturner/gofork,https://raw.githubusercontent.com/jcmturner/gofork/master/LICENSE,BSD-3-Clause -github.com/jessevdk/go-flags,https://raw.githubusercontent.com/jessevdk/go-flags/master/LICENSE,BSD-3-Clause -github.com/jmespath/go-jmespath,https://raw.githubusercontent.com/jmespath/go-jmespath/master/LICENSE,Apache-2.0 -github.com/joho/godotenv,https://raw.githubusercontent.com/joho/godotenv/master/LICENCE,MIT -github.com/jonboulle/clockwork,https://raw.githubusercontent.com/jonboulle/clockwork/master/LICENSE,Apache-2.0 -github.com/json-iterator/go,https://raw.githubusercontent.com/json-iterator/go/master/LICENSE,MIT -github.com/jstemmer/go-junit-report,https://raw.githubusercontent.com/jstemmer/go-junit-report/master/LICENSE,MIT -github.com/jtolds/gls,https://raw.githubusercontent.com/jtolio/gls/master/LICENSE,MIT -github.com/julienschmidt/httprouter,https://raw.githubusercontent.com/julienschmidt/httprouter/master/LICENSE,BSD-3-Clause -github.com/k0kubun/colorstring,https://raw.githubusercontent.com/k0kubun/colorstring/master/LICENSE,MIT -github.com/karrick/godirwalk,https://raw.githubusercontent.com/karrick/godirwalk/master/LICENSE,BSD-2-Clause -github.com/kevinburke/ssh_config,https://raw.githubusercontent.com/kevinburke/ssh_config/master/LICENSE,MIT -github.com/kisielk/errcheck,https://raw.githubusercontent.com/kisielk/errcheck/master/LICENSE,MIT -github.com/kisielk/gotool,https://raw.githubusercontent.com/kisielk/gotool/master/LICENSE,MIT -github.com/klauspost/compress,https://raw.githubusercontent.com/klauspost/compress/master/LICENSE,BSD-3-Clause -github.com/klauspost/cpuid,https://raw.githubusercontent.com/klauspost/cpuid/master/LICENSE,MIT -github.com/konsorten/go-windows-terminal-sequences,https://raw.githubusercontent.com/konsorten/go-windows-terminal-sequences/master/LICENSE,MIT -github.com/kr/logfmt,https://raw.githubusercontent.com/kr/logfmt/main/LICENSE,MIT -github.com/kr/pretty,https://raw.githubusercontent.com/kr/pretty/main/License,MIT -github.com/kr/pty,https://raw.githubusercontent.com/kr/pty/master/LICENSE,MIT -github.com/kr/text,https://raw.githubusercontent.com/kr/text/main/License,MIT -github.com/labstack/echo,https://raw.githubusercontent.com/labstack/echo/master/LICENSE,MIT -github.com/labstack/gommon,https://raw.githubusercontent.com/labstack/gommon/master/LICENSE,MIT -github.com/lib/pq,https://raw.githubusercontent.com/lib/pq/master/LICENSE.md,MIT -github.com/lucasb-eyer/go-colorful,https://raw.githubusercontent.com/lucasb-eyer/go-colorful/master/LICENSE,MIT -github.com/magiconair/properties,https://raw.githubusercontent.com/magiconair/properties/master/LICENSE.md,BSD-2-Clause -github.com/mailru/easyjson,https://raw.githubusercontent.com/mailru/easyjson/master/LICENSE,MIT -github.com/markbates/oncer,https://raw.githubusercontent.com/markbates/oncer/master/LICENSE,MIT -github.com/markbates/safe,https://raw.githubusercontent.com/markbates/safe/master/LICENSE,MIT -github.com/mattn/go-colorable,https://raw.githubusercontent.com/mattn/go-colorable/master/LICENSE,MIT -github.com/mattn/go-isatty,https://raw.githubusercontent.com/mattn/go-isatty/master/LICENSE,MIT -github.com/mattn/go-runewidth,https://raw.githubusercontent.com/mattn/go-runewidth/master/LICENSE,MIT -github.com/mattn/goreman,https://raw.githubusercontent.com/mattn/goreman/master/LICENSE,MIT -github.com/matttproud/golang_protobuf_extensions,https://raw.githubusercontent.com/matttproud/golang_protobuf_extensions/master/LICENSE,Apache-2.0 -github.com/minio/md5-simd,https://raw.githubusercontent.com/minio/md5-simd/master/LICENSE,Apache-2.0 -github.com/minio/minio-go/v7,https://raw.githubusercontent.com/minio/minio-go/master/LICENSE,Apache-2.0 -github.com/minio/sha256-simd,https://raw.githubusercontent.com/minio/sha256-simd/master/LICENSE,Apache-2.0 -github.com/mitchellh/go-homedir,https://raw.githubusercontent.com/mitchellh/go-homedir/master/LICENSE,MIT -github.com/mitchellh/go-ps,https://raw.githubusercontent.com/mitchellh/go-ps/master/LICENSE.md,MIT -github.com/mitchellh/go-wordwrap,https://raw.githubusercontent.com/mitchellh/go-wordwrap/master/LICENSE.md,MIT -github.com/mitchellh/mapstructure,https://raw.githubusercontent.com/mitchellh/mapstructure/master/LICENSE,MIT -github.com/modern-go/concurrent,https://raw.githubusercontent.com/modern-go/concurrent/master/LICENSE,Apache-2.0 -github.com/modern-go/reflect2,https://raw.githubusercontent.com/modern-go/reflect2/master/LICENSE,Apache-2.0 -github.com/montanaflynn/stats,https://raw.githubusercontent.com/montanaflynn/stats/master/LICENSE,MIT -github.com/munnerz/goautoneg,https://raw.githubusercontent.com/munnerz/goautoneg/master/LICENSE,BSD-3-Clause -github.com/mwitkow/go-conntrack,https://raw.githubusercontent.com/mwitkow/go-conntrack/master/LICENSE,Apache-2.0 -github.com/mxk/go-flowrate,https://raw.githubusercontent.com/mxk/go-flowrate/master/LICENSE,BSD-3-Clause -github.com/nsf/termbox-go,https://raw.githubusercontent.com/nsf/termbox-go/master/LICENSE,MIT -github.com/oklog/ulid,https://raw.githubusercontent.com/oklog/ulid/master/LICENSE,Apache-2.0 -github.com/olekukonko/tablewriter,https://raw.githubusercontent.com/olekukonko/tablewriter/master/LICENSE.md,MIT -github.com/onsi/ginkgo,https://raw.githubusercontent.com/onsi/ginkgo/master/LICENSE,MIT -github.com/onsi/gomega,https://raw.githubusercontent.com/onsi/gomega/master/LICENSE,MIT -github.com/opentracing/opentracing-go,https://raw.githubusercontent.com/opentracing/opentracing-go/master/LICENSE,Apache-2.0 -github.com/pborman/getopt,https://raw.githubusercontent.com/pborman/getopt/master/LICENSE,BSD-3-Clause -github.com/pborman/uuid,https://raw.githubusercontent.com/pborman/uuid/master/LICENSE,BSD-3-Clause -github.com/pelletier/go-buffruneio,https://raw.githubusercontent.com/pelletier/go-buffruneio/master/LICENSE,MIT -github.com/pelletier/go-toml,https://raw.githubusercontent.com/pelletier/go-toml/master/LICENSE,MIT -github.com/peterbourgon/diskv,https://raw.githubusercontent.com/peterbourgon/diskv/master/LICENSE,MIT -github.com/pkg/errors,https://raw.githubusercontent.com/pkg/errors/master/LICENSE,BSD-2-Clause -github.com/pmezard/go-difflib,https://raw.githubusercontent.com/pmezard/go-difflib/master/LICENSE,BSD-3-Clause -github.com/pquerna/cachecontrol,https://raw.githubusercontent.com/pquerna/cachecontrol/master/LICENSE,Apache-2.0 -github.com/prometheus/client_golang,https://raw.githubusercontent.com/prometheus/client_golang/master/LICENSE,Apache-2.0 -github.com/prometheus/client_model,https://raw.githubusercontent.com/prometheus/client_model/master/LICENSE,Apache-2.0 -github.com/prometheus/common,https://raw.githubusercontent.com/prometheus/common/main/LICENSE,Apache-2.0 -github.com/prometheus/procfs,https://raw.githubusercontent.com/prometheus/procfs/master/LICENSE,Apache-2.0 -github.com/prometheus/tsdb,https://raw.githubusercontent.com/prometheus-junkyard/tsdb/master/LICENSE,Apache-2.0 -github.com/remyoudompheng/bigfft,https://raw.githubusercontent.com/remyoudompheng/bigfft/master/LICENSE,BSD-3-Clause -github.com/rivo/tview,https://raw.githubusercontent.com/rivo/tview/master/LICENSE.txt,MIT -github.com/rivo/uniseg,https://raw.githubusercontent.com/rivo/uniseg/master/LICENSE.txt,MIT -github.com/robfig/cron/v3,https://raw.githubusercontent.com/robfig/cron/master/LICENSE,MIT -github.com/rogpeppe/fastuuid,https://raw.githubusercontent.com/rogpeppe/fastuuid/master/LICENSE,BSD-3-Clause -github.com/rogpeppe/go-internal,https://raw.githubusercontent.com/rogpeppe/go-internal/master/LICENSE,BSD-3-Clause -github.com/russross/blackfriday,https://raw.githubusercontent.com/russross/blackfriday/master/LICENSE.txt,BSD-2-Clause -github.com/russross/blackfriday/v2,https://raw.githubusercontent.com/russross/blackfriday/master/LICENSE.txt,BSD-2-Clause -github.com/sanity-io/litter,https://raw.githubusercontent.com/sanity-io/litter/master/LICENSE,MIT -github.com/satori/go.uuid,https://raw.githubusercontent.com/satori/go.uuid/master/LICENSE,MIT -github.com/sergi/go-diff,https://raw.githubusercontent.com/sergi/go-diff/master/LICENSE,MIT -github.com/shurcooL/sanitized_anchor_name,https://raw.githubusercontent.com/shurcooL/sanitized_anchor_name/master/LICENSE,MIT -github.com/sirupsen/logrus,https://raw.githubusercontent.com/sirupsen/logrus/master/LICENSE,MIT -github.com/skratchdot/open-golang,https://raw.githubusercontent.com/skratchdot/open-golang/master/LICENSE,MIT -github.com/smartystreets/assertions,https://raw.githubusercontent.com/smartystreets/assertions/master/LICENSE.md,MIT -github.com/smartystreets/goconvey,https://raw.githubusercontent.com/smartystreets/goconvey/master/LICENSE.md,MIT -github.com/soheilhy/cmux,https://raw.githubusercontent.com/soheilhy/cmux/master/LICENSE,Apache-2.0 -github.com/spaolacci/murmur3,https://raw.githubusercontent.com/spaolacci/murmur3/master/LICENSE,BSD-3-Clause -github.com/spf13/afero,https://raw.githubusercontent.com/spf13/afero/master/LICENSE.txt,Apache-2.0 -github.com/spf13/cast,https://raw.githubusercontent.com/spf13/cast/master/LICENSE,MIT -github.com/spf13/cobra,https://raw.githubusercontent.com/spf13/cobra/master/LICENSE.txt,Apache-2.0 -github.com/spf13/jwalterweatherman,https://raw.githubusercontent.com/spf13/jwalterweatherman/master/LICENSE,MIT -github.com/spf13/pflag,https://raw.githubusercontent.com/spf13/pflag/master/LICENSE,BSD-3-Clause -github.com/spf13/viper,https://raw.githubusercontent.com/spf13/viper/master/LICENSE,MIT -github.com/src-d/gcfg,https://raw.githubusercontent.com/src-d/gcfg/v1/LICENSE,BSD-3-Clause -github.com/stretchr/objx,https://raw.githubusercontent.com/stretchr/objx/master/LICENSE,MIT -github.com/stretchr/testify,https://raw.githubusercontent.com/stretchr/testify/master/LICENSE,MIT -github.com/subosito/gotenv,https://raw.githubusercontent.com/subosito/gotenv/master/LICENSE,MIT -github.com/tidwall/gjson,https://raw.githubusercontent.com/tidwall/gjson/master/LICENSE,MIT -github.com/tidwall/match,https://raw.githubusercontent.com/tidwall/match/master/LICENSE,MIT -github.com/tidwall/pretty,https://raw.githubusercontent.com/tidwall/pretty/master/LICENSE,MIT -github.com/tmc/grpc-websocket-proxy,https://raw.githubusercontent.com/tmc/grpc-websocket-proxy/master/LICENSE,MIT -github.com/toqueteos/webbrowser,https://raw.githubusercontent.com/toqueteos/webbrowser/master/LICENSE.md,MIT -github.com/ugorji/go,https://raw.githubusercontent.com/ugorji/go/master/LICENSE,MIT -github.com/ugorji/go/codec,https://raw.githubusercontent.com/ugorji/go/master/LICENSE,MIT -github.com/urfave/cli,https://raw.githubusercontent.com/urfave/cli/master/LICENSE,MIT -github.com/valyala/bytebufferpool,https://raw.githubusercontent.com/valyala/bytebufferpool/master/LICENSE,MIT -github.com/valyala/fasthttp,https://raw.githubusercontent.com/valyala/fasthttp/master/LICENSE,MIT -github.com/valyala/fasttemplate,https://raw.githubusercontent.com/valyala/fasttemplate/master/LICENSE,MIT -github.com/valyala/tcplisten,https://raw.githubusercontent.com/valyala/tcplisten/master/LICENSE,MIT -github.com/vektah/gqlparser,https://raw.githubusercontent.com/vektah/gqlparser/master/LICENSE,MIT -github.com/xanzy/ssh-agent,https://raw.githubusercontent.com/xanzy/ssh-agent/master/LICENSE,Apache-2.0 -github.com/xdg/scram,https://raw.githubusercontent.com/xdg-go/scram/master/LICENSE,Apache-2.0 -github.com/xdg/stringprep,https://raw.githubusercontent.com/xdg-go/stringprep/master/LICENSE,Apache-2.0 -github.com/xeipuuv/gojsonpointer,https://raw.githubusercontent.com/xeipuuv/gojsonpointer/master/LICENSE-APACHE-2.0.txt,Apache-2.0 -github.com/xeipuuv/gojsonreference,https://raw.githubusercontent.com/xeipuuv/gojsonreference/master/LICENSE-APACHE-2.0.txt,Apache-2.0 -github.com/xeipuuv/gojsonschema,https://raw.githubusercontent.com/xeipuuv/gojsonschema/master/LICENSE-APACHE-2.0.txt,Apache-2.0 -github.com/xiang90/probing,https://raw.githubusercontent.com/xiang90/probing/master/LICENSE,MIT -github.com/xordataexchange/crypt,https://raw.githubusercontent.com/xordataexchange/crypt/master/LICENSE,MIT -github.com/yalp/jsonpath,https://raw.githubusercontent.com/yalp/jsonpath/master/LICENSE,BSD-3-Clause -github.com/yudai/gojsondiff,https://raw.githubusercontent.com/yudai/gojsondiff/master/LICENSE,MIT -github.com/yudai/golcs,https://raw.githubusercontent.com/yudai/golcs/master/LICENSE,MIT -github.com/yudai/pp,https://raw.githubusercontent.com/yudai/pp/master/README.md,MIT -github.com/yuin/goldmark,https://raw.githubusercontent.com/yuin/goldmark/master/LICENSE,MIT -go.etcd.io/bbolt,https://raw.githubusercontent.com/etcd-io/bbolt/master/LICENSE,MIT -go.etcd.io/etcd,https://raw.githubusercontent.com/etcd-io/etcd/master/LICENSE,Apache-2.0 -go.mongodb.org/mongo-driver,https://raw.githubusercontent.com/mongodb/mongo-go-driver/master/LICENSE,Apache-2.0 -go.opencensus.io,https://raw.githubusercontent.com/census-instrumentation/opencensus-go/master/LICENSE,Apache-2.0 -go.uber.org/atomic,https://raw.githubusercontent.com/uber-go/atomic/master/LICENSE.txt,MIT -go.uber.org/multierr,https://raw.githubusercontent.com/uber-go/multierr/master/LICENSE.txt,MIT -go.uber.org/zap,https://raw.githubusercontent.com/uber-go/zap/master/LICENSE.txt,MIT -golang.org/x/crypto,https://raw.githubusercontent.com/golang/crypto/master/LICENSE,BSD-3-Clause -golang.org/x/exp,https://raw.githubusercontent.com/golang/exp/master/LICENSE,BSD-3-Clause -golang.org/x/image,https://raw.githubusercontent.com/golang/image/master/LICENSE,BSD-3-Clause -golang.org/x/lint,https://raw.githubusercontent.com/golang/lint/master/LICENSE,BSD-3-Clause -golang.org/x/mobile,https://raw.githubusercontent.com/golang/mobile/master/LICENSE,BSD-3-Clause -golang.org/x/mod,https://raw.githubusercontent.com/golang/mod/master/LICENSE,BSD-3-Clause -golang.org/x/net,https://raw.githubusercontent.com/golang/net/master/LICENSE,BSD-3-Clause -golang.org/x/oauth2,https://raw.githubusercontent.com/golang/oauth2/master/LICENSE,BSD-3-Clause -golang.org/x/sync,https://raw.githubusercontent.com/golang/sync/master/LICENSE,BSD-3-Clause -golang.org/x/sys,https://raw.githubusercontent.com/golang/sys/master/LICENSE,BSD-3-Clause -golang.org/x/text,https://raw.githubusercontent.com/golang/text/master/LICENSE,BSD-3-Clause -golang.org/x/time,https://raw.githubusercontent.com/golang/time/master/LICENSE,BSD-3-Clause -golang.org/x/tools,https://raw.githubusercontent.com/golang/tools/master/LICENSE,BSD-3-Clause -golang.org/x/xerrors,https://raw.githubusercontent.com/golang/xerrors/master/LICENSE,BSD-3-Clause -gonum.org/v1/gonum,https://raw.githubusercontent.com/gonum/gonum/master/LICENSE,BSD-3-Clause -gonum.org/v1/netlib,https://raw.githubusercontent.com/gonum/netlib/master/LICENSE,BSD-3-Clause -google.golang.org/api,https://raw.githubusercontent.com/googleapis/google-api-go-client/master/LICENSE,BSD-3-Clause -google.golang.org/appengine,https://raw.githubusercontent.com/golang/appengine/master/LICENSE,Apache-2.0 -google.golang.org/genproto,https://raw.githubusercontent.com/googleapis/go-genproto/master/LICENSE,Apache-2.0 -google.golang.org/grpc,https://raw.githubusercontent.com/grpc/grpc-go/master/LICENSE,Apache-2.0 -google.golang.org/protobuf,https://raw.githubusercontent.com/protocolbuffers/protobuf-go/master/LICENSE,BSD-3-Clause -gopkg.in/alecthomas/kingpin.v2,https://raw.githubusercontent.com/alecthomas/kingpin/master/COPYING,MIT -gopkg.in/check.v1,https://raw.githubusercontent.com/go-check/check/v1/LICENSE,BSD-2-Clause -gopkg.in/cheggaaa/pb.v1,https://raw.githubusercontent.com/cheggaaa/pb/master/LICENSE,BSD-3-Clause -gopkg.in/errgo.v2,https://raw.githubusercontent.com/go-errgo/errgo/v1/LICENSE,BSD-3-Clause -gopkg.in/fsnotify.v1,https://raw.githubusercontent.com/fsnotify/fsnotify/master/LICENSE,BSD-3-Clause -gopkg.in/go-playground/webhooks.v5,https://raw.githubusercontent.com/go-playground/webhooks/v5/LICENSE,MIT -gopkg.in/inf.v0,https://raw.githubusercontent.com/go-inf/inf/master/LICENSE,BSD-3-Clause -gopkg.in/ini.v1,https://raw.githubusercontent.com/go-ini/ini/master/LICENSE,Apache-2.0 -gopkg.in/jcmturner/aescts.v1,https://raw.githubusercontent.com/jcmturner/aescts/master/LICENSE,Apache-2.0 -gopkg.in/jcmturner/dnsutils.v1,https://raw.githubusercontent.com/jcmturner/dnsutils/master/LICENSE,Apache-2.0 -gopkg.in/jcmturner/goidentity.v2,https://raw.githubusercontent.com/jcmturner/goidentity/master/LICENSE,Apache-2.0 -gopkg.in/jcmturner/gokrb5.v5,https://raw.githubusercontent.com/jcmturner/gokrb5/master/LICENSE,Apache-2.0 -gopkg.in/jcmturner/rpc.v0,https://raw.githubusercontent.com/jcmturner/rpc/master/LICENSE,Apache-2.0 -gopkg.in/mgo.v2,https://raw.githubusercontent.com/go-mgo/mgo/v2-unstable/LICENSE,BSD-2-Clause -gopkg.in/natefinch/lumberjack.v2,https://raw.githubusercontent.com/natefinch/lumberjack/v2.0/LICENSE,MIT -gopkg.in/square/go-jose.v2,https://raw.githubusercontent.com/square/go-jose/v2/LICENSE,Apache-2.0 -gopkg.in/src-d/go-billy.v4,https://raw.githubusercontent.com/src-d/go-billy/master/LICENSE,Apache-2.0 -gopkg.in/src-d/go-git-fixtures.v3,https://raw.githubusercontent.com/src-d/go-git-fixtures/master/LICENSE,Apache-2.0 -gopkg.in/src-d/go-git.v4,https://raw.githubusercontent.com/src-d/go-git/master/LICENSE,Apache-2.0 -gopkg.in/tomb.v1,https://raw.githubusercontent.com/go-tomb/tomb/v1/LICENSE,BSD-3-Clause -gopkg.in/warnings.v0,https://raw.githubusercontent.com/go-warnings/warnings/master/LICENSE,BSD-2-Clause -gopkg.in/yaml.v2,https://raw.githubusercontent.com/go-yaml/yaml/v2/LICENSE,Apache-2.0 -gopkg.in/yaml.v3,https://raw.githubusercontent.com/go-yaml/yaml/v2/LICENSE,Apache-2.0 -gotest.tools,https://raw.githubusercontent.com/gotestyourself/gotest.tools/main/LICENSE,Apache-2.0 -honnef.co/go/tools,https://raw.githubusercontent.com/dominikh/go-tools/master/LICENSE,MIT -k8s.io/api,https://raw.githubusercontent.com/kubernetes/api/master/LICENSE,Apache-2.0 -k8s.io/apiextensions-apiserver,https://raw.githubusercontent.com/kubernetes/apiextensions-apiserver/master/LICENSE,Apache-2.0 -k8s.io/apimachinery,https://raw.githubusercontent.com/kubernetes/apimachinery/master/LICENSE,Apache-2.0 -k8s.io/apiserver,https://raw.githubusercontent.com/kubernetes/apiserver/master/LICENSE,Apache-2.0 -k8s.io/client-go,https://raw.githubusercontent.com/kubernetes/client-go/master/LICENSE,Apache-2.0 -k8s.io/code-generator,https://raw.githubusercontent.com/kubernetes/code-generator/master/LICENSE,Apache-2.0 -k8s.io/component-base,https://raw.githubusercontent.com/kubernetes/component-base/master/LICENSE,Apache-2.0 -k8s.io/gengo,https://raw.githubusercontent.com/kubernetes/gengo/master/LICENSE,Apache-2.0 -k8s.io/klog,https://raw.githubusercontent.com/kubernetes/klog/master/LICENSE,Apache-2.0 -k8s.io/kube-openapi,https://raw.githubusercontent.com/kubernetes/kube-openapi/master/LICENSE,Apache-2.0 -k8s.io/utils,https://raw.githubusercontent.com/kubernetes/utils/master/LICENSE,Apache-2.0 -modernc.org/cc,https://gitlab.com/cznic/cc/-/raw/master/LICENSE,BSD-3-Clause -modernc.org/golex,https://gitlab.com/cznic/golex/-/raw/master/LICENSE,BSD-3-Clause -modernc.org/mathutil,https://gitlab.com/cznic/mathutil/-/raw/master/LICENSE,BSD-3-Clause -modernc.org/strutil,https://gitlab.com/cznic/strutil/-/raw/master/LICENSE,BSD-3-Clause -modernc.org/xc,https://gitlab.com/cznic/xc/-/raw/master/LICENSE,BSD-3-Clause -moul.io/http2curl,https://raw.githubusercontent.com/moul/http2curl/master/LICENSE-APACHE,Apache-2.0 -rsc.io/binaryregexp,https://raw.githubusercontent.com/rsc/binaryregexp/master/LICENSE,BSD-3-Clause -rsc.io/quote/v3,https://raw.githubusercontent.com/rsc/quote/master/LICENSE,BSD-3-Clause -rsc.io/sampler,https://raw.githubusercontent.com/rsc/sampler/master/LICENSE,BSD-3-Clause -sigs.k8s.io/controller-tools,https://raw.githubusercontent.com/kubernetes-sigs/controller-tools/master/LICENSE,Apache-2.0 -sigs.k8s.io/structured-merge-diff,https://raw.githubusercontent.com/kubernetes-sigs/structured-merge-diff/master/LICENSE,Apache-2.0 -sigs.k8s.io/structured-merge-diff/v2,https://raw.githubusercontent.com/kubernetes-sigs/structured-merge-diff/master/LICENSE,Apache-2.0 -sigs.k8s.io/yaml,https://raw.githubusercontent.com/kubernetes-sigs/yaml/master/LICENSE,MIT -upper.io/db.v3,https://raw.githubusercontent.com/upper/db/master/LICENSE,MIT diff --git a/third_party/argo/licenses-argoexec.csv b/third_party/argo/licenses-argoexec.csv new file mode 100644 index 0000000000..6cd7ab818a --- /dev/null +++ b/third_party/argo/licenses-argoexec.csv @@ -0,0 +1,139 @@ +# Generated by https://github.com/google/go-licenses/v2. DO NOT EDIT. +github.com/argoproj/argo-workflows/v3, https://github.com/argoproj/argo-workflows/blob/v3.1.2/LICENSE, Apache-2.0 +cloud.google.com/go, https://github.com/googleapis/google-cloud-go/blob/v0.55.0/LICENSE, Apache-2.0 +cloud.google.com/go, https://github.com/googleapis/google-cloud-go/blob/v0.55.0/cmd/go-cloud-debug-agent/internal/debug/elf/elf.go, BSD-2-Clause +cloud.google.com/go/storage, https://github.com/googleapis/google-cloud-go/blob/storage/v1.6.0/LICENSE, Apache-2.0 +github.com/Azure/go-autorest/autorest, https://github.com/Azure/go-autorest/blob/autorest/v0.11.1/LICENSE, Apache-2.0 +github.com/Azure/go-autorest/autorest/adal, https://github.com/Azure/go-autorest/blob/autorest/adal/v0.9.5/LICENSE, Apache-2.0 +github.com/Azure/go-autorest/autorest/date, https://github.com/Azure/go-autorest/blob/autorest/date/v0.3.0/LICENSE, Apache-2.0 +github.com/Azure/go-autorest/logger, https://github.com/Azure/go-autorest/blob/logger/v0.2.0/LICENSE, Apache-2.0 +github.com/Azure/go-autorest/tracing, https://github.com/Azure/go-autorest/blob/tracing/v0.6.0/LICENSE, Apache-2.0 +github.com/Masterminds/goutils, https://github.com/Masterminds/goutils/blob/v1.1.0/LICENSE.txt, Apache-2.0 +github.com/Masterminds/semver, https://github.com/Masterminds/semver/blob/v1.5.0/LICENSE.txt, MIT +github.com/Masterminds/sprig, https://github.com/Masterminds/sprig/blob/v2.22.0/LICENSE.txt, MIT +github.com/PuerkitoBio/purell, https://github.com/PuerkitoBio/purell/blob/v1.1.1/LICENSE, BSD-3-Clause +github.com/PuerkitoBio/urlesc, https://github.com/PuerkitoBio/urlesc/blob/de5bf2ad4578/LICENSE, BSD-3-Clause +github.com/aliyun/aliyun-oss-go-sdk, https://github.com/aliyun/aliyun-oss-go-sdk/blob/v2.1.8/LICENSE, MIT +github.com/antonmedv/expr, https://github.com/antonmedv/expr/blob/v1.8.8/LICENSE, MIT +github.com/argoproj/argo-events, https://github.com/argoproj/argo-events/blob/v1.4.0/LICENSE, Apache-2.0 +github.com/argoproj/pkg, https://github.com/argoproj/pkg/blob/v0.10.1/LICENSE, Apache-2.0 +github.com/aws/aws-sdk-go, https://github.com/aws/aws-sdk-go/blob/v1.33.16/LICENSE.txt, Apache-2.0 +github.com/aws/aws-sdk-go, https://github.com/aws/aws-sdk-go/blob/v1.33.16/internal/sync/singleflight/LICENSE, BSD-3-Clause +github.com/colinmarc/hdfs, https://github.com/colinmarc/hdfs/blob/9746310a4d31/LICENSE.txt, MIT +github.com/coreos/go-oidc, https://github.com/coreos/go-oidc/blob/v2.2.1/LICENSE, Apache-2.0 +github.com/davecgh/go-spew, https://github.com/davecgh/go-spew/blob/v1.1.1/LICENSE, ISC +github.com/docker/spdystream, https://github.com/docker/spdystream/blob/6480d4af844c/LICENSE, Apache-2.0 +github.com/doublerebel/bellows, https://github.com/doublerebel/bellows/blob/f177d92a03d3/LICENSE, MIT +github.com/emicklei/go-restful, https://github.com/emicklei/go-restful/blob/v2.15.0/LICENSE, MIT +github.com/emirpasic/gods, https://github.com/emirpasic/gods/blob/v1.12.0/LICENSE, BSD-2-Clause / ISC +github.com/felixge/httpsnoop, https://github.com/felixge/httpsnoop/blob/v1.0.1/LICENSE.txt, MIT +github.com/form3tech-oss/jwt-go, https://github.com/form3tech-oss/jwt-go/blob/v3.2.2/LICENSE, MIT +github.com/go-logr/logr, https://github.com/go-logr/logr/blob/v0.4.0/LICENSE, Apache-2.0 +github.com/go-openapi/jsonpointer, https://github.com/go-openapi/jsonpointer/blob/v0.19.5/LICENSE, Apache-2.0 +github.com/go-openapi/jsonreference, https://github.com/go-openapi/jsonreference/blob/v0.19.5/LICENSE, Apache-2.0 +github.com/go-openapi/spec, https://github.com/go-openapi/spec/blob/v0.20.2/LICENSE, Apache-2.0 +github.com/go-openapi/swag, https://github.com/go-openapi/swag/blob/v0.19.13/LICENSE, Apache-2.0 +github.com/gogo/protobuf, https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE, BSD-3-Clause / BSD-2-Clause +github.com/golang/groupcache, https://github.com/golang/groupcache/blob/8c9f03a8e57e/LICENSE, Apache-2.0 +github.com/golang/protobuf, https://github.com/golang/protobuf/blob/v1.4.3/LICENSE, BSD-3-Clause +github.com/google/gofuzz, https://github.com/google/gofuzz/blob/v1.1.0/LICENSE, Apache-2.0 +github.com/google/uuid, https://github.com/google/uuid/blob/v1.1.2/LICENSE, BSD-3-Clause +github.com/googleapis/gax-go/v2, https://github.com/googleapis/gax-go/blob/v2.0.5/LICENSE, BSD-3-Clause +github.com/googleapis/gnostic, https://github.com/googleapis/gnostic/blob/v0.5.1/LICENSE, Apache-2.0 +github.com/gorilla/websocket, https://github.com/gorilla/websocket/blob/v1.4.2/LICENSE, BSD-2-Clause +github.com/grpc-ecosystem/go-grpc-middleware, https://github.com/grpc-ecosystem/go-grpc-middleware/blob/v1.1.0/LICENSE, Apache-2.0 +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/LICENSE.txt, BSD-3-Clause +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/internal/casing/LICENSE.md, BSD-3-Clause +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/third_party/googleapis/LICENSE, Apache-2.0 +github.com/hashicorp/go-uuid, https://github.com/hashicorp/go-uuid/blob/v1.0.2/LICENSE, MPL-2.0 +github.com/huandu/xstrings, https://github.com/huandu/xstrings/blob/v1.3.1/LICENSE, MIT +github.com/imdario/mergo, https://github.com/imdario/mergo/blob/v0.3.12/LICENSE, BSD-3-Clause +github.com/jbenet/go-context, https://github.com/jbenet/go-context/blob/d14ea06fba99/LICENSE, MIT +github.com/jcmturner/gofork, https://github.com/jcmturner/gofork/blob/v1.0.0/LICENSE, BSD-3-Clause +github.com/jmespath/go-jmespath, https://github.com/jmespath/go-jmespath/blob/v0.3.0/LICENSE, Apache-2.0 +github.com/josharian/intern, https://github.com/josharian/intern/blob/v1.0.0/license.md, MIT +github.com/json-iterator/go, https://github.com/json-iterator/go/blob/v1.1.10/LICENSE, MIT +github.com/kevinburke/ssh_config, https://github.com/kevinburke/ssh_config/blob/4977a11b4351/LICENSE, MIT +github.com/klauspost/compress, https://github.com/klauspost/compress/blob/v1.11.9/LICENSE, BSD-3-Clause +github.com/klauspost/compress, https://github.com/klauspost/compress/blob/v1.11.9/s2/LICENSE, BSD-3-Clause +github.com/klauspost/compress, https://github.com/klauspost/compress/blob/v1.11.9/s2/cmd/internal/readahead/LICENSE, MIT +github.com/klauspost/compress, https://github.com/klauspost/compress/blob/v1.11.9/snappy/LICENSE, BSD-3-Clause +github.com/klauspost/compress, https://github.com/klauspost/compress/blob/v1.11.9/zstd/internal/xxhash/LICENSE.txt, MIT +github.com/klauspost/cpuid, https://github.com/klauspost/cpuid/blob/v1.2.3/LICENSE, MIT +github.com/klauspost/pgzip, https://github.com/klauspost/pgzip/blob/v1.2.5/GO_LICENSE, BSD-3-Clause +github.com/klauspost/pgzip, https://github.com/klauspost/pgzip/blob/v1.2.5/LICENSE, MIT +github.com/mailru/easyjson, https://github.com/mailru/easyjson/blob/v0.7.6/LICENSE, MIT +github.com/mailru/easyjson, https://github.com/mailru/easyjson/blob/v0.7.6/parser/modulepath.go, BSD-3-Clause +github.com/minio/md5-simd, https://github.com/minio/md5-simd/blob/v1.1.0/LICENSE, Apache-2.0 +github.com/minio/md5-simd, https://github.com/minio/md5-simd/blob/v1.1.0/block8_amd64.s, MIT +github.com/minio/minio-go/v7, https://github.com/minio/minio-go/blob/v7.0.2/LICENSE, Apache-2.0 +github.com/minio/sha256-simd, https://github.com/minio/sha256-simd/blob/v0.1.1/LICENSE, Apache-2.0 +github.com/minio/sha256-simd, https://github.com/minio/sha256-simd/blob/v0.1.1/cpuid_386.s, MIT +github.com/minio/sha256-simd, https://github.com/minio/sha256-simd/blob/v0.1.1/cpuid_amd64.s, MIT +github.com/minio/sha256-simd, https://github.com/minio/sha256-simd/blob/v0.1.1/sha256_test.go, BSD-3-Clause +github.com/minio/sha256-simd, https://github.com/minio/sha256-simd/blob/v0.1.1/sha256blockAvx512_amd64.asm, BSD-3-Clause +github.com/mitchellh/copystructure, https://github.com/mitchellh/copystructure/blob/v1.0.0/LICENSE, MIT +github.com/mitchellh/go-homedir, https://github.com/mitchellh/go-homedir/blob/v1.1.0/LICENSE, MIT +github.com/mitchellh/go-ps, https://github.com/mitchellh/go-ps/blob/621e5597135b/LICENSE.md, MIT +github.com/mitchellh/reflectwalk, https://github.com/mitchellh/reflectwalk/blob/v1.0.1/LICENSE, MIT +github.com/modern-go/concurrent, https://github.com/modern-go/concurrent/blob/bacd9c7ef1dd/LICENSE, Apache-2.0 +github.com/modern-go/reflect2, https://github.com/modern-go/reflect2/blob/v1.0.1/LICENSE, Apache-2.0 +github.com/oliveagle/jsonpath, https://github.com/oliveagle/jsonpath/blob/2e52cf6e6852/LICENSE, MIT +github.com/pkg/errors, https://github.com/pkg/errors/blob/v0.9.1/LICENSE, BSD-2-Clause +github.com/pquerna/cachecontrol, https://github.com/pquerna/cachecontrol/blob/1555304b9b35/LICENSE, Apache-2.0 +github.com/sergi/go-diff, https://github.com/sergi/go-diff/blob/v1.1.0/APACHE-LICENSE-2.0, Apache-2.0 +github.com/sergi/go-diff, https://github.com/sergi/go-diff/blob/v1.1.0/LICENSE, MIT +github.com/sirupsen/logrus, https://github.com/sirupsen/logrus/blob/v1.6.0/LICENSE, MIT +github.com/sirupsen/logrus, https://github.com/sirupsen/logrus/blob/v1.6.0/alt_exit.go, MIT +github.com/spf13/cobra, https://github.com/spf13/cobra/blob/v1.0.0/LICENSE.txt, Apache-2.0 +github.com/spf13/pflag, https://github.com/spf13/pflag/blob/v1.0.5/LICENSE, BSD-3-Clause +github.com/src-d/gcfg, https://github.com/src-d/gcfg/blob/v1.4.0/LICENSE, BSD-3-Clause +github.com/tidwall/gjson, https://github.com/tidwall/gjson/blob/v1.7.5/LICENSE, MIT +github.com/tidwall/match, https://github.com/tidwall/match/blob/v1.0.3/LICENSE, MIT +github.com/tidwall/pretty, https://github.com/tidwall/pretty/blob/v1.1.0/LICENSE, MIT +github.com/valyala/bytebufferpool, https://github.com/valyala/bytebufferpool/blob/v1.0.0/LICENSE, MIT +github.com/valyala/fasttemplate, https://github.com/valyala/fasttemplate/blob/v1.1.0/LICENSE, MIT +github.com/xanzy/ssh-agent, https://github.com/xanzy/ssh-agent/blob/v0.3.0/LICENSE, Apache-2.0 +github.com/xanzy/ssh-agent, https://github.com/xanzy/ssh-agent/blob/v0.3.0/pageant_windows.go, MIT +github.com/xanzy/ssh-agent, https://github.com/xanzy/ssh-agent/blob/v0.3.0/sshagent_windows.go, MIT +go.opencensus.io, https://github.com/census-instrumentation/opencensus-go/blob/v0.22.3/LICENSE, Apache-2.0 +golang.org/x/crypto, https://github.com/golang/crypto/blob/0c34fe9e7dc2/LICENSE, BSD-3-Clause +golang.org/x/net, https://github.com/golang/net/blob/6b1517762897/LICENSE, BSD-3-Clause +golang.org/x/oauth2, https://github.com/golang/oauth2/blob/bf48bf16ab8d/LICENSE, BSD-3-Clause +golang.org/x/sys, https://github.com/golang/sys/blob/47abb6519492/LICENSE, BSD-3-Clause +golang.org/x/term, https://github.com/golang/term/blob/7de9c90e9dd1/LICENSE, BSD-3-Clause +golang.org/x/text, https://github.com/golang/text/blob/v0.3.5/LICENSE, BSD-3-Clause +golang.org/x/time, https://github.com/golang/time/blob/3af7569d3a1e/LICENSE, BSD-3-Clause +google.golang.org/api, https://github.com/googleapis/google-api-go-client/blob/v0.20.0/LICENSE, BSD-3-Clause +google.golang.org/api, https://github.com/googleapis/google-api-go-client/blob/v0.20.0/internal/third_party/uritemplates/LICENSE, BSD-3-Clause +google.golang.org/genproto, https://github.com/googleapis/go-genproto/blob/86f49bd18e98/LICENSE, Apache-2.0 +google.golang.org/grpc, https://github.com/grpc/grpc-go/blob/v1.33.1/LICENSE, Apache-2.0 +google.golang.org/protobuf, https://github.com/protocolbuffers/protobuf-go/blob/v1.25.0/LICENSE, BSD-3-Clause +gopkg.in/inf.v0, https://github.com/go-inf/inf/blob/v0.9.1/LICENSE, BSD-3-Clause +gopkg.in/ini.v1, https://github.com/go-ini/ini/blob/v1.57.0/LICENSE, Apache-2.0 +gopkg.in/jcmturner/aescts.v1, https://github.com/jcmturner/aescts/blob/v1.0.1/LICENSE, Apache-2.0 +gopkg.in/jcmturner/dnsutils.v1, https://github.com/jcmturner/dnsutils/blob/v1.0.1/LICENSE, Apache-2.0 +gopkg.in/jcmturner/gokrb5.v5, https://github.com/jcmturner/gokrb5/blob/v5.3.0/LICENSE, Apache-2.0 +gopkg.in/jcmturner/rpc.v0, https://github.com/jcmturner/rpc/blob/v0.0.2/LICENSE, Apache-2.0 +gopkg.in/square/go-jose.v2, https://github.com/square/go-jose/blob/v2.5.1/LICENSE, Apache-2.0 +gopkg.in/square/go-jose.v2, https://github.com/square/go-jose/blob/v2.5.1/json/LICENSE, BSD-3-Clause +gopkg.in/src-d/go-billy.v4, https://github.com/src-d/go-billy/blob/v4.3.2/LICENSE, Apache-2.0 +gopkg.in/src-d/go-git.v4, https://github.com/src-d/go-git/blob/v4.13.1/LICENSE, Apache-2.0 +gopkg.in/warnings.v0, https://github.com/go-warnings/warnings/blob/v0.1.2/LICENSE, BSD-2-Clause +gopkg.in/yaml.v2, https://github.com/go-yaml/yaml/blob/v2.4.0/LICENSE, Apache-2.0 +gopkg.in/yaml.v2, https://github.com/go-yaml/yaml/blob/v2.4.0/LICENSE.libyaml, MIT +gopkg.in/yaml.v3, https://github.com/go-yaml/yaml/blob/496545a6307b/LICENSE, MIT / Apache-2.0 +k8s.io/api, https://github.com/kubernetes/api/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/apimachinery, https://github.com/kubernetes/apimachinery/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/client-go, https://github.com/kubernetes/client-go/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/klog/v2, https://github.com/kubernetes/klog/blob/v2.5.0/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/d219536bb9fd/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/d219536bb9fd/pkg/validation/errors/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/d219536bb9fd/pkg/validation/spec/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/d219536bb9fd/pkg/validation/strfmt/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/d219536bb9fd/pkg/validation/validate/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/67b214c5f920/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/67b214c5f920/inotify/LICENSE, BSD-3-Clause +k8s.io/utils, https://github.com/kubernetes/utils/blob/67b214c5f920/third_party/forked/golang/LICENSE, BSD-3-Clause +sigs.k8s.io/structured-merge-diff/v4, https://github.com/kubernetes-sigs/structured-merge-diff/blob/v4.0.2/LICENSE, Apache-2.0 +sigs.k8s.io/yaml, https://github.com/kubernetes-sigs/yaml/blob/v1.2.0/LICENSE, MIT / BSD-3-Clause diff --git a/third_party/argo/licenses-workflow-controller.csv b/third_party/argo/licenses-workflow-controller.csv new file mode 100644 index 0000000000..93ef256640 --- /dev/null +++ b/third_party/argo/licenses-workflow-controller.csv @@ -0,0 +1,122 @@ +# Generated by https://github.com/google/go-licenses/v2. DO NOT EDIT. +github.com/argoproj/argo-workflows/v3, https://github.com/argoproj/argo-workflows/blob/v3.1.2/LICENSE, Apache-2.0 +cloud.google.com/go, https://github.com/googleapis/google-cloud-go/blob/v0.55.0/LICENSE, Apache-2.0 +cloud.google.com/go, https://github.com/googleapis/google-cloud-go/blob/v0.55.0/cmd/go-cloud-debug-agent/internal/debug/elf/elf.go, BSD-2-Clause +github.com/Azure/go-autorest/autorest, https://github.com/Azure/go-autorest/blob/autorest/v0.11.1/LICENSE, Apache-2.0 +github.com/Azure/go-autorest/autorest/adal, https://github.com/Azure/go-autorest/blob/autorest/adal/v0.9.5/LICENSE, Apache-2.0 +github.com/Azure/go-autorest/autorest/date, https://github.com/Azure/go-autorest/blob/autorest/date/v0.3.0/LICENSE, Apache-2.0 +github.com/Azure/go-autorest/logger, https://github.com/Azure/go-autorest/blob/logger/v0.2.0/LICENSE, Apache-2.0 +github.com/Azure/go-autorest/tracing, https://github.com/Azure/go-autorest/blob/tracing/v0.6.0/LICENSE, Apache-2.0 +github.com/Knetic/govaluate, https://github.com/Knetic/govaluate/blob/9aa49832a739/LICENSE, MIT +github.com/Masterminds/goutils, https://github.com/Masterminds/goutils/blob/v1.1.0/LICENSE.txt, Apache-2.0 +github.com/Masterminds/semver, https://github.com/Masterminds/semver/blob/v1.5.0/LICENSE.txt, MIT +github.com/Masterminds/sprig, https://github.com/Masterminds/sprig/blob/v2.22.0/LICENSE.txt, MIT +github.com/PuerkitoBio/purell, https://github.com/PuerkitoBio/purell/blob/v1.1.1/LICENSE, BSD-3-Clause +github.com/PuerkitoBio/urlesc, https://github.com/PuerkitoBio/urlesc/blob/de5bf2ad4578/LICENSE, BSD-3-Clause +github.com/antonmedv/expr, https://github.com/antonmedv/expr/blob/v1.8.8/LICENSE, MIT +github.com/argoproj/argo-events, https://github.com/argoproj/argo-events/blob/v1.4.0/LICENSE, Apache-2.0 +github.com/argoproj/pkg, https://github.com/argoproj/pkg/blob/v0.10.1/LICENSE, Apache-2.0 +github.com/beorn7/perks, https://github.com/beorn7/perks/blob/v1.0.1/LICENSE, MIT +github.com/cespare/xxhash/v2, https://github.com/cespare/xxhash/blob/v2.1.1/LICENSE.txt, MIT +github.com/colinmarc/hdfs, https://github.com/colinmarc/hdfs/blob/9746310a4d31/LICENSE.txt, MIT +github.com/coreos/go-oidc, https://github.com/coreos/go-oidc/blob/v2.2.1/LICENSE, Apache-2.0 +github.com/davecgh/go-spew, https://github.com/davecgh/go-spew/blob/v1.1.1/LICENSE, ISC +github.com/docker/spdystream, https://github.com/docker/spdystream/blob/6480d4af844c/LICENSE, Apache-2.0 +github.com/doublerebel/bellows, https://github.com/doublerebel/bellows/blob/f177d92a03d3/LICENSE, MIT +github.com/dustin/go-humanize, https://github.com/dustin/go-humanize/blob/v1.0.0/LICENSE, MIT +github.com/emicklei/go-restful, https://github.com/emicklei/go-restful/blob/v2.15.0/LICENSE, MIT +github.com/evanphx/json-patch, https://github.com/evanphx/json-patch/blob/v4.9.0/LICENSE, BSD-3-Clause +github.com/felixge/httpsnoop, https://github.com/felixge/httpsnoop/blob/v1.0.1/LICENSE.txt, MIT +github.com/form3tech-oss/jwt-go, https://github.com/form3tech-oss/jwt-go/blob/v3.2.2/LICENSE, MIT +github.com/go-logr/logr, https://github.com/go-logr/logr/blob/v0.4.0/LICENSE, Apache-2.0 +github.com/go-openapi/jsonpointer, https://github.com/go-openapi/jsonpointer/blob/v0.19.5/LICENSE, Apache-2.0 +github.com/go-openapi/jsonreference, https://github.com/go-openapi/jsonreference/blob/v0.19.5/LICENSE, Apache-2.0 +github.com/go-openapi/spec, https://github.com/go-openapi/spec/blob/v0.20.2/LICENSE, Apache-2.0 +github.com/go-openapi/swag, https://github.com/go-openapi/swag/blob/v0.19.13/LICENSE, Apache-2.0 +github.com/go-sql-driver/mysql, https://github.com/go-sql-driver/mysql/blob/v1.5.0/LICENSE, MPL-2.0 +github.com/gogo/protobuf, https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE, BSD-3-Clause / BSD-2-Clause +github.com/golang/groupcache, https://github.com/golang/groupcache/blob/8c9f03a8e57e/LICENSE, Apache-2.0 +github.com/golang/protobuf, https://github.com/golang/protobuf/blob/v1.4.3/LICENSE, BSD-3-Clause +github.com/google/go-cmp, https://github.com/google/go-cmp/blob/v0.5.2/LICENSE, BSD-3-Clause +github.com/google/gofuzz, https://github.com/google/gofuzz/blob/v1.1.0/LICENSE, Apache-2.0 +github.com/google/uuid, https://github.com/google/uuid/blob/v1.1.2/LICENSE, BSD-3-Clause +github.com/googleapis/gnostic, https://github.com/googleapis/gnostic/blob/v0.5.1/LICENSE, Apache-2.0 +github.com/gorilla/websocket, https://github.com/gorilla/websocket/blob/v1.4.2/LICENSE, BSD-2-Clause +github.com/grpc-ecosystem/go-grpc-middleware, https://github.com/grpc-ecosystem/go-grpc-middleware/blob/v1.1.0/LICENSE, Apache-2.0 +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/LICENSE.txt, BSD-3-Clause +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/internal/casing/LICENSE.md, BSD-3-Clause +github.com/grpc-ecosystem/grpc-gateway, https://github.com/grpc-ecosystem/grpc-gateway/blob/v1.16.0/third_party/googleapis/LICENSE, Apache-2.0 +github.com/hashicorp/go-uuid, https://github.com/hashicorp/go-uuid/blob/v1.0.2/LICENSE, MPL-2.0 +github.com/hashicorp/golang-lru, https://github.com/hashicorp/golang-lru/blob/v0.5.4/LICENSE, MPL-2.0 +github.com/huandu/xstrings, https://github.com/huandu/xstrings/blob/v1.3.1/LICENSE, MIT +github.com/imdario/mergo, https://github.com/imdario/mergo/blob/v0.3.12/LICENSE, BSD-3-Clause +github.com/jcmturner/gofork, https://github.com/jcmturner/gofork/blob/v1.0.0/LICENSE, BSD-3-Clause +github.com/josharian/intern, https://github.com/josharian/intern/blob/v1.0.0/license.md, MIT +github.com/json-iterator/go, https://github.com/json-iterator/go/blob/v1.1.10/LICENSE, MIT +github.com/klauspost/compress, https://github.com/klauspost/compress/blob/v1.11.9/LICENSE, BSD-3-Clause +github.com/klauspost/compress, https://github.com/klauspost/compress/blob/v1.11.9/s2/LICENSE, BSD-3-Clause +github.com/klauspost/compress, https://github.com/klauspost/compress/blob/v1.11.9/s2/cmd/internal/readahead/LICENSE, MIT +github.com/klauspost/compress, https://github.com/klauspost/compress/blob/v1.11.9/snappy/LICENSE, BSD-3-Clause +github.com/klauspost/compress, https://github.com/klauspost/compress/blob/v1.11.9/zstd/internal/xxhash/LICENSE.txt, MIT +github.com/klauspost/pgzip, https://github.com/klauspost/pgzip/blob/v1.2.5/GO_LICENSE, BSD-3-Clause +github.com/klauspost/pgzip, https://github.com/klauspost/pgzip/blob/v1.2.5/LICENSE, MIT +github.com/lib/pq, https://github.com/lib/pq/blob/v1.3.0/LICENSE.md, MIT +github.com/lib/pq, https://github.com/lib/pq/blob/v1.3.0/scram/scram.go, BSD-2-Clause +github.com/mailru/easyjson, https://github.com/mailru/easyjson/blob/v0.7.6/LICENSE, MIT +github.com/mailru/easyjson, https://github.com/mailru/easyjson/blob/v0.7.6/parser/modulepath.go, BSD-3-Clause +github.com/matttproud/golang_protobuf_extensions, https://github.com/matttproud/golang_protobuf_extensions/blob/c182affec369/LICENSE, Apache-2.0 +github.com/mitchellh/copystructure, https://github.com/mitchellh/copystructure/blob/v1.0.0/LICENSE, MIT +github.com/mitchellh/reflectwalk, https://github.com/mitchellh/reflectwalk/blob/v1.0.1/LICENSE, MIT +github.com/modern-go/concurrent, https://github.com/modern-go/concurrent/blob/bacd9c7ef1dd/LICENSE, Apache-2.0 +github.com/modern-go/reflect2, https://github.com/modern-go/reflect2/blob/v1.0.1/LICENSE, Apache-2.0 +github.com/oliveagle/jsonpath, https://github.com/oliveagle/jsonpath/blob/2e52cf6e6852/LICENSE, MIT +github.com/pkg/errors, https://github.com/pkg/errors/blob/v0.9.1/LICENSE, BSD-2-Clause +github.com/pquerna/cachecontrol, https://github.com/pquerna/cachecontrol/blob/1555304b9b35/LICENSE, Apache-2.0 +github.com/prometheus/client_golang, https://github.com/prometheus/client_golang/blob/v1.9.0/LICENSE, Apache-2.0 +github.com/prometheus/client_model, https://github.com/prometheus/client_model/blob/v0.2.0/LICENSE, Apache-2.0 +github.com/prometheus/common, https://github.com/prometheus/common/blob/v0.15.0/LICENSE, Apache-2.0 +github.com/prometheus/common, https://github.com/prometheus/common/blob/v0.15.0/internal/bitbucket.org/ww/goautoneg/README.txt, BSD-3-Clause +github.com/prometheus/procfs, https://github.com/prometheus/procfs/blob/v0.2.0/LICENSE, Apache-2.0 +github.com/robfig/cron/v3, https://github.com/robfig/cron/blob/v3.0.1/LICENSE, MIT +github.com/sirupsen/logrus, https://github.com/sirupsen/logrus/blob/v1.6.0/LICENSE, MIT +github.com/sirupsen/logrus, https://github.com/sirupsen/logrus/blob/v1.6.0/alt_exit.go, MIT +github.com/spf13/cobra, https://github.com/spf13/cobra/blob/v1.0.0/LICENSE.txt, Apache-2.0 +github.com/spf13/pflag, https://github.com/spf13/pflag/blob/v1.0.5/LICENSE, BSD-3-Clause +github.com/valyala/bytebufferpool, https://github.com/valyala/bytebufferpool/blob/v1.0.0/LICENSE, MIT +github.com/valyala/fasttemplate, https://github.com/valyala/fasttemplate/blob/v1.1.0/LICENSE, MIT +golang.org/x/crypto, https://github.com/golang/crypto/blob/0c34fe9e7dc2/LICENSE, BSD-3-Clause +golang.org/x/net, https://github.com/golang/net/blob/6b1517762897/LICENSE, BSD-3-Clause +golang.org/x/oauth2, https://github.com/golang/oauth2/blob/bf48bf16ab8d/LICENSE, BSD-3-Clause +golang.org/x/sync, https://github.com/golang/sync/blob/67f06af15bc9/LICENSE, BSD-3-Clause +golang.org/x/sys, https://github.com/golang/sys/blob/47abb6519492/LICENSE, BSD-3-Clause +golang.org/x/term, https://github.com/golang/term/blob/7de9c90e9dd1/LICENSE, BSD-3-Clause +golang.org/x/text, https://github.com/golang/text/blob/v0.3.5/LICENSE, BSD-3-Clause +golang.org/x/time, https://github.com/golang/time/blob/3af7569d3a1e/LICENSE, BSD-3-Clause +google.golang.org/genproto, https://github.com/googleapis/go-genproto/blob/86f49bd18e98/LICENSE, Apache-2.0 +google.golang.org/grpc, https://github.com/grpc/grpc-go/blob/v1.33.1/LICENSE, Apache-2.0 +google.golang.org/protobuf, https://github.com/protocolbuffers/protobuf-go/blob/v1.25.0/LICENSE, BSD-3-Clause +gopkg.in/inf.v0, https://github.com/go-inf/inf/blob/v0.9.1/LICENSE, BSD-3-Clause +gopkg.in/jcmturner/aescts.v1, https://github.com/jcmturner/aescts/blob/v1.0.1/LICENSE, Apache-2.0 +gopkg.in/jcmturner/dnsutils.v1, https://github.com/jcmturner/dnsutils/blob/v1.0.1/LICENSE, Apache-2.0 +gopkg.in/jcmturner/gokrb5.v5, https://github.com/jcmturner/gokrb5/blob/v5.3.0/LICENSE, Apache-2.0 +gopkg.in/jcmturner/rpc.v0, https://github.com/jcmturner/rpc/blob/v0.0.2/LICENSE, Apache-2.0 +gopkg.in/square/go-jose.v2, https://github.com/square/go-jose/blob/v2.5.1/LICENSE, Apache-2.0 +gopkg.in/square/go-jose.v2, https://github.com/square/go-jose/blob/v2.5.1/json/LICENSE, BSD-3-Clause +gopkg.in/yaml.v2, https://github.com/go-yaml/yaml/blob/v2.4.0/LICENSE, Apache-2.0 +gopkg.in/yaml.v2, https://github.com/go-yaml/yaml/blob/v2.4.0/LICENSE.libyaml, MIT +gopkg.in/yaml.v3, https://github.com/go-yaml/yaml/blob/496545a6307b/LICENSE, MIT / Apache-2.0 +k8s.io/api, https://github.com/kubernetes/api/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/apimachinery, https://github.com/kubernetes/apimachinery/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/client-go, https://github.com/kubernetes/client-go/blob/v0.19.6/LICENSE, Apache-2.0 +k8s.io/klog/v2, https://github.com/kubernetes/klog/blob/v2.5.0/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/d219536bb9fd/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/d219536bb9fd/pkg/validation/errors/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/d219536bb9fd/pkg/validation/spec/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/d219536bb9fd/pkg/validation/strfmt/LICENSE, Apache-2.0 +k8s.io/kube-openapi, https://github.com/kubernetes/kube-openapi/blob/d219536bb9fd/pkg/validation/validate/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/67b214c5f920/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/67b214c5f920/inotify/LICENSE, BSD-3-Clause +k8s.io/utils, https://github.com/kubernetes/utils/blob/67b214c5f920/third_party/forked/golang/LICENSE, BSD-3-Clause +sigs.k8s.io/structured-merge-diff/v4, https://github.com/kubernetes-sigs/structured-merge-diff/blob/v4.0.2/LICENSE, Apache-2.0 +sigs.k8s.io/yaml, https://github.com/kubernetes-sigs/yaml/blob/v1.2.0/LICENSE, MIT / BSD-3-Clause +upper.io/db.v3, https://github.com/upper/db/blob/v3.6.3/README.md, MIT diff --git a/third_party/argo/release.sh b/third_party/argo/release.sh index 7ce4c45358..1898e084e5 100755 --- a/third_party/argo/release.sh +++ b/third_party/argo/release.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/third_party/cli/README.md b/third_party/cli/README.md deleted file mode 100644 index 0e3d2d3c83..0000000000 --- a/third_party/cli/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# CLI tools to fetch go library's license info - -Moved to https://github.com/kubeflow/testing/tree/master/py/kubeflow/testing/go-license-tools diff --git a/third_party/download_source.sh b/third_party/download_source.sh index e3459d55bb..897a5f37e3 100755 --- a/third_party/download_source.sh +++ b/third_party/download_source.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/third_party/license.txt b/third_party/license.txt index ba18988675..3829ba65ef 100644 --- a/third_party/license.txt +++ b/third_party/license.txt @@ -2541,7 +2541,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- -vendor github.com argoproj argo LICENSE (vendor/github.com/argoproj/argo/LICENSE) +vendor github.com argoproj argo LICENSE (vendor/github.com/argoproj/argo-workflows/LICENSE) -------------------------------------------------------------------------------- Apache License @@ -3189,13 +3189,13 @@ Copyright (c) 2010-2013 - Gustavo Niemeyer All rights reserved. Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: +modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. + list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. + and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED @@ -5969,7 +5969,7 @@ Mozilla Public License Version 2.0 means any form of the work other than Source Code Form. 1.7. "Larger Work" - means a work that combines Covered Software with other material, in + means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software. 1.8. "License" @@ -10760,23 +10760,23 @@ Copyright (c) 2012 - 2013 Mat Ryer and Tyler Bunnell Please consider promoting this project if you find it useful. -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, -and to permit persons to whom the Software is furnished to do so, +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT +OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- @@ -11547,13 +11547,13 @@ Copyright (c) 2010-2012 - Gustavo Niemeyer All rights reserved. Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: +modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. + list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. + and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED diff --git a/third_party/metadata_envoy/Dockerfile b/third_party/metadata_envoy/Dockerfile index 95adcf8685..17f1430860 100644 --- a/third_party/metadata_envoy/Dockerfile +++ b/third_party/metadata_envoy/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/third_party/metadata_envoy/dependency_helper.py b/third_party/metadata_envoy/dependency_helper.py index 97b9af3b03..a2c08c001d 100644 --- a/third_party/metadata_envoy/dependency_helper.py +++ b/third_party/metadata_envoy/dependency_helper.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/third_party/minio/Dockerfile b/third_party/minio/Dockerfile index 337fc1a5ef..0c5cffcc7f 100644 --- a/third_party/minio/Dockerfile +++ b/third_party/minio/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/third_party/minio/release.sh b/third_party/minio/release.sh index 6046aecbd4..bc00fbd5a3 100755 --- a/third_party/minio/release.sh +++ b/third_party/minio/release.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/third_party/ml-metadata/README.md b/third_party/ml-metadata/README.md index 57064a92e7..5344ad0bd2 100644 --- a/third_party/ml-metadata/README.md +++ b/third_party/ml-metadata/README.md @@ -7,3 +7,7 @@ Upstream repo location: . * [MLMD proto definitions](https://github.com/google/ml-metadata/tree/master/ml_metadata/proto) * [grpc go quickstart](https://grpc.io/docs/languages/go/quickstart/) * [client example code](https://github.com/grpc/grpc-go/blob/master/examples/helloworld/greeter_client/main.go) + +## Build JS client from proto + +Refer to [frontend/README.md](frontend/README.md) for `npm run build:replace` command. diff --git a/third_party/ml-metadata/ml_metadata/proto/metadata_store.proto b/third_party/ml-metadata/ml_metadata/proto/metadata_store.proto index 08ebfa6c60..6ed3785f9e 100644 --- a/third_party/ml-metadata/ml_metadata/proto/metadata_store.proto +++ b/third_party/ml-metadata/ml_metadata/proto/metadata_store.proto @@ -16,13 +16,15 @@ syntax = "proto2"; package ml_metadata; +import "google/protobuf/struct.proto"; + // A value in properties. message Value { - // TODO(martinz): the types here may evolve over time. oneof value { int64 int_value = 1; double double_value = 2; string string_value = 3; + google.protobuf.Struct struct_value = 4; } } @@ -69,13 +71,13 @@ message Artifact { optional int64 last_update_time_since_epoch = 10; } -// TODO(martinz): consider moving this inside some message, to avoid having -// literals directly in apo package. +// The list of supported property value types. enum PropertyType { UNKNOWN = 0; INT = 1; DOUBLE = 2; STRING = 3; + STRUCT = 4; } message ArtifactType { @@ -84,6 +86,10 @@ message ArtifactType { // The name of the type. It must be unique among ArtifactTypes within a // database instance. optional string name = 2; + // An optional version of the type. An empty string is treated as unset. + optional string version = 4; + // An optional description about the type. + optional string description = 5; // The schema of the type. // Properties are always optional in the artifact. // Properties of an artifact type can be expanded but not contracted (i.e., @@ -249,6 +255,10 @@ message ExecutionType { // The name of the type. It must be unique among ExecutionTypes within a // database instance. optional string name = 2; + // An optional version of the type. An empty string is treated as unset. + optional string version = 6; + // An optional description about the type. + optional string description = 7; // The schema of the type. // Properties are always optional in the execution. map properties = 3; @@ -281,6 +291,10 @@ message ContextType { // The name of the type, e.g., Pipeline, Task, Session, User, etc. It must be // unique among ContextTypes within a database instance. optional string name = 2; + // An optional version of the type. An empty string is treated as unset. + optional string version = 4; + // An optional description about the type. + optional string description = 5; // The schema of the type, e.g., name: string, owner: string // Properties are always optional in the context. // Properties of an context type can be expanded but not contracted (i.e., @@ -327,6 +341,25 @@ message ParentContext { optional int64 parent_id = 2; } +// A self-contained provenance (sub)graph representation consists of MLMD nodes +// and their relationships. It is used to represent the query results from the +// persistent backend (e.g., lineage about a node, reachability of two nodes). +message LineageGraph { + // extracted types + repeated ArtifactType artifact_types = 1; + repeated ExecutionType execution_types = 2; + repeated ContextType context_types = 3; + // extracted nodes + repeated Artifact artifacts = 4; + repeated Execution executions = 5; + repeated Context contexts = 6; + // extracted edges + repeated Event events = 7; + repeated Attribution attributions = 8; + repeated Association associations = 9; +} + +// The list of ArtifactStruct is EXPERIMENTAL and not in use yet. // The type of an ArtifactStruct. // An artifact struct type represents an infinite set of artifact structs. // It can specify the input or output type of an ExecutionType. @@ -672,10 +705,9 @@ message ListOperationNextPageToken { // Id offset within the resultset to start next page. // Id offset is returned as Id is the unique field used to break ties for // fields that might have duplicate entries, e.g. there could be two - // resources with same last_update_time. In such cases to break the tie in - // ordering, id offset is used. Also if during the calls, the node is updated, - // and its last_update_time has been changed, running the pagination query - // again, the updated node will moved to earlier pages. + // resources with same create_time. In such cases to break the tie in + // ordering, id offset is used. + // This field is currently only set whe order_by field is CREATE_TIME. optional int64 id_offset = 1; // Offset value of the order by field. If ID is used this value is same as @@ -686,4 +718,10 @@ message ListOperationNextPageToken { // next_page_token is set by the caller then ListPipelineJobs API will always // use options set in the first call. optional ListOperationOptions set_options = 3; + + // List of ids that have the same order_by field values. This is used to + // ensure List Operation does not return duplicate entries for nodes that have + // the same order_by field value. + // This field is currently only set whe order_by field is LAST_UPDATE_TIME. + repeated int64 listed_ids = 4; } diff --git a/third_party/ml-metadata/ml_metadata/proto/metadata_store_service.proto b/third_party/ml-metadata/ml_metadata/proto/metadata_store_service.proto index 6825a75617..f522b4d907 100644 --- a/third_party/ml-metadata/ml_metadata/proto/metadata_store_service.proto +++ b/third_party/ml-metadata/ml_metadata/proto/metadata_store_service.proto @@ -277,6 +277,8 @@ message PutParentContextsResponse {} message GetArtifactsByTypeRequest { optional string type_name = 1; + // If not set, it looks for the type with type_name with default type_version. + optional string type_version = 2; } message GetArtifactsByTypeResponse { @@ -285,6 +287,9 @@ message GetArtifactsByTypeResponse { message GetArtifactByTypeAndNameRequest { optional string type_name = 1; + // If not set, it looks for the type with type_name and artifact_name with + // default type_version. + optional string type_version = 3; optional string artifact_name = 2; } @@ -317,7 +322,7 @@ message GetArtifactsResponse { // Returned artifacts. repeated Artifact artifacts = 1; - // Token to use to retreive next page of results if list options are used in + // Token to use to retrieve next page of results if list options are used in // the request. optional string next_page_token = 2; } @@ -347,13 +352,15 @@ message GetExecutionsResponse { // Returned executions. repeated Execution executions = 1; - // Token to use to retreive next page of results if list options are used in + // Token to use to retrieve next page of results if list options are used in // the request. optional string next_page_token = 2; } message GetArtifactTypeRequest { optional string type_name = 1; + // If not set, it looks for the type with type_name with default type_version. + optional string type_version = 2; } message GetArtifactTypeResponse { @@ -381,6 +388,8 @@ message GetContextTypesResponse { message GetExecutionsByTypeRequest { optional string type_name = 1; + // If not set, it looks for the type with type_name with default type_version. + optional string type_version = 2; } message GetExecutionsByTypeResponse { @@ -389,6 +398,9 @@ message GetExecutionsByTypeResponse { message GetExecutionByTypeAndNameRequest { optional string type_name = 1; + // If not set, it looks for the type with type_name and execution_name with + // default type_version. + optional string type_version = 3; optional string execution_name = 2; } @@ -409,6 +421,8 @@ message GetExecutionsByIDResponse { message GetExecutionTypeRequest { optional string type_name = 1; + // If not set, it looks for the type with type_name with default type_version. + optional string type_version = 2; } message GetExecutionTypeResponse { @@ -455,6 +469,8 @@ message GetExecutionTypesByIDResponse { message GetContextTypeRequest { optional string type_name = 1; + // If not set, it looks for the type with type_name with default type_version. + optional string type_version = 2; } message GetContextTypeResponse { @@ -486,21 +502,35 @@ message GetContextsResponse { // Returned contexts. repeated Context contexts = 1; - // Token to use to retreive next page of results if list options are used in + // Token to use to retrieve next page of results if list options are used in // the request. optional string next_page_token = 2; } message GetContextsByTypeRequest { optional string type_name = 1; + // Specify options. + // Currently supports: + // 1. Field to order the results. + // 2. Page size. + optional ListOperationOptions options = 2; + // If not set, it looks for the type with type_name and options with default + // type_version. + optional string type_version = 3; } message GetContextsByTypeResponse { repeated Context contexts = 1; + // Token to use to retrieve next page of results if list options are used in + // the request. + optional string next_page_token = 2; } message GetContextByTypeAndNameRequest { optional string type_name = 1; + // If not set, it looks for the type with type_name and context_name with + // default type_version. + optional string type_version = 3; optional string context_name = 2; } @@ -564,7 +594,7 @@ message GetArtifactsByContextRequest { message GetArtifactsByContextResponse { repeated Artifact artifacts = 1; - // Token to use to retreive next page of results if list options are used in + // Token to use to retrieve next page of results if list options are used in // the request. optional string next_page_token = 2; } @@ -582,7 +612,7 @@ message GetExecutionsByContextRequest { message GetExecutionsByContextResponse { repeated Execution executions = 1; - // Token to use to retreive next page of results if list options are used in + // Token to use to retrieve next page of results if list options are used in // the request. optional string next_page_token = 2; } @@ -592,12 +622,19 @@ message GetExecutionsByContextResponse { service MetadataStoreService { // Inserts or updates an ArtifactType. // - // If no type exists in the database with the given name, it - // creates a new type and returns the type_id. + // A type has a set of strong typed properties describing the schema of any + // stored instance associated with that type. A type is identified by a name + // and an optional version. // - // If the request type with the same name already exists (let's call it - // stored_type), the method enforces the stored_type can be updated only when - // the request type is backward compatible for the already stored instances. + // Type Creation: + // If no type exists in the database with the given identifier + // (name, version), it creates a new type and returns the type_id. + // + // Type Evolution: + // If the request type with the same (name, version) already exists + // (let's call it stored_type), the method enforces the stored_type can be + // updated only when the request type is backward compatible for the already + // stored instances. // // Backwards compatibility is violated iff: // @@ -608,6 +645,12 @@ service MetadataStoreService { // c) `can_omit_fields = false` and stored_type has an existing property // that is not provided in the request type. // + // If non-backward type change is required in the application, e.g., + // deprecate properties, re-purpose property name, change value types, + // a new type can be created with a different (name, version) identifier. + // Note the type version is optional, and a version value with empty string + // is treated as unset. + // // Args: // artifact_type: the type to be inserted or updated. // can_add_fields: diff --git a/tools/bazel_builder/bazelrc b/tools/bazel_builder/bazelrc index cbd4f8aa45..f35f6f7cee 100644 --- a/tools/bazel_builder/bazelrc +++ b/tools/bazel_builder/bazelrc @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2019 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/tools/diagnose/kfp.sh b/tools/diagnose/kfp.sh index f5bae9f69e..dd0ede0afa 100755 --- a/tools/diagnose/kfp.sh +++ b/tools/diagnose/kfp.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2020 Google LLC +# Copyright 2020 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/tools/metadatastore-upgrade/main.go b/tools/metadatastore-upgrade/main.go index cde07e5d04..6ec40739ac 100644 --- a/tools/metadatastore-upgrade/main.go +++ b/tools/metadatastore-upgrade/main.go @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2020 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ package main import ( + "context" "flag" "fmt" "log" @@ -50,18 +51,19 @@ func updateDeployment(deploymentsClient v1.DeploymentInterface, image string, co var err error // Retrieve the latest version of Deployment before attempting update // RetryOnConflict uses exponential backoff to avoid exhausting the apiserver - result, err := deploymentsClient.Get(mlMetadataDeployment, metav1.GetOptions{}) + ctx := context.Background() + result, err := deploymentsClient.Get(ctx, mlMetadataDeployment, metav1.GetOptions{}) if err != nil { return fmt.Errorf("failed to get latest version of the deployment: %v", err) } result.Spec.Template.Spec.Containers[0].Image = image result.Spec.Template.Spec.Containers[0].Args = containerArgs - if _, err := deploymentsClient.Update(result); err != nil { + if _, err := deploymentsClient.Update(ctx, result, metav1.UpdateOptions{}); err != nil { return err } - result, err = deploymentsClient.Get(mlMetadataDeployment, metav1.GetOptions{}) + result, err = deploymentsClient.Get(ctx, mlMetadataDeployment, metav1.GetOptions{}) if err != nil { return fmt.Errorf("failed to get latest version of deployment after update: %v", err) } @@ -114,7 +116,7 @@ func main() { deploymentsClient := clientset.AppsV1().Deployments(*deploymentNamespace) - originalDeployment, err := deploymentsClient.Get(mlMetadataDeployment, metav1.GetOptions{}) + originalDeployment, err := deploymentsClient.Get(context.Background(), mlMetadataDeployment, metav1.GetOptions{}) if err != nil { log.Fatalf("Failed to get old Deployment: %v", err) } diff --git a/v2/.gitignore b/v2/.gitignore new file mode 100644 index 0000000000..cac578ccad --- /dev/null +++ b/v2/.gitignore @@ -0,0 +1,5 @@ +# optional Makefile env config +.env + +# build directory +build/ diff --git a/v2/README b/v2/README deleted file mode 100644 index a0c531b3bd..0000000000 --- a/v2/README +++ /dev/null @@ -1,4 +0,0 @@ - -## KFP V2 Launcher - -TODO: Add design documents here. \ No newline at end of file diff --git a/v2/README.md b/v2/README.md new file mode 100644 index 0000000000..4b16d31e68 --- /dev/null +++ b/v2/README.md @@ -0,0 +1,197 @@ +# Kubeflow Pipelines v2 + +There are two modes Kubeflow Pipelines (KFP) v2 can run in: + +* v2 compatible -- supports core v2 features in KFP v1 +* v2 (v2 engine) -- full feature v2 in KFP v2's new architecture + +Code for both modes live inside this folder. + +## Kubeflow Pipelines v2 compatible + +Status: [Beta](../docs/release/feature-stages.md#beta) +Documentation: [Introducing Kubeflow Pipelines SDK v2](https://www.kubeflow.org/docs/components/pipelines/sdk/v2/v2-compatibility/) +[Known Caveats & breaking changes](https://github.com/kubeflow/pipelines/issues/6133) +Design: [bit.ly/kfp-v2-compatible](https://bit.ly/kfp-v2-compatible) +Github Project: [KFP v2 compatible mode project](https://github.com/kubeflow/pipelines/projects/13) + +Plan: + +* [x] 2021 late May - first release +* [ ] 2021 early August (delayed from mid July) - feature complete + +## Kubeflow Pipelines v2 engine + +Status: not released (WIP) +Design: [bit.ly/kfp-v2](https://bit.ly/kfp-v2) (You need to join [kubeflow-discuss google group](https://groups.google.com/g/kubeflow-discuss) to get access.) +Github Project: [KFP v2 project](https://github.com/kubeflow/pipelines/projects/9) +Tracker Issue: [KFP v2 tracker](https://github.com/kubeflow/pipelines/issues/6110) + +Plan: + +* [ ] 2021 October - Alpha release +* [ ] TBD - Beta/Stable release + +## Developing + +### Developing KFP v2 compatible + +Prerequisites: + +* Install a KFP standalone instance on Google Cloud: + + This does not currently work on other envs, because some tests use GCS & GCS client. + Welcome contributions to make it portable. + +* Install [ko](https://github.com/google/ko) CLI tool: + + ```bash + make install-ko + ``` + +* Configure your own container registry for LAUNCHER_IMAGE_DEV in `.env`: + + ```bash + export PROJECT= + # .env is a Makefile local config (ignored by git) + echo "DEV_IMAGE_PREFIX=gcr.io/${PROJECT}/dev/kfp-" > .env + ``` + +* Configure sample tests to use your dev image: + + ```bash + export KFP_LAUNCHER_IMAGE=gcr.io/${PROJECT}/dev/kfp-launcher + # consider putting this in your .bashrc or .zshrc to persist it. + ``` + +Instructions: + +1. Build launcher image locally and push to your own registry: + + ```bash + make image-launcher-dev + ``` + +1. Run one sample test: + + ```bash + python -m samples.path.to.sample_test + ``` + + Read [v2 sample test documentation](./test/README.md) for more details. + +### Releasing KFP v2 compatible image + +1. Build & release gcr.io/ml-pipeline/kfp-launcher:$TAG_NAME (this step needs write permission to gcr.io/ml-pipeline): + + ```bash + # login locally + gcloud auth login + gcloud auth configure-docker + + cd kubeflow/pipelines/v2 + TAG_NAME=1.6.0 + LAUNCHER_IMAGE="gcr.io/ml-pipeline/kfp-launcher:${TAG_NAME}" make push-launcher + ``` + +2. Edit [v2_compat.py](https://github.com/kubeflow/pipelines/blob/master/sdk/python/kfp/compiler/v2_compat.py#L26) -- pin _DEFAULT_LAUNCHER_IMAGE to the tag we will release. + +3. Continue with KFP python SDK release instructions. + +### Developing KFP v2 + +Prerequisites: + +* Install go, python, kfp pypi package, docker. + +* Install [ko](https://github.com/google/ko) CLI tool: + + ```bash + make install-ko + ``` + +* Configure dev environment by creating a config file called `.env` in this folder, +it should have the following content: + + ```makefile + DEV_IMAGE_PREFIX= + ``` + + For example: + + ```makefile + DEV_IMAGE_PREFIX?=gcr.io/ml-pipeline-test/dev/kfp- + ``` + + Then after images are built, they will be pushed to locations like + `gcr.io/ml-pipeline-test/dev/kfp-driver`. + + The `.env` file is ignored by git, it's your local development configuration. + + Verify you can push images to the registry: + + ```bash + # push all built dev images to DEV_IMAGE_PREFIX + make image-dev + ``` + +* [Connecting to Kubeflow Pipelines using the SDK client](https://www.kubeflow.org/docs/components/pipelines/sdk/connect-api/#configure-sdk-client-by-environment-variables). + + Recommend adding the env vars to your .bashrc or .zshrc etc to persist your config. + + Verify your configuration and connectivity: + + ```bash + kfp experiment list + ``` + + Requirements on the KFP backend installation: + + * Current limitation, this only works for [KFP Standalone](https://www.kubeflow.org/docs/components/pipelines/installation/standalone-deployment/), not tested on full Kubeflow yet. + * KFP backend version should be at least 1.7.0-rc.2. + +Instructions: + +* Run everything e2e: build images, backend compiler, compile pipelines and run them: + + ```bash + make dev + ``` + +* Run go unit tests: + + ```bash + make test + # or watch file changes and rerun automatically + make test-watch + ``` + +* For individual targets, read the Makefile directly. + +Current limitations (welcome contributions to fix them): + +* this only works in Linux, because of go compilation mode + +### Update licenses + +Download the license tool binary from and put it into $PATH. + +Update licenses info by: + +```bash +make license-launcher +``` + +or run the following to enable verbose output: + +```bash +GO_LICENSES_FLAGS=-v4 make license-launcher +``` + +After the update, check generated third_party/licenses/launcher.csv file to +make sure licenses of new dependencies are correctly identified. + +If something is unexpected, examine the unexpected dependencies by yourself and add +overrides to [go-licenses.yaml](./go-licenses.yaml). + +For detailed documentation about the tool: . diff --git a/v2/cacheutils/cache.go b/v2/cacheutils/cache.go new file mode 100644 index 0000000000..d3336c1953 --- /dev/null +++ b/v2/cacheutils/cache.go @@ -0,0 +1,217 @@ +package cacheutils + +import ( + "context" + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "os" + "strconv" + "strings" + + "google.golang.org/grpc" + "google.golang.org/protobuf/encoding/protojson" + + "github.com/golang/glog" + "github.com/kubeflow/pipelines/api/v2alpha1/go/cachekey" + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + api "github.com/kubeflow/pipelines/v2/kfp-api" + "github.com/kubeflow/pipelines/v2/third_party/ml_metadata" +) + +const ( + // MaxGRPCMessageSize contains max grpc message size supported by the client + MaxClientGRPCMessageSize = 100 * 1024 * 1024 + // The endpoint uses Kubernetes service DNS name with namespace: + //https://kubernetes.io/docs/concepts/services-networking/service/#dns + defaultKfpApiEndpoint = "ml-pipeline.kubeflow:8887" +) + +func GenerateFingerPrint(cacheKey *cachekey.CacheKey) (string, error) { + cacheKeyJsonBytes, err := protojson.Marshal(cacheKey) + if err != nil { + return "", fmt.Errorf("failed to marshal cache key with protojson: %w", err) + } + // This json unmarshal and marshal is to use encoding/json formatter to format the bytes[] returned by protojson + // Do the json formatter because of https://developers.google.com/protocol-buffers/docs/reference/go/faq#unstable-json + var v interface{} + if err := json.Unmarshal(cacheKeyJsonBytes, &v); err != nil { + return "", fmt.Errorf("failed to unmarshall cache key json bytes array: %w", err) + } + formattedCacheKeyBytes, err := json.Marshal(v) + if err != nil { + return "", fmt.Errorf("failed to marshall cache key with golang encoding/json : %w", err) + } + hash := sha256.New() + hash.Write(formattedCacheKeyBytes) + md := hash.Sum(nil) + executionHashKey := hex.EncodeToString(md) + return executionHashKey, nil +} + +func GenerateCacheKey( + inputs *pipelinespec.ExecutorInput_Inputs, + outputs *pipelinespec.ExecutorInput_Outputs, + outputParametersTypeMap map[string]string, + cmdArgs []string, image string) (*cachekey.CacheKey, error) { + + cacheKey := cachekey.CacheKey{ + InputArtifactNames: make(map[string]*cachekey.ArtifactNameList), + InputParameters: make(map[string]*pipelinespec.Value), + OutputArtifactsSpec: make(map[string]*pipelinespec.RuntimeArtifact), + OutputParametersSpec: make(map[string]string), + } + + for inputArtifactName, inputArtifactList := range inputs.GetArtifacts() { + inputArtifactNameList := cachekey.ArtifactNameList{ArtifactNames: make([]string, 0)} + for _, artifact := range inputArtifactList.Artifacts { + inputArtifactNameList.ArtifactNames = append(inputArtifactNameList.ArtifactNames, artifact.GetName()) + } + cacheKey.InputArtifactNames[inputArtifactName] = &inputArtifactNameList + } + + for inputParameterName, inputParameterValue := range inputs.GetParameters() { + cacheKey.InputParameters[inputParameterName] = &pipelinespec.Value{ + Value: inputParameterValue.Value, + } + } + + for outputArtifactName, outputArtifactList := range outputs.GetArtifacts() { + if len(outputArtifactList.Artifacts) == 0 { + continue + } + // TODO: Support multiple artifacts someday, probably through the v2 engine. + outputArtifact := outputArtifactList.Artifacts[0] + outputArtifactWithUriWiped := pipelinespec.RuntimeArtifact{ + Name: outputArtifact.GetName(), + Type: outputArtifact.GetType(), + Metadata: outputArtifact.GetMetadata(), + } + cacheKey.OutputArtifactsSpec[outputArtifactName] = &outputArtifactWithUriWiped + } + + for outputParameterName, _ := range outputs.GetParameters() { + outputParameterType, ok := outputParametersTypeMap[outputParameterName] + if !ok { + return nil, fmt.Errorf("unknown parameter %q found in ExecutorInput_Outputs", outputParameterName) + } + + cacheKey.OutputParametersSpec[outputParameterName] = outputParameterType + } + + cacheKey.ContainerSpec = &cachekey.ContainerSpec{ + Image: image, + CmdArgs: cmdArgs, + } + + return &cacheKey, nil + +} + +// Client is an KFP service client. +type Client struct { + svc api.TaskServiceClient +} + +// NewClient creates a Client. +func NewClient() (*Client, error) { + cacheEndPoint := cacheDefaultEndpoint() + glog.Infof("Connecting to cache endpoint %s", cacheEndPoint) + conn, err := grpc.Dial(cacheEndPoint, grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(MaxClientGRPCMessageSize)), grpc.WithInsecure()) + if err != nil { + return nil, fmt.Errorf("metadata.NewClient() failed: %w", err) + } + + return &Client{ + svc: api.NewTaskServiceClient(conn), + }, nil +} + +func cacheDefaultEndpoint() string { + // Discover ml-pipeline in the same namespace by env var. + // https://kubernetes.io/docs/concepts/services-networking/service/#environment-variables + cacheHost := os.Getenv("ML_PIPELINE_SERVICE_HOST") + cachePort := os.Getenv("ML_PIPELINE_SERVICE_PORT_GRPC") + if cacheHost != "" && cachePort != "" { + // If there is a ml-pipeline Kubernetes service in the same namespace, + // ML_PIPELINE_SERVICE_HOST and ML_PIPELINE_SERVICE_PORT env vars should + // exist by default, so we use it as default. + return cacheHost + ":" + cachePort + } + // If the env vars do not exist, use default ml-pipeline grpc endpoint `ml-pipeline.kubeflow:8887`. + glog.Infof("Cannot detect ml-pipeline in the same namespace, default to %s as KFP endpoint.", defaultKfpApiEndpoint) + return defaultKfpApiEndpoint +} + +func (c *Client) GetExecutionCache(fingerPrint, pipelineName, namespace string) (string, error) { + fingerPrintPredicate := &api.Predicate{ + Op: api.Predicate_EQUALS, + Key: "fingerprint", + Value: &api.Predicate_StringValue{StringValue: fingerPrint}, + } + pipelineNamePredicate := &api.Predicate{ + Op: api.Predicate_EQUALS, + Key: "pipelineName", + Value: &api.Predicate_StringValue{StringValue: pipelineName}, + } + namespacePredicate := &api.Predicate{ + Op: api.Predicate_EQUALS, + Key: "namespace", + Value: &api.Predicate_StringValue{StringValue: namespace}, + } + filter := api.Filter{Predicates: []*api.Predicate{fingerPrintPredicate, pipelineNamePredicate, namespacePredicate}} + + taskFilterJson, err := protojson.Marshal(&filter) + if err != nil { + return "", fmt.Errorf("failed to convert filter into JSON: %w", err) + } + listTasksReuqest := &api.ListTasksRequest{Filter: string(taskFilterJson), SortBy: "created_at desc", PageSize: 1} + listTasksResponse, err := c.svc.ListTasks(context.Background(), listTasksReuqest) + if err != nil { + return "", fmt.Errorf("failed to list tasks: %w", err) + } + tasks := listTasksResponse.Tasks + if len(tasks) == 0 { + return "", nil + } else { + return tasks[0].GetMlmdExecutionID(), nil + } +} + +func (c *Client) CreateExecutionCache(ctx context.Context, task *api.Task) error { + req := &api.CreateTaskRequest{ + Task: task, + } + _, err := c.svc.CreateTask(ctx, req) + if err != nil { + return fmt.Errorf("failed to create task: %w", err) + } + return nil +} + +func GetMLMDOutputParams(cachedExecution *ml_metadata.Execution) (map[string]string, error) { + mlmdOutputParameters := make(map[string]string) + for customPropName, customPropValue := range cachedExecution.CustomProperties { + if strings.HasPrefix(customPropName, "output:") { + slice := strings.Split(customPropName, ":") + if len(slice) != 2 { + return nil, fmt.Errorf("failed to parse output parameter from MLMD execution custom property %v", customPropName) + } + outputParamName := slice[1] + var outputParamValue string + switch t := customPropValue.Value.(type) { + case *ml_metadata.Value_StringValue: + outputParamValue = customPropValue.GetStringValue() + case *ml_metadata.Value_DoubleValue: + outputParamValue = strconv.FormatFloat(customPropValue.GetDoubleValue(), 'f', -1, 64) + case *ml_metadata.Value_IntValue: + outputParamValue = strconv.FormatInt(customPropValue.GetIntValue(), 10) + default: + return nil, fmt.Errorf("unknown PipelineSpec Value type %T", t) + } + mlmdOutputParameters[outputParamName] = outputParamValue + } + } + return mlmdOutputParameters, nil +} diff --git a/v2/cacheutils/cache_test.go b/v2/cacheutils/cache_test.go new file mode 100644 index 0000000000..a9a60cbf6e --- /dev/null +++ b/v2/cacheutils/cache_test.go @@ -0,0 +1,266 @@ +package cacheutils + +import ( + "encoding/json" + "fmt" + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + "github.com/kubeflow/pipelines/api/v2alpha1/go/cachekey" + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + "github.com/stretchr/testify/assert" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/structpb" +) + +func TestGenerateCacheKey(t *testing.T) { + + tests := []struct { + name string + executorInputInputs *pipelinespec.ExecutorInput_Inputs + executorInputOutputs *pipelinespec.ExecutorInput_Outputs + outputParametersTypeMap map[string]string + cmdArgs []string + image string + want *cachekey.CacheKey + wantErr bool + }{ + { + name: "Generate CacheKey Correctly", + executorInputInputs: &pipelinespec.ExecutorInput_Inputs{ + Parameters: map[string]*pipelinespec.Value{ + "message": {Value: &pipelinespec.Value_StringValue{StringValue: "Some string value"}}, + "num_steps": {Value: &pipelinespec.Value_IntValue{IntValue: 5}}, + }, + Artifacts: map[string]*pipelinespec.ArtifactList{ + "dataset_one": { + Artifacts: []*pipelinespec.RuntimeArtifact{ + { + Name: "1", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_InstanceSchema{InstanceSchema: "title: kfp.Dataset\ntype: object\nproperties:\n payload_format:\n type: string\n container_format:\n type: string\n"}, + }, + Uri: "gs://some-bucket/dataset-one", + Metadata: &structpb.Struct{}, + }}}, + "dataset_two": { + Artifacts: []*pipelinespec.RuntimeArtifact{ + { + Name: "2", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_SchemaTitle{SchemaTitle: "kfp.Model"}, + }, + Uri: "gs://some-bucket/dataset-two", + Metadata: &structpb.Struct{}, + }}}}, + }, + + executorInputOutputs: &pipelinespec.ExecutorInput_Outputs{ + Parameters: map[string]*pipelinespec.ExecutorInput_OutputParameter{ + "output_parameter_one": {OutputFile: "/tmp/outputs/output_parameter_one/data"}, + "output_parameter_two": {OutputFile: "/tmp/outputs/output_parameter_two/data"}, + }, + Artifacts: map[string]*pipelinespec.ArtifactList{ + "model": { + Artifacts: []*pipelinespec.RuntimeArtifact{ + { + Name: "model", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_InstanceSchema{InstanceSchema: "title: kfp.Model\ntype: object\nproperties:\n framework:\n type: string\n framework_version:\n type: string\n"}, + }, + Uri: "gs://my-bucket/some-prefix/pipeline/task/model", + Metadata: &structpb.Struct{ + Fields: map[string]*structpb.Value{"name": {Kind: &structpb.Value_StringValue{StringValue: "model"}}}, + }}}}, + "metrics": { + Artifacts: []*pipelinespec.RuntimeArtifact{ + { + Name: "metrics", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_SchemaTitle{SchemaTitle: "kfp.Metrics"}, + }, + Uri: "gs://my-bucket/some-prefix/pipeline/task/metrics", + Metadata: &structpb.Struct{ + Fields: map[string]*structpb.Value{"name": {Kind: &structpb.Value_StringValue{StringValue: "metrics"}}}, + }}}}, + }, + OutputFile: "/tmp/kfp_outputs/output_metadata.json", + }, + outputParametersTypeMap: map[string]string{ + "output_parameter_one": "STRING", + "output_parameter_two": "INT", + }, + cmdArgs: []string{"sh", "ec", "test"}, + image: "python:3.9", + want: &cachekey.CacheKey{ + InputArtifactNames: map[string]*cachekey.ArtifactNameList{ + "dataset_one": {ArtifactNames: []string{"1"}}, + "dataset_two": {ArtifactNames: []string{"2"}}, + }, + InputParameters: map[string]*pipelinespec.Value{ + "message": {Value: &pipelinespec.Value_StringValue{StringValue: "Some string value"}}, + "num_steps": {Value: &pipelinespec.Value_IntValue{IntValue: 5}}, + }, + OutputArtifactsSpec: map[string]*pipelinespec.RuntimeArtifact{ + "model": { + Name: "model", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_InstanceSchema{InstanceSchema: "title: kfp.Model\ntype: object\nproperties:\n framework:\n type: string\n framework_version:\n type: string\n"}, + }, + Metadata: &structpb.Struct{ + Fields: map[string]*structpb.Value{"name": {Kind: &structpb.Value_StringValue{StringValue: "model"}}}, + }}, + "metrics": { + Name: "metrics", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_SchemaTitle{SchemaTitle: "kfp.Metrics"}, + }, + Metadata: &structpb.Struct{ + Fields: map[string]*structpb.Value{"name": {Kind: &structpb.Value_StringValue{StringValue: "metrics"}}}, + }}, + }, + OutputParametersSpec: map[string]string{ + "output_parameter_one": "STRING", + "output_parameter_two": "INT", + }, + ContainerSpec: &cachekey.ContainerSpec{ + CmdArgs: []string{"sh", "ec", "test"}, + Image: "python:3.9", + }, + }, + + wantErr: false, + }, + } + for _, test := range tests { + + t.Run(test.name, func(t *testing.T) { + got, err := GenerateCacheKey(test.executorInputInputs, test.executorInputOutputs, test.outputParametersTypeMap, test.cmdArgs, test.image) + if (err != nil) != test.wantErr { + t.Errorf("GenerateCacheKey() error = %v", err) + return + } + + if diff := cmp.Diff(test.want, got, cmpopts.EquateEmpty(), protocmp.Transform()); diff != "" { + t.Errorf("GenerateCacheKey() = %+v, want %+v\nDiff (-want, +got)\n%s", got, test.want, diff) + s, _ := json.MarshalIndent(test.want, "", " ") + fmt.Printf("Want\n%s", s) + } + + }) + } +} + +func TestGenerateFingerPrint(t *testing.T) { + cacheKey := &cachekey.CacheKey{ + InputArtifactNames: map[string]*cachekey.ArtifactNameList{ + "dataset_one": {ArtifactNames: []string{"1"}}, + "dataset_two": {ArtifactNames: []string{"2"}}, + }, + InputParameters: map[string]*pipelinespec.Value{ + "message": {Value: &pipelinespec.Value_StringValue{StringValue: "Some string value"}}, + "num_steps": {Value: &pipelinespec.Value_IntValue{IntValue: 5}}, + }, + OutputArtifactsSpec: map[string]*pipelinespec.RuntimeArtifact{ + "model": { + Name: "model", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_InstanceSchema{InstanceSchema: "title: kfp.Model\ntype: object\nproperties:\n framework:\n type: string\n framework_version:\n type: string\n"}, + }, + Metadata: &structpb.Struct{ + Fields: map[string]*structpb.Value{"name": {Kind: &structpb.Value_StringValue{StringValue: "model"}}}, + }}, + "metrics": { + Name: "metrics", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_SchemaTitle{SchemaTitle: "kfp.Metrics"}, + }, + Metadata: &structpb.Struct{ + Fields: map[string]*structpb.Value{"name": {Kind: &structpb.Value_StringValue{StringValue: "metrics"}}}, + }}, + }, + OutputParametersSpec: map[string]string{ + "output_parameter_one": "STRING", + "output_parameter_two": "INT", + }, + ContainerSpec: &cachekey.ContainerSpec{ + CmdArgs: []string{"sh", "ec", "test"}, + Image: "python:3.9", + }, + } + tests := []struct { + name string + cacheKey *cachekey.CacheKey + wantEqual bool + fingerPrint string + }{ + { + name: "Generated Same FingerPrint", + cacheKey: &cachekey.CacheKey{ + InputArtifactNames: map[string]*cachekey.ArtifactNameList{ + "dataset_one": {ArtifactNames: []string{"1"}}, + "dataset_two": {ArtifactNames: []string{"2"}}, + }, + InputParameters: map[string]*pipelinespec.Value{ + "message": {Value: &pipelinespec.Value_StringValue{StringValue: "Some string value"}}, + "num_steps": {Value: &pipelinespec.Value_IntValue{IntValue: 5}}, + }, + OutputArtifactsSpec: map[string]*pipelinespec.RuntimeArtifact{ + "model": { + Name: "model", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_InstanceSchema{InstanceSchema: "title: kfp.Model\ntype: object\nproperties:\n framework:\n type: string\n framework_version:\n type: string\n"}, + }, + Metadata: &structpb.Struct{ + Fields: map[string]*structpb.Value{"name": {Kind: &structpb.Value_StringValue{StringValue: "model"}}}, + }}, + "metrics": { + Name: "metrics", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_SchemaTitle{SchemaTitle: "kfp.Metrics"}, + }, + Metadata: &structpb.Struct{ + Fields: map[string]*structpb.Value{"name": {Kind: &structpb.Value_StringValue{StringValue: "metrics"}}}, + }}, + }, + OutputParametersSpec: map[string]string{ + "output_parameter_one": "STRING", + "output_parameter_two": "INT", + }, + ContainerSpec: &cachekey.ContainerSpec{ + CmdArgs: []string{"sh", "ec", "test"}, + Image: "python:3.9", + }, + }, + wantEqual: true, + fingerPrint: "c5e35810df04b64f63342644ab1041f4dcfec76528dcb98483a40be10d705015", + }, { + name: "Generated Different FingerPrint", + cacheKey: &cachekey.CacheKey{ + InputArtifactNames: map[string]*cachekey.ArtifactNameList{ + "dataset": {ArtifactNames: []string{"10"}}, + }, + OutputParametersSpec: map[string]string{ + "output_parameter": "DOUBLE", + }, + ContainerSpec: &cachekey.ContainerSpec{ + CmdArgs: []string{"sh", "ec", "run"}, + Image: "python:3.9", + }, + }, + wantEqual: false, + fingerPrint: "0a4cc1f15cdfad5170e1358518f7128c5278500a670db1b9a3f3d83b93db396e", + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + fingerPrint, err := GenerateFingerPrint(cacheKey) + assert.Nil(t, err) + testFingerPrint, err := GenerateFingerPrint(test.cacheKey) + assert.Nil(t, err) + assert.Equal(t, fingerPrint == testFingerPrint, test.wantEqual) + assert.Equal(t, testFingerPrint, test.fingerPrint) + }) + } +} diff --git a/v2/cmd/compiler/main.go b/v2/cmd/compiler/main.go new file mode 100644 index 0000000000..b44f6a3257 --- /dev/null +++ b/v2/cmd/compiler/main.go @@ -0,0 +1,89 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package main + +import ( + "flag" + "fmt" + "io/ioutil" + "os" + + "github.com/ghodss/yaml" + "github.com/golang/glog" + "github.com/golang/protobuf/jsonpb" + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + "github.com/kubeflow/pipelines/v2/compiler" +) + +var ( + spec = flag.String("spec", "", "path to pipeline spec file") + launcher = flag.String("launcher", "", "v2 launcher image") + driver = flag.String("driver", "", "v2 driver image") + pipelineRoot = flag.String("pipeline_root", "", "pipeline root") +) + +func main() { + flag.Parse() + if spec == nil || *spec == "" { + glog.Exitf("spec must be specified") + } + err := compile(*spec) + if err != nil { + glog.Exitf("Failed to compile: %v", err) + } +} + +func compile(specPath string) error { + job, err := load(specPath) + if err != nil { + return err + } + wf, err := compiler.Compile(job, &compiler.Options{ + DriverImage: *driver, + LauncherImage: *launcher, + PipelineRoot: *pipelineRoot, + }) + if err != nil { + return err + } + payload, err := yaml.Marshal(wf) + if err != nil { + return err + } + _, err = os.Stdout.Write(payload) + if err != nil { + return err + } + return nil +} + +// Use WARNING default logging level to facilitate troubleshooting. +func init() { + flag.Set("logtostderr", "true") + // Change the WARNING to INFO level for debugging. + flag.Set("stderrthreshold", "WARNING") +} + +func load(path string) (*pipelinespec.PipelineJob, error) { + content, err := ioutil.ReadFile(path) + if err != nil { + return nil, err + } + json := string(content) + job := &pipelinespec.PipelineJob{} + if err := jsonpb.UnmarshalString(json, job); err != nil { + return nil, fmt.Errorf("Failed to parse pipeline job, error: %s, job: %v", err, json) + } + return job, nil +} diff --git a/v2/cmd/driver/main.go b/v2/cmd/driver/main.go new file mode 100644 index 0000000000..a8a0daeaf6 --- /dev/null +++ b/v2/cmd/driver/main.go @@ -0,0 +1,198 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package main + +import ( + "bytes" + "context" + "encoding/json" + "flag" + "fmt" + "io/ioutil" + "os" + "path/filepath" + + "github.com/golang/glog" + "github.com/golang/protobuf/jsonpb" + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + "github.com/kubeflow/pipelines/v2/config" + "github.com/kubeflow/pipelines/v2/driver" + "github.com/kubeflow/pipelines/v2/metadata" +) + +const ( + driverTypeArg = "type" +) + +var ( + // inputs + driverType = flag.String(driverTypeArg, "", "task driver type, one of ROOT_DAG, CONTAINER") + pipelineName = flag.String("pipeline_name", "", "pipeline context name") + runID = flag.String("run_id", "", "pipeline run uid") + componentSpecJson = flag.String("component", "{}", "component spec") + taskSpecJson = flag.String("task", "{}", "task spec") + runtimeConfigJson = flag.String("runtime_config", "{}", "jobruntime config") + + // container inputs + dagContextID = flag.Int64("dag_context_id", 0, "DAG context ID") + dagExecutionID = flag.Int64("dag_execution_id", 0, "DAG execution ID") + + // config + mlmdServerAddress = flag.String("mlmd_server_address", "", "MLMD server address") + mlmdServerPort = flag.String("mlmd_server_port", "", "MLMD server port") + + // output paths + executionIDPath = flag.String("execution_id_path", "", "Exeucution ID output path") + contextIDPath = flag.String("context_id_path", "", "Context ID output path") + executorInputPath = flag.String("executor_input_path", "", "Executor Input output path") +) + +// func RootDAG(pipelineName string, runID string, component *pipelinespec.ComponentSpec, task *pipelinespec.PipelineTaskSpec, mlmd *metadata.Client) (*Execution, error) { + +func main() { + flag.Parse() + err := drive() + if err != nil { + glog.Exitf("%v", err) + } +} + +// Use WARNING default logging level to facilitate troubleshooting. +func init() { + flag.Set("logtostderr", "true") + // Change the WARNING to INFO level for debugging. + flag.Set("stderrthreshold", "WARNING") +} + +func validate() error { + if *driverType == "" { + return fmt.Errorf("argument --%s must be specified", driverTypeArg) + } + // validation responsibility lives in driver itself, so we do not validate all other args + return nil +} + +func drive() (err error) { + defer func() { + if err != nil { + err = fmt.Errorf("KFP driver: %w", err) + } + }() + ctx := context.Background() + if err = validate(); err != nil { + return err + } + glog.Infof("input ComponentSpec:%s\n", prettyPrint(*componentSpecJson)) + componentSpec := &pipelinespec.ComponentSpec{} + if err := jsonpb.UnmarshalString(*componentSpecJson, componentSpec); err != nil { + return fmt.Errorf("failed to unmarshal component spec, error: %w\ncomponentSpec: %v", err, componentSpecJson) + } + glog.Infof("input TaskSpec:%s\n", prettyPrint(*taskSpecJson)) + taskSpec := &pipelinespec.PipelineTaskSpec{} + if err := jsonpb.UnmarshalString(*taskSpecJson, taskSpec); err != nil { + return fmt.Errorf("failed to unmarshal task spec, error: %w\ntask: %v", err, taskSpecJson) + } + glog.Infof("input RuntimeConfig:%s\n", prettyPrint(*runtimeConfigJson)) + runtimeConfig := &pipelinespec.PipelineJob_RuntimeConfig{} + if err := jsonpb.UnmarshalString(*runtimeConfigJson, runtimeConfig); err != nil { + return fmt.Errorf("failed to unmarshal runtime config, error: %w\nruntimeConfig: %v", err, runtimeConfigJson) + } + namespace, err := config.InPodNamespace() + if err != nil { + return err + } + client, err := newMlmdClient() + if err != nil { + return err + } + options := driver.Options{ + PipelineName: *pipelineName, + RunID: *runID, + Namespace: namespace, + Component: componentSpec, + Task: taskSpec, + DAGExecutionID: *dagExecutionID, + DAGContextID: *dagContextID, + } + var execution *driver.Execution + switch *driverType { + case "ROOT_DAG": + options.RuntimeConfig = runtimeConfig + execution, err = driver.RootDAG(ctx, options, client) + case "CONTAINER": + execution, err = driver.Container(ctx, options, client) + default: + err = fmt.Errorf("unknown driverType %s", *driverType) + } + if err != nil { + return err + } + if execution.ID != 0 { + glog.Infof("output execution.ID=%v", execution.ID) + if err = writeFile(*executionIDPath, []byte(fmt.Sprint(execution.ID))); err != nil { + return fmt.Errorf("failed to write execution ID to file: %w", err) + } + } + if execution.Context != 0 { + glog.Infof("output execution.Context=%v", execution.Context) + if err = writeFile(*contextIDPath, []byte(fmt.Sprint(execution.Context))); err != nil { + return fmt.Errorf("failed to write context ID to file: %w", err) + } + } + if execution.ExecutorInput != nil { + marshaler := jsonpb.Marshaler{} + executorInputJSON, err := marshaler.MarshalToString(execution.ExecutorInput) + if err != nil { + return fmt.Errorf("failed to marshal ExecutorInput to JSON: %w", err) + } + glog.Infof("output ExecutorInput:%s\n", prettyPrint(executorInputJSON)) + if err = writeFile(*executorInputPath, []byte(executorInputJSON)); err != nil { + return fmt.Errorf("failed to write ExecutorInput to file: %w", err) + } + } + return nil +} + +func prettyPrint(jsonStr string) string { + var prettyJSON bytes.Buffer + err := json.Indent(&prettyJSON, []byte(jsonStr), "", " ") + if err != nil { + return jsonStr + } + return string(prettyJSON.Bytes()) +} + +func writeFile(path string, data []byte) (err error) { + if path == "" { + return fmt.Errorf("path is not specified") + } + defer func() { + if err != nil { + err = fmt.Errorf("failed to write to %s: %w", path, err) + } + }() + if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil { + return err + } + return ioutil.WriteFile(path, data, 0o644) +} + +func newMlmdClient() (*metadata.Client, error) { + mlmdConfig := metadata.DefaultConfig() + if *mlmdServerAddress != "" && *mlmdServerPort != "" { + mlmdConfig.Address = *mlmdServerAddress + mlmdConfig.Port = *mlmdServerPort + } + return metadata.NewClient(mlmdConfig.Address, mlmdConfig.Port) +} diff --git a/v2/cmd/launch/main.go b/v2/cmd/launch/main.go deleted file mode 100644 index 4bf8e836dc..0000000000 --- a/v2/cmd/launch/main.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package main - -import ( - "context" - "flag" - - "github.com/golang/glog" - "github.com/kubeflow/pipelines/v2/component" -) - -var ( - mlmdServerAddress = flag.String("mlmd_server_address", "", "The MLMD gRPC server address.") - mlmdServerPort = flag.String("mlmd_server_port", "8080", "The MLMD gRPC server port.") - runtimeInfoJSON = flag.String("runtime_info_json", "", "The JSON-encoded RuntimeInfo dictionary.") - containerImage = flag.String("container_image", "", "The current container image name.") - taskName = flag.String("task_name", "", "The current task name.") - pipelineName = flag.String("pipeline_name", "", "The current pipeline name.") - pipelineRunID = flag.String("pipeline_run_id", "", "The current pipeline run ID.") - pipelineTaskID = flag.String("pipeline_task_id", "", "The current pipeline task ID.") - pipelineRoot = flag.String("pipeline_root", "", "The root output directory in which to store output artifacts.") -) - -func main() { - flag.Parse() - ctx := context.Background() - - opts := &component.LauncherOptions{ - PipelineName: *pipelineName, - PipelineRunID: *pipelineRunID, - PipelineTaskID: *pipelineTaskID, - PipelineRoot: *pipelineRoot, - TaskName: *taskName, - ContainerImage: *containerImage, - MLMDServerAddress: *mlmdServerAddress, - MLMDServerPort: *mlmdServerPort, - } - launcher, err := component.NewLauncher(*runtimeInfoJSON, opts) - if err != nil { - glog.Fatalf("Failed to create component launcher: %v", err) - } - - if err := launcher.RunComponent(ctx, flag.Args()[0], flag.Args()[1:]...); err != nil { - glog.Fatalf("Failed to successfuly execute component: %v", err) - } -} diff --git a/v2/cmd/launcher-v2/main.go b/v2/cmd/launcher-v2/main.go new file mode 100644 index 0000000000..50e1649a62 --- /dev/null +++ b/v2/cmd/launcher-v2/main.go @@ -0,0 +1,82 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Launcher command for Kubeflow Pipelines v2. +package main + +import ( + "context" + "flag" + + "github.com/golang/glog" + "github.com/kubeflow/pipelines/v2/component" + "github.com/kubeflow/pipelines/v2/config" +) + +var ( + copy = flag.String("copy", "", "copy this binary to specified destination path") + executionID = flag.Int64("execution_id", 0, "Execution ID of this task.") + executorInputJSON = flag.String("executor_input", "", "The JSON-encoded ExecutorInput.") + componentSpecJSON = flag.String("component_spec", "", "The JSON-encoded ComponentSpec.") + podName = flag.String("pod_name", "", "Kubernetes Pod name.") + podUID = flag.String("pod_uid", "", "Kubernetes Pod UID.") + mlmdServerAddress = flag.String("mlmd_server_address", "", "The MLMD gRPC server address.") + mlmdServerPort = flag.String("mlmd_server_port", "8080", "The MLMD gRPC server port.") +) + +func main() { + err := run() + if err != nil { + glog.Exit(err) + } +} + +func run() error { + flag.Parse() + ctx := context.Background() + + if *copy != "" { + // copy is used to copy this binary to a shared volume + // this is a special command, ignore all other flags by returning + // early + return component.CopyThisBinary(*copy) + } + namespace, err := config.InPodNamespace() + if err != nil { + return err + } + opts := &component.LauncherV2Options{ + Namespace: namespace, + PodName: *podName, + PodUID: *podUID, + MLMDServerAddress: *mlmdServerAddress, + MLMDServerPort: *mlmdServerPort, + } + launcher, err := component.NewLauncherV2(ctx, *executionID, *executorInputJSON, *componentSpecJSON, flag.Args(), opts) + if err != nil { + return err + } + glog.V(5).Info(launcher.Info()) + if err := launcher.Execute(ctx); err != nil { + return err + } + return nil +} + +// Use WARNING default logging level to facilitate troubleshooting. +func init() { + flag.Set("logtostderr", "true") + // Change the WARNING to INFO level for debugging. + flag.Set("stderrthreshold", "WARNING") +} diff --git a/v2/cmd/launcher/main.go b/v2/cmd/launcher/main.go new file mode 100644 index 0000000000..5cfb1ca28b --- /dev/null +++ b/v2/cmd/launcher/main.go @@ -0,0 +1,99 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Launcher command for Kubeflow Pipelines v2 compatible mode. +package main + +import ( + "context" + "flag" + "fmt" + "strconv" + + "github.com/golang/glog" + "github.com/kubeflow/pipelines/v2/component" +) + +var ( + copy = flag.String("copy", "", "copy this binary to specified destination path") + mlmdServerAddress = flag.String("mlmd_server_address", "", "The MLMD gRPC server address.") + mlmdServerPort = flag.String("mlmd_server_port", "8080", "The MLMD gRPC server port.") + runtimeInfoJSON = flag.String("runtime_info_json", "", "The JSON-encoded RuntimeInfo dictionary.") + image = flag.String("container_image", "", "The current container image name.") + taskName = flag.String("task_name", "", "The current task name.") + pipelineName = flag.String("pipeline_name", "", "The current pipeline name.") + runID = flag.String("run_id", "", "The current pipeline run ID.") + runResource = flag.String("run_resource", "", "The current pipeline's corresponding Kubernetes resource. e.g. workflows.argoproj.io/workflow-name") + namespace = flag.String("namespace", "", "The Kubernetes namespace this Pod belongs to.") + podName = flag.String("pod_name", "", "Kubernetes Pod name.") + podUID = flag.String("pod_uid", "", "Kubernetes Pod UID.") + pipelineRoot = flag.String("pipeline_root", "", "The root output directory in which to store output artifacts.") + // Use flag.String instead of flag.Bool here to avoid breaking the logic of parser(parseArgs(flag.Args(), rt) in launcher component + // With flag.Bool, "--enable_caching true" is not valid syntax (https://pkg.go.dev/flag#hdr-Command_line_flag_syntax) + enableCaching = flag.String("enable_caching", "false", "Enable caching or not") +) + +func main() { + err := run() + if err != nil { + glog.Exit(err) + } +} + +func run() error { + flag.Parse() + ctx := context.Background() + + if *copy != "" { + // copy is used to copy this binary to a shared volume + // this is a special command, ignore all other flags by returning + // early + return component.CopyThisBinary(*copy) + } + + enableCachingBool, err := strconv.ParseBool(*enableCaching) + if err != nil { + return fmt.Errorf("Failed to parse enableCaching %s: %w", *enableCaching, err) + } + + opts := &component.LauncherOptions{ + PipelineName: *pipelineName, + RunID: *runID, + RunResource: *runResource, + Namespace: *namespace, + PodName: *podName, + PodUID: *podUID, + PipelineRoot: *pipelineRoot, + TaskName: *taskName, + Image: *image, + MLMDServerAddress: *mlmdServerAddress, + MLMDServerPort: *mlmdServerPort, + EnableCaching: enableCachingBool, + } + launcher, err := component.NewLauncher(ctx, *runtimeInfoJSON, opts) + if err != nil { + return fmt.Errorf("Failed to create component launcher: %w", err) + } + if err := launcher.RunComponent(ctx); err != nil { + return fmt.Errorf("Failed to execute component: %w", err) + } + return nil +} + +// Use WARNING default logging level to facilitate troubleshooting. +func init() { + flag.Set("logtostderr", "true") + // Change the WARNING to INFO level for debugging. + flag.Set("stderrthreshold", "WARNING") +} diff --git a/v2/compiler/argo.go b/v2/compiler/argo.go new file mode 100644 index 0000000000..4526c04897 --- /dev/null +++ b/v2/compiler/argo.go @@ -0,0 +1,166 @@ +package compiler + +import ( + "fmt" + + wfapi "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + "google.golang.org/protobuf/proto" + k8smeta "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +type Options struct { + // optional, use official image if not provided + LauncherImage string + // optional + DriverImage string + // optional + PipelineRoot string + // TODO(Bobgy): add an option -- dev mode, ImagePullPolicy should only be Always in dev mode. +} + +func Compile(jobArg *pipelinespec.PipelineJob, opts *Options) (*wfapi.Workflow, error) { + spec, err := getPipelineSpec(jobArg) + if err != nil { + return nil, err + } + // validation + if spec.GetPipelineInfo().GetName() == "" { + return nil, fmt.Errorf("pipelineInfo.name is empty") + } + + // initialization + wf := &wfapi.Workflow{ + TypeMeta: k8smeta.TypeMeta{ + APIVersion: "argoproj.io/v1alpha1", + Kind: "Workflow", + }, + ObjectMeta: k8smeta.ObjectMeta{ + GenerateName: spec.GetPipelineInfo().GetName() + "-", + // Note, uncomment the following during development to view argo inputs/outputs in KFP UI. + Annotations: map[string]string{ + "pipelines.kubeflow.org/v2_pipeline": "true", + }, + }, + Spec: wfapi.WorkflowSpec{ + PodMetadata: &wfapi.Metadata{ + Annotations: map[string]string{ + "pipelines.kubeflow.org/v2_component": "true", + }, + Labels: map[string]string{ + "pipelines.kubeflow.org/v2_component": "true", + }, + }, + ServiceAccountName: "pipeline-runner", + Entrypoint: rootComponentName, + }, + } + jobMsg := proto.Clone(jobArg) + job, ok := jobMsg.(*pipelinespec.PipelineJob) + if !ok { + return nil, fmt.Errorf("bug: cloned pipeline job message does not have expected type") + } + compiler := &workflowCompiler{ + wf: wf, + templates: make(map[string]*wfapi.Template), + // TODO(Bobgy): release process and update the images. + driverImage: "gcr.io/ml-pipeline/kfp-driver:latest", + launcherImage: "gcr.io/ml-pipeline/kfp-launcher-v2:latest", + job: job, + spec: spec, + } + if opts != nil { + if opts.DriverImage != "" { + compiler.driverImage = opts.DriverImage + } + if opts.LauncherImage != "" { + compiler.launcherImage = opts.LauncherImage + } + if opts.PipelineRoot != "" { + if job.RuntimeConfig == nil { + job.RuntimeConfig = &pipelinespec.PipelineJob_RuntimeConfig{} + } + job.RuntimeConfig.GcsOutputDirectory = opts.PipelineRoot + } + } + + // compile + Accept(job, compiler) + + return compiler.wf, nil +} + +type workflowCompiler struct { + // inputs + job *pipelinespec.PipelineJob + spec *pipelinespec.PipelineSpec + // state + wf *wfapi.Workflow + templates map[string]*wfapi.Template + driverImage string + launcherImage string +} + +func (c *workflowCompiler) Importer(name string, component *pipelinespec.ComponentSpec, importer *pipelinespec.PipelineDeploymentConfig_ImporterSpec) error { + return fmt.Errorf("importer not implemented yet") +} +func (c *workflowCompiler) Resolver(name string, component *pipelinespec.ComponentSpec, resolver *pipelinespec.PipelineDeploymentConfig_ResolverSpec) error { + return fmt.Errorf("resolver not implemented yet") +} + +var errAlreadyExists = fmt.Errorf("template already exists") + +func (c *workflowCompiler) addTemplate(t *wfapi.Template, name string) (string, error) { + t.Name = c.templateName(name) + _, ok := c.templates[t.Name] + if ok { + return "", fmt.Errorf("template name=%q: %w", t.Name, errAlreadyExists) + } + c.wf.Spec.Templates = append(c.wf.Spec.Templates, *t) + c.templates[t.Name] = t + return t.Name, nil +} + +func (c *workflowCompiler) templateName(componentName string) string { + // TODO(Bobgy): sanitize component name, because argo template names + // must be valid Kubernetes resource names. + return componentName +} + +const ( + paramComponent = "component" // component spec + paramTask = "task" // task spec + paramRuntimeConfig = "runtime-config" // job runtime config, pipeline level inputs + paramDAGContextID = "dag-context-id" + paramDAGExecutionID = "dag-execution-id" + paramExecutionID = "execution-id" + paramContextID = "context-id" + paramExecutorInput = "executor-input" +) + +func runID() string { + // KFP API server converts this to KFP run ID. + return "{{workflow.uid}}" +} + +func workflowParameter(name string) string { + return fmt.Sprintf("{{workflow.parameters.%s}}", name) +} + +// In a container template, refer to inputs to the template. +func inputValue(parameter string) string { + return fmt.Sprintf("{{inputs.parameters.%s}}", parameter) +} + +// In a DAG/steps template, refer to inputs to the parent template. +func inputParameter(parameter string) string { + return fmt.Sprintf("{{inputs.parameters.%s}}", parameter) +} + +func outputPath(parameter string) string { + return fmt.Sprintf("{{outputs.parameters.%s.path}}", parameter) +} + +func taskOutputParameter(task string, param string) string { + return fmt.Sprintf("{{tasks.%s.outputs.parameters.%s}}", task, param) +} diff --git a/v2/compiler/argo_test.go b/v2/compiler/argo_test.go new file mode 100644 index 0000000000..4399d58747 --- /dev/null +++ b/v2/compiler/argo_test.go @@ -0,0 +1,291 @@ +package compiler_test + +import ( + "testing" + + wfapi "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" + "github.com/ghodss/yaml" + "github.com/google/go-cmp/cmp" + "github.com/kubeflow/pipelines/v2/compiler" +) + +func Test_argo_compiler(t *testing.T) { + jobPath := "testdata/hello_world.json" + job := load(t, jobPath) + wf, err := compiler.Compile(job, nil) + if err != nil { + t.Error(err) + } + + expectedText := ` + apiVersion: argoproj.io/v1alpha1 + kind: Workflow + metadata: + annotations: + pipelines.kubeflow.org/v2_pipeline: "true" + creationTimestamp: null + generateName: hello-world- + spec: + arguments: {} + entrypoint: root + podMetadata: + annotations: + pipelines.kubeflow.org/v2_component: "true" + labels: + pipelines.kubeflow.org/v2_component: "true" + serviceAccountName: pipeline-runner + templates: + - container: + args: + - --type + - CONTAINER + - --pipeline_name + - hello-world + - --run_id + - '{{workflow.uid}}' + - --dag_context_id + - '{{inputs.parameters.dag-context-id}}' + - --dag_execution_id + - '{{inputs.parameters.dag-execution-id}}' + - --component + - '{{inputs.parameters.component}}' + - --task + - '{{inputs.parameters.task}}' + - --execution_id_path + - '{{outputs.parameters.execution-id.path}}' + - --executor_input_path + - '{{outputs.parameters.executor-input.path}}' + command: + - driver + image: gcr.io/ml-pipeline/kfp-driver:latest + name: "" + resources: {} + inputs: + parameters: + - name: component + - name: task + - name: dag-context-id + - name: dag-execution-id + metadata: {} + name: system-container-driver + outputs: + parameters: + - name: execution-id + valueFrom: + path: /tmp/outputs/execution-id + - name: executor-input + valueFrom: + path: /tmp/outputs/executor-input + - container: + args: + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def hello_world(text): + print(text) + return text + + import argparse + _parser = argparse.ArgumentParser(prog='Hello world', description='') + _parser.add_argument("--text", dest="text", type=str, required=True, default=argparse.SUPPRESS) + _parsed_args = vars(_parser.parse_args()) + + _outputs = hello_world(**_parsed_args) + - --text + - '{{$.inputs.parameters[''text'']}}' + command: + - /kfp-launcher/launch + - --execution_id + - '{{inputs.parameters.execution-id}}' + - --executor_input + - '{{inputs.parameters.executor-input}}' + - --component_spec + - '{{inputs.parameters.component}}' + - --pod_name + - $(KFP_POD_NAME) + - --pod_uid + - $(KFP_POD_UID) + - --mlmd_server_address + - $(METADATA_GRPC_SERVICE_HOST) + - --mlmd_server_port + - $(METADATA_GRPC_SERVICE_PORT) + - -- + env: + - name: KFP_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: KFP_POD_UID + valueFrom: + fieldRef: + fieldPath: metadata.uid + envFrom: + - configMapRef: + name: metadata-grpc-configmap + optional: true + image: python:3.7 + name: "" + resources: {} + volumeMounts: + - mountPath: /kfp-launcher + name: kfp-launcher + initContainers: + - command: + - launcher-v2 + - --copy + - /kfp-launcher/launch + image: gcr.io/ml-pipeline/kfp-launcher-v2:latest + imagePullPolicy: Always + name: kfp-launcher + resources: {} + volumeMounts: + - mountPath: /kfp-launcher + name: kfp-launcher + inputs: + parameters: + - name: executor-input + - name: execution-id + - name: component + metadata: {} + name: comp-hello-world-container + outputs: {} + volumes: + - emptyDir: {} + name: kfp-launcher + - dag: + tasks: + - arguments: + parameters: + - name: component + value: '{{inputs.parameters.component}}' + - name: task + value: '{{inputs.parameters.task}}' + - name: dag-context-id + value: '{{inputs.parameters.dag-context-id}}' + - name: dag-execution-id + value: '{{inputs.parameters.dag-execution-id}}' + name: driver + template: system-container-driver + - arguments: + parameters: + - name: executor-input + value: '{{tasks.driver.outputs.parameters.executor-input}}' + - name: execution-id + value: '{{tasks.driver.outputs.parameters.execution-id}}' + - name: component + value: '{{inputs.parameters.component}}' + dependencies: + - driver + name: container + template: comp-hello-world-container + inputs: + parameters: + - name: task + - name: dag-context-id + - name: dag-execution-id + - default: '{"inputDefinitions":{"parameters":{"text":{"type":"STRING"}}},"executorLabel":"exec-hello-world"}' + name: component + metadata: {} + name: comp-hello-world + outputs: {} + - dag: + tasks: + - arguments: + parameters: + - name: dag-context-id + value: '{{inputs.parameters.dag-context-id}}' + - name: dag-execution-id + value: '{{inputs.parameters.dag-execution-id}}' + - name: task + value: '{"taskInfo":{"name":"hello-world"},"inputs":{"parameters":{"text":{"componentInputParameter":"text"}}},"cachingOptions":{"enableCache":true},"componentRef":{"name":"comp-hello-world"}}' + name: hello-world + template: comp-hello-world + inputs: + parameters: + - name: dag-context-id + - name: dag-execution-id + metadata: {} + name: root-dag + outputs: {} + - container: + args: + - --type + - ROOT_DAG + - --pipeline_name + - hello-world + - --run_id + - '{{workflow.uid}}' + - --component + - '{{inputs.parameters.component}}' + - --runtime_config + - '{{inputs.parameters.runtime-config}}' + - --execution_id_path + - '{{outputs.parameters.execution-id.path}}' + - --context_id_path + - '{{outputs.parameters.context-id.path}}' + command: + - driver + image: gcr.io/ml-pipeline/kfp-driver:latest + name: "" + resources: {} + inputs: + parameters: + - name: component + - name: runtime-config + metadata: {} + name: system-dag-driver + outputs: + parameters: + - name: execution-id + valueFrom: + path: /tmp/outputs/execution-id + - name: context-id + valueFrom: + path: /tmp/outputs/context-id + - dag: + tasks: + - arguments: + parameters: + - name: component + value: '{"inputDefinitions":{"parameters":{"text":{"type":"STRING"}}},"dag":{"tasks":{"hello-world":{"taskInfo":{"name":"hello-world"},"inputs":{"parameters":{"text":{"componentInputParameter":"text"}}},"cachingOptions":{"enableCache":true},"componentRef":{"name":"comp-hello-world"}}}}}' + - name: task + value: '{}' + - name: runtime-config + value: '{"parameters":{"text":{"stringValue":"hi there"}}}' + name: driver + template: system-dag-driver + - arguments: + parameters: + - name: dag-execution-id + value: '{{tasks.driver.outputs.parameters.execution-id}}' + - name: dag-context-id + value: '{{tasks.driver.outputs.parameters.context-id}}' + dependencies: + - driver + name: dag + template: root-dag + inputs: {} + metadata: {} + name: root + outputs: {} + status: + finishedAt: null + startedAt: null + ` + var expected wfapi.Workflow + err = yaml.Unmarshal([]byte(expectedText), &expected) + if err != nil { + t.Fatal(err) + } + if !cmp.Equal(wf, &expected) { + got, err := yaml.Marshal(wf) + if err != nil { + t.Fatal(err) + } + t.Errorf("compiler.Compile(%s)!=expected, diff: %s\n got:\n%s\n", jobPath, cmp.Diff(&expected, wf), string(got)) + } +} diff --git a/v2/compiler/container.go b/v2/compiler/container.go new file mode 100644 index 0000000000..61d057004e --- /dev/null +++ b/v2/compiler/container.go @@ -0,0 +1,222 @@ +package compiler + +import ( + "fmt" + + wfapi "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" + "github.com/golang/protobuf/jsonpb" + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + k8score "k8s.io/api/core/v1" +) + +const ( + volumePathKFPLauncher = "/kfp-launcher" + volumeNameKFPLauncher = "kfp-launcher" +) + +func (c *workflowCompiler) Container(name string, component *pipelinespec.ComponentSpec, container *pipelinespec.PipelineDeploymentConfig_PipelineContainerSpec) error { + if component == nil { + return fmt.Errorf("workflowCompiler.Container: component spec must be non-nil") + } + marshaler := jsonpb.Marshaler{} + componentJson, err := marshaler.MarshalToString(component) + if err != nil { + return fmt.Errorf("workflowCompiler.Container: marlshaling component spec to proto JSON failed: %w", err) + } + driverTask, driverOutputs := c.containerDriverTask( + "driver", + inputParameter(paramComponent), + inputParameter(paramTask), + inputParameter(paramDAGContextID), + inputParameter(paramDAGExecutionID), + ) + if err != nil { + return err + } + t := containerExecutorTemplate(container, c.launcherImage) + // TODO(Bobgy): how can we avoid template name collisions? + containerTemplateName, err := c.addTemplate(t, name+"-container") + if err != nil { + return err + } + wrapper := &wfapi.Template{ + Inputs: wfapi.Inputs{ + Parameters: []wfapi.Parameter{ + {Name: paramTask}, + {Name: paramDAGContextID}, + {Name: paramDAGExecutionID}, + // TODO(Bobgy): reuse the entire 2-step container template + {Name: paramComponent, Default: wfapi.AnyStringPtr(componentJson)}, + }, + }, + DAG: &wfapi.DAGTemplate{ + Tasks: []wfapi.DAGTask{ + *driverTask, + {Name: "container", Template: containerTemplateName, Dependencies: []string{driverTask.Name}, Arguments: wfapi.Arguments{ + Parameters: []wfapi.Parameter{{ + Name: paramExecutorInput, + Value: wfapi.AnyStringPtr(driverOutputs.executorInput), + }, { + Name: paramExecutionID, + Value: wfapi.AnyStringPtr(driverOutputs.executionID), + }, { + Name: paramComponent, + Value: wfapi.AnyStringPtr(inputParameter(paramComponent)), + }}, + }}, + }, + }, + } + _, err = c.addTemplate(wrapper, name) + return err +} + +type containerDriverOutputs struct { + executorInput string + executionID string +} + +func (c *workflowCompiler) containerDriverTask(name, component, task, dagContextID, dagExecutionID string) (*wfapi.DAGTask, *containerDriverOutputs) { + dagTask := &wfapi.DAGTask{ + Name: name, + Template: c.addContainerDriverTemplate(), + Arguments: wfapi.Arguments{ + Parameters: []wfapi.Parameter{ + {Name: paramComponent, Value: wfapi.AnyStringPtr(component)}, + {Name: paramTask, Value: wfapi.AnyStringPtr(task)}, + {Name: paramDAGContextID, Value: wfapi.AnyStringPtr(dagContextID)}, + {Name: paramDAGExecutionID, Value: wfapi.AnyStringPtr(dagExecutionID)}, + }, + }, + } + outputs := &containerDriverOutputs{ + executorInput: taskOutputParameter(name, paramExecutorInput), + executionID: taskOutputParameter(name, paramExecutionID), + } + return dagTask, outputs +} + +func (c *workflowCompiler) addContainerDriverTemplate() string { + name := "system-container-driver" + _, ok := c.templates[name] + if ok { + return name + } + t := &wfapi.Template{ + Name: name, + Inputs: wfapi.Inputs{ + Parameters: []wfapi.Parameter{ + {Name: paramComponent}, + {Name: paramTask}, + {Name: paramDAGContextID}, + {Name: paramDAGExecutionID}, + }, + }, + Outputs: wfapi.Outputs{ + Parameters: []wfapi.Parameter{ + {Name: paramExecutionID, ValueFrom: &wfapi.ValueFrom{Path: "/tmp/outputs/execution-id"}}, + {Name: paramExecutorInput, ValueFrom: &wfapi.ValueFrom{Path: "/tmp/outputs/executor-input"}}, + }, + }, + Container: &k8score.Container{ + Image: c.driverImage, + Command: []string{"driver"}, + Args: []string{ + "--type", "CONTAINER", + "--pipeline_name", c.spec.GetPipelineInfo().GetName(), + "--run_id", runID(), + "--dag_context_id", inputValue(paramDAGContextID), + "--dag_execution_id", inputValue(paramDAGExecutionID), + "--component", inputValue(paramComponent), + "--task", inputValue(paramTask), + "--execution_id_path", outputPath(paramExecutionID), + "--executor_input_path", outputPath(paramExecutorInput), + }, + }, + } + c.templates[name] = t + c.wf.Spec.Templates = append(c.wf.Spec.Templates, *t) + return name +} + +func containerExecutorTemplate(container *pipelinespec.PipelineDeploymentConfig_PipelineContainerSpec, launcherImage string) *wfapi.Template { + userCmdArgs := make([]string, 0, len(container.Command)+len(container.Args)) + userCmdArgs = append(userCmdArgs, container.Command...) + userCmdArgs = append(userCmdArgs, container.Args...) + launcherCmd := []string{ + volumePathKFPLauncher + "/launch", + "--execution_id", inputValue(paramExecutionID), + "--executor_input", inputValue(paramExecutorInput), + "--component_spec", inputValue(paramComponent), + "--pod_name", + "$(KFP_POD_NAME)", + "--pod_uid", + "$(KFP_POD_UID)", + "--mlmd_server_address", // METADATA_GRPC_SERVICE_* come from metadata-grpc-configmap + "$(METADATA_GRPC_SERVICE_HOST)", + "--mlmd_server_port", + "$(METADATA_GRPC_SERVICE_PORT)", + "--", // separater before user command and args + } + mlmdConfigOptional := true + return &wfapi.Template{ + Inputs: wfapi.Inputs{ + Parameters: []wfapi.Parameter{ + {Name: paramExecutorInput}, + {Name: paramExecutionID}, + {Name: paramComponent}, + }, + }, + Volumes: []k8score.Volume{{ + Name: volumeNameKFPLauncher, + VolumeSource: k8score.VolumeSource{ + EmptyDir: &k8score.EmptyDirVolumeSource{}, + }, + }}, + InitContainers: []wfapi.UserContainer{{ + Container: k8score.Container{ + Name: "kfp-launcher", + Image: launcherImage, + Command: []string{"launcher-v2", "--copy", "/kfp-launcher/launch"}, + VolumeMounts: []k8score.VolumeMount{{ + Name: volumeNameKFPLauncher, + MountPath: volumePathKFPLauncher, + }}, + ImagePullPolicy: "Always", + }, + }}, + Container: &k8score.Container{ + Command: launcherCmd, + Args: userCmdArgs, + Image: container.Image, + VolumeMounts: []k8score.VolumeMount{{ + Name: volumeNameKFPLauncher, + MountPath: volumePathKFPLauncher, + }}, + EnvFrom: []k8score.EnvFromSource{{ + ConfigMapRef: &k8score.ConfigMapEnvSource{ + LocalObjectReference: k8score.LocalObjectReference{ + Name: "metadata-grpc-configmap", + }, + Optional: &mlmdConfigOptional, + }, + }}, + Env: []k8score.EnvVar{{ + Name: "KFP_POD_NAME", + ValueFrom: &k8score.EnvVarSource{ + FieldRef: &k8score.ObjectFieldSelector{ + FieldPath: "metadata.name", + }, + }, + }, { + Name: "KFP_POD_UID", + ValueFrom: &k8score.EnvVarSource{ + FieldRef: &k8score.ObjectFieldSelector{ + FieldPath: "metadata.uid", + }, + }, + }}, + // TODO(Bobgy): support resource requests/limits + }, + } +} diff --git a/v2/compiler/dag.go b/v2/compiler/dag.go new file mode 100644 index 0000000000..1ffe2bfd02 --- /dev/null +++ b/v2/compiler/dag.go @@ -0,0 +1,231 @@ +package compiler + +import ( + "fmt" + + wfapi "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" + "github.com/golang/protobuf/jsonpb" + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + k8score "k8s.io/api/core/v1" +) + +func (c *workflowCompiler) DAG(name string, componentSpec *pipelinespec.ComponentSpec, dagSpec *pipelinespec.DagSpec) error { + if name != "root" { + return fmt.Errorf("SubDAG not implemented yet") + } + err := addImplicitDependencies(dagSpec) + if err != nil { + return err + } + dag := &wfapi.Template{ + Inputs: wfapi.Inputs{ + Parameters: []wfapi.Parameter{ + {Name: paramDAGContextID}, + {Name: paramDAGExecutionID}, + }, + }, + DAG: &wfapi.DAGTemplate{}, + } + for _, kfpTask := range dagSpec.GetTasks() { + marshaler := jsonpb.Marshaler{} + taskJson, err := marshaler.MarshalToString(kfpTask) + if err != nil { + return fmt.Errorf("DAG: marshaling task spec to proto JSON failed: %w", err) + } + dag.DAG.Tasks = append(dag.DAG.Tasks, wfapi.DAGTask{ + Name: kfpTask.GetTaskInfo().GetName(), + Template: c.templateName(kfpTask.GetComponentRef().GetName()), + Dependencies: kfpTask.GetDependentTasks(), + Arguments: wfapi.Arguments{ + Parameters: []wfapi.Parameter{ + { + Name: paramDAGContextID, + Value: wfapi.AnyStringPtr(inputParameter(paramDAGContextID)), + }, + { + Name: paramDAGExecutionID, + Value: wfapi.AnyStringPtr(inputParameter(paramDAGExecutionID)), + }, + { + Name: paramTask, + Value: wfapi.AnyStringPtr(taskJson), + }, + }, + }, + }) + } + // TODO(Bobgy): how can we avoid template name collisions? + dagName, err := c.addTemplate(dag, name+"-dag") + task := &pipelinespec.PipelineTaskSpec{} + var runtimeConfig *pipelinespec.PipelineJob_RuntimeConfig + if name == "root" { + // runtime config is input to the entire pipeline (root DAG) + runtimeConfig = c.job.GetRuntimeConfig() + } + driverTask, outputs, err := c.dagDriverTask("driver", componentSpec, task, runtimeConfig) + if err != nil { + return err + } + wrapper := &wfapi.Template{} + wrapper.DAG = &wfapi.DAGTemplate{ + Tasks: []wfapi.DAGTask{ + *driverTask, + { + Name: "dag", Template: dagName, Dependencies: []string{"driver"}, + Arguments: wfapi.Arguments{ + Parameters: []wfapi.Parameter{ + {Name: paramDAGExecutionID, Value: wfapi.AnyStringPtr(outputs.executionID)}, + {Name: paramDAGContextID, Value: wfapi.AnyStringPtr(outputs.contextID)}, + }, + }, + }, + }, + } + _, err = c.addTemplate(wrapper, name) + return err +} + +type dagDriverOutputs struct { + contextID, executionID string +} + +func (c *workflowCompiler) dagDriverTask(name string, component *pipelinespec.ComponentSpec, task *pipelinespec.PipelineTaskSpec, runtimeConfig *pipelinespec.PipelineJob_RuntimeConfig) (*wfapi.DAGTask, *dagDriverOutputs, error) { + if component == nil { + return nil, nil, fmt.Errorf("dagDriverTask: component must be non-nil") + } + marshaler := jsonpb.Marshaler{} + componentJson, err := marshaler.MarshalToString(component) + if err != nil { + return nil, nil, fmt.Errorf("dagDriverTask: marlshaling component spec to proto JSON failed: %w", err) + } + taskJson := "{}" + if task != nil { + taskJson, err = marshaler.MarshalToString(task) + if err != nil { + return nil, nil, fmt.Errorf("dagDriverTask: marshaling task spec to proto JSON failed: %w", err) + } + } + runtimeConfigJson := "{}" + if runtimeConfig != nil { + runtimeConfigJson, err = marshaler.MarshalToString(runtimeConfig) + if err != nil { + return nil, nil, fmt.Errorf("dagDriverTask: marshaling runtime config to proto JSON failed: %w", err) + } + } + templateName := c.addDAGDriverTemplate() + t := &wfapi.DAGTask{ + Name: name, + Template: templateName, + Arguments: wfapi.Arguments{ + Parameters: []wfapi.Parameter{ + { + Name: paramComponent, + Value: wfapi.AnyStringPtr(componentJson), + }, + { + Name: paramTask, + Value: wfapi.AnyStringPtr(taskJson), + }, + { + Name: paramRuntimeConfig, + Value: wfapi.AnyStringPtr(runtimeConfigJson), + }, + }, + }, + } + return t, &dagDriverOutputs{ + contextID: taskOutputParameter(name, paramContextID), + executionID: taskOutputParameter(name, paramExecutionID), + }, nil +} + +func (c *workflowCompiler) addDAGDriverTemplate() string { + name := "system-dag-driver" + _, ok := c.templates[name] + if ok { + return name + } + t := &wfapi.Template{ + Name: name, + Inputs: wfapi.Inputs{ + Parameters: []wfapi.Parameter{ + {Name: paramComponent}, + {Name: paramRuntimeConfig}, + }, + }, + Outputs: wfapi.Outputs{ + Parameters: []wfapi.Parameter{ + {Name: paramExecutionID, ValueFrom: &wfapi.ValueFrom{Path: "/tmp/outputs/execution-id"}}, + {Name: paramContextID, ValueFrom: &wfapi.ValueFrom{Path: "/tmp/outputs/context-id"}}, + }, + }, + Container: &k8score.Container{ + Image: c.driverImage, + Command: []string{"driver"}, + Args: []string{ + "--type", "ROOT_DAG", + "--pipeline_name", c.spec.GetPipelineInfo().GetName(), + "--run_id", runID(), + "--component", inputValue(paramComponent), + "--runtime_config", inputValue(paramRuntimeConfig), + "--execution_id_path", outputPath(paramExecutionID), + "--context_id_path", outputPath(paramContextID), + }, + }, + } + c.templates[name] = t + c.wf.Spec.Templates = append(c.wf.Spec.Templates, *t) + return name +} + +func addImplicitDependencies(dagSpec *pipelinespec.DagSpec) error { + for _, task := range dagSpec.GetTasks() { + wrap := func(err error) error { + return fmt.Errorf("failed to add implicit deps: %w", err) + } + addDep := func(producer string) error { + if _, ok := dagSpec.GetTasks()[producer]; !ok { + return fmt.Errorf("unknown producer task %q in DAG", producer) + } + if task.DependentTasks == nil { + task.DependentTasks = make([]string, 0) + } + // add the dependency if it's not already added + found := false + for _, dep := range task.DependentTasks { + if dep == producer { + found = true + break + } + } + if !found { + task.DependentTasks = append(task.DependentTasks, producer) + } + return nil + } + // TODO(Bobgy): add implicit dependencies introduced by artifacts + for _, input := range task.GetInputs().GetParameters() { + switch input.GetKind().(type) { + case *pipelinespec.TaskInputsSpec_InputParameterSpec_TaskOutputParameter: + if err := addDep(input.GetTaskOutputParameter().GetProducerTask()); err != nil { + return wrap(err) + } + case *pipelinespec.TaskInputsSpec_InputParameterSpec_TaskFinalStatus_: + return wrap(fmt.Errorf("task final status not supported yet")) + default: + // other parameter input types do not introduce implicit dependencies + } + } + for _, input := range task.GetInputs().GetArtifacts() { + switch input.GetKind().(type) { + case *pipelinespec.TaskInputsSpec_InputArtifactSpec_TaskOutputArtifact: + if err := addDep(input.GetTaskOutputArtifact().GetProducerTask()); err != nil { + return wrap(err) + } + default: + // other artifact input types do not introduce implicit dependencies + } + } + } + return nil +} diff --git a/v2/compiler/testdata/Makefile b/v2/compiler/testdata/Makefile new file mode 100644 index 0000000000..c22df9a6ec --- /dev/null +++ b/v2/compiler/testdata/Makefile @@ -0,0 +1,21 @@ +REPO_ROOT=../../.. +V2_SAMPLES=$(REPO_ROOT)/samples/v2 + +# Bobgy: I decided to commit compiled samples into the repo, because they are +# used by compiler unit tests. Even if there are updates to v2 DSL compiler +# or samples, we don't necessarily want to update the compiled samples here, +# because: +# 1. outdated samples are still good data to confirm we keep backward compatibility +# 2. if we compile python DSL to JSON pipeline spec files during unit test, unit +# test env is harder to configure with both python and golang dev env. +# Instead, let's update testdata and commit them to repo again when needed. + +# Update compiled JSON pipeline spec files by compiling v2 samples using dsl-compile-v2 CLI. +# Add more samples here when needed +.PHONY: update +update: + dsl-compile-v2 --py "$(V2_SAMPLES)/hello_world.py" --out "hello_world.json" + dsl-compile-v2 --py "$(V2_SAMPLES)/producer_consumer_param.py" --out "producer_consumer_param.json" + # currently commented, because v2 compiler generates duplicate component definitions + # the commited component_used_twice.json file is hand edited. + # dsl-compile-v2 --py "component_used_twice.py" --out "component_used_twice.json" diff --git a/v2/compiler/testdata/component_used_twice.json b/v2/compiler/testdata/component_used_twice.json new file mode 100644 index 0000000000..6773a1a850 --- /dev/null +++ b/v2/compiler/testdata/component_used_twice.json @@ -0,0 +1,93 @@ +{ + "pipelineSpec": { + "components": { + "comp-hello-world": { + "executorLabel": "exec-hello-world", + "inputDefinitions": { + "parameters": { + "text": { + "type": "STRING" + } + } + } + } + }, + "deploymentSpec": { + "executors": { + "exec-hello-world": { + "container": { + "args": ["--text", "{{$.inputs.parameters['text']}}"], + "command": [ + "sh", + "-ec", + "program_path=$(mktemp)\nprintf \"%s\" \"$0\" > \"$program_path\"\npython3 -u \"$program_path\" \"$@\"\n", + "def hello_world(text):\n print(text)\n return text\n\nimport argparse\n_parser = argparse.ArgumentParser(prog='Hello world', description='')\n_parser.add_argument(\"--text\", dest=\"text\", type=str, required=True, default=argparse.SUPPRESS)\n_parsed_args = vars(_parser.parse_args())\n\n_outputs = hello_world(**_parsed_args)\n" + ], + "image": "python:3.7" + } + } + } + }, + "pipelineInfo": { + "name": "component-used-twice" + }, + "root": { + "dag": { + "tasks": { + "hello-world": { + "cachingOptions": { + "enableCache": true + }, + "componentRef": { + "name": "comp-hello-world" + }, + "inputs": { + "parameters": { + "text": { + "componentInputParameter": "text" + } + } + }, + "taskInfo": { + "name": "hello-world" + } + }, + "hello-world-2": { + "cachingOptions": { + "enableCache": true + }, + "componentRef": { + "name": "comp-hello-world" + }, + "inputs": { + "parameters": { + "text": { + "componentInputParameter": "text" + } + } + }, + "taskInfo": { + "name": "hello-world-2" + } + } + } + }, + "inputDefinitions": { + "parameters": { + "text": { + "type": "STRING" + } + } + } + }, + "schemaVersion": "2.0.0", + "sdkVersion": "kfp-1.6.5" + }, + "runtimeConfig": { + "parameters": { + "text": { + "stringValue": "hi there" + } + } + } +} diff --git a/samples/test/fail_test.py b/v2/compiler/testdata/component_used_twice.py similarity index 61% rename from samples/test/fail_test.py rename to v2/compiler/testdata/component_used_twice.py index a2c9f308b8..f4da013630 100644 --- a/samples/test/fail_test.py +++ b/v2/compiler/testdata/component_used_twice.py @@ -1,4 +1,4 @@ -# Copyright 2021 Google LLC +# Copyright 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -11,15 +11,18 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -"""Fail pipeline.""" -from .fail import fail_pipeline -from .util import run_pipeline_func, TestCase +from kfp.v2 import dsl +from kfp.v2 import components -def verify(run, run_id: str): - assert run.status == 'Failed' - # TODO(Bobgy): verify MLMD status +@components.create_component_from_func +def hello_world(text: str): + print(text) + return text -run_pipeline_func([TestCase(pipeline_func=fail_pipeline, verify_func=verify)]) +@dsl.pipeline(name='component-used-twice') +def pipeline_component_used_twice(text: str = 'hi there'): + task1 = hello_world(text) + task2 = hello_world(text) diff --git a/v2/compiler/testdata/hello_world.json b/v2/compiler/testdata/hello_world.json new file mode 100644 index 0000000000..99a9de6ab2 --- /dev/null +++ b/v2/compiler/testdata/hello_world.json @@ -0,0 +1,78 @@ +{ + "pipelineSpec": { + "components": { + "comp-hello-world": { + "executorLabel": "exec-hello-world", + "inputDefinitions": { + "parameters": { + "text": { + "type": "STRING" + } + } + } + } + }, + "deploymentSpec": { + "executors": { + "exec-hello-world": { + "container": { + "args": [ + "--text", + "{{$.inputs.parameters['text']}}" + ], + "command": [ + "sh", + "-ec", + "program_path=$(mktemp)\nprintf \"%s\" \"$0\" > \"$program_path\"\npython3 -u \"$program_path\" \"$@\"\n", + "def hello_world(text):\n print(text)\n return text\n\nimport argparse\n_parser = argparse.ArgumentParser(prog='Hello world', description='')\n_parser.add_argument(\"--text\", dest=\"text\", type=str, required=True, default=argparse.SUPPRESS)\n_parsed_args = vars(_parser.parse_args())\n\n_outputs = hello_world(**_parsed_args)\n" + ], + "image": "python:3.7" + } + } + } + }, + "pipelineInfo": { + "name": "hello-world" + }, + "root": { + "dag": { + "tasks": { + "hello-world": { + "cachingOptions": { + "enableCache": true + }, + "componentRef": { + "name": "comp-hello-world" + }, + "inputs": { + "parameters": { + "text": { + "componentInputParameter": "text" + } + } + }, + "taskInfo": { + "name": "hello-world" + } + } + } + }, + "inputDefinitions": { + "parameters": { + "text": { + "type": "STRING" + } + } + } + }, + "schemaVersion": "2.0.0", + "sdkVersion": "kfp-1.6.5" + }, + "runtimeConfig": { + "parameters": { + "text": { + "stringValue": "hi there" + } + } + } +} \ No newline at end of file diff --git a/v2/compiler/testdata/producer_consumer_param.json b/v2/compiler/testdata/producer_consumer_param.json new file mode 100644 index 0000000000..e774ceb7b3 --- /dev/null +++ b/v2/compiler/testdata/producer_consumer_param.json @@ -0,0 +1,127 @@ +{ + "pipelineSpec": { + "components": { + "comp-consumer": { + "executorLabel": "exec-consumer", + "inputDefinitions": { + "parameters": { + "input_value": { + "type": "STRING" + } + } + } + }, + "comp-producer": { + "executorLabel": "exec-producer", + "inputDefinitions": { + "parameters": { + "input_text": { + "type": "STRING" + } + } + }, + "outputDefinitions": { + "parameters": { + "output_value": { + "type": "STRING" + } + } + } + } + }, + "deploymentSpec": { + "executors": { + "exec-consumer": { + "container": { + "command": [ + "sh", + "-c", + "set -e -x\necho \"Read from an input parameter: \" && echo \"$0\"\n", + "{{$.inputs.parameters['input_value']}}" + ], + "image": "google/cloud-sdk:latest" + } + }, + "exec-producer": { + "container": { + "command": [ + "sh", + "-c", + "set -e -x\necho \"$0, this is an output parameter\" | gsutil cp - \"$1\"\n", + "{{$.inputs.parameters['input_text']}}", + "{{$.outputs.parameters['output_value'].output_file}}" + ], + "image": "google/cloud-sdk:latest" + } + } + } + }, + "pipelineInfo": { + "name": "producer-consumer-param-pipeline" + }, + "root": { + "dag": { + "tasks": { + "consumer": { + "cachingOptions": { + "enableCache": true + }, + "componentRef": { + "name": "comp-consumer" + }, + "dependentTasks": [ + "producer" + ], + "inputs": { + "parameters": { + "input_value": { + "taskOutputParameter": { + "outputParameterKey": "output_value", + "producerTask": "producer" + } + } + } + }, + "taskInfo": { + "name": "consumer" + } + }, + "producer": { + "cachingOptions": { + "enableCache": true + }, + "componentRef": { + "name": "comp-producer" + }, + "inputs": { + "parameters": { + "input_text": { + "componentInputParameter": "text" + } + } + }, + "taskInfo": { + "name": "producer" + } + } + } + }, + "inputDefinitions": { + "parameters": { + "text": { + "type": "STRING" + } + } + } + }, + "schemaVersion": "2.0.0", + "sdkVersion": "kfp-1.6.5" + }, + "runtimeConfig": { + "parameters": { + "text": { + "stringValue": "Hello world" + } + } + } +} \ No newline at end of file diff --git a/v2/compiler/visitor.go b/v2/compiler/visitor.go new file mode 100644 index 0000000000..f78e0a48bd --- /dev/null +++ b/v2/compiler/visitor.go @@ -0,0 +1,162 @@ +// Package compiler is the backend compiler package for Kubeflow Pipelines v2. +// +// KFP pipeline DSL in python are first compiled by KFP SDK (the frontend compiler) +// to pipeline spec in JSON format. KFP SDK / frontend compiler is not part of +// this package. +// Then, the backend compiler (this package) compiles pipeline spec into argo +// workflow spec, so that it can be run. +package compiler + +import ( + "bytes" + "fmt" + "sort" + + "github.com/golang/protobuf/jsonpb" + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" +) + +// Visitor interface is called when each component is visited. +// The specific method called depends on the component's type. +type Visitor interface { + Container(name string, component *pipelinespec.ComponentSpec, container *pipelinespec.PipelineDeploymentConfig_PipelineContainerSpec) error + Importer(name string, component *pipelinespec.ComponentSpec, importer *pipelinespec.PipelineDeploymentConfig_ImporterSpec) error + Resolver(name string, component *pipelinespec.ComponentSpec, resolver *pipelinespec.PipelineDeploymentConfig_ResolverSpec) error + DAG(name string, component *pipelinespec.ComponentSpec, dag *pipelinespec.DagSpec) error +} + +const ( + rootComponentName = "root" +) + +// Accept a pipeline spec and a visitor, iterate through components and call +// corresponding visitor methods for each component. +// +// Iteration rules: +// * Components are visited in "bottom-up" order -- leaf container components are +// visited first, then DAG components. When a DAG component is visited, it's +// guaranteed that all the components used in it have already been visited. +// * Each component is visited exactly once. +func Accept(job *pipelinespec.PipelineJob, v Visitor) error { + if job == nil { + return nil + } + // TODO(Bobgy): reserve root as a keyword that cannot be user component names + spec, err := getPipelineSpec(job) + if err != nil { + return err + } + deploy, err := getDeploymentConfig(spec) + if err != nil { + return err + } + state := &pipelineDFS{ + spec: spec, + deploy: deploy, + visitor: v, + visited: make(map[string]bool), + } + return state.dfs(rootComponentName, spec.GetRoot()) +} + +type pipelineDFS struct { + spec *pipelinespec.PipelineSpec + deploy *pipelinespec.PipelineDeploymentConfig + visitor Visitor + // Records which DAG components are visited, map key is component name. + visited map[string]bool +} + +func (state *pipelineDFS) dfs(name string, component *pipelinespec.ComponentSpec) error { + // each component is only visited once + // TODO(Bobgy): return an error when circular reference detected + if state.visited[name] { + return nil + } + state.visited[name] = true + if component == nil { + return nil + } + if state == nil { + return fmt.Errorf("dfs: unexpected value state=nil") + } + componentError := func(err error) error { + return fmt.Errorf("error processing component name=%q: %w", name, err) + } + executorLabel := component.GetExecutorLabel() + if executorLabel != "" { + executor, ok := state.deploy.GetExecutors()[executorLabel] + if !ok { + return componentError(fmt.Errorf("executor(label=%q) not found in deployment config", executorLabel)) + } + container := executor.GetContainer() + if container == nil { + return componentError(fmt.Errorf("executor(label=%q): non-container executor not implemented", executorLabel)) + } + return state.visitor.Container(name, component, container) + } + dag := component.GetDag() + if dag == nil { // impl can only be executor or dag + return componentError(fmt.Errorf("unknown component implementation: %s", component)) + } + tasks := dag.GetTasks() + // Iterate through tasks in deterministic order to facilitate testing. + // Note, order doesn't affect compiler with real effect right now. + // In the future, we may consider using topology sort when building local + // executor that runs on pipeline spec directly. + keys := make([]string, 0, len(tasks)) + for key := range tasks { + keys = append(keys, key) + } + sort.Strings(keys) + for _, key := range keys { + task, ok := tasks[key] + if !ok { + return componentError(fmt.Errorf("this is a bug: cannot find key %q in tasks", key)) + } + refName := task.GetComponentRef().GetName() + if refName == "" { + return componentError(fmt.Errorf("component ref name is empty for task name=%q", task.GetTaskInfo().GetName())) + } + subComponent, ok := state.spec.Components[refName] + if !ok { + return componentError(fmt.Errorf("cannot find component ref name=%q", refName)) + } + err := state.dfs(refName, subComponent) + if err != nil { + return err + } + } + // process tasks before DAG component, so that all sub-tasks are already + // ready by the time the DAG component is visited. + return state.visitor.DAG(name, component, dag) +} + +func getDeploymentConfig(spec *pipelinespec.PipelineSpec) (*pipelinespec.PipelineDeploymentConfig, error) { + marshaler := jsonpb.Marshaler{} + buffer := new(bytes.Buffer) + if err := marshaler.Marshal(buffer, spec.GetDeploymentSpec()); err != nil { + return nil, err + } + deploymentConfig := &pipelinespec.PipelineDeploymentConfig{} + // Allow unknown '@type' field in the json message. + unmarshaler := jsonpb.Unmarshaler{AllowUnknownFields: true} + if err := unmarshaler.Unmarshal(buffer, deploymentConfig); err != nil { + return nil, err + } + return deploymentConfig, nil +} + +func getPipelineSpec(job *pipelinespec.PipelineJob) (*pipelinespec.PipelineSpec, error) { + // TODO(Bobgy): can we avoid this marshal to string step? + marshaler := jsonpb.Marshaler{} + json, err := marshaler.MarshalToString(job.GetPipelineSpec()) + if err != nil { + return nil, fmt.Errorf("Failed marshal pipeline spec to json: %w", err) + } + spec := &pipelinespec.PipelineSpec{} + if err := jsonpb.UnmarshalString(json, spec); err != nil { + return nil, fmt.Errorf("Failed to parse pipeline spec: %v", err) + } + return spec, nil +} diff --git a/v2/compiler/visitor_test.go b/v2/compiler/visitor_test.go new file mode 100644 index 0000000000..4739ae0578 --- /dev/null +++ b/v2/compiler/visitor_test.go @@ -0,0 +1,82 @@ +package compiler_test + +import ( + "fmt" + "io/ioutil" + "testing" + + "github.com/golang/protobuf/jsonpb" + "github.com/google/go-cmp/cmp" + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + "github.com/kubeflow/pipelines/v2/compiler" +) + +type testVisitor struct { + visited []string +} + +func (v *testVisitor) Container(name string, component *pipelinespec.ComponentSpec, executor *pipelinespec.PipelineDeploymentConfig_PipelineContainerSpec) error { + v.visited = append(v.visited, fmt.Sprintf("container(name=%q)", name)) + return nil +} +func (v *testVisitor) Importer(name string, component *pipelinespec.ComponentSpec, importer *pipelinespec.PipelineDeploymentConfig_ImporterSpec) error { + v.visited = append(v.visited, fmt.Sprintf("importer(name=%q)", name)) + return nil +} +func (v *testVisitor) Resolver(name string, component *pipelinespec.ComponentSpec, resolver *pipelinespec.PipelineDeploymentConfig_ResolverSpec) error { + v.visited = append(v.visited, fmt.Sprintf("resolver(name=%q)", name)) + return nil +} +func (v *testVisitor) DAG(name string, component *pipelinespec.ComponentSpec, dag *pipelinespec.DagSpec) error { + v.visited = append(v.visited, fmt.Sprintf("DAG(name=%q)", name)) + return nil +} + +func Test_AcceptTestVisitor(t *testing.T) { + tests := []struct { + specPath string + expected []string + }{ + { + specPath: "testdata/hello_world.json", + expected: []string{`container(name="comp-hello-world")`, `DAG(name="root")`}, + }, + { + specPath: "testdata/producer_consumer_param.json", + expected: []string{`container(name="comp-consumer")`, `container(name="comp-producer")`, `DAG(name="root")`}, + }, + { + // Component comp-hello-world used twice, but it should only be visited once. + specPath: "testdata/component_used_twice.json", + expected: []string{`container(name="comp-hello-world")`, `DAG(name="root")`}, + }, + } + + for _, tt := range tests { + t.Run(fmt.Sprintf("%q", tt.specPath), func(t *testing.T) { + job := load(t, tt.specPath) + v := &testVisitor{visited: make([]string, 0)} + err := compiler.Accept(job, v) + if err != nil { + t.Fatal(err) + } + if !cmp.Equal(v.visited, tt.expected) { + t.Errorf(" got: %v\nexpect: %v", v.visited, tt.expected) + } + }) + } +} + +func load(t *testing.T, path string) *pipelinespec.PipelineJob { + t.Helper() + content, err := ioutil.ReadFile(path) + if err != nil { + t.Error(err) + } + json := string(content) + job := &pipelinespec.PipelineJob{} + if err := jsonpb.UnmarshalString(json, job); err != nil { + t.Errorf("Failed to parse pipeline job, error: %s, job: %v", err, json) + } + return job +} diff --git a/v2/component/launcher.go b/v2/component/launcher.go index 4dc73d1039..3088e7a62c 100644 --- a/v2/component/launcher.go +++ b/v2/component/launcher.go @@ -1,4 +1,4 @@ -// Copyright 2021 Google LLC +// Copyright 2021 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,23 +18,32 @@ package component import ( "context" + "errors" + "flag" "fmt" - "io" "io/ioutil" "os" "os/exec" "path" - "regexp" + "path/filepath" "strconv" "strings" + "time" "github.com/golang/glog" + "github.com/golang/protobuf/ptypes/timestamp" + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + "github.com/kubeflow/pipelines/v2/cacheutils" + "github.com/kubeflow/pipelines/v2/config" + api "github.com/kubeflow/pipelines/v2/kfp-api" "github.com/kubeflow/pipelines/v2/metadata" + "github.com/kubeflow/pipelines/v2/objectstore" pb "github.com/kubeflow/pipelines/v2/third_party/ml_metadata" - "google.golang.org/protobuf/encoding/protojson" - "gocloud.dev/blob" _ "gocloud.dev/blob/gcsblob" + "google.golang.org/protobuf/encoding/protojson" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" ) // Launcher is used to launch KFP components. It handles the recording of the @@ -44,93 +53,49 @@ type Launcher struct { runtimeInfo *runtimeInfo placeholderReplacements map[string]string metadataClient *metadata.Client - bucketConfig *bucketConfig + cacheClient *cacheutils.Client + bucketConfig *objectstore.Config + k8sClient *kubernetes.Clientset + cmdArgs []string } // LauncherOptions are options used when creating Launcher. type LauncherOptions struct { PipelineName string PipelineRoot string - PipelineRunID string - PipelineTaskID string + RunID string + RunResource string + Namespace string + PodName string + PodUID string TaskName string - ContainerImage string + Image string MLMDServerAddress string MLMDServerPort string -} - -type bucketConfig struct { - scheme string - bucketName string - prefix string -} - -func (b *bucketConfig) bucketURL() string { - u := b.scheme + b.bucketName - - if len(b.prefix) > 0 { - u = fmt.Sprintf("%s?prefix=%s", u, b.prefix) - } - return u -} - -func (b *bucketConfig) keyFromURI(uri string) (string, error) { - prefixedBucket := b.scheme + path.Join(b.bucketName, b.prefix) - if !strings.HasPrefix(uri, prefixedBucket) { - return "", fmt.Errorf("URI %q does not have expected bucket prefix %q", uri, prefixedBucket) - } - - key := strings.TrimLeft(strings.TrimPrefix(uri, prefixedBucket), "/") - if len(key) == 0 { - return "", fmt.Errorf("URI %q has empty key given prefixed bucket %q", uri, prefixedBucket) - } - return key, nil -} - -func (b *bucketConfig) uriFromKey(blobKey string) string { - return b.scheme + path.Join(b.bucketName, b.prefix, blobKey) -} - -var bucketPattern = regexp.MustCompile(`^([a-z][a-z0-9]+:///?)([^/]+)(/[^ ?]*)?$`) - -func parseBucketConfig(path string) (*bucketConfig, error) { - ms := bucketPattern.FindStringSubmatch(path) - if ms == nil || len(ms) != 4 { - return nil, fmt.Errorf("Unrecognized pipeline root format: %q", path) - } - - // TODO: Verify/add support for s3:// and file:///. - if ms[1] != "gs://" { - return nil, fmt.Errorf("Unsupported Cloud bucket: %q", path) - } - - prefix := strings.TrimPrefix(ms[3], "/") - if len(prefix) > 0 && !strings.HasSuffix(prefix, "/") { - prefix = prefix + "/" - } - - return &bucketConfig{ - scheme: ms[1], - bucketName: ms[2], - prefix: prefix, - }, nil + EnableCaching bool } func (o *LauncherOptions) validate() error { empty := func(s string) bool { return len(s) == 0 } - err := func(s string) error { return fmt.Errorf("Must specify %s", s) } + err := func(s string) error { return fmt.Errorf("Invalid launcher options: must specify %s", s) } if empty(o.PipelineName) { return err("PipelineName") } - if empty(o.PipelineRunID) { - return err("PipelineRunID") + if empty(o.RunID) { + return err("RunID") + } + if empty(o.RunResource) { + return err("RunResource") + } + if empty(o.Namespace) { + return err("Namespace") } - if empty(o.PipelineTaskID) { - return err("PipelineTaskID") + if empty(o.PodName) { + return err("PodName") } - if empty(o.PipelineRoot) { - return err("PipelineRoot") + if empty(o.PodUID) { + return err("PodUID") } if empty(o.TaskName) { return err("TaskName") @@ -141,303 +106,749 @@ func (o *LauncherOptions) validate() error { if empty(o.MLMDServerPort) { return err("MLMDServerPort") } + if strings.HasPrefix(o.PipelineName, "namespace/") { + s := strings.SplitN(o.PipelineName, "/", 4) + if len(s) != 4 { + return fmt.Errorf("invalid PipelineName options for namespaced pipelines, need to follow 'namespace/${namespace}/pipeline/${pipelineName}': %s", o.PipelineName) + } + namespace := s[1] + if namespace != o.Namespace { + return fmt.Errorf("the namespace %s extracted from pipelineName is not equal to the namespace %s in launcher options", namespace, o.Namespace) + } + } return nil } +const outputMetadataFilepath = "/tmp/kfp_outputs/output_metadata.json" + // NewLauncher creates a new launcher object using the JSON-encoded runtimeInfo // and specified options. -func NewLauncher(runtimeInfo string, options *LauncherOptions) (*Launcher, error) { +func NewLauncher(ctx context.Context, runtimeInfo string, options *LauncherOptions) (*Launcher, error) { + restConfig, err := rest.InClusterConfig() + if err != nil { + return nil, fmt.Errorf("Failed to initialize kubernetes client: %w", err) + } + k8sClient, err := kubernetes.NewForConfig(restConfig) + if err != nil { + return nil, fmt.Errorf("Failed to initialize kubernetes client set: %w", err) + } if err := options.validate(); err != nil { return nil, err } - bc, err := parseBucketConfig(options.PipelineRoot) - if err != nil { - return nil, err + if len(options.PipelineRoot) == 0 { + cfg, err := config.FromConfigMap(ctx, k8sClient, options.Namespace) + if err != nil { + return nil, err + } + options.PipelineRoot = cfg.DefaultPipelineRoot() + glog.Infof("PipelineRoot defaults to %q.", options.PipelineRoot) } rt, err := parseRuntimeInfo(runtimeInfo) if err != nil { return nil, err } - - // Placeholder replacements. - pr := make(map[string]string) + cmdArgs, err := parseArgs(flag.Args(), rt) + if err != nil { + return nil, err + } metadataClient, err := metadata.NewClient(options.MLMDServerAddress, options.MLMDServerPort) if err != nil { return nil, err } + cacheClient, err := cacheutils.NewClient() + if err != nil { + return nil, err + } + return &Launcher{ - options: options, - placeholderReplacements: pr, - runtimeInfo: rt, - metadataClient: metadataClient, - bucketConfig: bc, + options: options, + runtimeInfo: rt, + metadataClient: metadataClient, + cacheClient: cacheClient, + k8sClient: k8sClient, + cmdArgs: cmdArgs, }, nil } -func (l *Launcher) prepareInputs(ctx context.Context) error { - bucket, err := blob.OpenBucket(context.Background(), l.bucketConfig.bucketURL()) +// RunComponent runs the current KFP component using the specified command and +// arguments. +func (l *Launcher) RunComponent(ctx context.Context) error { + pipeline, err := l.metadataClient.GetPipeline(ctx, l.options.PipelineName, l.options.RunID, l.options.Namespace, l.options.RunResource, l.options.PipelineRoot) if err != nil { - return fmt.Errorf("Failed to open bucket %q: %v", l.bucketConfig.bucketName, err) + return fmt.Errorf("unable to get pipeline with PipelineName %q PipelineRunID %q: %w", l.options.PipelineName, l.options.RunID, err) } - defer bucket.Close() - - // Read input artifact metadata. - for k, v := range l.runtimeInfo.InputArtifacts { - if len(v.FileInputPath) == 0 { - return fmt.Errorf("Missing input artifact metadata file for input: %q", k) - } - - b, err := ioutil.ReadFile(v.FileInputPath) - if err != nil { - return fmt.Errorf("Failed to read input artifact metadata file for %q: %v", k, err) - } + // l.generateOutputUri needs l.bucketConfig, so l.bucketConfig must be inited first + l.bucketConfig, err = objectstore.ParseBucketConfig(pipeline.GetPipelineRoot()) + if err != nil { + return err + } + executorInput, err := l.runtimeInfo.generateExecutorInput(l.generateOutputURI, outputMetadataFilepath) + if err != nil { + return fmt.Errorf("failure while generating ExecutorInput: %w", err) + } + if l.options.EnableCaching { + glog.Infof("enable caching") + return l.executeWithCacheEnabled(ctx, executorInput, pipeline) + } else { + return l.executeWithoutCacheEnabled(ctx, executorInput, pipeline) + } +} - a := &pb.Artifact{} - if err := protojson.Unmarshal(b, a); err != nil { - return fmt.Errorf("Failed to unmarshall input artifact metadata for %q: %v", k, err) - } +func (l *Launcher) executeWithoutCacheEnabled(ctx context.Context, executorInput *pipelinespec.ExecutorInput, pipeline *metadata.Pipeline) error { + cmd := l.cmdArgs[0] + args := make([]string, len(l.cmdArgs)-1) + _ = copy(args, l.cmdArgs[1:]) + ecfg, err := metadata.GenerateExecutionConfig(executorInput) + if err != nil { + return fmt.Errorf("failed to generate execution config: %w", err) + } + ecfg.Image = l.options.Image + ecfg.Namespace = l.options.Namespace + ecfg.PodName = l.options.PodName + ecfg.PodUID = l.options.PodUID + ecfg.TaskName = l.options.TaskName + execution, err := l.metadataClient.CreateExecution(ctx, pipeline, ecfg) + if err != nil { + return fmt.Errorf("unable to create execution: %w", err) + } + bucket, err := objectstore.OpenBucket(ctx, l.k8sClient, l.options.Namespace, l.bucketConfig) + if err != nil { + return err + } + defer bucket.Close() + executorOutput, err := execute(ctx, executorInput, cmd, args, bucket, l.bucketConfig) + if err != nil { + return err + } + return l.publish(ctx, executorInput, executorOutput, execution) +} - v.Artifact = a +func (l *Launcher) executeWithCacheEnabled(ctx context.Context, executorInput *pipelinespec.ExecutorInput, pipeline *metadata.Pipeline) error { + cmd := l.cmdArgs[0] + args := make([]string, len(l.cmdArgs)-1) + _ = copy(args, l.cmdArgs[1:]) + outputParametersTypeMap := make(map[string]string) + for outputParamName, outputParam := range l.runtimeInfo.OutputParameters { + outputParametersTypeMap[outputParamName] = outputParam.Type + } + cacheKey, err := cacheutils.GenerateCacheKey(executorInput.GetInputs(), executorInput.GetOutputs(), outputParametersTypeMap, l.cmdArgs, l.options.Image) + if err != nil { + return fmt.Errorf("failure while generating CacheKey: %w", err) + } + fingerPrint, err := cacheutils.GenerateFingerPrint(cacheKey) + cachedMLMDExecutionID, err := l.cacheClient.GetExecutionCache(fingerPrint, l.options.PipelineName, l.options.Namespace) + if err != nil { + return fmt.Errorf("failure while getting executionCache: %w", err) + } - // TODO(neuromage): Support `{{$}}` placeholder for components using ExecutorInput. - // TODO(neuromage): Support concat-based placholders for arguments. + ecfg, err := metadata.GenerateExecutionConfig(executorInput) + if err != nil { + return fmt.Errorf("failed to generate execution config: %w", err) + } + ecfg.Image = l.options.Image + ecfg.Namespace = l.options.Namespace + ecfg.PodName = l.options.PodName + ecfg.PodUID = l.options.PodUID + ecfg.TaskName = l.options.TaskName + ecfg.CachedMLMDExecutionID = cachedMLMDExecutionID + // TODO(capri-xiyue): what should cached execution's metadata look like? + execution, err := l.metadataClient.CreateExecution(ctx, pipeline, ecfg) + if err != nil { + return fmt.Errorf("unable to create execution: %w", err) + } + if cachedMLMDExecutionID == "" { + return l.executeWithoutCacheHit(ctx, executorInput, execution, cmd, fingerPrint, args) + } else { + return l.executeWithCacheHit(ctx, executorInput, execution, cachedMLMDExecutionID) + } +} - // Prepare input uri placeholder. - key := fmt.Sprintf(`{{$.inputs.artifacts['%s'].uri}}`, k) - l.placeholderReplacements[key] = v.Artifact.GetUri() +func (l *Launcher) executeWithCacheHit(ctx context.Context, executorInput *pipelinespec.ExecutorInput, createdExecution *metadata.Execution, cachedMLMDExecutionID string) error { + if err := prepareOutputFolders(executorInput); err != nil { + return err + } + cachedMLMDExecutionIDInt64, err := strconv.ParseInt(cachedMLMDExecutionID, 10, 64) + if err != nil { + return fmt.Errorf("failure while transfering cachedMLMDExecutionID %s from string to int64: %w", cachedMLMDExecutionID, err) + } + executions, err := l.metadataClient.GetExecutions(ctx, []int64{cachedMLMDExecutionIDInt64}) + if err != nil { + return fmt.Errorf("failure while getting execution of cachedMLMDExecutionID %v: %w", cachedMLMDExecutionIDInt64, err) + } + if len(executions) == 0 { + return fmt.Errorf("the execution with id %s does not exist in MLMD", cachedMLMDExecutionID) + } + if len(executions) > 1 { + return fmt.Errorf("got multiple executions with id %s in MLMD", cachedMLMDExecutionID) + } + cachedExecution := executions[0] - // Prepare input path placeholder. - v.LocalArtifactFilePath = path.Join("/tmp/kfp_launcher_inputs", k, "data") - key = fmt.Sprintf(`{{$.inputs.artifacts['%s'].path}}`, k) - l.placeholderReplacements[key] = v.LocalArtifactFilePath + outputParameters, err := l.storeOutputParameterValueFromCache(cachedExecution) + if err != nil { + return fmt.Errorf("failed to store output parameter value from cache: %w", err) + } + outputArtifacts, err := l.storeOutputArtifactMetadataFromCache(ctx, executorInput.GetOutputs(), cachedMLMDExecutionIDInt64) + if err != nil { + return fmt.Errorf("failed to store output artifact metadata from cache: %w", err) + } - // Copy artifact to local storage. - // TODO: Selectively copy artifacts for which .path was actually specified - // on the command line. + if err := l.metadataClient.PublishExecution(ctx, createdExecution, outputParameters, outputArtifacts, pb.Execution_CACHED); err != nil { + return fmt.Errorf("unable to publish execution: %w", err) + } + glog.Infof("Cached") + return nil +} - blobKey, err := l.bucketConfig.keyFromURI(v.Artifact.GetUri()) - if err != nil { - return err - } - r, err := bucket.NewReader(ctx, blobKey, nil) - if err != nil { - return err - } - defer r.Close() +func (l *Launcher) storeOutputParameterValueFromCache(cachedExecution *pb.Execution) (*metadata.Parameters, error) { + mlmdOutputParameters, err := cacheutils.GetMLMDOutputParams(cachedExecution) + if err != nil { + return nil, err + } + // Read output parameters. + outputParameters := &metadata.Parameters{ + IntParameters: make(map[string]int64), + StringParameters: make(map[string]string), + DoubleParameters: make(map[string]float64), + } - if err := os.MkdirAll(path.Dir(v.LocalArtifactFilePath), 0644); err != nil { - return err + for name, param := range l.runtimeInfo.OutputParameters { + filename := param.Path + outputParamValue, ok := mlmdOutputParameters[name] + if !ok { + return nil, fmt.Errorf("can't find parameter %v in mlmdOutputParameters", name) } - w, err := os.Create(v.LocalArtifactFilePath) - if err != nil { - return err + if err := ioutil.WriteFile(filename, []byte(outputParamValue), 0644); err != nil { + return nil, fmt.Errorf("failed to write output parameter %q to file %q: %w", name, filename, err) } - if _, err := io.Copy(w, r); err != nil { - return err + switch param.Type { + case "STRING": + outputParameters.StringParameters[name] = outputParamValue + case "INT": + i, err := strconv.ParseInt(strings.TrimSpace(outputParamValue), 10, 0) + if err != nil { + return nil, fmt.Errorf("failed to parse parameter name=%q value =%v to int: %w", name, outputParamValue, err) + } + outputParameters.IntParameters[name] = i + case "DOUBLE": + f, err := strconv.ParseFloat(strings.TrimSpace(outputParamValue), 0) + if err != nil { + return nil, fmt.Errorf("failed to parse parameter name=%q value =%v to double: %w", name, outputParamValue, err) + } + outputParameters.DoubleParameters[name] = f + default: + return nil, fmt.Errorf("unknown type. Expected STRING, INT or DOUBLE") } } - - // Prepare input parameter placeholders. - for k, v := range l.runtimeInfo.InputParameters { - key := fmt.Sprintf(`{{$.inputs.parameters['%s']}}`, k) - l.placeholderReplacements[key] = v.ParameterValue - } - - return nil + return outputParameters, nil } -func (l *Launcher) prepareOutputs(ctx context.Context) error { - for k, v := range l.runtimeInfo.OutputParameters { - key := fmt.Sprintf(`{{$.outputs.parameters['%s'].output_file}}`, k) - l.placeholderReplacements[key] = v.FileOutputPath +func (l *Launcher) storeOutputArtifactMetadataFromCache(ctx context.Context, executorInputOutputs *pipelinespec.ExecutorInput_Outputs, cachedMLMDExecutionID int64) ([]*metadata.OutputArtifact, error) { + outputArtifacts, err := l.metadataClient.GetOutputArtifactsByExecutionId(ctx, cachedMLMDExecutionID) + if err != nil { + return nil, fmt.Errorf("failed to get MLMDOutputArtifactsByName by executionId %v: %w", cachedMLMDExecutionID, err) } - for k, v := range l.runtimeInfo.OutputArtifacts { - // TODO: sanitize k - v.LocalArtifactFilePath = path.Join("/tmp/kfp_launcher_outputs", k, "data") - - if err := os.MkdirAll(path.Dir(v.LocalArtifactFilePath), 0644); err != nil { - return err + // Register artifacts with MLMD. + registeredMLMDArtifacts := make([]*metadata.OutputArtifact, 0, len(l.runtimeInfo.OutputArtifacts)) + for name, artifact := range l.runtimeInfo.OutputArtifacts { + if !filepath.IsAbs(artifact.MetadataPath) { + return nil, fmt.Errorf("unexpected output artifact metadata file %q: must be absolute local path", artifact.MetadataPath) + } + runTimeArtifactList, ok := executorInputOutputs.Artifacts[name] + if !ok { + return nil, fmt.Errorf("unable to find output artifact %v in ExecutorInput.Outputs", name) + } + if len(runTimeArtifactList.Artifacts) == 0 { + continue + } + runtimeArtifact := runTimeArtifactList.Artifacts[0] + outputArtifact, ok := outputArtifacts[runtimeArtifact.GetName()] + if !ok { + return nil, fmt.Errorf("unable to find artifact with name %v in mlmd output artifacts", runtimeArtifact.GetName()) + } + outputArtifact.Schema = runtimeArtifact.GetType().GetInstanceSchema() + if err := os.MkdirAll(path.Dir(artifact.MetadataPath), 0644); err != nil { + return nil, fmt.Errorf("unable to make local directory %v for outputArtifact %v: %w", artifact.MetadataPath, name, err) } - blobKey := path.Join(l.options.PipelineName, l.options.PipelineRunID, l.options.PipelineTaskID, "data") - v.URIOutputPath = l.bucketConfig.uriFromKey(blobKey) - - key := fmt.Sprintf(`{{$.outputs.artifacts['%s'].path}}`, k) - l.placeholderReplacements[key] = v.LocalArtifactFilePath + b, err := outputArtifact.Marshal() + if err != nil { + return nil, err + } - key = fmt.Sprintf(`{{$.outputs.artifacts['%s'].uri}}`, k) - l.placeholderReplacements[key] = v.URIOutputPath + if err := ioutil.WriteFile(artifact.MetadataPath, b, 0644); err != nil { + return nil, err + } + registeredMLMDArtifacts = append(registeredMLMDArtifacts, outputArtifact) } - - return nil + return registeredMLMDArtifacts, nil } -// RunComponent runs the current KFP component using the specified command and -// arguments. -func (l *Launcher) RunComponent(ctx context.Context, cmd string, args ...string) error { - - if err := l.prepareInputs(ctx); err != nil { +func (l *Launcher) executeWithoutCacheHit(ctx context.Context, executorInput *pipelinespec.ExecutorInput, createdExecution *metadata.Execution, cmd, fingerPrint string, args []string) error { + executedStartedTime := time.Now().Unix() + bucket, err := objectstore.OpenBucket(ctx, l.k8sClient, l.options.Namespace, l.bucketConfig) + if err != nil { return err } - - if err := l.prepareOutputs(ctx); err != nil { + defer bucket.Close() + executorOutput, err := execute(ctx, executorInput, cmd, args, bucket, l.bucketConfig) + if err != nil { return err } - - // Update command. - for i, v := range args { - if _, ok := l.placeholderReplacements[v]; ok { - args[i] = l.placeholderReplacements[v] - } - } - - // Record Execution in MLMD. - pipeline, err := l.metadataClient.GetPipeline(ctx, l.options.PipelineName, l.options.PipelineRunID) + err = l.publish(ctx, executorInput, executorOutput, createdExecution) if err != nil { return err } - - ecfg := &metadata.ExecutionConfig{ - InputParameters: &metadata.Parameters{ - IntParameters: make(map[string]int64), - StringParameters: make(map[string]string), - DoubleParameters: make(map[string]float64), - }, + id := createdExecution.GetID() + if id == 0 { + return fmt.Errorf("failed to get id from createdExecution") } - for _, ia := range l.runtimeInfo.InputArtifacts { - ecfg.InputArtifacts = append(ecfg.InputArtifacts, &metadata.InputArtifact{Artifact: ia.Artifact}) + task := &api.Task{ + PipelineName: l.options.PipelineName, + Namespace: l.options.Namespace, + RunId: l.options.RunID, + MlmdExecutionID: strconv.FormatInt(id, 10), + CreatedAt: ×tamp.Timestamp{Seconds: executedStartedTime}, + FinishedAt: ×tamp.Timestamp{Seconds: time.Now().Unix()}, + Fingerprint: fingerPrint, } + err = l.cacheClient.CreateExecutionCache(ctx, task) + if err != nil { + return fmt.Errorf("failed to create cache entry: %w", err) + } + return nil +} - for n, ip := range l.runtimeInfo.InputParameters { - switch ip.ParameterType { - case "STRING": - ecfg.InputParameters.StringParameters[n] = ip.ParameterValue - case "INT": - i, err := strconv.ParseInt(ip.ParameterValue, 10, 0) - if err != nil { - return err - } - ecfg.InputParameters.IntParameters[n] = i - case "DOUBLE": - f, err := strconv.ParseFloat(ip.ParameterValue, 0) - if err != nil { - return err - } - ecfg.InputParameters.DoubleParameters[n] = f - } +func execute(ctx context.Context, executorInput *pipelinespec.ExecutorInput, cmd string, args []string, bucket *blob.Bucket, bucketConfig *objectstore.Config) (*pipelinespec.ExecutorOutput, error) { + if err := downloadArtifacts(ctx, executorInput, bucket, bucketConfig); err != nil { + return nil, err + } + if err := prepareOutputFolders(executorInput); err != nil { + return nil, err } - execution, err := l.metadataClient.CreateExecution(ctx, pipeline, l.options.TaskName, l.options.PipelineTaskID, l.options.ContainerImage, ecfg) + // Fill in placeholders with runtime values. + placeholders, err := getPlaceholders(executorInput) if err != nil { - return err + return nil, err + } + for placeholder, replacement := range placeholders { + cmd = strings.ReplaceAll(cmd, placeholder, replacement) + } + for i := range args { + arg := args[i] + for placeholder, replacement := range placeholders { + arg = strings.ReplaceAll(arg, placeholder, replacement) + } + args[i] = arg } + // Run user program. executor := exec.Command(cmd, args...) - executor.Stdin = os.Stdin executor.Stdout = os.Stdout executor.Stderr = os.Stderr defer glog.Flush() if err := executor.Run(); err != nil { - return err + return nil, err } - bucket, err := blob.OpenBucket(context.Background(), l.bucketConfig.bucketURL()) + // Collect outputs from output metadata file. + return getExecutorOutputFile(executorInput.GetOutputs().GetOutputFile()) +} + +func (l *Launcher) publish(ctx context.Context, executorInput *pipelinespec.ExecutorInput, executorOutput *pipelinespec.ExecutorOutput, execution *metadata.Execution) error { + // Dump output parameters in user emitted ExecutorOutput file to local path, + // so that they can be collected as argo output parameters. + if err := l.dumpOutputParameters(executorOutput); err != nil { + return err + } + bucket, err := objectstore.OpenBucket(ctx, l.k8sClient, l.options.Namespace, l.bucketConfig) if err != nil { - return fmt.Errorf("Failed to open bucket %q: %v", l.bucketConfig.bucketName, err) + return err } defer bucket.Close() + outputArtifacts, err := uploadOutputArtifacts(ctx, executorInput, executorOutput, uploadOutputArtifactsOptions{ + bucketConfig: l.bucketConfig, + bucket: bucket, + metadataClient: l.metadataClient, + }) + if err != nil { + return err + } + err = l.dumpOutputArtifactsMetadata(outputArtifacts) + if err != nil { + return err + } + outputParameters, err := l.readOutputParameters() + if err != nil { + return err + } + if err := l.metadataClient.PublishExecution(ctx, execution, outputParameters, outputArtifacts, pb.Execution_COMPLETE); err != nil { + return fmt.Errorf("unable to publish createdExecution: %w", err) + } + return nil +} - // Register artifacts with MLMD. - outputArtifacts := make([]*metadata.OutputArtifact, 0, len(l.runtimeInfo.OutputArtifacts)) - for _, v := range l.runtimeInfo.OutputArtifacts { - var err error - // copy Artifacts out to remote storage. - blobKey, err := l.bucketConfig.keyFromURI(v.URIOutputPath) - if err != nil { - return err +func (l *Launcher) dumpOutputParameters(executorOutput *pipelinespec.ExecutorOutput) error { + for name, parameter := range executorOutput.Parameters { + wrap := func(err error) error { + return fmt.Errorf("failed to dump output parameter %q in executor output to disk: %w", name, err) + } + var value string + switch t := parameter.Value.(type) { + case *pipelinespec.Value_StringValue: + value = parameter.GetStringValue() + case *pipelinespec.Value_DoubleValue: + value = strconv.FormatFloat(parameter.GetDoubleValue(), 'f', -1, 64) + case *pipelinespec.Value_IntValue: + value = strconv.FormatInt(parameter.GetIntValue(), 10) + default: + return wrap(fmt.Errorf("unknown PipelineSpec Value type %T", t)) } - w, err := bucket.NewWriter(ctx, blobKey, nil) - if err != nil { - return err + outputParam, ok := l.runtimeInfo.OutputParameters[name] + if !ok { + return wrap(fmt.Errorf("parameter is not defined in component")) } + filename := outputParam.Path + if err := ioutil.WriteFile(filename, []byte(value), 0644); err != nil { + return wrap(fmt.Errorf("failed writing to file %q: %w", filename, err)) + } + } + return nil +} - r, err := os.Open(v.LocalArtifactFilePath) - if err != nil { - return err +type uploadOutputArtifactsOptions struct { + bucketConfig *objectstore.Config + bucket *blob.Bucket + metadataClient *metadata.Client +} + +func uploadOutputArtifacts(ctx context.Context, executorInput *pipelinespec.ExecutorInput, executorOutput *pipelinespec.ExecutorOutput, opts uploadOutputArtifactsOptions) ([]*metadata.OutputArtifact, error) { + // Register artifacts with MLMD. + outputArtifacts := make([]*metadata.OutputArtifact, 0, len(executorInput.GetOutputs().GetArtifacts())) + for name, artifactList := range executorInput.GetOutputs().GetArtifacts() { + if len(artifactList.Artifacts) == 0 { + continue } - defer r.Close() + // TODO: Support multiple artifacts someday, probably through the v2 engine. + outputArtifact := artifactList.Artifacts[0] - if _, err = io.Copy(w, r); err != nil { - return err + // Merge executor output artifact info with executor input + if list, ok := executorOutput.Artifacts[name]; ok && len(list.Artifacts) > 0 { + mergeRuntimeArtifacts(list.Artifacts[0], outputArtifact) } - if err = w.Close(); err != nil { - return err + // Upload artifacts from local path to remote storages. + localDir, err := localPathForURI(outputArtifact.Uri) + if err != nil { + glog.Warningf("Output Artifact %q does not have a recognized storage URI %q. Skipping uploading to remote storage.", name, outputArtifact.Uri) + } else { + blobKey, err := opts.bucketConfig.KeyFromURI(outputArtifact.Uri) + if err != nil { + return nil, fmt.Errorf("failed to upload output artifact %q: %w", name, err) + } + if err := objectstore.UploadBlob(ctx, opts.bucket, localDir, blobKey); err != nil { + // We allow components to not produce output files + if errors.Is(err, os.ErrNotExist) { + glog.Warningf("Local filepath %q does not exist", localDir) + } else { + return nil, fmt.Errorf("failed to upload output artifact %q to remote storage URI %q: %w", name, outputArtifact.Uri, err) + } + } } // Write out the metadata. - artifact := &pb.Artifact{ - Uri: &v.URIOutputPath, + metadataErr := func(err error) error { + return fmt.Errorf("unable to produce MLMD artifact for output %q: %w", name, err) } - // TODO(neuromage): Consider batching these instead of recording one by one. - artifact, err = l.metadataClient.RecordArtifact(ctx, v.ArtifactSchema, artifact) + schema, err := getRuntimeArtifactSchema(outputArtifact) if err != nil { - return err + return nil, fmt.Errorf("failed to determine schema for output %q: %w", name, err) } - outputArtifacts = append(outputArtifacts, &metadata.OutputArtifact{Artifact: artifact, Schema: v.ArtifactSchema}) - - if err := os.MkdirAll(path.Dir(v.FileOutputPath), 0644); err != nil { - return err + mlmdArtifact, err := opts.metadataClient.RecordArtifact(ctx, name, schema, outputArtifact, pb.Artifact_LIVE) + if err != nil { + return nil, metadataErr(err) } + outputArtifacts = append(outputArtifacts, mlmdArtifact) + } + return outputArtifacts, nil +} - b, err := protojson.Marshal(artifact) +func (l *Launcher) dumpOutputArtifactsMetadata(outputArtifacts []*metadata.OutputArtifact) error { + for _, oa := range outputArtifacts { + dumpError := func(err error) error { + return fmt.Errorf("failed to dump output artifact metadata for name=%q: %w", oa.Name, err) + } + rtoa, ok := l.runtimeInfo.OutputArtifacts[oa.Name] + if !filepath.IsAbs(rtoa.MetadataPath) { + return dumpError(fmt.Errorf("unexpected output artifact metadata file %q: must be absolute local path", rtoa.MetadataPath)) + } + if !ok { + return dumpError(errors.New("unable to find output artifact in RuntimeInfo")) + } + if err := os.MkdirAll(path.Dir(rtoa.MetadataPath), 0644); err != nil { + return dumpError(err) + } + b, err := oa.Marshal() if err != nil { - return err + return dumpError(err) } - - if err := ioutil.WriteFile(v.FileOutputPath, b, 0644); err != nil { - return err + if err := ioutil.WriteFile(rtoa.MetadataPath, b, 0644); err != nil { + return dumpError(err) } } + return nil +} - // Read output parameters. +func (l *Launcher) readOutputParameters() (*metadata.Parameters, error) { outputParameters := &metadata.Parameters{ IntParameters: make(map[string]int64), StringParameters: make(map[string]string), DoubleParameters: make(map[string]float64), } - for n, op := range l.runtimeInfo.OutputParameters { - b, err := ioutil.ReadFile(op.FileOutputPath) + msg := func(err error) error { + return fmt.Errorf("Failed to read output parameter name=%q type=%q path=%q: %w", n, op.Type, op.Path, err) + } + b, err := ioutil.ReadFile(op.Path) if err != nil { - return err + return nil, msg(err) } - switch op.ParameterType { + switch op.Type { case "STRING": outputParameters.StringParameters[n] = string(b) case "INT": - i, err := strconv.ParseInt(string(b), 10, 0) + i, err := strconv.ParseInt(strings.TrimSpace(string(b)), 10, 0) if err != nil { - return err + return nil, msg(err) } outputParameters.IntParameters[n] = i case "DOUBLE": - f, err := strconv.ParseFloat(string(b), 0) + f, err := strconv.ParseFloat(strings.TrimSpace(string(b)), 0) if err != nil { - return err + return nil, msg(err) } outputParameters.DoubleParameters[n] = f + default: + return nil, msg(fmt.Errorf("unknown type. Expected STRING, INT or DOUBLE")) + } + } + return outputParameters, nil +} + +func (l *Launcher) generateOutputURI(name string) string { + blobKey := path.Join(l.options.TaskName, name) + return l.bucketConfig.UriFromKey(blobKey) +} + +func localPathForURI(uri string) (string, error) { + if strings.HasPrefix(uri, "gs://") { + return "/gcs/" + strings.TrimPrefix(uri, "gs://"), nil + } + if strings.HasPrefix(uri, "minio://") { + return "/minio/" + strings.TrimPrefix(uri, "minio://"), nil + } + if strings.HasPrefix(uri, "s3://") { + return "/s3/" + strings.TrimPrefix(uri, "s3://"), nil + } + return "", fmt.Errorf("failed to generate local path for URI %s: unsupported storage scheme", uri) +} + +func downloadArtifacts(ctx context.Context, executorInput *pipelinespec.ExecutorInput, bucket *blob.Bucket, bucketConfig *objectstore.Config) error { + // Read input artifact metadata. + for name, artifactList := range executorInput.Inputs.Artifacts { + // TODO(neuromage): Support concat-based placholders for arguments. + if len(artifactList.Artifacts) == 0 { + continue + } + inputArtifact := artifactList.Artifacts[0] + localPath, err := localPathForURI(inputArtifact.Uri) + if err != nil { + glog.Warningf("Input Artifact %q does not have a recognized storage URI %q. Skipping downloading to local path.", name, inputArtifact.Uri) + continue + } + // Copy artifact to local storage. + copyErr := func(err error) error { + return fmt.Errorf("failed to download input artifact %q from remote storage URI %q: %w", name, inputArtifact.Uri, err) + } + // TODO: Selectively copy artifacts for which .path was actually specified + // on the command line. + blobKey, err := bucketConfig.KeyFromURI(inputArtifact.Uri) + if err != nil { + return copyErr(err) + } + if err := objectstore.DownloadBlob(ctx, bucket, localPath, blobKey); err != nil { + return copyErr(err) + } + } + return nil +} + +// Add executor input placeholders to provided map. +func getPlaceholders(executorInput *pipelinespec.ExecutorInput) (placeholders map[string]string, err error) { + defer func() { + if err != nil { + err = fmt.Errorf("failed to get placeholders: %w", err) + } + }() + placeholders = make(map[string]string) + executorInputJSON, err := protojson.Marshal(executorInput) + if err != nil { + return nil, fmt.Errorf("failed to convert ExecutorInput into JSON: %w", err) + } + placeholders["{{$}}"] = string(executorInputJSON) + + // Read input artifact metadata. + for name, artifactList := range executorInput.Inputs.Artifacts { + if len(artifactList.Artifacts) == 0 { + continue + } + inputArtifact := artifactList.Artifacts[0] + + // Prepare input uri placeholder. + key := fmt.Sprintf(`{{$.inputs.artifacts['%s'].uri}}`, name) + placeholders[key] = inputArtifact.Uri + + localPath, err := localPathForURI(inputArtifact.Uri) + if err != nil { + // Input Artifact does not have a recognized storage URI + continue + } + + // Prepare input path placeholder. + key = fmt.Sprintf(`{{$.inputs.artifacts['%s'].path}}`, name) + placeholders[key] = localPath + } + + // Prepare output artifact placeholders. + for name, artifactList := range executorInput.GetOutputs().GetArtifacts() { + if len(artifactList.Artifacts) == 0 { + continue + } + outputArtifact := artifactList.Artifacts[0] + placeholders[fmt.Sprintf(`{{$.outputs.artifacts['%s'].uri}}`, name)] = outputArtifact.Uri + + localPath, err := localPathForURI(outputArtifact.Uri) + if err != nil { + return nil, fmt.Errorf("resolve output artifact %q's local path: %w", name, err) } + placeholders[fmt.Sprintf(`{{$.outputs.artifacts['%s'].path}}`, name)] = localPath + } + + // Prepare input parameter placeholders. + for name, parameter := range executorInput.Inputs.Parameters { + key := fmt.Sprintf(`{{$.inputs.parameters['%s']}}`, name) + switch t := parameter.Value.(type) { + case *pipelinespec.Value_StringValue: + placeholders[key] = parameter.GetStringValue() + case *pipelinespec.Value_DoubleValue: + placeholders[key] = strconv.FormatFloat(parameter.GetDoubleValue(), 'f', -1, 64) + case *pipelinespec.Value_IntValue: + placeholders[key] = strconv.FormatInt(parameter.GetIntValue(), 10) + default: + return nil, fmt.Errorf("unknown PipelineSpec Value type %T", t) + } + } + + // Prepare output parameter placeholders. + for name, parameter := range executorInput.GetOutputs().GetParameters() { + key := fmt.Sprintf(`{{$.outputs.parameters['%s'].output_file}}`, name) + placeholders[key] = parameter.OutputFile + } + + return placeholders, nil +} + +func prepareOutputFolders(executorInput *pipelinespec.ExecutorInput) error { + for name, parameter := range executorInput.GetOutputs().GetParameters() { + dir := filepath.Dir(parameter.OutputFile) + if err := os.MkdirAll(dir, 0644); err != nil { + return fmt.Errorf("failed to create directory %q for output parameter %q: %w", dir, name, err) + } + } + + for name, artifactList := range executorInput.GetOutputs().GetArtifacts() { + if len(artifactList.Artifacts) == 0 { + continue + } + outputArtifact := artifactList.Artifacts[0] + + localPath, err := localPathForURI(outputArtifact.Uri) + if err != nil { + return fmt.Errorf("failed to generate local storage path for output artifact %q: %w", name, err) + } + + if err := os.MkdirAll(filepath.Dir(localPath), 0644); err != nil { + return fmt.Errorf("unable to create directory %q for output artifact %q: %w", filepath.Dir(localPath), name, err) + } + } + + return nil +} + +func getRuntimeArtifactSchema(rta *pipelinespec.RuntimeArtifact) (string, error) { + switch t := rta.Type.Kind.(type) { + case *pipelinespec.ArtifactTypeSchema_InstanceSchema: + return t.InstanceSchema, nil + case *pipelinespec.ArtifactTypeSchema_SchemaTitle: + return "title: " + t.SchemaTitle, nil + case *pipelinespec.ArtifactTypeSchema_SchemaUri: + return "", fmt.Errorf("SchemaUri is unsupported, found in RuntimeArtifact %+v", rta) + default: + return "", fmt.Errorf("unknown type %T in RuntimeArtifact %+v", t, rta) + } +} + +func mergeRuntimeArtifacts(src, dst *pipelinespec.RuntimeArtifact) { + if len(src.Uri) > 0 { + dst.Uri = src.Uri + } + + if src.Metadata != nil { + if dst.Metadata == nil { + dst.Metadata = src.Metadata + } else { + for k, v := range src.Metadata.Fields { + dst.Metadata.Fields[k] = v + } + } + } +} + +func getExecutorOutputFile(path string) (*pipelinespec.ExecutorOutput, error) { + // collect user executor output file + executorOutput := &pipelinespec.ExecutorOutput{ + Parameters: map[string]*pipelinespec.Value{}, + Artifacts: map[string]*pipelinespec.ArtifactList{}, + } + + _, err := os.Stat(path) + if err != nil { + if os.IsNotExist(err) { + glog.Infof("output metadata file does not exist in %s", path) + // If file doesn't exist, return an empty ExecutorOutput. + return executorOutput, nil + } else { + return nil, fmt.Errorf("failed to stat output metadata file %q: %w", path, err) + } + } + + b, err := ioutil.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("failed to read output metadata file %q: %w", path, err) + } + glog.Infof("ExecutorOutput: %s", prettyPrint(string(b))) + if err := protojson.Unmarshal(b, executorOutput); err != nil { + return nil, fmt.Errorf("failed to unmarshall ExecutorOutput in file %q: %w", path, err) } - return l.metadataClient.PublishExecution(ctx, execution, outputParameters, outputArtifacts) + return executorOutput, nil } diff --git a/v2/component/launcher_test.go b/v2/component/launcher_test.go deleted file mode 100644 index 17da631a97..0000000000 --- a/v2/component/launcher_test.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package component - -import ( - "reflect" - "testing" - - _ "gocloud.dev/blob/gcsblob" -) - -func Test_parseCloudBucket(t *testing.T) { - tests := []struct { - name string - path string - want *bucketConfig - wantErr bool - }{ - { - name: "Parses GCS - Just the bucket", - path: "gs://my-bucket", - want: &bucketConfig{ - scheme: "gs://", - bucketName: "my-bucket", - prefix: "", - }, - wantErr: false, - }, - { - name: "Parses GCS - Just the bucket with trailing slash", - path: "gs://my-bucket/", - want: &bucketConfig{ - scheme: "gs://", - bucketName: "my-bucket", - prefix: "", - }, - wantErr: false, - }, - { - name: "Parses GCS - Bucket with prefix", - path: "gs://my-bucket/my-path", - want: &bucketConfig{ - scheme: "gs://", - bucketName: "my-bucket", - prefix: "my-path/", - }, - wantErr: false, - }, - { - name: "Parses GCS - Bucket with prefix and trailing slash", - path: "gs://my-bucket/my-path/", - want: &bucketConfig{ - scheme: "gs://", - bucketName: "my-bucket", - prefix: "my-path/", - }, - wantErr: false, - }, - { - name: "Parses GCS - Bucket with multiple path components in prefix", - path: "gs://my-bucket/my-path/123", - want: &bucketConfig{ - scheme: "gs://", - bucketName: "my-bucket", - prefix: "my-path/123/", - }, - wantErr: false, - }, - { - name: "Parses GCS - Bucket with multiple path components in prefix and trailing slash", - path: "gs://my-bucket/my-path/123/", - want: &bucketConfig{ - scheme: "gs://", - bucketName: "my-bucket", - prefix: "my-path/123/", - }, - wantErr: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := parseBucketConfig(tt.path) - if (err != nil) != tt.wantErr { - t.Errorf("%q: parseCloudBucket() error = %v, wantErr %v", tt.name, err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("%q: parseCloudBucket() = %v, want %v", tt.name, got, tt.want) - } - }) - } -} - -func Test_bucketConfig_keyFromURI(t *testing.T) { - type fields struct { - scheme string - bucketName string - prefix string - } - - tests := []struct { - name string - bucketConfig *bucketConfig - uri string - want string - wantErr bool - }{ - { - name: "Bucket with empty prefix", - bucketConfig: &bucketConfig{scheme: "gs://", bucketName: "my-bucket", prefix: ""}, - uri: "gs://my-bucket/path1/path2", - want: "path1/path2", - wantErr: false, - }, - { - name: "Bucket with non-empty prefix ", - bucketConfig: &bucketConfig{scheme: "gs://", bucketName: "my-bucket", prefix: "path0/"}, - uri: "gs://my-bucket/path0/path1/path2", - want: "path1/path2", - wantErr: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := tt.bucketConfig.keyFromURI(tt.uri) - if (err != nil) != tt.wantErr { - t.Errorf("%q: buckerConfig.keyFromURI() error = %v, wantErr %v", tt.name, err, tt.wantErr) - return - } - if got != tt.want { - t.Errorf("bucketConfig.keyFromURI() = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/v2/component/launcher_v2.go b/v2/component/launcher_v2.go new file mode 100644 index 0000000000..93b799abd2 --- /dev/null +++ b/v2/component/launcher_v2.go @@ -0,0 +1,297 @@ +package component + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io/ioutil" + "strconv" + "strings" + + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + "github.com/kubeflow/pipelines/v2/metadata" + "github.com/kubeflow/pipelines/v2/objectstore" + pb "github.com/kubeflow/pipelines/v2/third_party/ml_metadata" + "gocloud.dev/blob" + "google.golang.org/protobuf/encoding/protojson" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" +) + +type LauncherV2Options struct { + Namespace, + PodName, + PodUID, + MLMDServerAddress, + MLMDServerPort string +} + +type LauncherV2 struct { + executionID int64 + executorInput *pipelinespec.ExecutorInput + component *pipelinespec.ComponentSpec + command string + args []string + options LauncherV2Options + + // clients + metadataClient *metadata.Client + k8sClient *kubernetes.Clientset +} + +func NewLauncherV2(ctx context.Context, executionID int64, executorInputJSON, componentSpecJSON string, cmdArgs []string, opts *LauncherV2Options) (l *LauncherV2, err error) { + defer func() { + if err != nil { + err = fmt.Errorf("failed to create component launcher v2: %w", err) + } + }() + if executionID == 0 { + return nil, fmt.Errorf("must specify execution ID") + } + executorInput := &pipelinespec.ExecutorInput{} + err = protojson.Unmarshal([]byte(executorInputJSON), executorInput) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal executor input: %w", err) + } + component := &pipelinespec.ComponentSpec{} + err = protojson.Unmarshal([]byte(componentSpecJSON), component) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal component spec: %w", err) + } + if len(cmdArgs) == 0 { + return nil, fmt.Errorf("command and arguments are empty") + } + err = opts.validate() + if err != nil { + return nil, err + } + restConfig, err := rest.InClusterConfig() + if err != nil { + return nil, fmt.Errorf("failed to initialize kubernetes client: %w", err) + } + k8sClient, err := kubernetes.NewForConfig(restConfig) + if err != nil { + return nil, fmt.Errorf("failed to initialize kubernetes client set: %w", err) + } + metadataClient, err := metadata.NewClient(opts.MLMDServerAddress, opts.MLMDServerPort) + if err != nil { + return nil, err + } + if err = addOutputs(executorInput, component.GetOutputDefinitions()); err != nil { + return nil, err + } + return &LauncherV2{ + executionID: executionID, + executorInput: executorInput, + component: component, + command: cmdArgs[0], + args: cmdArgs[1:], + options: *opts, + metadataClient: metadataClient, + k8sClient: k8sClient, + }, nil +} + +func (l *LauncherV2) Execute(ctx context.Context) (err error) { + defer func() { + if err != nil { + err = fmt.Errorf("failed to execute component: %w", err) + } + }() + execution, err := l.prePublish(ctx) + if err != nil { + return err + } + bucketConfig, err := objectstore.ParseBucketConfig(execution.GetPipeline().GetPipelineRoot()) + if err != nil { + return err + } + bucket, err := objectstore.OpenBucket(ctx, l.k8sClient, l.options.Namespace, bucketConfig) + if err != nil { + return err + } + if err = prepareOutputFolders(l.executorInput); err != nil { + return err + } + executorOutput, outputArtifacts, err := executeV2(ctx, l.executorInput, l.component, l.command, l.args, bucket, bucketConfig, l.metadataClient) + if err != nil { + return err + } + return l.publish(ctx, execution, executorOutput, outputArtifacts) +} + +func (l *LauncherV2) Info() string { + content, err := protojson.Marshal(l.executorInput) + if err != nil { + content = []byte("{}") + } + return strings.Join([]string{ + "launcher info:", + fmt.Sprintf("executorInput=%s\n", prettyPrint(string(content))), + }, "\n") +} + +func (o *LauncherV2Options) validate() error { + empty := func(s string) bool { return len(s) == 0 } + err := func(s string) error { return fmt.Errorf("invalid launcher options: must specify %s", s) } + + if empty(o.Namespace) { + return err("Namespace") + } + if empty(o.PodName) { + return err("PodName") + } + if empty(o.PodUID) { + return err("PodUID") + } + if empty(o.MLMDServerAddress) { + return err("MLMDServerAddress") + } + if empty(o.MLMDServerPort) { + return err("MLMDServerPort") + } + return nil +} + +// publish pod info to MLMD, before running user command +func (l *LauncherV2) prePublish(ctx context.Context) (execution *metadata.Execution, err error) { + defer func() { + if err != nil { + err = fmt.Errorf("failed to pre-publish Pod info to ML Metadata: %w", err) + } + }() + execution, err = l.metadataClient.GetExecution(ctx, l.executionID) + if err != nil { + return nil, err + } + ecfg := &metadata.ExecutionConfig{ + PodName: l.options.PodName, + PodUID: l.options.PodUID, + Namespace: l.options.Namespace, + } + return l.metadataClient.PrePublishExecution(ctx, execution, ecfg) +} + +// TODO(Bobgy): consider passing output artifacts info from executor output. +func (l *LauncherV2) publish(ctx context.Context, execution *metadata.Execution, executorOutput *pipelinespec.ExecutorOutput, outputArtifacts []*metadata.OutputArtifact) (err error) { + defer func() { + if err != nil { + err = fmt.Errorf("failed to publish results to ML Metadata: %w", err) + } + }() + outputParameters, err := metadata.NewParameters(executorOutput.GetParameters()) + if err != nil { + return err + } + // TODO(Bobgy): upload output artifacts. + // TODO(Bobgy): when adding artifacts, we will need execution.pipeline to be non-nil, because we need + // to publish output artifacts to the context too. + return l.metadataClient.PublishExecution(ctx, execution, outputParameters, outputArtifacts, pb.Execution_COMPLETE) +} + +// Add outputs info from component spec to executor input. +func addOutputs(executorInput *pipelinespec.ExecutorInput, outputs *pipelinespec.ComponentOutputsSpec) error { + if executorInput == nil { + return fmt.Errorf("cannot add outputs to nil executor input") + } + if executorInput.Outputs == nil { + executorInput.Outputs = &pipelinespec.ExecutorInput_Outputs{} + } + if executorInput.Outputs.Parameters == nil { + executorInput.Outputs.Parameters = make(map[string]*pipelinespec.ExecutorInput_OutputParameter) + } + if executorInput.Outputs.OutputFile == "" { + executorInput.Outputs.OutputFile = outputMetadataFilepath + } + for name := range outputs.GetParameters() { + executorInput.Outputs.Parameters[name] = &pipelinespec.ExecutorInput_OutputParameter{ + OutputFile: fmt.Sprintf("/tmp/kfp/outputs/%s", name), + } + } + // artifact outputs are added in driver + return nil +} + +func executeV2(ctx context.Context, executorInput *pipelinespec.ExecutorInput, component *pipelinespec.ComponentSpec, cmd string, args []string, bucket *blob.Bucket, bucketConfig *objectstore.Config, metadataClient *metadata.Client) (*pipelinespec.ExecutorOutput, []*metadata.OutputArtifact, error) { + executorOutput, err := execute(ctx, executorInput, cmd, args, bucket, bucketConfig) + if err != nil { + return nil, nil, err + } + // These are not added in execute(), because execute() is shared between v2 compatible and v2 engine launcher. + // In v2 compatible mode, we get output parameter info from runtimeInfo. In v2 engine, we get it from component spec. + // Because of the difference, we cannot put parameter collection logic in one method. + err = collectOutputParameters(executorInput, executorOutput, component) + if err != nil { + return nil, nil, err + } + // TODO(Bobgy): should we log metadata per each artifact, or batched after uploading all artifacts. + outputArtifacts, err := uploadOutputArtifacts(ctx, executorInput, executorOutput, uploadOutputArtifactsOptions{ + bucketConfig: bucketConfig, + bucket: bucket, + metadataClient: metadataClient, + }) + if err != nil { + return nil, nil, err + } + // TODO(Bobgy): only return executor output. Merge info in output artifacts + // to executor output. + return executorOutput, outputArtifacts, nil +} + +// collectOutputParameters collect output parameters from local disk and add them +// to executor output. +func collectOutputParameters(executorInput *pipelinespec.ExecutorInput, executorOutput *pipelinespec.ExecutorOutput, component *pipelinespec.ComponentSpec) error { + if executorOutput.Parameters == nil { + executorOutput.Parameters = make(map[string]*pipelinespec.Value) + } + outputParameters := executorOutput.GetParameters() + for name, param := range executorInput.GetOutputs().GetParameters() { + _, ok := outputParameters[name] + if ok { + // If the output parameter was already specified in output metadata file, + // we don't need to collect it from file, because output metadata file has + // the highest priority. + continue + } + paramSpec, ok := component.GetOutputDefinitions().GetParameters()[name] + if !ok { + return fmt.Errorf("failed to find output parameter name=%q in component spec", name) + } + msg := func(err error) error { + return fmt.Errorf("failed to read output parameter name=%q type=%q path=%q: %w", name, paramSpec.GetType(), param.GetOutputFile(), err) + } + b, err := ioutil.ReadFile(param.GetOutputFile()) + if err != nil { + return msg(err) + } + switch paramSpec.GetType() { + case pipelinespec.PrimitiveType_STRING: + outputParameters[name] = metadata.StringValue(string(b)) + case pipelinespec.PrimitiveType_INT: + i, err := strconv.ParseInt(strings.TrimSpace(string(b)), 10, 0) + if err != nil { + return msg(err) + } + outputParameters[name] = metadata.IntValue(i) + case pipelinespec.PrimitiveType_DOUBLE: + f, err := strconv.ParseFloat(strings.TrimSpace(string(b)), 0) + if err != nil { + return msg(err) + } + outputParameters[name] = metadata.DoubleValue(f) + default: + return msg(fmt.Errorf("unknown type. Expected STRING, INT or DOUBLE")) + } + } + return nil +} + +func prettyPrint(jsonStr string) string { + var prettyJSON bytes.Buffer + err := json.Indent(&prettyJSON, []byte(jsonStr), "", " ") + if err != nil { + return jsonStr + } + return string(prettyJSON.Bytes()) +} diff --git a/v2/component/runtime_info.go b/v2/component/runtime_info.go index 56a5c4192a..81826c8826 100644 --- a/v2/component/runtime_info.go +++ b/v2/component/runtime_info.go @@ -1,4 +1,4 @@ -// Copyright 2021 Google LLC +// Copyright 2021 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,50 +16,50 @@ package component import ( "encoding/json" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "strconv" + "strings" - pb "github.com/kubeflow/pipelines/v2/third_party/ml_metadata" + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + "github.com/kubeflow/pipelines/v2/metadata" + "google.golang.org/protobuf/types/known/structpb" ) type inputParameter struct { - ParameterType string - ParameterValue string + // Type should be one of "INT", "STRING" or "DOUBLE". + Type string + // File used to read input parameters. + Value string } type inputArtifact struct { - // Where to read MLMD artifact. File is passed using Argo artifacts. - // TODO(neuromage): Rename this to MetadataInputPath. - FileInputPath string + // Schema description of the input artifact. + InstanceSchema string + SchemaTitle string - // The MLMD artifact. - Artifact *pb.Artifact `json:"-"` - - // Generated by launcher. - // /tmp/launcher_component_inputs//data - // TODO(neuromage): Rename this to PayloadPath - LocalArtifactFilePath string `json:"-"` + // Where to read the input MLMD artifact metadata. This file is passed using + // Argo artifacts. + MetadataPath string } type outputParameter struct { - // ParameterType should be one of "INT", "STRING" or "DOUBLE". - ParameterType string - FileOutputPath string + // Type should be one of "INT", "STRING" or "DOUBLE". + Type string + // File used to write output parameters to. + Path string } type outputArtifact struct { - // TODO(neuromage): Rename this to just Schema. - ArtifactSchema string - // Where to write MLMD artifact. - // TODO(neuromage): Rename this to MetadataOutputPath. - FileOutputPath string - - // Generated by launcher. E.g. - // /tmp/launcher_component_outputs//data - // TODO(neuromage): Rename this to PayloadPath. - LocalArtifactFilePath string `json:"-"` - // Final location of file. E.g. - // ////data - // TODO(neuromage): Rename this to PayloadURI. - URIOutputPath string `json:"-"` + // Schema description of the output artifact. + InstanceSchema string + SchemaTitle string + + // Where to write the output MLMD artifact metadata. This file is passed using + // Argo artifacts. + MetadataPath string } // runtimeInfo represents JSON object present in all ML components compiled @@ -80,8 +80,166 @@ func parseRuntimeInfo(jsonEncoded string) (*runtimeInfo, error) { } if err := json.Unmarshal([]byte(jsonEncoded), r); err != nil { - return nil, err + // Do not quote jsonEncoded, because JSON format is hard to read if quoted. + return nil, fmt.Errorf("Invalid runtime info: %w.\n===RuntimeInfo===\n%s\n======", err, jsonEncoded) } return r, nil } + +// Parse launcher arguments with the following sections: +// 1. parameters in format "key1=value1", "key2=value2", ... +// 2. a separator "--" as end of parameters passed to launcher +// 3. arguments of the original user program command + args +// +// Returns: +// * parameters will be recorded in runtimeInfo +// * (command + args) is the return value +func parseArgs(args []string, rt *runtimeInfo) ([]string, error) { + argsError := func(err error) error { + return fmt.Errorf("error parsing input parameters from args %v: %w", args, err) + } + separator := -1 + for i, arg := range args { + if arg == "--" { + separator = i + break + } + // parse input parameter argument like key=value + segs := strings.SplitN(arg, "=", 2) + if len(segs) != 2 { + return nil, argsError(fmt.Errorf("invalid arg, expecting format like key=value, got %q", arg)) + } + name := segs[0] + value := segs[1] + param, ok := rt.InputParameters[name] + if !ok { + return nil, argsError(fmt.Errorf("unexpected input parameter %q, not found in spec %+v", name, rt.InputParameters)) + } + param.Value = value + } + if separator == -1 { + return nil, argsError(fmt.Errorf("cannot find separator \"--\"")) + } + return args[separator+1:], nil +} + +func setRuntimeArtifactType(rta *pipelinespec.RuntimeArtifact, instanceSchema, schemaTitle string) error { + if len(instanceSchema) != 0 && len(schemaTitle) != 0 { + return fmt.Errorf("only one of instanceSchema or schemaTitle should be specified. Got schemaTitle = %q, instanceSchema = %q", schemaTitle, instanceSchema) + } + + rta.Type = &pipelinespec.ArtifactTypeSchema{} + + if len(instanceSchema) != 0 { + rta.Type.Kind = &pipelinespec.ArtifactTypeSchema_InstanceSchema{InstanceSchema: instanceSchema} + } + if len(schemaTitle) != 0 { + rta.Type.Kind = &pipelinespec.ArtifactTypeSchema_SchemaTitle{SchemaTitle: schemaTitle} + } + return nil +} + +func readArtifact(filePath string) (*pipelinespec.RuntimeArtifact, error) { + b, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, fmt.Errorf("failed to read artifact metadata file %q: %w", filePath, err) + } + return metadata.UnmarshalRuntimeArtifact(b) +} + +type generateOutputURI func(outputName string) string + +func (r *runtimeInfo) generateExecutorInput(genOutputURI generateOutputURI, outputMetadataFilepath string) (*pipelinespec.ExecutorInput, error) { + + inputs := &pipelinespec.ExecutorInput_Inputs{ + Parameters: make(map[string]*pipelinespec.Value), + Artifacts: make(map[string]*pipelinespec.ArtifactList), + } + + outputs := &pipelinespec.ExecutorInput_Outputs{ + Parameters: make(map[string]*pipelinespec.ExecutorInput_OutputParameter), + Artifacts: make(map[string]*pipelinespec.ArtifactList), + OutputFile: outputMetadataFilepath, + } + + for name, ip := range r.InputParameters { + value := &pipelinespec.Value{} + switch ip.Type { + case "STRING": + value.Value = &pipelinespec.Value_StringValue{StringValue: ip.Value} + case "INT": + i, err := strconv.ParseInt(ip.Value, 10, 0) + if err != nil { + return nil, fmt.Errorf("failed to parse int parameter %q from '%v': %w", name, i, err) + } + value.Value = &pipelinespec.Value_IntValue{IntValue: i} + case "DOUBLE": + f, err := strconv.ParseFloat(ip.Value, 0) + if err != nil { + return nil, fmt.Errorf("failed to parse double parameter %q from '%v': %w", name, f, err) + } + value.Value = &pipelinespec.Value_DoubleValue{DoubleValue: f} + default: + return nil, fmt.Errorf("unknown ParameterType for parameter %q: %q", name, ip.Type) + } + inputs.Parameters[name] = value + } + + for name, ia := range r.InputArtifacts { + if len(ia.MetadataPath) == 0 { + return nil, fmt.Errorf("missing input artifact metadata file for input %q", name) + } + if !filepath.IsAbs(ia.MetadataPath) { + return nil, fmt.Errorf("unexpected input artifact metadata file %q for input %q: must be absolute local path", ia.MetadataPath, name) + } + + rta, err := readArtifact(ia.MetadataPath) + if err != nil { + return nil, fmt.Errorf("failed to read Artifact %q from file %s: %w", name, ia.MetadataPath, err) + } + if err := setRuntimeArtifactType(rta, ia.InstanceSchema, ia.SchemaTitle); err != nil { + return nil, fmt.Errorf("failed to set type to RuntimeArtifact %q: %w", name, err) + } + inputs.Artifacts[name] = &pipelinespec.ArtifactList{ + Artifacts: []*pipelinespec.RuntimeArtifact{rta}, + } + } + + for name, op := range r.OutputParameters { + outputParameter := &pipelinespec.ExecutorInput_OutputParameter{ + OutputFile: op.Path, + } + outputs.Parameters[name] = outputParameter + } + + for name, oa := range r.OutputArtifacts { + uri := genOutputURI(name) + rta := &pipelinespec.RuntimeArtifact{ + Name: name, + Uri: uri, + Metadata: &structpb.Struct{ + Fields: make(map[string]*structpb.Value)}, + } + if strings.HasPrefix(uri, "s3://") { + s3Region := os.Getenv("AWS_REGION") + rta.Metadata.Fields["s3_region"] = stringToStructValue(s3Region) + } + + if err := setRuntimeArtifactType(rta, oa.InstanceSchema, oa.SchemaTitle); err != nil { + return nil, fmt.Errorf("failed to generate output RuntimeArtifact: %w", err) + } + outputs.Artifacts[name] = &pipelinespec.ArtifactList{ + Artifacts: []*pipelinespec.RuntimeArtifact{rta}, + } + } + + return &pipelinespec.ExecutorInput{ + Inputs: inputs, + Outputs: outputs, + }, nil +} + +func stringToStructValue(v string) *structpb.Value { + return &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: v}} +} diff --git a/v2/component/runtime_info_test.go b/v2/component/runtime_info_test.go index 69b89da9f3..25a268fb24 100644 --- a/v2/component/runtime_info_test.go +++ b/v2/component/runtime_info_test.go @@ -1,4 +1,4 @@ -// Copyright 2021 Google LLC +// Copyright 2021 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,11 +17,15 @@ package component import ( "encoding/json" "fmt" + "io/ioutil" + "path" "testing" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/structpb" ) func Test_parseRuntimeInfo(t *testing.T) { @@ -32,20 +36,54 @@ func Test_parseRuntimeInfo(t *testing.T) { wantErr bool }{ { - name: "Parses InputParameters Correctly", + name: "Parse input ints", + jsonEncoded: `{ + "inputParameters": { + "my_param": { + "type": "INT" + } + } + }`, + want: &runtimeInfo{ + InputParameters: map[string]*inputParameter{ + "my_param": { + Type: "INT", + }, + }, + }, + wantErr: false, + }, + { + name: "Parse input strings with quotes", jsonEncoded: `{ "inputParameters": { "my_param": { - "parameterType": "INT", - "parameterValue": "123" + "type": "STRING" } } }`, want: &runtimeInfo{ InputParameters: map[string]*inputParameter{ "my_param": { - ParameterType: "INT", - ParameterValue: "123", + Type: "STRING", + }, + }, + }, + wantErr: false, + }, + { + name: "Parse serialized dictionaries", + jsonEncoded: `{ + "inputParameters": { + "my_param": { + "type": "STRING" + } + } + }`, + want: &runtimeInfo{ + InputParameters: map[string]*inputParameter{ + "my_param": { + Type: "STRING", }, }, }, @@ -56,16 +94,16 @@ func Test_parseRuntimeInfo(t *testing.T) { jsonEncoded: `{ "outputParameters": { "my_param": { - "parameterType": "INT", - "fileOutputPath": "/tmp/outputs/my_param/data" + "type": "INT", + "path": "/tmp/outputs/my_param/data" } } }`, want: &runtimeInfo{ OutputParameters: map[string]*outputParameter{ "my_param": { - ParameterType: "INT", - FileOutputPath: "/tmp/outputs/my_param/data", + Type: "INT", + Path: "/tmp/outputs/my_param/data", }, }, }, @@ -76,16 +114,16 @@ func Test_parseRuntimeInfo(t *testing.T) { jsonEncoded: `{ "outputArtifacts": { "my_artifact": { - "artifactSchema": "properties:\ntitle: kfp.Dataset\ntype: object\n", - "fileOutputPath": "/tmp/outputs/my_artifact/data" + "instanceSchema": "properties:\ntitle: kfp.Dataset\ntype: object\n", + "metadataPath": "/tmp/outputs/my_artifact/data" } } }`, want: &runtimeInfo{ OutputArtifacts: map[string]*outputArtifact{ "my_artifact": { - ArtifactSchema: "properties:\ntitle: kfp.Dataset\ntype: object\n", - FileOutputPath: "/tmp/outputs/my_artifact/data", + InstanceSchema: "properties:\ntitle: kfp.Dataset\ntype: object\n", + MetadataPath: "/tmp/outputs/my_artifact/data", }, }, }, @@ -109,3 +147,176 @@ func Test_parseRuntimeInfo(t *testing.T) { }) } } + +func TestExecutorInputGeneration(t *testing.T) { + tempDir, err := ioutil.TempDir("", "kfp-launcher-test") + if err != nil { + t.Fatal(err) + } + + dataset_one_path := path.Join(tempDir, "dataset_one") + dataset_one_contents := `{"id":"1", "typeId":"46", "uri":"gs://some-bucket/dataset-one"}` + if err := ioutil.WriteFile(dataset_one_path, []byte(dataset_one_contents), 0644); err != nil { + t.Fatal(err) + } + + dataset_two_path := path.Join(tempDir, "dataset_two") + dataset_two_contents := `{"id":"2", "typeId":"46", "uri":"gs://some-bucket/dataset-two"}` + if err := ioutil.WriteFile(dataset_two_path, []byte(dataset_two_contents), 0644); err != nil { + t.Fatal(err) + } + + outputMetadataFilepath := "/tmp/kfp_outputs/output_metadata.json" + generateOutputUri := func(output string) string { + return "gs://my-bucket/some-prefix/pipeline/task/" + output + } + + tests := []struct { + name string + jsonEncoded string + args []string + want *pipelinespec.ExecutorInput + wantErr bool + }{ + { + name: "Parses InputParameters Correctly", + args: []string{ + "message=Some string value with { \"special\": \"chars\" }", + "num_steps=5", + "--", + "sh", + "-c", + "user cmd args", + }, + jsonEncoded: fmt.Sprintf(`{ + "inputParameters": { + "message": { + "type": "STRING" + }, + "num_steps": { + "type": "INT" + } + }, + "inputArtifacts": { + "dataset_one": { + "metadataPath": "%s", + "schemaTitle": "", + "instanceSchema": "title: kfp.Dataset\ntype: object\nproperties:\n payload_format:\n type: string\n container_format:\n type: string\n" + }, + "dataset_two": { + "metadataPath": "%s", + "schemaTitle": "kfp.Model", + "instanceSchema": "" + } + }, + "outputParameters": { + "output_parameter_one": { + "type": "STRING", + "path": "/tmp/outputs/output_parameter_one/data" + }, + "output_parameter_two": { + "type": "INT", + "path": "/tmp/outputs/output_parameter_two/data" + } + }, + "outputArtifacts": { + "model": { + "schemaTitle": "", + "instanceSchema": "title: kfp.Model\ntype: object\nproperties:\n framework:\n type: string\n framework_version:\n type: string\n", + "metadataPath": "/tmp/outputs/model/data" + }, + "metrics": { + "schemaTitle": "kfp.Metrics", + "instanceSchema": "", + "metadataPath": "/tmp/outputs/metrics/data" + } + } + }`, dataset_one_path, dataset_two_path), + want: &pipelinespec.ExecutorInput{ + Inputs: &pipelinespec.ExecutorInput_Inputs{ + Parameters: map[string]*pipelinespec.Value{ + "message": {Value: &pipelinespec.Value_StringValue{StringValue: "Some string value with { \"special\": \"chars\" }"}}, + "num_steps": {Value: &pipelinespec.Value_IntValue{IntValue: 5}}, + }, + Artifacts: map[string]*pipelinespec.ArtifactList{ + "dataset_one": { + Artifacts: []*pipelinespec.RuntimeArtifact{ + { + Name: "1", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_InstanceSchema{InstanceSchema: "title: kfp.Dataset\ntype: object\nproperties:\n payload_format:\n type: string\n container_format:\n type: string\n"}, + }, + Uri: "gs://some-bucket/dataset-one", + Metadata: &structpb.Struct{}, + }}}, + "dataset_two": { + Artifacts: []*pipelinespec.RuntimeArtifact{ + { + Name: "2", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_SchemaTitle{SchemaTitle: "kfp.Model"}, + }, + Uri: "gs://some-bucket/dataset-two", + Metadata: &structpb.Struct{}, + }}}, + }, + }, + Outputs: &pipelinespec.ExecutorInput_Outputs{ + Parameters: map[string]*pipelinespec.ExecutorInput_OutputParameter{ + "output_parameter_one": {OutputFile: "/tmp/outputs/output_parameter_one/data"}, + "output_parameter_two": {OutputFile: "/tmp/outputs/output_parameter_two/data"}, + }, + Artifacts: map[string]*pipelinespec.ArtifactList{ + "model": { + Artifacts: []*pipelinespec.RuntimeArtifact{ + { + Name: "model", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_InstanceSchema{InstanceSchema: "title: kfp.Model\ntype: object\nproperties:\n framework:\n type: string\n framework_version:\n type: string\n"}, + }, + Uri: "gs://my-bucket/some-prefix/pipeline/task/model", + Metadata: &structpb.Struct{}}}}, + "metrics": { + Artifacts: []*pipelinespec.RuntimeArtifact{ + { + Name: "metrics", + Type: &pipelinespec.ArtifactTypeSchema{ + Kind: &pipelinespec.ArtifactTypeSchema_SchemaTitle{SchemaTitle: "kfp.Metrics"}, + }, + Uri: "gs://my-bucket/some-prefix/pipeline/task/metrics", + Metadata: &structpb.Struct{}}}}, + }, + OutputFile: outputMetadataFilepath, + }, + }, + wantErr: false, + }, + } + for _, test := range tests { + + t.Run(test.name, func(t *testing.T) { + rti, err := parseRuntimeInfo(test.jsonEncoded) + if (err != nil) != test.wantErr { + t.Errorf("parseRuntimeInfo() error = %v", err) + return + } + _, err = parseArgs(test.args, rti) + if (err != nil) != test.wantErr { + t.Errorf("parseArgs() error = %v", err) + } + + got, err := rti.generateExecutorInput(generateOutputUri, outputMetadataFilepath) + if (err != nil) != test.wantErr { + t.Errorf("generateExecutorInput() error = %v", err) + return + } + + if diff := cmp.Diff(test.want, got, cmpopts.EquateEmpty(), protocmp.Transform()); diff != "" { + t.Errorf("generateExecutorInput() = %+v, want %+v\nDiff (-want, +got)\n%s", got, test.want, diff) + s, _ := json.MarshalIndent(test.want, "", " ") + fmt.Printf("Want\n%s", s) + } + + }) + } +} diff --git a/v2/component/util.go b/v2/component/util.go new file mode 100644 index 0000000000..0af3177a8d --- /dev/null +++ b/v2/component/util.go @@ -0,0 +1,43 @@ +package component + +import ( + "fmt" + "io" + "os" +) + +// CopyThisBinary copies the running binary into destination path. +func CopyThisBinary(destination string) (err error) { + defer func() { + if err != nil { + err = fmt.Errorf("copy this binary to %s: %w", destination, err) + } + }() + + path, err := findThisBinary() + if err != nil { + return err + } + src, err := os.Open(path) + if err != nil { + return err + } + defer src.Close() + dst, err := os.OpenFile(destination, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o555) // 0o555 -> readable and executable by all + if err != nil { + return err + } + defer dst.Close() + if _, err = io.Copy(dst, src); err != nil { + return err + } + return dst.Close() +} + +func findThisBinary() (string, error) { + path, err := os.Executable() + if err != nil { + return "", fmt.Errorf("findThisBinary failed: %w", err) + } + return path, nil +} diff --git a/v2/config/env.go b/v2/config/env.go new file mode 100644 index 0000000000..1c67d3afe8 --- /dev/null +++ b/v2/config/env.go @@ -0,0 +1,57 @@ +package config + +import ( + "context" + "fmt" + "io/ioutil" + + "github.com/golang/glog" + k8errors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" +) + +const ( + configMapName = "kfp-launcher" + defaultPipelineRoot = "minio://mlpipeline/v2/artifacts" + configKeyDefaultPipelineRoot = "defaultPipelineRoot" +) + +// Config is the KFP runtime configuration. +type Config struct { + data map[string]string +} + +// FromConfigMap loads config from a kfp-launcher Kubernetes config map. +func FromConfigMap(ctx context.Context, clientSet kubernetes.Interface, namespace string) (*Config, error) { + config, err := clientSet.CoreV1().ConfigMaps(namespace).Get(ctx, configMapName, metav1.GetOptions{}) + if err != nil { + if k8errors.IsNotFound(err) { + glog.Infof("cannot find launcher configmap: name=%q namespace=%q", configMapName, namespace) + // LauncherConfig is optional, so ignore not found error. + return nil, nil + } + return nil, err + } + return &Config{data: config.Data}, nil +} + +// Config.DefaultPipelineRoot gets the configured default pipeline root. +func (c *Config) DefaultPipelineRoot() string { + // The key defaultPipelineRoot is optional in launcher config. + if c == nil || c.data[configKeyDefaultPipelineRoot] == "" { + return defaultPipelineRoot + } + return c.data[configKeyDefaultPipelineRoot] +} + +// InPodNamespace gets current namespace from inside a Kubernetes Pod. +func InPodNamespace() (string, error) { + // The path is available in Pods. + // https://kubernetes.io/docs/tasks/run-application/access-api-from-pod/#directly-accessing-the-rest-api + ns, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace") + if err != nil { + return "", fmt.Errorf("failed to get namespace in Pod: %w", err) + } + return string(ns), nil +} diff --git a/v2/container/launcher/Dockerfile b/v2/container/launcher/Dockerfile new file mode 100644 index 0000000000..d3be8df4cf --- /dev/null +++ b/v2/container/launcher/Dockerfile @@ -0,0 +1,44 @@ +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +### Build launcher binary ### +# Pin golang to 1.15 because of https://github.com/golang/go/issues/44129. +# Remove 1.15 pin when the issue gets resolved +FROM golang:1.15-alpine as builder + +# Install tools +COPY hack/install-go-licenses.sh hack/ +RUN ./hack/install-go-licenses.sh && apk add --no-cache make bash + +# Download go modules in a separate step for better docker caching. +WORKDIR /build +# api package is a dependency of v2/go.mod +COPY api/go.mod api/go.sum api/ +COPY v2/go.mod v2/go.sum v2/ +RUN cd v2 && go mod download +# Build the application +COPY api api +COPY v2 v2 +WORKDIR /build/v2 +RUN make build/launcher +# Check licenses and comply with license terms. +RUN go-licenses save third_party/licenses/launcher.csv --save_path /tmp/NOTICES \ + || (echo "failed to comply with launcher licenses, refer to https://github.com/kubeflow/pipelines/blob/master/v2/README.md#update-licenses" && exit 1) + +### Copy built binary into a minimal image ### +FROM gcr.io/distroless/base +COPY v2/third_party/licenses/launcher.csv /third_party/licenses.csv +COPY --from=builder /tmp/NOTICES /third_party/NOTICES +WORKDIR /bin +COPY --from=builder /build/v2/build/launcher /bin/launcher diff --git a/v2/driver/driver.go b/v2/driver/driver.go new file mode 100644 index 0000000000..8c85ddf88d --- /dev/null +++ b/v2/driver/driver.go @@ -0,0 +1,384 @@ +package driver + +import ( + "context" + "fmt" + "path" + "strings" + + "github.com/golang/glog" + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + "github.com/kubeflow/pipelines/v2/config" + "github.com/kubeflow/pipelines/v2/metadata" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" +) + +// Driver options +type Options struct { + // required, pipeline context name + PipelineName string + // required, KFP run ID + RunID string + // required, Component spec + Component *pipelinespec.ComponentSpec + // required only by root DAG driver + RuntimeConfig *pipelinespec.PipelineJob_RuntimeConfig + // required by non-root drivers + Task *pipelinespec.PipelineTaskSpec + // required only by container driver + DAGExecutionID int64 + DAGContextID int64 + // required only by root DAG driver + Namespace string +} + +// Identifying information used for error messages +func (o Options) info() string { + msg := fmt.Sprintf("pipelineName=%v, runID=%v", o.PipelineName, o.RunID) + if o.Task.GetTaskInfo().GetName() != "" { + msg = msg + fmt.Sprintf(", task=%q", o.Task.GetTaskInfo().GetName()) + } + if o.Task.GetComponentRef().GetName() != "" { + msg = msg + fmt.Sprintf(", component=%q", o.Task.GetComponentRef().GetName()) + } + if o.DAGExecutionID != 0 { + msg = msg + fmt.Sprintf(", dagExecutionID=%v", o.DAGExecutionID) + } + if o.DAGContextID != 0 { + msg = msg + fmt.Sprintf(", dagContextID=%v", o.DAGContextID) + } + if o.RuntimeConfig != nil { + msg = msg + ", runtimeConfig" // this only means runtimeConfig is not empty + } + if o.Component.GetImplementation() != nil { + msg = msg + ", componentSpec" // this only means componentSpec is not empty + } + return msg +} + +type Execution struct { + ID int64 + Context int64 // only specified when this is a DAG execution + ExecutorInput *pipelinespec.ExecutorInput +} + +func RootDAG(ctx context.Context, opts Options, mlmd *metadata.Client) (execution *Execution, err error) { + defer func() { + if err != nil { + err = fmt.Errorf("driver.RootDAG(%s) failed: %w", opts.info(), err) + } + }() + err = validateRootDAG(opts) + if err != nil { + return nil, err + } + // TODO(v2): in pipeline spec, rename GCS output directory to pipeline root. + pipelineRoot := opts.RuntimeConfig.GetGcsOutputDirectory() + if pipelineRoot != "" { + glog.Infof("PipelineRoot=%q", pipelineRoot) + } else { + restConfig, err := rest.InClusterConfig() + if err != nil { + return nil, fmt.Errorf("failed to initialize kubernetes client: %w", err) + } + k8sClient, err := kubernetes.NewForConfig(restConfig) + if err != nil { + return nil, fmt.Errorf("failed to initialize kubernetes client set: %w", err) + } + cfg, err := config.FromConfigMap(ctx, k8sClient, opts.Namespace) + if err != nil { + return nil, err + } + pipelineRoot = cfg.DefaultPipelineRoot() + glog.Infof("PipelineRoot=%q from default config", pipelineRoot) + } + // TODO(Bobgy): fill in run resource. + pipeline, err := mlmd.GetPipeline(ctx, opts.PipelineName, opts.RunID, opts.Namespace, "run-resource", pipelineRoot) + if err != nil { + return nil, err + } + executorInput := &pipelinespec.ExecutorInput{ + Inputs: &pipelinespec.ExecutorInput_Inputs{ + Parameters: opts.RuntimeConfig.Parameters, + }, + } + // TODO(Bobgy): validate executorInput matches component spec types + ecfg, err := metadata.GenerateExecutionConfig(executorInput) + if err != nil { + return nil, err + } + ecfg.IsRootDAG = true + exec, err := mlmd.CreateExecution(ctx, pipeline, ecfg) + if err != nil { + return nil, err + } + glog.Infof("Created execution: %s", exec) + // No need to return ExecutorInput, because tasks in the DAG will resolve + // needed info from MLMD. + return &Execution{ID: exec.GetID(), Context: pipeline.GetRunCtxID()}, nil +} + +func validateRootDAG(opts Options) (err error) { + defer func() { + if err != nil { + err = fmt.Errorf("invalid root DAG driver args: %w", err) + } + }() + if opts.PipelineName == "" { + return fmt.Errorf("pipeline name is required") + } + if opts.RunID == "" { + return fmt.Errorf("KFP run ID is required") + } + if opts.Component == nil { + return fmt.Errorf("component spec is required") + } + if opts.RuntimeConfig == nil { + return fmt.Errorf("runtime config is required") + } + if opts.Namespace == "" { + return fmt.Errorf("namespace is required") + } + if opts.Task.GetTaskInfo().GetName() != "" { + return fmt.Errorf("task spec is unnecessary") + } + if opts.DAGExecutionID != 0 { + return fmt.Errorf("DAG execution ID is unnecessary") + } + if opts.DAGContextID != 0 { + return fmt.Errorf("DAG context ID is unncessary") + } + return nil +} + +// TODO(Bobgy): 7-17, continue to build CLI args for container driver +func Container(ctx context.Context, opts Options, mlmd *metadata.Client) (execution *Execution, err error) { + defer func() { + if err != nil { + err = fmt.Errorf("driver.Container(%s) failed: %w", opts.info(), err) + } + }() + err = validateContainer(opts) + if err != nil { + return nil, err + } + // TODO(Bobgy): there's no need to pass any parameters, because pipeline + // and pipeline run context have been created by root DAG driver. + pipeline, err := mlmd.GetPipeline(ctx, opts.PipelineName, opts.RunID, "", "", "") + if err != nil { + return nil, err + } + dag, err := mlmd.GetDAG(ctx, opts.DAGExecutionID, opts.DAGContextID) + if err != nil { + return nil, err + } + glog.Infof("parent DAG: %+v", dag.Execution) + inputs, err := resolveInputs(ctx, dag, opts.Task, mlmd) + if err != nil { + return nil, err + } + executorInput := &pipelinespec.ExecutorInput{ + Inputs: inputs, + Outputs: provisionOutputs(dag.GetPipelineRoot(), opts.Task.GetTaskInfo().GetName(), opts.Component.GetOutputDefinitions()), + } + ecfg, err := metadata.GenerateExecutionConfig(executorInput) + if err != nil { + return nil, err + } + ecfg.TaskName = opts.Task.GetTaskInfo().GetName() + // TODO(Bobgy): change execution state to pending, because this is driver, execution hasn't started. + createdExecution, err := mlmd.CreateExecution(ctx, pipeline, ecfg) + if err != nil { + return nil, err + } + glog.Infof("Created execution: %s", createdExecution) + return &Execution{ + ID: createdExecution.GetID(), + ExecutorInput: executorInput, + }, nil +} + +func validateContainer(opts Options) (err error) { + defer func() { + if err != nil { + err = fmt.Errorf("invalid container driver args: %w", err) + } + }() + if opts.PipelineName == "" { + return fmt.Errorf("pipeline name is required") + } + if opts.RunID == "" { + return fmt.Errorf("KFP run ID is required") + } + if opts.Component == nil { + return fmt.Errorf("component spec is required") + } + if opts.Task.GetTaskInfo().GetName() == "" { + return fmt.Errorf("task spec is required") + } + if opts.RuntimeConfig != nil { + return fmt.Errorf("runtime config is unnecessary") + } + if opts.DAGExecutionID == 0 { + return fmt.Errorf("DAG execution ID is required") + } + if opts.DAGContextID == 0 { + return fmt.Errorf("DAG context ID is required") + } + return nil +} + +func resolveInputs(ctx context.Context, dag *metadata.DAG, task *pipelinespec.PipelineTaskSpec, mlmd *metadata.Client) (*pipelinespec.ExecutorInput_Inputs, error) { + inputParams, _, err := dag.Execution.GetParameters() + if err != nil { + return nil, fmt.Errorf("failed to resolve inputs: %w", err) + } + glog.Infof("parent DAG input parameters %+v", inputParams) + inputs := &pipelinespec.ExecutorInput_Inputs{ + Parameters: make(map[string]*pipelinespec.Value), + Artifacts: make(map[string]*pipelinespec.ArtifactList), + } + // get executions in context on demand + var tasksCache map[string]*metadata.Execution + getDAGTasks := func() (map[string]*metadata.Execution, error) { + if tasksCache != nil { + return tasksCache, nil + } + tasks, err := mlmd.GetExecutionsInDAG(ctx, dag) + if err != nil { + return nil, err + } + tasksCache = tasks + return tasks, nil + } + for name, paramSpec := range task.GetInputs().GetParameters() { + paramError := func(err error) error { + return fmt.Errorf("failed to resolve input parameter %s with spec %s: %w", name, paramSpec, err) + } + if paramSpec.GetParameterExpressionSelector() != "" { + return nil, paramError(fmt.Errorf("parameter expression selector not implemented yet")) + } + switch t := paramSpec.Kind.(type) { + case *pipelinespec.TaskInputsSpec_InputParameterSpec_ComponentInputParameter: + componentInput := paramSpec.GetComponentInputParameter() + if componentInput == "" { + return nil, paramError(fmt.Errorf("empty component input")) + } + v, ok := inputParams[componentInput] + if !ok { + return nil, paramError(fmt.Errorf("parent DAG does not have input parameter %s", componentInput)) + } + inputs.Parameters[name] = v + + case *pipelinespec.TaskInputsSpec_InputParameterSpec_TaskOutputParameter: + taskOutput := paramSpec.GetTaskOutputParameter() + if taskOutput.GetProducerTask() == "" { + return nil, paramError(fmt.Errorf("producer task is empty")) + } + if taskOutput.GetOutputParameterKey() == "" { + return nil, paramError(fmt.Errorf("output parameter key is empty")) + } + tasks, err := getDAGTasks() + if err != nil { + return nil, paramError(err) + } + producer, ok := tasks[taskOutput.GetProducerTask()] + if !ok { + return nil, paramError(fmt.Errorf("cannot find producer task %q", taskOutput.GetProducerTask())) + } + _, outputs, err := producer.GetParameters() + if err != nil { + return nil, paramError(fmt.Errorf("get producer output parameters: %w", err)) + } + param, ok := outputs[taskOutput.GetOutputParameterKey()] + if !ok { + return nil, paramError(fmt.Errorf("cannot find output parameter key %q in producer task %q", taskOutput.GetOutputParameterKey(), taskOutput.GetProducerTask())) + } + inputs.Parameters[name] = param + case *pipelinespec.TaskInputsSpec_InputParameterSpec_RuntimeValue: + runtimeValue := paramSpec.GetRuntimeValue() + switch t := runtimeValue.Value.(type) { + case *pipelinespec.ValueOrRuntimeParameter_ConstantValue: + inputs.Parameters[name] = runtimeValue.GetConstantValue() + default: + return nil, paramError(fmt.Errorf("param runtime value spec of type %T not implemented", t)) + } + + // TODO(Bobgy): implement the following cases + // case *pipelinespec.TaskInputsSpec_InputParameterSpec_TaskFinalStatus_: + default: + return nil, paramError(fmt.Errorf("parameter spec of type %T not implemented yet", t)) + } + } + for name, artifactSpec := range task.GetInputs().GetArtifacts() { + artifactError := func(err error) error { + return fmt.Errorf("failed to resolve input artifact %s with spec %s: %w", name, artifactSpec, err) + } + switch t := artifactSpec.Kind.(type) { + case *pipelinespec.TaskInputsSpec_InputArtifactSpec_ComponentInputArtifact: + return nil, artifactError(fmt.Errorf("component input artifact not implemented yet")) + + case *pipelinespec.TaskInputsSpec_InputArtifactSpec_TaskOutputArtifact: + taskOutput := artifactSpec.GetTaskOutputArtifact() + if taskOutput.GetProducerTask() == "" { + return nil, artifactError(fmt.Errorf("producer task is empty")) + } + if taskOutput.GetOutputArtifactKey() == "" { + return nil, artifactError(fmt.Errorf("output artifact key is empty")) + } + tasks, err := getDAGTasks() + if err != nil { + return nil, artifactError(err) + } + producer, ok := tasks[taskOutput.GetProducerTask()] + if !ok { + return nil, artifactError(fmt.Errorf("cannot find producer task %q", taskOutput.GetProducerTask())) + } + // TODO(Bobgy): cache results + outputs, err := mlmd.GetOutputArtifactsByExecutionId(ctx, producer.GetID()) + if err != nil { + return nil, artifactError(err) + } + artifact, ok := outputs[taskOutput.GetOutputArtifactKey()] + if !ok { + return nil, artifactError(fmt.Errorf("cannot find output artifact key %q in producer task %q", taskOutput.GetOutputArtifactKey(), taskOutput.GetProducerTask())) + } + runtimeArtifact, err := artifact.ToRuntimeArtifact() + if err != nil { + return nil, artifactError(err) + } + inputs.Artifacts[name] = &pipelinespec.ArtifactList{ + Artifacts: []*pipelinespec.RuntimeArtifact{runtimeArtifact}, + } + default: + return nil, artifactError(fmt.Errorf("artifact spec of type %T not implemented yet", t)) + } + } + // TODO(Bobgy): validate executor inputs match component inputs definition + return inputs, nil +} + +func provisionOutputs(pipelineRoot, taskName string, outputsSpec *pipelinespec.ComponentOutputsSpec) *pipelinespec.ExecutorInput_Outputs { + outputs := &pipelinespec.ExecutorInput_Outputs{ + Artifacts: make(map[string]*pipelinespec.ArtifactList), + } + for name, artifact := range outputsSpec.GetArtifacts() { + outputs.Artifacts[name] = &pipelinespec.ArtifactList{ + Artifacts: []*pipelinespec.RuntimeArtifact{ + { + Uri: generateOutputURI(pipelineRoot, name, taskName), + Type: artifact.GetArtifactType(), + Metadata: artifact.GetMetadata(), + }, + }, + } + } + return outputs +} + +func generateOutputURI(root, artifactName string, taskName string) string { + // we cannot path.Join(root, taskName, artifactName), because root + // contains scheme like gs:// and path.Join cleans up scheme to gs:/ + return fmt.Sprintf("%s/%s", strings.TrimRight(root, "/"), path.Join(taskName, artifactName)) +} diff --git a/v2/go-licenses.yaml b/v2/go-licenses.yaml new file mode 100644 index 0000000000..a219fffda9 --- /dev/null +++ b/v2/go-licenses.yaml @@ -0,0 +1,93 @@ +module: + go: + version: master + overrides: + # no need to include our own license + - name: ../api + skip: true + - name: github.com/kubeflow/pipelines/v2 + skip: true + excludePaths: + - build # built binaries + - test/tmp # temporary files for test + - name: cloud.google.com/go + version: v0.72.0 + license: + path: LICENSE + spdxId: Apache-2.0 + subModules: + - path: cmd/go-cloud-debug-agent/internal/debug/elf + license: + path: elf.go + spdxId: BSD-2-Clause + lineStart: 1 + lineEnd: 43 + - path: third_party/pkgsite + license: + path: LICENSE + spdxId: BSD-3-Clause + - name: cloud.google.com/go/storage + version: v1.12.0 + license: + path: LICENSE + url: https://github.com/googleapis/google-cloud-go/blob/storage/v1.12.0/LICENSE + spdxId: Apache-2.0 + - name: github.com/jmespath/go-jmespath + version: v0.4.0 + license: # non-standard license file + path: LICENSE + spdxId: Apache-2.0 + - name: github.com/aws/aws-sdk-go + version: v1.36.1 + license: + path: LICENSE.txt + spdxId: Apache-2.0 + subModules: + - path: internal/sync/singleflight + license: + path: LICENSE + spdxId: BSD-3-Clause + - name: github.com/davecgh/go-spew + version: v1.1.1 + license: + path: LICENSE + spdxId: ISC + - name: github.com/googleapis/gax-go/v2 + version: v2.0.5 + license: + path: LICENSE + spdxId: BSD-3-Clause + - name: golang.org/x/net + excludePaths: + - html/testdata + - name: github.com/gogo/protobuf + version: v1.3.2 + license: + path: LICENSE + spdxId: BSD-3-Clause / BSD-2-Clause + - name: google.golang.org/protobuf + version: v1.27.1 + license: + path: LICENSE + spdxId: BSD-3-Clause + - name: gopkg.in/yaml.v2 + version: v2.4.0 + license: + path: LICENSE + spdxId: Apache-2.0 / MIT # gopkg.in/yaml.v2 is port of a MIT licensed library + - name: gopkg.in/yaml.v3 + version: v3.0.0-20210107192922-496545a6307b + license: + path: LICENSE + spdxId: Apache-2.0 / MIT # gopkg.in/yaml.v3 is port of a MIT licensed library + - name: go.opencensus.io + version: v0.22.5 + license: + path: LICENSE + url: https://github.com/census-instrumentation/opencensus-go/blob/v0.22.5/LICENSE + spdxId: Apache-2.0 + - name: sigs.k8s.io/yaml + version: v1.2.0 + license: + path: LICENSE + spdxId: MIT / BSD-3-Clause diff --git a/v2/go.mod b/v2/go.mod index 246d14eb95..7306743b85 100644 --- a/v2/go.mod +++ b/v2/go.mod @@ -3,12 +3,24 @@ module github.com/kubeflow/pipelines/v2 go 1.15 require ( - github.com/davecgh/go-spew v1.1.1 + github.com/argoproj/argo-workflows/v3 v3.1.1 + github.com/aws/aws-sdk-go v1.36.1 + github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b - github.com/golang/protobuf v1.4.3 - github.com/google/go-cmp v0.5.4 + github.com/golang/protobuf v1.5.0 + github.com/google/go-cmp v0.5.5 + github.com/google/uuid v1.1.2 + github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 + github.com/kubeflow/pipelines/api v0.0.0 + github.com/stretchr/testify v1.7.0 gocloud.dev v0.22.0 + google.golang.org/genproto v0.0.0-20201203001206-6486ece9c497 google.golang.org/grpc v1.36.0 - google.golang.org/protobuf v1.25.0 + google.golang.org/protobuf v1.27.1 gopkg.in/yaml.v2 v2.4.0 + k8s.io/api v0.20.4 + k8s.io/apimachinery v0.21.2 + k8s.io/client-go v0.20.4 ) + +replace github.com/kubeflow/pipelines/api => ../api diff --git a/v2/go.sum b/v2/go.sum index 6a870e3d42..838cb98a8e 100644 --- a/v2/go.sum +++ b/v2/go.sum @@ -8,9 +8,11 @@ cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxK cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= @@ -26,6 +28,7 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/firestore v1.4.0/go.mod h1:NjjGEnxCS3CAKYp+vmALu20QzcqasGodQp48WxJGAYc= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= @@ -43,83 +46,384 @@ contrib.go.opencensus.io/exporter/aws v0.0.0-20200617204711-c478e41e60e9/go.mod contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= contrib.go.opencensus.io/integrations/ocsql v0.1.7/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-amqp-common-go/v3 v3.0.0/go.mod h1:SY08giD/XbhTz07tJdpw1SoxQXHPN30+DI3Z04SYqyg= github.com/Azure/azure-amqp-common-go/v3 v3.0.1/go.mod h1:PBIGdzcO1teYoufTKMcGibdKaYZv4avS+O6LNIp8bq0= github.com/Azure/azure-amqp-common-go/v3 v3.1.0/go.mod h1:PBIGdzcO1teYoufTKMcGibdKaYZv4avS+O6LNIp8bq0= +github.com/Azure/azure-event-hubs-go/v3 v3.3.0/go.mod h1:LSZw8Q6j0iylRjGk4g9BPd+FzS35+Eff5gvs+t37iOM= +github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= +github.com/Azure/azure-pipeline-go v0.1.9/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= +github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U= github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= github.com/Azure/azure-sdk-for-go v37.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v49.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-service-bus-go v0.10.7/go.mod h1:o5z/3lDG1iT/T/G7vgIwIqVDTx9Qa2wndf5OdzSzpF8= +github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y= +github.com/Azure/azure-storage-blob-go v0.13.0 h1:lgWHvFh+UYBNVQLFHXkvul2f6yOPA9PIH82RTG2cSwc= github.com/Azure/azure-storage-blob-go v0.13.0/go.mod h1:pA9kNqtjUeQF2zOSu4s//nUdBD+e64lEuc4sVnuOfNs= +github.com/Azure/go-amqp v0.12.6/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-amqp v0.13.0/go.mod h1:qj+o8xPCz9tMSbQ83Vp8boHahuRDl5mkNHyt1xlxUTs= github.com/Azure/go-amqp v0.13.1/go.mod h1:qj+o8xPCz9tMSbQ83Vp8boHahuRDl5mkNHyt1xlxUTs= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= +github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= +github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest v0.11.3/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest v0.11.7/go.mod h1:V6p3pKZx1KKkJubbxnDWrzNhEIfOy/pTGasLqzHIPHs= github.com/Azure/go-autorest/autorest v0.11.9/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= +github.com/Azure/go-autorest/autorest v0.11.12 h1:gI8ytXbxMfI+IVbI9mP2JGCTXIuhHLgRlvQ9X4PsnHE= github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= github.com/Azure/go-autorest/autorest/adal v0.9.2/go.mod h1:/3SMAM86bP6wC9Ev35peQDUeqFZBMH07vvUOmg4z/fE= github.com/Azure/go-autorest/autorest/adal v0.9.4/go.mod h1:/3SMAM86bP6wC9Ev35peQDUeqFZBMH07vvUOmg4z/fE= github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= +github.com/Azure/go-autorest/autorest/adal v0.9.6 h1:d3pSDwvBWBLqdA91u+keH1zs1cCEzrQdHKY6iqbQNkE= github.com/Azure/go-autorest/autorest/adal v0.9.6/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= +github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/auth v0.5.3/go.mod h1:4bJZhUhcq8LB20TruwHbAQsmUs2Xh+QR7utuJpLXX3A= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/azure/cli v0.4.2/go.mod h1:7qkJkT+j6b+hIpzMOwPChJhTqS8VbsqqgULzMNRugoM= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= +github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/autorest/validation v0.3.0/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/GoogleCloudPlatform/cloudsql-proxy v1.19.1/go.mod h1:+yYmuKqcBVkgRePGpUhTA9OEg0XsnFE96eZ6nJ2yCQM= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/sarama v1.26.1/go.mod h1:NbSGBSSndYaIhRcBtY9V0U7AyH+x71bG668AuWys/yU= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/TwinProduction/go-color v0.0.3/go.mod h1:5hWpSyT+mmKPjCwPNEruBW5Dkbs/2PwOuU468ntEXNQ= +github.com/UnnoTed/fileb0x v1.1.4/go.mod h1:X59xXT18tdNk/D6j+KZySratBsuKJauMtVuJ9cgOiZs= +github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/ahmetb/gen-crd-api-reference-docs v0.2.0/go.mod h1:P/XzJ+c2+khJKNKABcm2biRwk2QAuwbLf8DlXuaL7WM= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/aliyun/aliyun-oss-go-sdk v2.1.8+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antonmedv/expr v1.8.8/go.mod h1:5qsM3oLGDND7sDmQGDXHkYfkjYMUX14qsgqmHhwGEk8= +github.com/apache/openwhisk-client-go v0.0.0-20190915054138-716c6f973eb2/go.mod h1:jLLKYP7+1+LFlIJW1n9U1gqeveLM1HIwa4ZHNOFxjPw= +github.com/apache/pulsar-client-go v0.1.1/go.mod h1:mlxC65KL1BLhGO2bnT9zWMttVzR2czVPb27D477YpyU= +github.com/ardielle/ardielle-go v1.5.2/go.mod h1:I4hy1n795cUhaVt/ojz83SNVCYIGsAFAONtv2Dr7HUI= +github.com/ardielle/ardielle-tools v1.5.4/go.mod h1:oZN+JRMnqGiIhrzkRN9l26Cej9dEx4jeNG6A+AdkShk= +github.com/argoproj/argo-events v1.2.0/go.mod h1:eY+egQNBLXAz/AF4mqgHsMMa4Aur7frHjUfBg+RpX04= +github.com/argoproj/argo-workflows/v3 v3.1.1 h1:UsatBRhHk0EL2glTnVhailCkjW7BaS9iI8k2R1+4QuQ= +github.com/argoproj/argo-workflows/v3 v3.1.1/go.mod h1:Z8Wc7uDOGw8TRdhqqREHLFE5SAgS0ENqqwaLakv56MU= +github.com/argoproj/pkg v0.8.1/go.mod h1:ra+bQPmbVAoEL+gYSKesuigt4m49i3Qa3mE/xQcjCiA= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= +github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= +github.com/awalterschulze/gographviz v0.0.0-20200901124122-0eecad45bd71/go.mod h1:/ynarkO/43wP/JM2Okn61e8WFMtdbtA8he7GJxW+SFM= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.30.7/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.33.16/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.36.1 h1:rDgSL20giXXu48Ycx6Qa4vWaNTVTltUl6vA73ObCSVk= github.com/aws/aws-sdk-go v1.36.1/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= +github.com/beefsack/go-rate v0.0.0-20180408011153-efa7637bb9b6/go.mod h1:6YNgTHLutezwnBvyneBbwvB8C82y3dcoOj5EQJIdGXA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blushft/go-diagrams v0.0.0-20201006005127-c78c821223d9/go.mod h1:nDeXEIaeDV+mAK1gBD3/RJH67DYPC0GdaznWN7sB07s= +github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= +github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/boynton/repl v0.0.0-20170116235056-348863958e3e/go.mod h1:Crc/GCZ3NXDVCio7Yr0o+SSrytpcFhLmVCIzi0s49t4= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudevents/sdk-go/v2 v2.1.0/go.mod h1:3CTrpB4+u7Iaj6fd7E2Xvm5IxMdRoaAhqaRVnOr2rCU= +github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:po7NpZ/QiTKzBKyrsEAxwnTamCoh8uDk/egRpQ7siIc= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/colinmarc/hdfs v1.1.4-0.20180802165501-48eb8d6c34a9/go.mod h1:0DumPviB681UcSuJErAbDIOx6SIaJWj463TymfZG02I= +github.com/colinmarc/hdfs v1.1.4-0.20180805212432-9746310a4d31/go.mod h1:vSBumefK4HA5uiRSwNP+3ofgrEoScpCS2MMWcWXEuQ4= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/dave/jennifer v1.4.1/go.mod h1:7jEdnm+qBcxl8PC0zyp7vxcpSRnzXSt9r39tpTVGlwA= +github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denisenkom/go-mssqldb v0.9.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= +github.com/dimfeld/httptreemux v5.0.1+incompatible/go.mod h1:rbUlSV+CCpv/SuqUTP/8Bk2O3LyUV436/yaRGkhP6Z0= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/doublerebel/bellows v0.0.0-20160303004610-f177d92a03d3/go.mod h1:v/MTKot4he5oRHGirOYGN4/hEOONNnWtDBLAzllSGMw= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.12.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.15.0+incompatible h1:8KpYO/Xl/ZudZs5RNOEhWMBY4hmzlZhhRd9cu+jrZP4= +github.com/emicklei/go-restful v2.15.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/emitter-io/go/v2 v2.0.9/go.mod h1:St++epE1u/6ueCVw47xhu4shpkGNxKRVtkWv4Xi33mg= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/fasthttp/websocket v1.4.2/go.mod h1:smsv/h4PBEBaU0XDTY5UwJTpZv69fQ0FfcLJr21mA6Y= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/structs v1.0.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/gavv/httpexpect/v2 v2.2.0/go.mod h1:lnd0TqJLrP+wkJk3SFwtrpSlOAZQ7HaaIFuOYbgqgUM= +github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= +github.com/gdamore/tcell v1.3.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew= +github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gizak/termui/v3 v3.1.0/go.mod h1:bXQEBkJpzxUAKf0+xq9MSWAvWZlE7c+aidmyFlkYTrY= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc= +github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/zapr v0.2.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= +github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= +github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= +github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/jsonreference v0.19.4/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= +github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI= +github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= +github.com/go-openapi/loads v0.19.5/go.mod h1:dswLCAdonkRufe/gSUC3gN8nTSaB9uaS2es0x5/IbjY= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= +github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo= +github.com/go-openapi/runtime v0.19.20/go.mod h1:Lm9YGCeecBnUUkFTxPC4s1+lwrkJ0pthx8YvyjCfkgk= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= +github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= +github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= +github.com/go-openapi/spec v0.20.0 h1:HGLc8AJ7ynOxwv0Lq4TsnwLsWMawHAYiJIFzbcML86I= +github.com/go-openapi/spec v0.20.0/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU= +github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= +github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= +github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= +github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= +github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= +github.com/go-openapi/swag v0.19.12 h1:Bc0bnY2c3AoF7Gc+IMIAQQsD8fLHjHpc19wXvYuayQI= +github.com/go-openapi/swag v0.19.12/go.mod h1:eFdyEBkTdoAf/9RXBvj4cr1nH7GD8Kzo5HTt47gr72M= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo= +github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-python/gpython v0.0.3/go.mod h1:bmk0l57W/7Cs67MMnz4U28SoYyvz5NTMYyJvUqytJhs= +github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-resty/resty/v2 v2.3.0/go.mod h1:UpN9CgLZNsv4e9XG50UU8xdI0F43UQ4HmxLBDwaroHU= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-swagger/go-swagger v0.25.0/go.mod h1:9639ioXrPX9E6BbnbaDklGXjNz7upAXoNBwL4Ok11Vk= +github.com/go-swagger/scan-repo-boundary v0.0.0-20180623220736-973b3573c013/go.mod h1:b65mBPzqzZWxOZGxSWrqs4GInLIn+u99Q9q7p+GKni0= +github.com/go-test/deep v1.0.4/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/gobwas/glob v0.2.4-0.20181002190808-e7a84e9525fe/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= @@ -131,6 +435,8 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -144,8 +450,10 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0 h1:LUVKkCeviFUMKqHa4tXIIij/lbhnMbP7Fn5wKdKkRh4= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -156,14 +464,24 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-github/v31 v31.0.0/go.mod h1:NQPZol8/1sMoWYGN2yaALIBytu17gAWfhbweiEed3pM= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-replayers/grpcreplay v1.0.0 h1:B5kVOzJ1hBgnevTgIWhSTatQ3608yu/2NnU0Ta1d0kY= github.com/google/go-replayers/grpcreplay v1.0.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= +github.com/google/go-replayers/httpreplay v0.1.2 h1:HCfx+dQzwN9XbGTHF8qJ+67WN8glL9FTWV5rraCJ/jU= github.com/google/go-replayers/httpreplay v0.1.2/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= +github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0 h1:wCKgOCHuUEVfsaQLpPSJb7VdYCdTVZQAuOdYm1yc/60= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -176,58 +494,440 @@ github.com/google/pprof v0.0.0-20200905233945-acf8798be1f7/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/googleapis/gnostic v0.5.1 h1:A8Yhf6EtqTv9RMsU6MQTyrtV1TjWlR6xU9BsZIwuTCM= +github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20180825215210-0210a2f0f73c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherwasm v1.0.0/go.mod h1:SkZ8z7CWBz5VXbhJel8TxCmAcsQqzgWGR/8nMhyhZSI= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.0.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-hclog v0.9.1/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-retryablehttp v0.6.4/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v0.0.0-20180228145832-27454136f036/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/raft v1.1.1/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8= +github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hokaccha/go-prettyjson v0.0.0-20190818114111-108c894c2c0e/go.mod h1:pFlLw2CfqZiIBOx6BuCeRLCrfxBJipTY0nIOF/VbGcI= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.3.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/iancoleman/strcase v0.1.1/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imkira/go-interpol v1.0.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= +github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jawher/mow.cli v1.0.4/go.mod h1:5hQj2V8g+qYmLUVWqu4Wuja1pI57M83EChYLVZ0sMKk= +github.com/jawher/mow.cli v1.1.0/go.mod h1:aNaQlc7ozF3vw6IJ2dHjp2ZFiA4ozMIYY6PyuRJwlUg= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jcmturner/gofork v0.0.0-20180107083740-2aebee971930/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= +github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/joncalhoun/qson v0.0.0-20200422171543-84433dcd3da0/go.mod h1:DFXrEwSRX0p/aSvxE21319menCBFeQO0jXpRj7LEZUA= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= +github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= +github.com/karrick/godirwalk v1.7.8/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.10.8/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.8/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.9/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/labstack/echo v3.2.1+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s= +github.com/labstack/gommon v0.2.7/go.mod h1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lightstep/tracecontext.go v0.0.0-20181129014701-1757c391b1ac/go.mod h1:Frd2bnT3w5FB5q49ENTfVlztJES+1k/7lyWX2+9gq/M= +github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s= +github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= +github.com/minio/minio-go v1.0.1-0.20190523192347-c6c2912aa552/go.mod h1:/haSOWG8hQNx2+JOfLJ9GKp61EAmgPwRVw/Sac0NzaM= +github.com/minio/minio-go/v7 v7.0.2/go.mod h1:dJ80Mv2HeGkYLH1sqS/ksz07ON6csH3S6JUMSQ2zAns= +github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nats-io/gnatsd v1.4.1/go.mod h1:nqco77VO78hLCJpIcVfygDP2rPGfsEHkGTUk94uh5DQ= +github.com/nats-io/go-nats v1.7.2/go.mod h1:+t7RHT5ApZebkrQdnn6AhQJmhJJiKAvJUio1PiiCtj0= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.4/go.mod h1:Jw1Z28soD/QasIA2uWjXyM9El1jly3YwyFOuR8tH1rg= +github.com/nats-io/nats-streaming-server v0.17.0/go.mod h1:ewPBEsmp62Znl3dcRsYtlcfwudxHEdYMtYqUQSt4fE0= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.4/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nats-io/stan.go v0.6.0/go.mod h1:eIcD5bi3pqbHT/xIIvXMwvzXYElgouBvaVRftaE+eac= +github.com/nicksnyder/go-i18n v1.10.1-0.20190510212457-b280125b035a/go.mod h1:e4Di5xjP9oTVrC6y3C7C0HoSYXjSbhh/dU0eUV32nB4= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nsf/termbox-go v0.0.0-20190121233118-02980233997d/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ= +github.com/nsqio/go-nsq v1.0.8/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQTuDEY= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852/go.mod h1:eqOVx5Vwu4gd2mmMZvVZsgIqNSaW3xxRThUJ0k/TPk4= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.2/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/getopt v0.0.0-20180729010549-6fdd0a2c7117/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= +github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/peterh/liner v1.1.0/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.4.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.5.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/radovskyb/watcher v1.0.7/go.mod h1:78okwvY5wPdzcb1UYnip1pvrZNIVEIh/Cm+ZuvsUYIg= +github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/rivo/tview v0.0.0-20200219210816-cd38d7432498/go.mod h1:6lkG1x+13OShEf0EaOCaTQYyB7d5nSbb181KtjlS+84= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/savsgio/gotils v0.0.0-20200117113501-90175b0fbe3f/go.mod h1:lHhJedqxCoHN+zMtwGNTXWmF0u9Jt363FYRhV6g0CdY= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= +github.com/slack-go/slack v0.7.4/go.mod h1:FGqNzJBmxIsZURAxh2a8D21AnOVvvXZvGligs4npPUM= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.3.2/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stripe/stripe-go v70.15.0+incompatible/go.mod h1:A1dQZmO/QypXmsL0T8axYZkSN/uA/T/A64pfKdBAMiY= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/tidwall/gjson v1.6.0/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= +github.com/tidwall/gjson v1.6.8/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= +github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= +github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/pretty v1.0.1/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/pretty v1.1.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/sjson v1.1.1/go.mod h1:yvVuSnpEQv5cYIrO+AT6kw4QVfd5SDZoGIS7/5+fZFs= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/toqueteos/webbrowser v1.2.0/go.mod h1:XWoZq4cyp9WeUeak7w7LXRUQf1F1ATJMir8RTqb4ayM= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.9.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= +github.com/valyala/fasthttp v1.22.0/go.mod h1:0mw2RjXGOzxf4NL2jni3gUQ7LfjjUSiG5sskOUUSEpU= +github.com/valyala/fasttemplate v0.0.0-20170224212429-dcecefd839c4/go.mod h1:50wTf68f99/Zt14pr046Tgt3Lp2vLyFZKzbFXTOabXw= +github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/gozstd v1.7.0/go.mod h1:y5Ew47GLlP37EkTB+B4s7r6A5rdaeB7ftbl9zoYiIPQ= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/xanzy/go-gitlab v0.33.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= +github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.1.0/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yahoo/athenz v1.8.55/go.mod h1:G7LLFUH7Z/r4QAB7FfudfuA7Am/eCzO1GlzBhDL6Kv0= +github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= +go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= +go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= +go.mongodb.org/mongo-driver v1.3.5/go.mod h1:Ual6Gkco7ZGQw8wE1t4tLnvBsf6yVSM60qW6TgOeJ5c= go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -236,19 +936,55 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= gocloud.dev v0.22.0 h1:psFb4EJ+bF9bjns7XR3n3tMMMB1LNs97YURcyh4oVWM= gocloud.dev v0.22.0/go.mod h1:z3jKIQ0Es9LALVZFQ3wOvwqAsSLq1R5c/2RdmghDucw= +golang.org/x/crypto v0.0.0-20180723164146-c126467f60eb/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180910181607-0e37d006457b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190128193316-c7b33c32a30b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200206161412-a0c6ece9d31a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= @@ -257,6 +993,7 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20200908183739-ae8ad444f925/go.mod h1:1phAWC201xIgDyaFpmDeZkgf70Q4Pd/CNqfRtVPtxNw= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -268,6 +1005,7 @@ golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -277,20 +1015,38 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0 h1:8pl+sMODzuvGJkmj2W4kZihvVb5mKm8pB/X44PIQHv8= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180921000356-2f5d2388922f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181108082009-03003ca0c849/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -302,7 +1058,9 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -310,9 +1068,13 @@ golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226101413-39120d07d75e/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -325,26 +1087,54 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181019160139-8e24a49d80f8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190523142557-0e01d883c5c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -352,47 +1142,84 @@ golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210426230700-d19ff857e887 h1:dXfMednGJh/SUUFjTLsWJz3P+TQt9qnR11GgeI3vWKs= +golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190213192042-740235f6c0d8/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/tools v0.0.0-20190808195139-e713427fea3f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -410,11 +1237,17 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200616195046-dc31b401abb5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= @@ -426,11 +1259,17 @@ golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201202200335-bef1c476418a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201203202102-a1a1cbeaa516/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.1.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= +gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -440,6 +1279,7 @@ google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhE google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.1/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= @@ -455,12 +1295,14 @@ google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ google.golang.org/api v0.36.0 h1:l2Nfbl2GPXdWorv+dT2XfinX2jOOw4zv1VhLstx+6rE= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -484,14 +1326,18 @@ google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200831141814-d751682dd103/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -512,15 +1358,18 @@ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.36.0 h1:o1bcQ6imQMIOpdrO3SWf2z5RV72WbDwdXuK0MDlc8As= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc/examples v0.0.0-20201226181154-53788aa5dcb4/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -530,17 +1379,64 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/go-playground/webhooks.v5 v5.15.0/go.mod h1:LZbya/qLVdbqDR1aKrGuWV6qbia2zCYSR5dpom2SInQ= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.41.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= +gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= +gopkg.in/jcmturner/goidentity.v2 v2.0.0/go.mod h1:vCwK9HeXksMeUmQ4SxDd1tRz4LejrKh3KRVjQWhjvZI= +gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= +gopkg.in/jcmturner/gokrb5.v5 v5.3.0/go.mod h1:oQz8Wc5GsctOTgCVyKad1Vw4TCWz5G6gfIQr88RPv4k= +gopkg.in/jcmturner/gokrb5.v7 v7.5.0/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM= +gopkg.in/jcmturner/rpc.v0 v0.0.2/go.mod h1:NzMq6cRzR9lipgw7WxRBHNx5N8SifBuaCQsOT1kWY/E= +gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= +gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -548,7 +1444,97 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI= +k8s.io/api v0.17.8/go.mod h1:N++Llhs8kCixMUoCaXXAyMMPbo8dDVnh+IQ36xZV2/0= +k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78= +k8s.io/api v0.19.2/go.mod h1:IQpK0zFQ1xc5iNIQPqzgoOwuFugaYHK4iCknlAQP9nI= +k8s.io/api v0.19.6/go.mod h1:Plxx44Nh4zVblkJrIgxVPgPre1mvng6tXf1Sj3bs0fU= +k8s.io/api v0.20.4 h1:xZjKidCirayzX6tHONRQyTNDVIR55TYVqgATqo6ZULY= +k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= +k8s.io/apiextensions-apiserver v0.17.0/go.mod h1:XiIFUakZywkUl54fVXa7QTEHcqQz9HG55nHd1DCoHj8= +k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY= +k8s.io/apiextensions-apiserver v0.19.2/go.mod h1:EYNjpqIAvNZe+svXVx9j4uBaVhTB4C94HkY3w058qcg= +k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= +k8s.io/apimachinery v0.17.8/go.mod h1:Lg8zZ5iC/O8UjCqW6DNhcQG2m4TdjF9kwG3891OWbbA= +k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= +k8s.io/apimachinery v0.19.2/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= +k8s.io/apimachinery v0.19.6/go.mod h1:6sRbGRAVY5DOCuZwB5XkqguBqpqLU6q/kOaOdk29z6Q= +k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apimachinery v0.21.2 h1:vezUc/BHqWlQDnZ+XkrpXSmnANSLbpnlpwo0Lhk0gpc= +k8s.io/apimachinery v0.21.2/go.mod h1:CdTY8fU/BlvAbJ2z/8kBwimGki5Zp8/fbVuLY8gJumM= +k8s.io/apiserver v0.17.0/go.mod h1:ABM+9x/prjINN6iiffRVNCBR2Wk7uY4z+EtEGZD48cg= +k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw= +k8s.io/apiserver v0.19.2/go.mod h1:FreAq0bJ2vtZFj9Ago/X0oNGC51GfubKK/ViOKfVAOA= +k8s.io/client-go v0.17.0/go.mod h1:TYgR6EUHs6k45hb6KWjVD6jFZvJV4gHDikv/It0xz+k= +k8s.io/client-go v0.17.8/go.mod h1:SJsDS64AAtt9VZyeaQMb4Ck5etCitZ/FwajWdzua5eY= +k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU= +k8s.io/client-go v0.19.2/go.mod h1:S5wPhCqyDNAlzM9CnEdgTGV4OqhsW3jGO1UM1epwfJA= +k8s.io/client-go v0.19.6/go.mod h1:gEiS+efRlXYUEQ9Oz4lmNXlxAl5JZ8y2zbTDGhvXXnk= +k8s.io/client-go v0.20.4 h1:85crgh1IotNkLpKYKZHVNI1JT86nr/iDCvq2iWKsql4= +k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= +k8s.io/code-generator v0.17.0/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= +k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= +k8s.io/code-generator v0.19.2/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= +k8s.io/code-generator v0.19.6/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= +k8s.io/component-base v0.17.0/go.mod h1:rKuRAokNMY2nn2A6LP/MiwpoaMRHpfRnrPaUJJj1Yoc= +k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM= +k8s.io/component-base v0.19.2/go.mod h1:g5LrsiTiabMLZ40AR6Hl45f088DevyGY+cCE2agEIVo= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.2.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.5.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= +k8s.io/klog/v2 v2.8.0 h1:Q3gmuM9hKEjefWFFYF0Mat+YyFJvsUyYuwyNNJ5C9Ts= +k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= +k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29/go.mod h1:F+5wygcW0wmRTnM3cOgIqGivxkwSWIWT5YdsDbeAOaU= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= +k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 h1:vEx13qjvaZ4yfObSSXW7BrMc/KQBBT/Jyee8XtLf4x0= +k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= +k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20200912215256-4140de9c8800/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw= +k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +moul.io/http2curl v1.0.1-0.20190925090545-5cd742060b0e/go.mod h1:nejbQVfXh96n9dSF6cH3Jsk/QI1Z2oEL7sSI2ifXFNA= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= +sigs.k8s.io/controller-runtime v0.7.0/go.mod h1:pJ3YBrJiAqMAZKi6UVGuE98ZrroV1p+pIhoHsMm9wdU= +sigs.k8s.io/controller-tools v0.2.9/go.mod h1:ArP7w60JQKkZf7UU2oWTVnEhoNGA+sOMyuSuS+JFNDQ= +sigs.k8s.io/controller-tools v0.4.1/go.mod h1:G9rHdZMVlBDocIxGkK3jHLWqcTMNvveypYJwrvYKjWU= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU= +sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= +sigs.k8s.io/structured-merge-diff/v2 v2.0.1/go.mod h1:Wb7vfKAodbKgf6tn1Kl0VvGj7mRH6DGaRcixXEJXTsE= +sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.1.0 h1:C4r9BgJ98vrKnnVCjwCSXcWjWe0NKcUQkmzDXZXGwH8= +sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +upper.io/db.v3 v3.6.3+incompatible/go.mod h1:FgTdD24eBjJAbPKsQSiHUNgXjOR4Lub3u1UMHSIh82Y= diff --git a/v2/kfp-api/filter.pb.go b/v2/kfp-api/filter.pb.go new file mode 100644 index 0000000000..82c2995d0d --- /dev/null +++ b/v2/kfp-api/filter.pb.go @@ -0,0 +1,796 @@ +// Copyright 2018 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: backend/api/filter.proto + +package go_client + +import ( + context "context" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Op is the operation to apply. +type Predicate_Op int32 + +const ( + Predicate_UNKNOWN Predicate_Op = 0 + // Operators on scalar values. Only applies to one of |int_value|, + // |long_value|, |string_value| or |timestamp_value|. + Predicate_EQUALS Predicate_Op = 1 + Predicate_NOT_EQUALS Predicate_Op = 2 + Predicate_GREATER_THAN Predicate_Op = 3 + Predicate_GREATER_THAN_EQUALS Predicate_Op = 5 + Predicate_LESS_THAN Predicate_Op = 6 + Predicate_LESS_THAN_EQUALS Predicate_Op = 7 + // Checks if the value is a member of a given array, which should be one of + // |int_values|, |long_values| or |string_values|. + Predicate_IN Predicate_Op = 8 + // Checks if the value contains |string_value| as a substring match. Only + // applies to |string_value|. + Predicate_IS_SUBSTRING Predicate_Op = 9 +) + +// Enum value maps for Predicate_Op. +var ( + Predicate_Op_name = map[int32]string{ + 0: "UNKNOWN", + 1: "EQUALS", + 2: "NOT_EQUALS", + 3: "GREATER_THAN", + 5: "GREATER_THAN_EQUALS", + 6: "LESS_THAN", + 7: "LESS_THAN_EQUALS", + 8: "IN", + 9: "IS_SUBSTRING", + } + Predicate_Op_value = map[string]int32{ + "UNKNOWN": 0, + "EQUALS": 1, + "NOT_EQUALS": 2, + "GREATER_THAN": 3, + "GREATER_THAN_EQUALS": 5, + "LESS_THAN": 6, + "LESS_THAN_EQUALS": 7, + "IN": 8, + "IS_SUBSTRING": 9, + } +) + +func (x Predicate_Op) Enum() *Predicate_Op { + p := new(Predicate_Op) + *p = x + return p +} + +func (x Predicate_Op) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Predicate_Op) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_filter_proto_enumTypes[0].Descriptor() +} + +func (Predicate_Op) Type() protoreflect.EnumType { + return &file_backend_api_filter_proto_enumTypes[0] +} + +func (x Predicate_Op) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Predicate_Op.Descriptor instead. +func (Predicate_Op) EnumDescriptor() ([]byte, []int) { + return file_backend_api_filter_proto_rawDescGZIP(), []int{0, 0} +} + +// Predicate captures individual conditions that must be true for a resource +// being filtered. +type Predicate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Op Predicate_Op `protobuf:"varint,1,opt,name=op,proto3,enum=api.Predicate_Op" json:"op,omitempty"` + Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + // Types that are assignable to Value: + // *Predicate_IntValue + // *Predicate_LongValue + // *Predicate_StringValue + // *Predicate_TimestampValue + // *Predicate_IntValues + // *Predicate_LongValues + // *Predicate_StringValues + Value isPredicate_Value `protobuf_oneof:"value"` +} + +func (x *Predicate) Reset() { + *x = Predicate{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_filter_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Predicate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Predicate) ProtoMessage() {} + +func (x *Predicate) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_filter_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Predicate.ProtoReflect.Descriptor instead. +func (*Predicate) Descriptor() ([]byte, []int) { + return file_backend_api_filter_proto_rawDescGZIP(), []int{0} +} + +func (x *Predicate) GetOp() Predicate_Op { + if x != nil { + return x.Op + } + return Predicate_UNKNOWN +} + +func (x *Predicate) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (m *Predicate) GetValue() isPredicate_Value { + if m != nil { + return m.Value + } + return nil +} + +func (x *Predicate) GetIntValue() int32 { + if x, ok := x.GetValue().(*Predicate_IntValue); ok { + return x.IntValue + } + return 0 +} + +func (x *Predicate) GetLongValue() int64 { + if x, ok := x.GetValue().(*Predicate_LongValue); ok { + return x.LongValue + } + return 0 +} + +func (x *Predicate) GetStringValue() string { + if x, ok := x.GetValue().(*Predicate_StringValue); ok { + return x.StringValue + } + return "" +} + +func (x *Predicate) GetTimestampValue() *timestamppb.Timestamp { + if x, ok := x.GetValue().(*Predicate_TimestampValue); ok { + return x.TimestampValue + } + return nil +} + +func (x *Predicate) GetIntValues() *IntValues { + if x, ok := x.GetValue().(*Predicate_IntValues); ok { + return x.IntValues + } + return nil +} + +func (x *Predicate) GetLongValues() *LongValues { + if x, ok := x.GetValue().(*Predicate_LongValues); ok { + return x.LongValues + } + return nil +} + +func (x *Predicate) GetStringValues() *StringValues { + if x, ok := x.GetValue().(*Predicate_StringValues); ok { + return x.StringValues + } + return nil +} + +type isPredicate_Value interface { + isPredicate_Value() +} + +type Predicate_IntValue struct { + IntValue int32 `protobuf:"varint,3,opt,name=int_value,json=intValue,proto3,oneof"` +} + +type Predicate_LongValue struct { + LongValue int64 `protobuf:"varint,4,opt,name=long_value,json=longValue,proto3,oneof"` +} + +type Predicate_StringValue struct { + StringValue string `protobuf:"bytes,5,opt,name=string_value,json=stringValue,proto3,oneof"` +} + +type Predicate_TimestampValue struct { + // Timestamp values will be converted to Unix time (seconds since the epoch) + // prior to being used in a filtering operation. + TimestampValue *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=timestamp_value,json=timestampValue,proto3,oneof"` +} + +type Predicate_IntValues struct { + // Array values below are only meant to be used by the IN operator. + IntValues *IntValues `protobuf:"bytes,7,opt,name=int_values,json=intValues,proto3,oneof"` +} + +type Predicate_LongValues struct { + LongValues *LongValues `protobuf:"bytes,8,opt,name=long_values,json=longValues,proto3,oneof"` +} + +type Predicate_StringValues struct { + StringValues *StringValues `protobuf:"bytes,9,opt,name=string_values,json=stringValues,proto3,oneof"` +} + +func (*Predicate_IntValue) isPredicate_Value() {} + +func (*Predicate_LongValue) isPredicate_Value() {} + +func (*Predicate_StringValue) isPredicate_Value() {} + +func (*Predicate_TimestampValue) isPredicate_Value() {} + +func (*Predicate_IntValues) isPredicate_Value() {} + +func (*Predicate_LongValues) isPredicate_Value() {} + +func (*Predicate_StringValues) isPredicate_Value() {} + +type IntValues struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Values []int32 `protobuf:"varint,1,rep,packed,name=values,proto3" json:"values,omitempty"` +} + +func (x *IntValues) Reset() { + *x = IntValues{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_filter_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IntValues) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IntValues) ProtoMessage() {} + +func (x *IntValues) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_filter_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IntValues.ProtoReflect.Descriptor instead. +func (*IntValues) Descriptor() ([]byte, []int) { + return file_backend_api_filter_proto_rawDescGZIP(), []int{1} +} + +func (x *IntValues) GetValues() []int32 { + if x != nil { + return x.Values + } + return nil +} + +type StringValues struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Values []string `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"` +} + +func (x *StringValues) Reset() { + *x = StringValues{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_filter_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StringValues) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StringValues) ProtoMessage() {} + +func (x *StringValues) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_filter_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StringValues.ProtoReflect.Descriptor instead. +func (*StringValues) Descriptor() ([]byte, []int) { + return file_backend_api_filter_proto_rawDescGZIP(), []int{2} +} + +func (x *StringValues) GetValues() []string { + if x != nil { + return x.Values + } + return nil +} + +type LongValues struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Values []int64 `protobuf:"varint,3,rep,packed,name=values,proto3" json:"values,omitempty"` +} + +func (x *LongValues) Reset() { + *x = LongValues{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_filter_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LongValues) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LongValues) ProtoMessage() {} + +func (x *LongValues) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_filter_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LongValues.ProtoReflect.Descriptor instead. +func (*LongValues) Descriptor() ([]byte, []int) { + return file_backend_api_filter_proto_rawDescGZIP(), []int{3} +} + +func (x *LongValues) GetValues() []int64 { + if x != nil { + return x.Values + } + return nil +} + +// Filter is used to filter resources returned from a ListXXX request. +// +// Example filters: +// 1) Filter runs with status = 'Running' +// filter { +// predicate { +// key: "status" +// op: EQUALS +// string_value: "Running" +// } +// } +// +// 2) Filter runs that succeeded since Dec 1, 2018 +// filter { +// predicate { +// key: "status" +// op: EQUALS +// string_value: "Succeeded" +// } +// predicate { +// key: "created_at" +// op: GREATER_THAN +// timestamp_value { +// seconds: 1543651200 +// } +// } +// } +// +// 3) Filter runs with one of labels 'label_1' or 'label_2' +// +// filter { +// predicate { +// key: "label" +// op: IN +// string_values { +// value: 'label_1' +// value: 'label_2' +// } +// } +// } +type Filter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // All predicates are AND-ed when this filter is applied. + Predicates []*Predicate `protobuf:"bytes,1,rep,name=predicates,proto3" json:"predicates,omitempty"` +} + +func (x *Filter) Reset() { + *x = Filter{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_filter_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Filter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Filter) ProtoMessage() {} + +func (x *Filter) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_filter_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Filter.ProtoReflect.Descriptor instead. +func (*Filter) Descriptor() ([]byte, []int) { + return file_backend_api_filter_proto_rawDescGZIP(), []int{4} +} + +func (x *Filter) GetPredicates() []*Predicate { + if x != nil { + return x.Predicates + } + return nil +} + +var File_backend_api_filter_proto protoreflect.FileDescriptor + +var file_backend_api_filter_proto_rawDesc = []byte{ + 0x0a, 0x18, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xae, + 0x04, 0x0a, 0x09, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x02, + 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, + 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x02, 0x6f, 0x70, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x1f, 0x0a, 0x0a, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x0e, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2f, 0x0a, + 0x0a, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x48, 0x00, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x32, + 0x0a, 0x0b, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0c, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x97, 0x01, 0x0a, + 0x02, 0x4f, 0x70, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, + 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, + 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x03, 0x12, 0x17, + 0x0a, 0x13, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x45, + 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x45, 0x53, 0x53, 0x5f, + 0x54, 0x48, 0x41, 0x4e, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, + 0x48, 0x41, 0x4e, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x07, 0x12, 0x06, 0x0a, 0x02, + 0x49, 0x4e, 0x10, 0x08, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x54, + 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x23, 0x0a, 0x09, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x22, 0x26, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x24, 0x0a, 0x0a, + 0x4c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x22, 0x38, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x0a, + 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x52, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x32, 0x3d, 0x0a, 0x12, + 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x27, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, + 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x0b, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x00, 0x42, 0x35, 0x5a, 0x33, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, + 0x6f, 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, + 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x5f, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_filter_proto_rawDescOnce sync.Once + file_backend_api_filter_proto_rawDescData = file_backend_api_filter_proto_rawDesc +) + +func file_backend_api_filter_proto_rawDescGZIP() []byte { + file_backend_api_filter_proto_rawDescOnce.Do(func() { + file_backend_api_filter_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_filter_proto_rawDescData) + }) + return file_backend_api_filter_proto_rawDescData +} + +var file_backend_api_filter_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_backend_api_filter_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_backend_api_filter_proto_goTypes = []interface{}{ + (Predicate_Op)(0), // 0: api.Predicate.Op + (*Predicate)(nil), // 1: api.Predicate + (*IntValues)(nil), // 2: api.IntValues + (*StringValues)(nil), // 3: api.StringValues + (*LongValues)(nil), // 4: api.LongValues + (*Filter)(nil), // 5: api.Filter + (*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp +} +var file_backend_api_filter_proto_depIdxs = []int32{ + 0, // 0: api.Predicate.op:type_name -> api.Predicate.Op + 6, // 1: api.Predicate.timestamp_value:type_name -> google.protobuf.Timestamp + 2, // 2: api.Predicate.int_values:type_name -> api.IntValues + 4, // 3: api.Predicate.long_values:type_name -> api.LongValues + 3, // 4: api.Predicate.string_values:type_name -> api.StringValues + 1, // 5: api.Filter.predicates:type_name -> api.Predicate + 5, // 6: api.DummyFilterService.GetFilter:input_type -> api.Filter + 5, // 7: api.DummyFilterService.GetFilter:output_type -> api.Filter + 7, // [7:8] is the sub-list for method output_type + 6, // [6:7] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_backend_api_filter_proto_init() } +func file_backend_api_filter_proto_init() { + if File_backend_api_filter_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_backend_api_filter_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Predicate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_filter_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IntValues); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_filter_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StringValues); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_filter_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LongValues); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_filter_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Filter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_backend_api_filter_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*Predicate_IntValue)(nil), + (*Predicate_LongValue)(nil), + (*Predicate_StringValue)(nil), + (*Predicate_TimestampValue)(nil), + (*Predicate_IntValues)(nil), + (*Predicate_LongValues)(nil), + (*Predicate_StringValues)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_filter_proto_rawDesc, + NumEnums: 1, + NumMessages: 5, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_backend_api_filter_proto_goTypes, + DependencyIndexes: file_backend_api_filter_proto_depIdxs, + EnumInfos: file_backend_api_filter_proto_enumTypes, + MessageInfos: file_backend_api_filter_proto_msgTypes, + }.Build() + File_backend_api_filter_proto = out.File + file_backend_api_filter_proto_rawDesc = nil + file_backend_api_filter_proto_goTypes = nil + file_backend_api_filter_proto_depIdxs = nil +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConnInterface + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion6 + +// DummyFilterServiceClient is the client API for DummyFilterService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type DummyFilterServiceClient interface { + GetFilter(ctx context.Context, in *Filter, opts ...grpc.CallOption) (*Filter, error) +} + +type dummyFilterServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewDummyFilterServiceClient(cc grpc.ClientConnInterface) DummyFilterServiceClient { + return &dummyFilterServiceClient{cc} +} + +func (c *dummyFilterServiceClient) GetFilter(ctx context.Context, in *Filter, opts ...grpc.CallOption) (*Filter, error) { + out := new(Filter) + err := c.cc.Invoke(ctx, "/api.DummyFilterService/GetFilter", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// DummyFilterServiceServer is the server API for DummyFilterService service. +type DummyFilterServiceServer interface { + GetFilter(context.Context, *Filter) (*Filter, error) +} + +// UnimplementedDummyFilterServiceServer can be embedded to have forward compatible implementations. +type UnimplementedDummyFilterServiceServer struct { +} + +func (*UnimplementedDummyFilterServiceServer) GetFilter(context.Context, *Filter) (*Filter, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetFilter not implemented") +} + +func RegisterDummyFilterServiceServer(s *grpc.Server, srv DummyFilterServiceServer) { + s.RegisterService(&_DummyFilterService_serviceDesc, srv) +} + +func _DummyFilterService_GetFilter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Filter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DummyFilterServiceServer).GetFilter(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.DummyFilterService/GetFilter", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DummyFilterServiceServer).GetFilter(ctx, req.(*Filter)) + } + return interceptor(ctx, in, info, handler) +} + +var _DummyFilterService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "api.DummyFilterService", + HandlerType: (*DummyFilterServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetFilter", + Handler: _DummyFilterService_GetFilter_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "backend/api/filter.proto", +} diff --git a/v2/kfp-api/resource_reference.pb.go b/v2/kfp-api/resource_reference.pb.go new file mode 100644 index 0000000000..4fd6143903 --- /dev/null +++ b/v2/kfp-api/resource_reference.pb.go @@ -0,0 +1,383 @@ +// Copyright 2018 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: backend/api/resource_reference.proto + +package go_client + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ResourceType int32 + +const ( + ResourceType_UNKNOWN_RESOURCE_TYPE ResourceType = 0 + ResourceType_EXPERIMENT ResourceType = 1 + ResourceType_JOB ResourceType = 2 + ResourceType_PIPELINE ResourceType = 3 + ResourceType_PIPELINE_VERSION ResourceType = 4 + ResourceType_NAMESPACE ResourceType = 5 +) + +// Enum value maps for ResourceType. +var ( + ResourceType_name = map[int32]string{ + 0: "UNKNOWN_RESOURCE_TYPE", + 1: "EXPERIMENT", + 2: "JOB", + 3: "PIPELINE", + 4: "PIPELINE_VERSION", + 5: "NAMESPACE", + } + ResourceType_value = map[string]int32{ + "UNKNOWN_RESOURCE_TYPE": 0, + "EXPERIMENT": 1, + "JOB": 2, + "PIPELINE": 3, + "PIPELINE_VERSION": 4, + "NAMESPACE": 5, + } +) + +func (x ResourceType) Enum() *ResourceType { + p := new(ResourceType) + *p = x + return p +} + +func (x ResourceType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ResourceType) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_resource_reference_proto_enumTypes[0].Descriptor() +} + +func (ResourceType) Type() protoreflect.EnumType { + return &file_backend_api_resource_reference_proto_enumTypes[0] +} + +func (x ResourceType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ResourceType.Descriptor instead. +func (ResourceType) EnumDescriptor() ([]byte, []int) { + return file_backend_api_resource_reference_proto_rawDescGZIP(), []int{0} +} + +type Relationship int32 + +const ( + Relationship_UNKNOWN_RELATIONSHIP Relationship = 0 + Relationship_OWNER Relationship = 1 + Relationship_CREATOR Relationship = 2 +) + +// Enum value maps for Relationship. +var ( + Relationship_name = map[int32]string{ + 0: "UNKNOWN_RELATIONSHIP", + 1: "OWNER", + 2: "CREATOR", + } + Relationship_value = map[string]int32{ + "UNKNOWN_RELATIONSHIP": 0, + "OWNER": 1, + "CREATOR": 2, + } +) + +func (x Relationship) Enum() *Relationship { + p := new(Relationship) + *p = x + return p +} + +func (x Relationship) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Relationship) Descriptor() protoreflect.EnumDescriptor { + return file_backend_api_resource_reference_proto_enumTypes[1].Descriptor() +} + +func (Relationship) Type() protoreflect.EnumType { + return &file_backend_api_resource_reference_proto_enumTypes[1] +} + +func (x Relationship) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Relationship.Descriptor instead. +func (Relationship) EnumDescriptor() ([]byte, []int) { + return file_backend_api_resource_reference_proto_rawDescGZIP(), []int{1} +} + +type ResourceKey struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The type of the resource that referred to. + Type ResourceType `protobuf:"varint,1,opt,name=type,proto3,enum=api.ResourceType" json:"type,omitempty"` + // The ID of the resource that referred to. + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *ResourceKey) Reset() { + *x = ResourceKey{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_resource_reference_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceKey) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceKey) ProtoMessage() {} + +func (x *ResourceKey) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_resource_reference_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceKey.ProtoReflect.Descriptor instead. +func (*ResourceKey) Descriptor() ([]byte, []int) { + return file_backend_api_resource_reference_proto_rawDescGZIP(), []int{0} +} + +func (x *ResourceKey) GetType() ResourceType { + if x != nil { + return x.Type + } + return ResourceType_UNKNOWN_RESOURCE_TYPE +} + +func (x *ResourceKey) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type ResourceReference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key *ResourceKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // The name of the resource that referred to. + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + // Required field. The relationship from referred resource to the object. + Relationship Relationship `protobuf:"varint,2,opt,name=relationship,proto3,enum=api.Relationship" json:"relationship,omitempty"` +} + +func (x *ResourceReference) Reset() { + *x = ResourceReference{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_resource_reference_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceReference) ProtoMessage() {} + +func (x *ResourceReference) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_resource_reference_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceReference.ProtoReflect.Descriptor instead. +func (*ResourceReference) Descriptor() ([]byte, []int) { + return file_backend_api_resource_reference_proto_rawDescGZIP(), []int{1} +} + +func (x *ResourceReference) GetKey() *ResourceKey { + if x != nil { + return x.Key + } + return nil +} + +func (x *ResourceReference) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ResourceReference) GetRelationship() Relationship { + if x != nil { + return x.Relationship + } + return Relationship_UNKNOWN_RELATIONSHIP +} + +var File_backend_api_resource_reference_proto protoreflect.FileDescriptor + +var file_backend_api_resource_reference_proto_rawDesc = []byte{ + 0x0a, 0x24, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x22, 0x44, 0x0a, 0x0b, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x82, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x35, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x2a, 0x75, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, + 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x10, + 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4a, 0x4f, 0x42, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x49, + 0x50, 0x45, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x49, 0x50, 0x45, + 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, 0x0d, + 0x0a, 0x09, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x05, 0x2a, 0x40, 0x0a, + 0x0c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x12, 0x18, 0x0a, + 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x53, 0x48, 0x49, 0x50, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x57, 0x4e, 0x45, 0x52, + 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x52, 0x45, 0x41, 0x54, 0x4f, 0x52, 0x10, 0x02, 0x42, + 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, + 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x5f, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_resource_reference_proto_rawDescOnce sync.Once + file_backend_api_resource_reference_proto_rawDescData = file_backend_api_resource_reference_proto_rawDesc +) + +func file_backend_api_resource_reference_proto_rawDescGZIP() []byte { + file_backend_api_resource_reference_proto_rawDescOnce.Do(func() { + file_backend_api_resource_reference_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_resource_reference_proto_rawDescData) + }) + return file_backend_api_resource_reference_proto_rawDescData +} + +var file_backend_api_resource_reference_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_backend_api_resource_reference_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_backend_api_resource_reference_proto_goTypes = []interface{}{ + (ResourceType)(0), // 0: api.ResourceType + (Relationship)(0), // 1: api.Relationship + (*ResourceKey)(nil), // 2: api.ResourceKey + (*ResourceReference)(nil), // 3: api.ResourceReference +} +var file_backend_api_resource_reference_proto_depIdxs = []int32{ + 0, // 0: api.ResourceKey.type:type_name -> api.ResourceType + 2, // 1: api.ResourceReference.key:type_name -> api.ResourceKey + 1, // 2: api.ResourceReference.relationship:type_name -> api.Relationship + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_backend_api_resource_reference_proto_init() } +func file_backend_api_resource_reference_proto_init() { + if File_backend_api_resource_reference_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_backend_api_resource_reference_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_resource_reference_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceReference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_resource_reference_proto_rawDesc, + NumEnums: 2, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_backend_api_resource_reference_proto_goTypes, + DependencyIndexes: file_backend_api_resource_reference_proto_depIdxs, + EnumInfos: file_backend_api_resource_reference_proto_enumTypes, + MessageInfos: file_backend_api_resource_reference_proto_msgTypes, + }.Build() + File_backend_api_resource_reference_proto = out.File + file_backend_api_resource_reference_proto_rawDesc = nil + file_backend_api_resource_reference_proto_goTypes = nil + file_backend_api_resource_reference_proto_depIdxs = nil +} diff --git a/v2/kfp-api/task.pb.go b/v2/kfp-api/task.pb.go new file mode 100644 index 0000000000..42619b7777 --- /dev/null +++ b/v2/kfp-api/task.pb.go @@ -0,0 +1,667 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: backend/api/task.proto + +package go_client + +import ( + context "context" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Task struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Output. Unique task ID. Generated by API server. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Required input field. The Namespace to which this pipeline task belongs. + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + // Required input field. The PipelineName to which this pipeline task belongs. + // Namespace will be encoded in the PipelineName. + // "namespace/${namespace}/pipeline/${pipelineName}" for namespaced pipelines + // "pipeline/${pipelineName}" for shared pipelines + PipelineName string `protobuf:"bytes,3,opt,name=pipelineName,proto3" json:"pipelineName,omitempty"` + // Required input field.The ID of the PipelineRun that the PipelineTask belongs to. + RunId string `protobuf:"bytes,4,opt,name=runId,proto3" json:"runId,omitempty"` + // Required input field. The ID of the MLMD execution associated with the PipelineTask. + MlmdExecutionID string `protobuf:"bytes,5,opt,name=mlmdExecutionID,proto3" json:"mlmdExecutionID,omitempty"` + // Required input field. The time this task is created. + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + // Optional input field. The time this task is finished. + FinishedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=finished_at,json=finishedAt,proto3" json:"finished_at,omitempty"` + // Required input field. + Fingerprint string `protobuf:"bytes,8,opt,name=fingerprint,proto3" json:"fingerprint,omitempty"` +} + +func (x *Task) Reset() { + *x = Task{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_task_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Task) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Task) ProtoMessage() {} + +func (x *Task) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_task_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Task.ProtoReflect.Descriptor instead. +func (*Task) Descriptor() ([]byte, []int) { + return file_backend_api_task_proto_rawDescGZIP(), []int{0} +} + +func (x *Task) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Task) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *Task) GetPipelineName() string { + if x != nil { + return x.PipelineName + } + return "" +} + +func (x *Task) GetRunId() string { + if x != nil { + return x.RunId + } + return "" +} + +func (x *Task) GetMlmdExecutionID() string { + if x != nil { + return x.MlmdExecutionID + } + return "" +} + +func (x *Task) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *Task) GetFinishedAt() *timestamppb.Timestamp { + if x != nil { + return x.FinishedAt + } + return nil +} + +func (x *Task) GetFingerprint() string { + if x != nil { + return x.Fingerprint + } + return "" +} + +type CreateTaskRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Task *Task `protobuf:"bytes,1,opt,name=task,proto3" json:"task,omitempty"` +} + +func (x *CreateTaskRequest) Reset() { + *x = CreateTaskRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_task_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTaskRequest) ProtoMessage() {} + +func (x *CreateTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_task_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTaskRequest.ProtoReflect.Descriptor instead. +func (*CreateTaskRequest) Descriptor() ([]byte, []int) { + return file_backend_api_task_proto_rawDescGZIP(), []int{1} +} + +func (x *CreateTaskRequest) GetTask() *Task { + if x != nil { + return x.Task + } + return nil +} + +type ListTasksRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A page token to request the next page of results. The token is acquried + // from the nextPageToken field of the response from the previous + // ListExperiment call or can be omitted when fetching the first page. + PageToken string `protobuf:"bytes,1,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` + // The number of experiments to be listed per page. If there are more + // experiments than this number, the response message will contain a + // nextPageToken field you can use to fetch the next page. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // Can be format of "field_name", "field_name asc" or "field_name desc" + // Ascending by default. + SortBy string `protobuf:"bytes,3,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"` + // What resource reference to filter on. + // E.g. If listing tasks for an pipeline run, the query string would be + // resource_reference_key.type="PIPELINE"&resource_reference_key.id=123 + ResourceReferenceKey *ResourceKey `protobuf:"bytes,4,opt,name=resource_reference_key,json=resourceReferenceKey,proto3" json:"resource_reference_key,omitempty"` + // A url-encoded, JSON-serialized Filter protocol buffer (see + // [filter.proto](https://github.com/kubeflow/pipelines/ + // blob/master/backend/api/filter.proto)). + Filter string `protobuf:"bytes,5,opt,name=filter,proto3" json:"filter,omitempty"` +} + +func (x *ListTasksRequest) Reset() { + *x = ListTasksRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_task_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTasksRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTasksRequest) ProtoMessage() {} + +func (x *ListTasksRequest) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_task_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTasksRequest.ProtoReflect.Descriptor instead. +func (*ListTasksRequest) Descriptor() ([]byte, []int) { + return file_backend_api_task_proto_rawDescGZIP(), []int{2} +} + +func (x *ListTasksRequest) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +func (x *ListTasksRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListTasksRequest) GetSortBy() string { + if x != nil { + return x.SortBy + } + return "" +} + +func (x *ListTasksRequest) GetResourceReferenceKey() *ResourceKey { + if x != nil { + return x.ResourceReferenceKey + } + return nil +} + +func (x *ListTasksRequest) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +type ListTasksResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A list of tasks returned. + Tasks []*Task `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` + // The token to list the next page of experiments. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` + // The total number of experiments for the given query. + TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` +} + +func (x *ListTasksResponse) Reset() { + *x = ListTasksResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backend_api_task_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTasksResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTasksResponse) ProtoMessage() {} + +func (x *ListTasksResponse) ProtoReflect() protoreflect.Message { + mi := &file_backend_api_task_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTasksResponse.ProtoReflect.Descriptor instead. +func (*ListTasksResponse) Descriptor() ([]byte, []int) { + return file_backend_api_task_proto_rawDescGZIP(), []int{3} +} + +func (x *ListTasksResponse) GetTasks() []*Task { + if x != nil { + return x.Tasks + } + return nil +} + +func (x *ListTasksResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + +func (x *ListTasksResponse) GetTotalSize() int32 { + if x != nil { + return x.TotalSize + } + return 0 +} + +var File_backend_api_task_proto protoreflect.FileDescriptor + +var file_backend_api_task_proto_rawDesc = []byte{ + 0x0a, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x61, + 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, 0x1c, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x62, 0x61, + 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xb2, 0x02, 0x0a, 0x04, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, + 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x6d, 0x6c, 0x6d, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x6c, + 0x6d, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x39, 0x0a, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x69, + 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x66, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x65, 0x64, 0x41, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, + 0x72, 0x69, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x69, 0x6e, 0x67, + 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x22, 0x32, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x04, + 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x22, 0xc7, 0x01, 0x0a, 0x10, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, + 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x17, 0x0a, 0x07, + 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x46, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, + 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x7b, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, + 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x05, 0x74, 0x61, + 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x54, 0x61, 0x73, 0x6b, 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, + 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, + 0x7a, 0x65, 0x32, 0xbc, 0x01, 0x0a, 0x0b, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x53, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x09, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, + 0x61, 0x73, 0x6b, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x14, 0x2f, 0x61, 0x70, + 0x69, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, + 0x73, 0x3a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x58, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x61, 0x73, 0x6b, 0x73, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, + 0x69, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, + 0x73, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, + 0x6f, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_backend_api_task_proto_rawDescOnce sync.Once + file_backend_api_task_proto_rawDescData = file_backend_api_task_proto_rawDesc +) + +func file_backend_api_task_proto_rawDescGZIP() []byte { + file_backend_api_task_proto_rawDescOnce.Do(func() { + file_backend_api_task_proto_rawDescData = protoimpl.X.CompressGZIP(file_backend_api_task_proto_rawDescData) + }) + return file_backend_api_task_proto_rawDescData +} + +var file_backend_api_task_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_backend_api_task_proto_goTypes = []interface{}{ + (*Task)(nil), // 0: api.Task + (*CreateTaskRequest)(nil), // 1: api.CreateTaskRequest + (*ListTasksRequest)(nil), // 2: api.ListTasksRequest + (*ListTasksResponse)(nil), // 3: api.ListTasksResponse + (*timestamppb.Timestamp)(nil), // 4: google.protobuf.Timestamp + (*ResourceKey)(nil), // 5: api.ResourceKey +} +var file_backend_api_task_proto_depIdxs = []int32{ + 4, // 0: api.Task.created_at:type_name -> google.protobuf.Timestamp + 4, // 1: api.Task.finished_at:type_name -> google.protobuf.Timestamp + 0, // 2: api.CreateTaskRequest.task:type_name -> api.Task + 5, // 3: api.ListTasksRequest.resource_reference_key:type_name -> api.ResourceKey + 0, // 4: api.ListTasksResponse.tasks:type_name -> api.Task + 1, // 5: api.TaskService.CreateTask:input_type -> api.CreateTaskRequest + 2, // 6: api.TaskService.ListTasks:input_type -> api.ListTasksRequest + 0, // 7: api.TaskService.CreateTask:output_type -> api.Task + 3, // 8: api.TaskService.ListTasks:output_type -> api.ListTasksResponse + 7, // [7:9] is the sub-list for method output_type + 5, // [5:7] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_backend_api_task_proto_init() } +func file_backend_api_task_proto_init() { + if File_backend_api_task_proto != nil { + return + } + file_backend_api_resource_reference_proto_init() + if !protoimpl.UnsafeEnabled { + file_backend_api_task_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Task); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_task_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_task_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTasksRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backend_api_task_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTasksResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backend_api_task_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_backend_api_task_proto_goTypes, + DependencyIndexes: file_backend_api_task_proto_depIdxs, + MessageInfos: file_backend_api_task_proto_msgTypes, + }.Build() + File_backend_api_task_proto = out.File + file_backend_api_task_proto_rawDesc = nil + file_backend_api_task_proto_goTypes = nil + file_backend_api_task_proto_depIdxs = nil +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConnInterface + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion6 + +// TaskServiceClient is the client API for TaskService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type TaskServiceClient interface { + // Creates a new task. + CreateTask(ctx context.Context, in *CreateTaskRequest, opts ...grpc.CallOption) (*Task, error) + // Finds all tasks. Supports pagination, and sorting on certain fields. + ListTasks(ctx context.Context, in *ListTasksRequest, opts ...grpc.CallOption) (*ListTasksResponse, error) +} + +type taskServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewTaskServiceClient(cc grpc.ClientConnInterface) TaskServiceClient { + return &taskServiceClient{cc} +} + +func (c *taskServiceClient) CreateTask(ctx context.Context, in *CreateTaskRequest, opts ...grpc.CallOption) (*Task, error) { + out := new(Task) + err := c.cc.Invoke(ctx, "/api.TaskService/CreateTask", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskServiceClient) ListTasks(ctx context.Context, in *ListTasksRequest, opts ...grpc.CallOption) (*ListTasksResponse, error) { + out := new(ListTasksResponse) + err := c.cc.Invoke(ctx, "/api.TaskService/ListTasks", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// TaskServiceServer is the server API for TaskService service. +type TaskServiceServer interface { + // Creates a new task. + CreateTask(context.Context, *CreateTaskRequest) (*Task, error) + // Finds all tasks. Supports pagination, and sorting on certain fields. + ListTasks(context.Context, *ListTasksRequest) (*ListTasksResponse, error) +} + +// UnimplementedTaskServiceServer can be embedded to have forward compatible implementations. +type UnimplementedTaskServiceServer struct { +} + +func (*UnimplementedTaskServiceServer) CreateTask(context.Context, *CreateTaskRequest) (*Task, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateTask not implemented") +} +func (*UnimplementedTaskServiceServer) ListTasks(context.Context, *ListTasksRequest) (*ListTasksResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListTasks not implemented") +} + +func RegisterTaskServiceServer(s *grpc.Server, srv TaskServiceServer) { + s.RegisterService(&_TaskService_serviceDesc, srv) +} + +func _TaskService_CreateTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServiceServer).CreateTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.TaskService/CreateTask", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServiceServer).CreateTask(ctx, req.(*CreateTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TaskService_ListTasks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTasksRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServiceServer).ListTasks(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.TaskService/ListTasks", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServiceServer).ListTasks(ctx, req.(*ListTasksRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _TaskService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "api.TaskService", + HandlerType: (*TaskServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateTask", + Handler: _TaskService_CreateTask_Handler, + }, + { + MethodName: "ListTasks", + Handler: _TaskService_ListTasks_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "backend/api/task.proto", +} diff --git a/v2/launcher_container/Dockerfile b/v2/launcher_container/Dockerfile deleted file mode 100644 index efc57e8908..0000000000 --- a/v2/launcher_container/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -FROM golang:1.15-alpine - -ENV GO111MODULE=on \ - CGO_ENABLED=0 \ - GOOS=linux \ - GOARCH=amd64 - -# Copy the code into the container -COPY . /build/. - -# Build the application -WORKDIR /build -RUN go build -tags netgo -ldflags '-extldflags "-static"' github.com/kubeflow/pipelines/v2/cmd/launch - -COPY launcher_container/mount_launcher.sh /bin/mount_launcher.sh -RUN chmod +x /bin/mount_launcher.sh - -WORKDIR /bin -RUN cp /build/launch . - -ENTRYPOINT ["/bin/launch", "--mlmd_server_address", "${METADATA_GRPC_SERVICE_HOST}", "--mlmd_server_port", "${METADATA_GRPC_SERVICE_PORT}"] diff --git a/v2/launcher_container/mount_launcher.sh b/v2/launcher_container/mount_launcher.sh deleted file mode 100644 index 0092ff990f..0000000000 --- a/v2/launcher_container/mount_launcher.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -cp /bin/launch /kfp-launcher/launch \ No newline at end of file diff --git a/v2/metadata/client.go b/v2/metadata/client.go index 57785a53c5..4da36830f2 100644 --- a/v2/metadata/client.go +++ b/v2/metadata/client.go @@ -1,4 +1,4 @@ -// Copyright 2021 Google LLC +// Copyright 2021 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,20 +20,31 @@ import ( "context" "errors" "fmt" + "path" + "strconv" + "strings" + "sync" + "time" + + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" "github.com/golang/glog" + grpc_retry "github.com/grpc-ecosystem/go-grpc-middleware/retry" pb "github.com/kubeflow/pipelines/v2/third_party/ml_metadata" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/proto" "gopkg.in/yaml.v2" ) const ( - pipelineContextTypeName = "kfp.Pipeline" - pipelineRunContextTypeName = "kfp.PipelineRun" - containerExecutionTypeName = "kfp.ContainerExecution" + pipelineContextTypeName = "system.Pipeline" + pipelineRunContextTypeName = "system.PipelineRun" + containerExecutionTypeName = "system.ContainerExecution" + dagExecutionTypeName = "system.DAGExecution" + mlmdClientSideMaxRetries = 3 ) var ( @@ -46,6 +57,10 @@ var ( Name: proto.String(pipelineRunContextTypeName), } + dagExecutionType = &pb.ExecutionType{ + Name: proto.String(dagExecutionTypeName), + } + containerExecutionType = &pb.ExecutionType{ Name: proto.String(containerExecutionTypeName), } @@ -53,19 +68,29 @@ var ( // Client is an MLMD service client. type Client struct { - svc pb.MetadataStoreServiceClient + svc pb.MetadataStoreServiceClient + ctxTypeCache sync.Map } // NewClient creates a Client given the MLMD server address and port. func NewClient(serverAddress, serverPort string) (*Client, error) { - // TODO(neuromage): Wrap errors so we can get a stack trace. - conn, err := grpc.Dial(fmt.Sprintf("%s:%s", serverAddress, serverPort), grpc.WithInsecure()) + opts := []grpc_retry.CallOption{ + grpc_retry.WithMax(mlmdClientSideMaxRetries), + grpc_retry.WithBackoff(grpc_retry.BackoffExponentialWithJitter(300*time.Millisecond, 0.20)), + grpc_retry.WithCodes(codes.Aborted), + } + conn, err := grpc.Dial(fmt.Sprintf("%s:%s", serverAddress, serverPort), + grpc.WithInsecure(), + grpc.WithStreamInterceptor(grpc_retry.StreamClientInterceptor(opts...)), + grpc.WithUnaryInterceptor(grpc_retry.UnaryClientInterceptor(opts...)), + ) if err != nil { - return nil, err + return nil, fmt.Errorf("metadata.NewClient() failed: %w", err) } return &Client{ - svc: pb.NewMetadataStoreServiceClient(conn), + svc: pb.NewMetadataStoreServiceClient(conn), + ctxTypeCache: sync.Map{}, }, nil } @@ -77,10 +102,35 @@ type Parameters struct { DoubleParameters map[string]float64 } +func NewParameters(params map[string]*pipelinespec.Value) (*Parameters, error) { + result := &Parameters{ + IntParameters: make(map[string]int64), + StringParameters: make(map[string]string), + DoubleParameters: make(map[string]float64), + } + for name, parameter := range params { + switch t := parameter.Value.(type) { + case *pipelinespec.Value_StringValue: + result.StringParameters[name] = parameter.GetStringValue() + case *pipelinespec.Value_IntValue: + result.IntParameters[name] = parameter.GetIntValue() + case *pipelinespec.Value_DoubleValue: + result.DoubleParameters[name] = parameter.GetDoubleValue() + default: + return nil, fmt.Errorf("failed to convert from map[string]*pipelinespec.Value to metadata.Parameters: unknown parameter type for parameter name=%q: %T", name, t) + } + } + return result, nil +} + // ExecutionConfig represents the input parameters and artifacts to an Execution. type ExecutionConfig struct { - InputParameters *Parameters - InputArtifacts []*InputArtifact + InputParameters *Parameters + InputArtifactIDs map[string][]int64 + TaskName, PodName, PodUID, Namespace, + Image, CachedMLMDExecutionID string + // a temporary flag to special case some logic for root DAG + IsRootDAG bool } // InputArtifact is a wrapper around an MLMD artifact used as component inputs. @@ -91,31 +141,119 @@ type InputArtifact struct { // OutputArtifact represents a schema and an MLMD artifact for output artifacts // produced by a component. type OutputArtifact struct { + Name string Artifact *pb.Artifact Schema string } +func (oa *OutputArtifact) Marshal() ([]byte, error) { + b, err := protojson.Marshal(oa.Artifact) + if err != nil { + return nil, err + } + return b, nil +} + +func (oa *OutputArtifact) ToRuntimeArtifact() (*pipelinespec.RuntimeArtifact, error) { + if oa == nil { + return nil, nil + } + ra, err := toRuntimeArtifact(oa.Artifact) + if err != nil { + return nil, err + } + if ra.Type == nil { + ra.Type = &pipelinespec.ArtifactTypeSchema{} + } + ra.Type.Kind = &pipelinespec.ArtifactTypeSchema_InstanceSchema{ + InstanceSchema: oa.Schema, + } + return ra, nil +} + // Pipeline is a handle for the current pipeline. type Pipeline struct { pipelineCtx *pb.Context pipelineRunCtx *pb.Context } +func (p *Pipeline) GetRunCtxID() int64 { + if p == nil { + return 0 + } + return p.pipelineRunCtx.GetId() +} + +func (p *Pipeline) GetPipelineRoot() string { + if p == nil { + return "" + } + props := p.pipelineRunCtx.GetCustomProperties() + root, ok := props[keyPipelineRoot] + if !ok { + return "" + } + return root.GetStringValue() +} + // Execution is a handle for the current execution. type Execution struct { execution *pb.Execution pipeline *Pipeline } +func (e *Execution) GetID() int64 { + if e == nil { + return 0 + } + return e.execution.GetId() +} + +func (e *Execution) String() string { + if e == nil { + return "" + } + return e.execution.String() +} + +func (e *Execution) GetPipeline() *Pipeline { + if e == nil { + return nil + } + return e.pipeline +} + +func (e *Execution) TaskName() string { + if e == nil { + return "" + } + return e.execution.GetCustomProperties()[keyTaskName].GetStringValue() +} + // GetPipeline returns the current pipeline represented by the specified // pipeline name and run ID. -func (c *Client) GetPipeline(ctx context.Context, pipelineName string, pipelineRunID string) (*Pipeline, error) { - pipelineContext, err := getOrInsertContext(ctx, c.svc, pipelineName, pipelineContextType) +func (c *Client) GetPipeline(ctx context.Context, pipelineName, pipelineRunID, namespace, runResource, pipelineRoot string) (*Pipeline, error) { + pipelineContext, err := c.getOrInsertContext(ctx, pipelineName, pipelineContextType, nil) + if err != nil { + return nil, err + } + runMetadata := map[string]*pb.Value{ + keyNamespace: stringValue(namespace), + keyResourceName: stringValue(runResource), + // pipeline root of this run + keyPipelineRoot: stringValue(strings.TrimRight(pipelineRoot, "/") + "/" + path.Join(pipelineName, pipelineRunID)), + } + pipelineRunContext, err := c.getOrInsertContext(ctx, pipelineRunID, pipelineRunContextType, runMetadata) if err != nil { return nil, err } - pipelineRunContext, err := getOrInsertContext(ctx, c.svc, pipelineRunID, pipelineRunContextType) + err = c.putParentContexts(ctx, &pb.PutParentContextsRequest{ + ParentContexts: []*pb.ParentContext{{ + ChildId: pipelineRunContext.Id, + ParentId: pipelineContext.Id, + }}, + }) if err != nil { return nil, err } @@ -124,7 +262,64 @@ func (c *Client) GetPipeline(ctx context.Context, pipelineName string, pipelineR pipelineCtx: pipelineContext, pipelineRunCtx: pipelineRunContext, }, nil +} + +// a Kubeflow Pipelines DAG +type DAG struct { + Execution *Execution + context *pb.Context +} + +// identifier info for error message purposes +func (d *DAG) Info() string { + return fmt.Sprintf("DAG(executionID=%v, contextID=%v)", d.Execution.GetID(), d.context.GetId()) +} + +func (d *DAG) GetPipelineRoot() string { + if d == nil { + return "" + } + props := d.context.GetCustomProperties() + root, ok := props[keyPipelineRoot] + if !ok { + return "" + } + return root.GetStringValue() +} + +func (c *Client) GetDAG(ctx context.Context, executionID int64, contextID int64) (*DAG, error) { + dagError := func(err error) error { + return fmt.Errorf("failed to get DAG executionID=%v contextID=%v: %w", executionID, contextID, err) + } + executions, err := c.GetExecutions(ctx, []int64{executionID}) + if err != nil { + return nil, dagError(err) + } + if len(executions) != 1 { + return nil, dagError(fmt.Errorf("got %v executions, expect 1", len(executions))) + } + execution := executions[0] + context, err := c.getContextByID(ctx, contextID) + if err != nil { + return nil, dagError(err) + } + if context == nil { + return nil, dagError(fmt.Errorf("context not found")) + } + // TODO(Bobgy): verify execution type is system.DAGExecution & context type is system.PipelineRun or system.DAGExecution + return &DAG{Execution: &Execution{execution: execution}, context: context}, nil +} +func (c *Client) putParentContexts(ctx context.Context, req *pb.PutParentContextsRequest) error { + _, err := c.svc.PutParentContexts(ctx, req) + if err != nil { + if status.Convert(err).Code() == codes.AlreadyExists { + // already exists code is expected when multiple requests are sent in parallel + } else { + return fmt.Errorf("Failed PutParentContexts(%v): %w", req.String(), err) + } + } + return nil } func (c *Client) getContainerExecutionTypeID(ctx context.Context) (int64, error) { @@ -151,26 +346,59 @@ func doubleValue(f float64) *pb.Value { return &pb.Value{Value: &pb.Value_DoubleValue{DoubleValue: f}} } +// Event path is conceptually artifact name for the execution. +// We cannot store the name as a property of artifact "a", because for example: +// 1. In first task "preprocess", there's an output artifact "processed_data". +// 2. In second task "train", there's an input artifact "dataset" passed from "preprocess" +// task's "processed_data" output. +// +// Now the same artifact is called "processed_data" in "preprocess" task, but "dataset" in +// "train" task, because artifact name is related to the context it's used. +// Therefore, we should store artifact name as a property of the artifact's events +// (connects artifact and execution) instead of the artifact's property. +func eventPath(artifactName string) *pb.Event_Path { + return &pb.Event_Path{ + Steps: []*pb.Event_Path_Step{{ + Value: &pb.Event_Path_Step_Key{ + Key: artifactName, + }, + }}, + } +} + +func getArtifactName(eventPath *pb.Event_Path) (string, error) { + if eventPath == nil || len(eventPath.Steps) == 0 { + return "", fmt.Errorf("failed to get artifact name from eventPath") + } + return eventPath.Steps[0].GetKey(), nil +} + // PublishExecution publishes the specified execution with the given output -// parameters and artifacts. -func (c *Client) PublishExecution(ctx context.Context, execution *Execution, outputParameters *Parameters, outputArtifacts []*OutputArtifact) error { +// parameters, artifacts and state. +func (c *Client) PublishExecution(ctx context.Context, execution *Execution, outputParameters *Parameters, outputArtifacts []*OutputArtifact, state pb.Execution_State) error { e := execution.execution - e.LastKnownState = pb.Execution_COMPLETE.Enum() + e.LastKnownState = state.Enum() - // Record output parameters. - for n, p := range outputParameters.IntParameters { - e.CustomProperties["output:"+n] = intValue(p) - } - for n, p := range outputParameters.DoubleParameters { - e.CustomProperties["output:"+n] = doubleValue(p) - } - for n, p := range outputParameters.StringParameters { - e.CustomProperties["output:"+n] = stringValue(p) + if outputParameters != nil { + // Record output parameters. + for n, p := range outputParameters.IntParameters { + e.CustomProperties["output:"+n] = intValue(p) + } + for n, p := range outputParameters.DoubleParameters { + e.CustomProperties["output:"+n] = doubleValue(p) + } + for n, p := range outputParameters.StringParameters { + e.CustomProperties["output:"+n] = stringValue(p) + } } + contexts := []*pb.Context{} + if execution.pipeline != nil { + contexts = append(contexts, execution.pipeline.pipelineCtx, execution.pipeline.pipelineRunCtx) + } req := &pb.PutExecutionRequest{ Execution: e, - Contexts: []*pb.Context{execution.pipeline.pipelineCtx, execution.pipeline.pipelineRunCtx}, + Contexts: contexts, } for _, oa := range outputArtifacts { @@ -178,6 +406,7 @@ func (c *Client) PublishExecution(ctx context.Context, execution *Execution, out Event: &pb.Event{ Type: pb.Event_OUTPUT.Enum(), ArtifactId: oa.Artifact.Id, + Path: eventPath(oa.Name), }, } req.ArtifactEventPairs = append(req.ArtifactEventPairs, aePair) @@ -187,8 +416,20 @@ func (c *Client) PublishExecution(ctx context.Context, execution *Execution, out return err } +// metadata keys +const ( + keyDisplayName = "display_name" + keyTaskName = "task_name" + keyImage = "image" + keyPodName = "pod_name" + keyPodUID = "pod_uid" + keyNamespace = "namespace" + keyResourceName = "resource_name" + keyPipelineRoot = "pipeline_root" +) + // CreateExecution creates a new MLMD execution under the specified Pipeline. -func (c *Client) CreateExecution(ctx context.Context, pipeline *Pipeline, taskName, taskID, containerImage string, config *ExecutionConfig) (*Execution, error) { +func (c *Client) CreateExecution(ctx context.Context, pipeline *Pipeline, config *ExecutionConfig) (*Execution, error) { typeID, err := c.getContainerExecutionTypeID(ctx) if err != nil { return nil, err @@ -197,38 +438,55 @@ func (c *Client) CreateExecution(ctx context.Context, pipeline *Pipeline, taskNa e := &pb.Execution{ TypeId: &typeID, CustomProperties: map[string]*pb.Value{ - "task_name": stringValue(taskName), - "pipeline_name": stringValue(*pipeline.pipelineCtx.Name), - "pipeline_run_id": stringValue(*pipeline.pipelineRunCtx.Name), - "kfp_pod_name": stringValue(taskID), - "container_image": stringValue(containerImage), + // We should support overriding display name in the future, for now it defaults to task name. + keyDisplayName: stringValue(config.TaskName), + keyTaskName: stringValue(config.TaskName), + keyPodName: stringValue(config.PodName), + keyPodUID: stringValue(config.PodUID), + keyNamespace: stringValue(config.Namespace), + keyImage: stringValue(config.Image), }, LastKnownState: pb.Execution_RUNNING.Enum(), } - - for k, v := range config.InputParameters.StringParameters { - e.CustomProperties["input:"+k] = stringValue(v) + if config.CachedMLMDExecutionID != "" { + e.CustomProperties["cached_execution_id"] = stringValue(config.CachedMLMDExecutionID) } - for k, v := range config.InputParameters.IntParameters { - e.CustomProperties["input:"+k] = intValue(v) - } - for k, v := range config.InputParameters.DoubleParameters { - e.CustomProperties["input:"+k] = doubleValue(v) + + if config.InputParameters != nil { + for k, v := range config.InputParameters.StringParameters { + e.CustomProperties["input:"+k] = stringValue(v) + } + for k, v := range config.InputParameters.IntParameters { + e.CustomProperties["input:"+k] = intValue(v) + } + for k, v := range config.InputParameters.DoubleParameters { + e.CustomProperties["input:"+k] = doubleValue(v) + } } req := &pb.PutExecutionRequest{ Execution: e, - Contexts: []*pb.Context{pipeline.pipelineCtx, pipeline.pipelineRunCtx}, - } - - for _, ia := range config.InputArtifacts { - aePair := &pb.PutExecutionRequest_ArtifactAndEvent{ - Event: &pb.Event{ - Type: pb.Event_INPUT.Enum(), - ArtifactId: ia.Artifact.Id, - }, + Contexts: []*pb.Context{pipeline.pipelineCtx}, + } + if !config.IsRootDAG { + // For root DAG execution, it should not be part of the pipeline run context, + // because corresponds to the pipeline run. + // TODO(Bobgy): how do we record relationship between pipeilne run context and pipeline run execution? + req.Contexts = append(req.Contexts, pipeline.pipelineRunCtx) + } + + for name, ids := range config.InputArtifactIDs { + for _, id := range ids { + thisId := id // thisId will be referenced below, so we need a local immutable var + aePair := &pb.PutExecutionRequest_ArtifactAndEvent{ + Event: &pb.Event{ + ArtifactId: &thisId, + Path: eventPath(name), + Type: pb.Event_INPUT.Enum(), + }, + } + req.ArtifactEventPairs = append(req.ArtifactEventPairs, aePair) } - req.ArtifactEventPairs = append(req.ArtifactEventPairs, aePair) } res, err := c.svc.PutExecution(ctx, req) @@ -255,6 +513,143 @@ func (c *Client) CreateExecution(ctx context.Context, pipeline *Pipeline, taskNa }, nil } +// PrePublishExecution updates an existing MLMD execution with Pod info. +func (c *Client) PrePublishExecution(ctx context.Context, execution *Execution, config *ExecutionConfig) (*Execution, error) { + e := execution.execution + if e.CustomProperties == nil { + e.CustomProperties = make(map[string]*pb.Value) + } + e.CustomProperties[keyPodName] = stringValue(config.PodName) + e.CustomProperties[keyPodUID] = stringValue(config.PodUID) + e.CustomProperties[keyNamespace] = stringValue(config.Namespace) + e.LastKnownState = pb.Execution_RUNNING.Enum() + + _, err := c.svc.PutExecution(ctx, &pb.PutExecutionRequest{ + Execution: e, + }) + if err != nil { + return nil, err + } + return execution, nil +} + +// GetExecutions ... +func (c *Client) GetExecutions(ctx context.Context, ids []int64) ([]*pb.Execution, error) { + req := &pb.GetExecutionsByIDRequest{ExecutionIds: ids} + res, err := c.svc.GetExecutionsByID(ctx, req) + if err != nil { + return nil, err + } + return res.Executions, nil +} + +func (c *Client) GetExecution(ctx context.Context, id int64) (*Execution, error) { + executions, err := c.GetExecutions(ctx, []int64{id}) + if err != nil { + return nil, fmt.Errorf("get execution ID=%v: %w", id, err) + } + if len(executions) == 0 { + return nil, fmt.Errorf("execution ID=%v not found", id) + } + if len(executions) > 1 { + return nil, fmt.Errorf("got %v executions with ID=%v", len(executions), id) + } + execution := executions[0] + pipeline, err := c.GetPipelineFromExecution(ctx, execution.GetId()) + if err != nil { + return nil, err + } + return &Execution{execution: execution, pipeline: pipeline}, nil +} + +func (c *Client) GetPipelineFromExecution(ctx context.Context, id int64) (*Pipeline, error) { + pipelineCtxTypeID, err := c.getContextTypeID(ctx, pipelineContextType) + if err != nil { + return nil, err + } + runCtxTypeID, err := c.getContextTypeID(ctx, pipelineRunContextType) + if err != nil { + return nil, err + } + res, err := c.svc.GetContextsByExecution(ctx, &pb.GetContextsByExecutionRequest{ + ExecutionId: &id, + }) + if err != nil { + return nil, fmt.Errorf("get contexts of execution ID=%v: %w", id, err) + } + pipeline := &Pipeline{} + for _, context := range res.GetContexts() { + if context.GetTypeId() == pipelineCtxTypeID { + if pipeline.pipelineCtx != nil { + return nil, fmt.Errorf("multiple pipeline contexts found") + } + pipeline.pipelineCtx = context + } + if context.GetTypeId() == runCtxTypeID { + if pipeline.pipelineRunCtx != nil { + return nil, fmt.Errorf("multiple run contexts found") + } + pipeline.pipelineRunCtx = context + } + } + return pipeline, nil +} + +// GetExecutionsInDAG gets all executions in the DAG context, and organize them +// into a map, keyed by task name. +func (c *Client) GetExecutionsInDAG(ctx context.Context, dag *DAG) (executionsMap map[string]*Execution, err error) { + defer func() { + if err != nil { + err = fmt.Errorf("failed to get executions in %s: %w", dag.Info(), err) + } + }() + executionsMap = make(map[string]*Execution) + res, err := c.svc.GetExecutionsByContext(ctx, &pb.GetExecutionsByContextRequest{ + ContextId: dag.context.Id, + }) + if err != nil { + return nil, err + } + execs := res.GetExecutions() + for _, e := range execs { + execution := &Execution{execution: e} + taskName := execution.TaskName() + if taskName == "" { + return nil, fmt.Errorf("empty task name for execution ID: %v", execution.GetID()) + } + existing, ok := executionsMap[taskName] + if ok { + // TODO(Bobgy): to support retry, we need to handle multiple tasks with the same task name. + return nil, fmt.Errorf("two tasks have the same task name %q, id1=%v id2=%v", taskName, existing.GetID(), execution.GetID()) + } + executionsMap[taskName] = execution + } + return executionsMap, nil +} + +// GetEventsByArtifactIDs ... +func (c *Client) GetEventsByArtifactIDs(ctx context.Context, artifactIds []int64) ([]*pb.Event, error) { + req := &pb.GetEventsByArtifactIDsRequest{ArtifactIds: artifactIds} + res, err := c.svc.GetEventsByArtifactIDs(ctx, req) + if err != nil { + return nil, err + } + return res.Events, nil +} + +func (c *Client) GetArtifactName(ctx context.Context, artifactId int64) (string, error) { + mlmdEvents, err := c.GetEventsByArtifactIDs(ctx, []int64{artifactId}) + if err != nil { + return "", fmt.Errorf("faild when getting events with artifact id %v: %w", artifactId, err) + } + if len(mlmdEvents) == 0 { + glog.Infof("can't find any events with artifact id %v", artifactId) + return "", nil + } + event := mlmdEvents[0] + return getArtifactName(event.Path) +} + // GetArtifacts ... func (c *Client) GetArtifacts(ctx context.Context, ids []int64) ([]*pb.Artifact, error) { req := &pb.GetArtifactsByIDRequest{ArtifactIds: ids} @@ -265,12 +660,51 @@ func (c *Client) GetArtifacts(ctx context.Context, ids []int64) ([]*pb.Artifact, return res.Artifacts, nil } +// GetOutputArtifactsByExecutionId ... +// TODO: Support multiple artifacts someday, probably through the v2 engine. +func (c *Client) GetOutputArtifactsByExecutionId(ctx context.Context, executionId int64) (map[string]*OutputArtifact, error) { + getEventsByExecutionIDsReq := &pb.GetEventsByExecutionIDsRequest{ExecutionIds: []int64{executionId}} + getEventsByExecutionIDsRes, err := c.svc.GetEventsByExecutionIDs(ctx, getEventsByExecutionIDsReq) + if err != nil { + return nil, fmt.Errorf("failed to get events with execution id %v: %w", executionId, err) + } + var outputArtifactsIDs []int64 + outputArtifactNamesById := make(map[int64]string) + for _, event := range getEventsByExecutionIDsRes.Events { + if *event.Type == pb.Event_OUTPUT { + outputArtifactsIDs = append(outputArtifactsIDs, event.GetArtifactId()) + artifactName, err := getArtifactName(event.Path) + if err != nil { + return nil, err + } + outputArtifactNamesById[event.GetArtifactId()] = artifactName + } + } + outputArtifacts, err := c.GetArtifacts(ctx, outputArtifactsIDs) + if err != nil { + return nil, fmt.Errorf("failed to get output artifacts: %w", err) + } + outputArtifactsByName := make(map[string]*OutputArtifact) + for _, outputArtifact := range outputArtifacts { + name, ok := outputArtifactNamesById[outputArtifact.GetId()] + if !ok { + return nil, fmt.Errorf("failed to get name of artifact with id %v", outputArtifact.GetId()) + } + outputArtifactsByName[name] = &OutputArtifact{ + Name: name, + Artifact: outputArtifact, + Schema: "", // TODO(Bobgy): figure out how to get schema + } + } + return outputArtifactsByName, nil +} + // Only supports schema titles for now. type schemaObject struct { Title string `yaml:"title"` } -func schemaToArtifactType(schema string) (*pb.ArtifactType, error) { +func SchemaToArtifactType(schema string) (*pb.ArtifactType, error) { so := &schemaObject{} if err := yaml.Unmarshal([]byte(schema), so); err != nil { return nil, err @@ -285,8 +719,12 @@ func schemaToArtifactType(schema string) (*pb.ArtifactType, error) { } // RecordArtifact ... -func (c *Client) RecordArtifact(ctx context.Context, schema string, artifact *pb.Artifact) (*pb.Artifact, error) { - at, err := schemaToArtifactType(schema) +func (c *Client) RecordArtifact(ctx context.Context, outputName, schema string, runtimeArtifact *pipelinespec.RuntimeArtifact, state pb.Artifact_State) (*OutputArtifact, error) { + artifact, err := toMLMDArtifact(runtimeArtifact) + if err != nil { + return nil, err + } + at, err := SchemaToArtifactType(schema) if err != nil { return nil, err } @@ -297,6 +735,14 @@ func (c *Client) RecordArtifact(ctx context.Context, schema string, artifact *pb at.Id = putTypeRes.TypeId artifact.TypeId = at.Id + artifact.State = &state + if artifact.CustomProperties == nil { + artifact.CustomProperties = make(map[string]*pb.Value) + } + if _, ok := artifact.CustomProperties["display_name"]; !ok { + // display name default value + artifact.CustomProperties["display_name"] = stringValue(outputName) + } res, err := c.svc.PutArtifacts(ctx, &pb.PutArtifactsRequest{ Artifacts: []*pb.Artifact{artifact}, @@ -315,52 +761,135 @@ func (c *Client) RecordArtifact(ctx context.Context, schema string, artifact *pb if len(getRes.Artifacts) != 1 { return nil, errors.New("Failed to retrieve exactly one artifact") } - return getRes.Artifacts[0], nil + return &OutputArtifact{ + Artifact: getRes.Artifacts[0], + Name: outputName, // runtimeArtifact.Name is in fact artifact ID, we need to pass name separately + Schema: runtimeArtifact.GetType().GetInstanceSchema(), + }, nil +} + +func (c *Client) getContextTypeID(ctx context.Context, contextType *pb.ContextType) (typeID int64, err error) { + defer func() { + if err != nil { + err = fmt.Errorf("getContextTypeID(name=%q) failed: %w", contextType.GetName(), err) + } + }() + cached, ok := c.ctxTypeCache.Load(contextType.GetName()) + if ok { + typeID, ok = cached.(int64) + if !ok { + return 0, fmt.Errorf("bug: incorrect value type cached") + } + return typeID, nil + } + res, err := c.svc.GetContextType(ctx, &pb.GetContextTypeRequest{TypeName: contextType.Name}) + if err == nil { // no error + c.ctxTypeCache.Store(contextType.GetName(), res.GetContextType().GetId()) + return res.GetContextType().GetId(), nil + } + if status.Convert(err).Code() != codes.NotFound { + return 0, err + } + // only not found error is expected + putRes, err := c.svc.PutContextType(ctx, &pb.PutContextTypeRequest{ContextType: contextType}) + if err == nil { // no error + c.ctxTypeCache.Store(contextType.GetName(), putRes.GetTypeId()) + return putRes.GetTypeId(), nil + } + if status.Convert(err).Code() != codes.AlreadyExists { + return 0, err + } + // It's expected other tasks may try to create the context type at the same time. + // Handle codes.AlreadyExists: + res, err = c.svc.GetContextType(ctx, &pb.GetContextTypeRequest{TypeName: contextType.Name}) + if err != nil { + return 0, err + } + c.ctxTypeCache.Store(contextType.GetName(), res.GetContextType().GetId()) + return res.GetContextType().GetId(), nil } -func getOrInsertContext(ctx context.Context, svc pb.MetadataStoreServiceClient, contextName string, contextType *pb.ContextType) (*pb.Context, error) { - // See if the context already exists. - getCtxRes, err := svc.GetContextByTypeAndName(ctx, &pb.GetContextByTypeAndNameRequest{TypeName: contextType.Name, ContextName: proto.String(contextName)}) +func (c *Client) getOrInsertContext(ctx context.Context, name string, contextType *pb.ContextType, customProps map[string]*pb.Value) (*pb.Context, error) { + // The most common case -- the context is already created by upstream tasks. + // So we try to get the context first. + getCtxRes, err := c.svc.GetContextByTypeAndName(ctx, &pb.GetContextByTypeAndNameRequest{TypeName: contextType.Name, ContextName: proto.String(name)}) - // Bug in MLMD GetContextsByTypeAndName, where we return status OK even when - // no context was found. - if err == nil && getCtxRes.Context != nil { + if err != nil { + return nil, fmt.Errorf("Failed GetContextByTypeAndName(type=%q, name=%q)", contextType.GetName(), name) + } + // Bug in MLMD GetContextsByTypeAndName? It doesn't return error even when no + // context was found. + if getCtxRes.Context != nil { return getCtxRes.Context, nil } - // Otherwise, create the Context. - // First, lookup or create the ContextType. - var typeID *int64 - getTypeRes, err := svc.GetContextType(ctx, &pb.GetContextTypeRequest{TypeName: contextType.Name}) - if err == nil { - typeID = getTypeRes.ContextType.Id - } else { - if status.Convert(err).Code() != codes.NotFound { // Something else went wrong. - return nil, err - } - // Create the ContextType. - res, err := svc.PutContextType(ctx, &pb.PutContextTypeRequest{ContextType: contextType}) - if err != nil { - return nil, err - } - typeID = res.TypeId + // Get the ContextType ID. + typeID, err := c.getContextTypeID(ctx, contextType) + if err != nil { + return nil, err } - // Next, create the Context. putReq := &pb.PutContextsRequest{ Contexts: []*pb.Context{ { - Name: proto.String(contextName), - TypeId: typeID, + Name: proto.String(name), + TypeId: proto.Int64(typeID), + CustomProperties: customProps, }, }, } - _, err = svc.PutContexts(ctx, putReq) + _, err = c.svc.PutContexts(ctx, putReq) + // It's expected other tasks may try to create the context at the same time, + // so ignore AlreadyExists error. + if err != nil && status.Convert(err).Code() != codes.AlreadyExists { + return nil, fmt.Errorf("Failed PutContext(name=%q, type=%q, typeid=%v): %w", name, contextType.GetName(), typeID, err) + } + + // Get the created context. + getCtxRes, err = c.svc.GetContextByTypeAndName(ctx, &pb.GetContextByTypeAndNameRequest{TypeName: contextType.Name, ContextName: proto.String(name)}) + if err != nil { + return nil, fmt.Errorf("Failed GetContext(name=%q, type=%q): %w", name, contextType.GetName(), err) + } + return getCtxRes.GetContext(), nil +} + +func GenerateExecutionConfig(executorInput *pipelinespec.ExecutorInput) (*ExecutionConfig, error) { + ecfg := &ExecutionConfig{ + InputArtifactIDs: make(map[string][]int64), + } + + for name, artifactList := range executorInput.Inputs.Artifacts { + for _, artifact := range artifactList.Artifacts { + id, err := strconv.ParseInt(artifact.Name, 10, 64) + if err != nil { + return nil, fmt.Errorf("unable to parse input artifact id from %q: %w", id, err) + } + ecfg.InputArtifactIDs[name] = append(ecfg.InputArtifactIDs[name], id) + } + } + + parameters, err := NewParameters(executorInput.Inputs.Parameters) if err != nil { return nil, err } + ecfg.InputParameters = parameters + return ecfg, nil +} - // Get the created context. - getCtxRes, err = svc.GetContextByTypeAndName(ctx, &pb.GetContextByTypeAndNameRequest{TypeName: contextType.Name, ContextName: proto.String(contextName)}) - return getCtxRes.GetContext(), err +func (c *Client) getContextByID(ctx context.Context, id int64) (*pb.Context, error) { + res, err := c.svc.GetContextsByID(ctx, &pb.GetContextsByIDRequest{ContextIds: []int64{id}}) + if err != nil { + return nil, fmt.Errorf("getContext(id=%v): %w", id, err) + } + contexts := res.GetContexts() + if len(contexts) > 1 { + return nil, fmt.Errorf("getContext(id=%v): got %v contexts, expect 1", id, len(contexts)) + } + if len(contexts) == 0 { + return nil, fmt.Errorf("getContext(id=%v): not found", id) + } + if contexts[0] == nil { + return nil, fmt.Errorf("getContext(id=%v): got nil context", id) + } + return contexts[0], nil } diff --git a/v2/metadata/client_test.go b/v2/metadata/client_test.go index c7f0f5d27a..d3d0642523 100644 --- a/v2/metadata/client_test.go +++ b/v2/metadata/client_test.go @@ -1,4 +1,4 @@ -// Copyright 2021 Google LLC +// Copyright 2021 The Kubeflow Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,18 +12,34 @@ // See the License for the specific language governing permissions and // limitations under the License. -package metadata +package metadata_test import ( + "context" + "fmt" + "runtime/debug" + "sync" "testing" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" + "github.com/google/uuid" + "github.com/kubeflow/pipelines/v2/metadata" pb "github.com/kubeflow/pipelines/v2/third_party/ml_metadata" + "google.golang.org/grpc" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/testing/protocmp" ) +// This test depends on a MLMD grpc server running at localhost:8080. +const ( + testMlmdServerAddress = "localhost" + testMlmdServerPort = "8080" + namespace = "kubeflow" + runResource = "workflows.argoproj.io/hello-world-abcd" + pipelineRoot = "gs://my-bucket/path/to/root" +) + func Test_schemaToArtifactType(t *testing.T) { tests := []struct { name string @@ -42,7 +58,7 @@ func Test_schemaToArtifactType(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got, err := schemaToArtifactType(tt.schema) + got, err := metadata.SchemaToArtifactType(tt.schema) if (err != nil) != tt.wantErr { t.Errorf("schemaToArtifactType() error = %v, wantErr %v", err, tt.wantErr) return @@ -53,3 +69,141 @@ func Test_schemaToArtifactType(t *testing.T) { }) } } + +func Test_GetPipeline(t *testing.T) { + fatalIf := func(err error) { + if err != nil { + debug.PrintStack() + t.Fatal(err) + } + } + + ctx := context.Background() + runUuid, err := uuid.NewRandom() + fatalIf(err) + runId := runUuid.String() + client, err := metadata.NewClient(testMlmdServerAddress, testMlmdServerPort) + fatalIf(err) + mlmdClient, err := NewTestMlmdClient() + fatalIf(err) + + pipeline, err := client.GetPipeline(ctx, "get-pipeline-test", runId, namespace, runResource, pipelineRoot) + fatalIf(err) + expectPipelineRoot := fmt.Sprintf("%s/get-pipeline-test/%s", pipelineRoot, runId) + if pipeline.GetPipelineRoot() != expectPipelineRoot { + t.Errorf("client.GetPipeline(pipelineRoot=%q)=%q, expect %q", pipelineRoot, pipeline.GetPipelineRoot(), expectPipelineRoot) + } + runCtxType := "system.PipelineRun" + pipelineName := "get-pipeline-test" + + res, err := mlmdClient.GetContextByTypeAndName(ctx, &pb.GetContextByTypeAndNameRequest{ + TypeName: &runCtxType, + ContextName: &runId, + }) + fatalIf(err) + if res.GetContext() == nil { + t.Fatalf("GetContextByTypeAndName(name=%q, type=%q)=nil", runId, runCtxType) + } + resParents, err := mlmdClient.GetParentContextsByContext(ctx, &pb.GetParentContextsByContextRequest{ + ContextId: res.GetContext().Id, + }) + fatalIf(err) + parents := resParents.GetContexts() + if len(parents) != 1 { + t.Errorf("Got %v parent contexts, want 1", len(parents)) + } + pipelineCtx := parents[0] + if pipelineCtx.GetName() != pipelineName { + t.Errorf("GetParentContextsByContext(name=%q, type=%q)=Context(name=%q), want Context(name=%q)", + runId, runCtxType, pipelineCtx.GetName(), pipelineName) + } +} + +func Test_GetPipelineFromExecution(t *testing.T) { + fatalIf := func(err error) { + if err != nil { + debug.PrintStack() + t.Fatal(err) + } + } + client := newLocalClientOrFatal(t) + ctx := context.Background() + pipeline, err := client.GetPipeline(ctx, "get-pipeline-from-execution", newUUIDOrFatal(t), "kubeflow", "workflow/abc", "gs://my-bucket/root") + fatalIf(err) + execution, err := client.CreateExecution(ctx, pipeline, &metadata.ExecutionConfig{ + TaskName: "task1", + }) + fatalIf(err) + gotPipeline, err := client.GetPipelineFromExecution(ctx, execution.GetID()) + fatalIf(err) + if gotPipeline.GetRunCtxID() != pipeline.GetRunCtxID() { + t.Errorf("client.GetPipelineFromExecution(id=%v)=Pipeline(runCtxID=%v), expect Pipeline(runCtxID=%v)", execution.GetID(), gotPipeline.GetRunCtxID(), pipeline.GetRunCtxID()) + } +} + +func Test_GetPipelineConcurrently(t *testing.T) { + // This test depends on a MLMD grpc server running at localhost:8080. + client, err := metadata.NewClient("localhost", "8080") + if err != nil { + t.Fatal(err) + } + runId, err := uuid.NewRandom() + if err != nil { + t.Fatal(err) + } + runIdText := runId.String() + var wg sync.WaitGroup + ctx := context.Background() + // Simulates 5 concurrent tasks trying to create the same pipeline contexts. + for i := 0; i < 5; i++ { + wg.Add(1) + go func() { + defer wg.Done() + _, err := client.GetPipeline(ctx, fmt.Sprintf("get-pipeline-concurrently-test-%s", runIdText), runIdText, namespace, "workflows.argoproj.io/hello-world-"+runIdText, pipelineRoot) + if err != nil { + t.Error(err) + } + }() + } + wg.Wait() + // Then another 5 concurrent tasks. + for i := 0; i < 5; i++ { + wg.Add(1) + go func() { + defer wg.Done() + _, err := client.GetPipeline(ctx, fmt.Sprintf("get-pipeline-concurrently-test-%s", runIdText), runIdText, namespace, "workflows.argoproj.io/hello-world-"+runIdText, pipelineRoot) + if err != nil { + t.Error(err) + } + }() + } + wg.Wait() +} + +func newLocalClientOrFatal(t *testing.T) *metadata.Client { + t.Helper() + client, err := metadata.NewClient("localhost", "8080") + if err != nil { + t.Fatalf("metadata.NewClient failed: %v", err) + } + return client +} + +func newUUIDOrFatal(t *testing.T) string { + t.Helper() + uuid, err := uuid.NewRandom() + if err != nil { + t.Fatalf("uuid.NewRandom failed: %v", err) + } + return uuid.String() +} + +func NewTestMlmdClient() (pb.MetadataStoreServiceClient, error) { + conn, err := grpc.Dial(fmt.Sprintf("%s:%s", testMlmdServerAddress, testMlmdServerPort), + grpc.WithInsecure(), + ) + if err != nil { + return nil, fmt.Errorf("NewMlmdClient() failed: %w", err) + } + return pb.NewMetadataStoreServiceClient(conn), nil +} diff --git a/v2/metadata/converter.go b/v2/metadata/converter.go new file mode 100644 index 0000000000..953e74fe04 --- /dev/null +++ b/v2/metadata/converter.go @@ -0,0 +1,175 @@ +package metadata + +import ( + "fmt" + "strconv" + + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" + pb "github.com/kubeflow/pipelines/v2/third_party/ml_metadata" + "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/types/known/structpb" +) + +func mlmdValueToPipelineSpecValue(v *pb.Value) (*pipelinespec.Value, error) { + switch t := v.Value.(type) { + case *pb.Value_StringValue: + return StringValue(t.StringValue), nil + case *pb.Value_DoubleValue: + return DoubleValue(t.DoubleValue), nil + case *pb.Value_IntValue: + return IntValue(t.IntValue), nil + default: + return nil, fmt.Errorf("unknown value type %T", t) + } +} + +func StringValue(v string) *pipelinespec.Value { + return &pipelinespec.Value{ + Value: &pipelinespec.Value_StringValue{StringValue: v}, + } +} + +func DoubleValue(v float64) *pipelinespec.Value { + return &pipelinespec.Value{ + Value: &pipelinespec.Value_DoubleValue{DoubleValue: v}, + } +} + +func IntValue(v int64) *pipelinespec.Value { + return &pipelinespec.Value{ + Value: &pipelinespec.Value_IntValue{IntValue: v}, + } +} + +func pipelineSpecValueToMLMDValue(v *pipelinespec.Value) (*pb.Value, error) { + switch t := v.Value.(type) { + case *pipelinespec.Value_StringValue: + return stringMLMDValue(v.GetStringValue()), nil + case *pipelinespec.Value_DoubleValue: + return doubleMLMDValue(v.GetDoubleValue()), nil + case *pipelinespec.Value_IntValue: + return intMLMDValue(v.GetIntValue()), nil + default: + return nil, fmt.Errorf("unknown value type %T", t) + } +} + +func stringMLMDValue(v string) *pb.Value { + return &pb.Value{Value: &pb.Value_StringValue{StringValue: v}} +} + +func doubleMLMDValue(v float64) *pb.Value { + return &pb.Value{Value: &pb.Value_DoubleValue{DoubleValue: v}} +} + +func intMLMDValue(v int64) *pb.Value { + return &pb.Value{Value: &pb.Value_IntValue{IntValue: v}} +} + +func toMLMDArtifact(runtimeArtifact *pipelinespec.RuntimeArtifact) (*pb.Artifact, error) { + errorF := func(err error) error { + return fmt.Errorf("failed to convert RuntimeArtifact to MLMD artifact: %w", err) + } + artifact := &pb.Artifact{ + Uri: &runtimeArtifact.Uri, + Properties: make(map[string]*pb.Value), + CustomProperties: make(map[string]*pb.Value), + } + + if runtimeArtifact.Metadata != nil { + for k, v := range runtimeArtifact.Metadata.Fields { + value, err := structValueToMLMDValue(v) + if err != nil { + return nil, errorF(err) + } + artifact.CustomProperties[k] = value + } + } + + return artifact, nil +} + +func structValueToMLMDValue(v *structpb.Value) (*pb.Value, error) { + boolToInt := func(b bool) int64 { + if b { + return 1 + } + return 0 + } + + switch t := v.Kind.(type) { + case *structpb.Value_StringValue: + return stringMLMDValue(v.GetStringValue()), nil + case *structpb.Value_NumberValue: + return doubleMLMDValue(v.GetNumberValue()), nil + case *structpb.Value_BoolValue: + return intMLMDValue(boolToInt(v.GetBoolValue())), nil + case *structpb.Value_ListValue: + return &pb.Value{ + Value: &pb.Value_StructValue{ + StructValue: &structpb.Struct{ + Fields: map[string]*structpb.Value{ + "list": {Kind: &structpb.Value_ListValue{ListValue: v.GetListValue()}}}}}, + }, nil + case *structpb.Value_StructValue: + return &pb.Value{ + Value: &pb.Value_StructValue{ + StructValue: &structpb.Struct{ + Fields: map[string]*structpb.Value{ + "struct": {Kind: &structpb.Value_StructValue{StructValue: v.GetStructValue()}}}}}, + }, nil + // TODO: support null + default: + return nil, fmt.Errorf("unknown/unsupported value type %T", t) + } +} + +func UnmarshalRuntimeArtifact(bytes []byte) (*pipelinespec.RuntimeArtifact, error) { + a := &pb.Artifact{} + if err := protojson.Unmarshal(bytes, a); err != nil { + return nil, fmt.Errorf("failed to unmarshall runtime artifact metadata: %w", err) + } + return toRuntimeArtifact(a) +} + +func toRuntimeArtifact(artifact *pb.Artifact) (*pipelinespec.RuntimeArtifact, error) { + errorF := func(err error) (*pipelinespec.RuntimeArtifact, error) { + return nil, fmt.Errorf("failed to convert MLMD artifact to RuntimeArtifact: %w", err) + } + + rta := &pipelinespec.RuntimeArtifact{ + Name: strconv.FormatInt(artifact.GetId(), 10), + Uri: artifact.GetUri(), + Metadata: &structpb.Struct{ + Fields: make(map[string]*structpb.Value), + }, + } + + propertiesToMetadata := func(properties map[string]*pb.Value) error { + for k, p := range properties { + value := &structpb.Value{} + switch t := p.Value.(type) { + case *pb.Value_StringValue: + value.Kind = &structpb.Value_StringValue{StringValue: p.GetStringValue()} + case *pb.Value_DoubleValue: + value.Kind = &structpb.Value_NumberValue{NumberValue: p.GetDoubleValue()} + case *pb.Value_IntValue: + value.Kind = &structpb.Value_NumberValue{NumberValue: float64(p.GetIntValue())} + case *pb.Value_StructValue: + value.Kind = &structpb.Value_StructValue{StructValue: p.GetStructValue()} + default: + return fmt.Errorf("unknown property type in MLMD artifact: %T", t) + } + rta.Metadata.Fields[k] = value + } + return nil + } + if err := propertiesToMetadata(artifact.Properties); err != nil { + return errorF(err) + } + if err := propertiesToMetadata(artifact.CustomProperties); err != nil { + return errorF(err) + } + + return rta, nil +} diff --git a/v2/metadata/env.go b/v2/metadata/env.go new file mode 100644 index 0000000000..9d5b2e8eb1 --- /dev/null +++ b/v2/metadata/env.go @@ -0,0 +1,26 @@ +package metadata + +import "os" + +type ServerConfig struct { + Address string + Port string +} + +func DefaultConfig() *ServerConfig { + // The env vars exist when metadata-grpc-service Kubernetes service is + // in the same namespace as the current Pod. + // https://kubernetes.io/docs/concepts/services-networking/service/#environment-variables + hostEnv := os.Getenv("METADATA_GRPC_SERVICE_SERVICE_HOST") + portEnv := os.Getenv("METADATA_GRPC_SERVICE_SERVICE_PORT") + if hostEnv != "" && portEnv != "" { + return &ServerConfig{ + Address: hostEnv, + Port: portEnv, + } + } + return &ServerConfig{ + Address: "metadata-grpc-service.kubeflow", + Port: "8080", + } +} diff --git a/v2/metadata/model.go b/v2/metadata/model.go new file mode 100644 index 0000000000..62fdd2ab85 --- /dev/null +++ b/v2/metadata/model.go @@ -0,0 +1,60 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package metadata contains types to record/retrieve metadata stored in MLMD +// for individual pipeline steps. +package metadata + +import ( + "fmt" + "strings" + + "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec" +) + +const ( + prefixInput = "input:" + prefixOutput = "output:" +) + +func (e *Execution) GetParameters() (inputs, outputs map[string]*pipelinespec.Value, err error) { + inputs = make(map[string]*pipelinespec.Value) + outputs = make(map[string]*pipelinespec.Value) + defer func() { + if err != nil { + err = fmt.Errorf("execution(ID=%v).GetParameters failed: %w", e.GetID(), err) + } + }() + if e == nil || e.execution == nil { + return nil, nil, nil + } + for key, value := range e.execution.CustomProperties { + if strings.HasPrefix(key, prefixInput) { + name := strings.TrimPrefix(key, prefixInput) + kfpValue, err := mlmdValueToPipelineSpecValue(value) + if err != nil { + return nil, nil, err + } + inputs[name] = kfpValue + } else if strings.HasPrefix(key, prefixOutput) { + name := strings.TrimPrefix(key, prefixOutput) + kfpValue, err := mlmdValueToPipelineSpecValue(value) + if err != nil { + return nil, nil, err + } + outputs[name] = kfpValue + } + } + return inputs, outputs, nil +} diff --git a/v2/objectstore/object_store.go b/v2/objectstore/object_store.go new file mode 100644 index 0000000000..b815d59c87 --- /dev/null +++ b/v2/objectstore/object_store.go @@ -0,0 +1,317 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This package contains helper methods for using object stores. +package objectstore + +import ( + "context" + "fmt" + "io" + "io/ioutil" + "os" + "path" + "path/filepath" + "regexp" + "strings" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/golang/glog" + "gocloud.dev/blob" + "gocloud.dev/blob/s3blob" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" +) + +type Config struct { + Scheme string + BucketName string + Prefix string + QueryString string +} + +func OpenBucket(ctx context.Context, k8sClient kubernetes.Interface, namespace string, config *Config) (bucket *blob.Bucket, err error) { + defer func() { + if err != nil { + err = fmt.Errorf("Failed to open bucket %q: %w", config.BucketName, err) + } + }() + if config.Scheme == "minio://" { + cred, err := getMinioCredential(ctx, k8sClient, namespace) + if err != nil { + return nil, fmt.Errorf("Failed to get minio credential: %w", err) + } + sess, err := session.NewSession(&aws.Config{ + Credentials: credentials.NewStaticCredentials(cred.AccessKey, cred.SecretKey, ""), + Region: aws.String("minio"), + Endpoint: aws.String(MinioDefaultEndpoint()), + DisableSSL: aws.Bool(true), + S3ForcePathStyle: aws.Bool(true), + }) + + if err != nil { + return nil, fmt.Errorf("Failed to create session to access minio: %v", err) + } + minioBucket, err := s3blob.OpenBucket(ctx, sess, config.BucketName, nil) + if err != nil { + return nil, err + } + // Directly calling s3blob.OpenBucket does not allow overriding prefix via bucketConfig.BucketURL(). + // Therefore, we need to explicitly configure the prefixed bucket. + return blob.PrefixedBucket(minioBucket, config.Prefix), nil + + } + return blob.OpenBucket(ctx, config.bucketURL()) +} + +func (b *Config) bucketURL() string { + u := b.Scheme + b.BucketName + + // append prefix=b.prefix to existing queryString + q := b.QueryString + if len(b.Prefix) > 0 { + if len(q) > 0 { + q = q + "&prefix=" + b.Prefix + } else { + q = "?prefix=" + b.Prefix + } + } + + u = u + q + return u +} + +func (b *Config) KeyFromURI(uri string) (string, error) { + prefixedBucket := b.Scheme + path.Join(b.BucketName, b.Prefix) + if !strings.HasPrefix(uri, prefixedBucket) { + return "", fmt.Errorf("URI %q does not have expected bucket prefix %q", uri, prefixedBucket) + } + + key := strings.TrimLeft(strings.TrimPrefix(uri, prefixedBucket), "/") + if len(key) == 0 { + return "", fmt.Errorf("URI %q has empty key given prefixed bucket %q", uri, prefixedBucket) + } + return key, nil +} + +func (b *Config) UriFromKey(blobKey string) string { + return b.Scheme + path.Join(b.BucketName, b.Prefix, blobKey) +} + +func UploadBlob(ctx context.Context, bucket *blob.Bucket, localPath, blobPath string) error { + fileInfo, err := os.Stat(localPath) + if err != nil { + return fmt.Errorf("unable to stat local filepath %q: %w", localPath, err) + } + + if !fileInfo.IsDir() { + return uploadFile(ctx, bucket, localPath, blobPath) + } + + // localPath is a directory. + files, err := ioutil.ReadDir(localPath) + if err != nil { + return fmt.Errorf("unable to list local directory %q: %w", localPath, err) + } + + for _, f := range files { + if f.IsDir() { + err = UploadBlob(ctx, bucket, filepath.Join(localPath, f.Name()), blobPath+"/"+f.Name()) + if err != nil { + return err + } + } else { + blobFilePath := filepath.Join(blobPath, filepath.Base(f.Name())) + localFilePath := filepath.Join(localPath, f.Name()) + if err := uploadFile(ctx, bucket, localFilePath, blobFilePath); err != nil { + return err + } + } + + } + + return nil +} + +func DownloadBlob(ctx context.Context, bucket *blob.Bucket, localDir, blobDir string) error { + iter := bucket.List(&blob.ListOptions{Prefix: blobDir}) + for { + obj, err := iter.Next(ctx) + if err != nil { + if err == io.EOF { + break + } + return fmt.Errorf("failed to list objects in remote storage %q: %w", blobDir, err) + } + if obj.IsDir { + // TODO: is this branch possible? + + // Object stores list all files with the same prefix, + // there is no need to recursively list each folder. + continue + } else { + relativePath, err := filepath.Rel(blobDir, obj.Key) + if err != nil { + return fmt.Errorf("unexpected object key %q when listing %q: %w", obj.Key, blobDir, err) + } + if err := downloadFile(ctx, bucket, obj.Key, filepath.Join(localDir, relativePath)); err != nil { + return err + } + } + } + return nil +} + +var bucketPattern = regexp.MustCompile(`(^[a-z][a-z0-9]+:///?)([^/?]+)(/[^?]*)?(\?.+)?$`) + +func ParseBucketConfig(path string) (*Config, error) { + ms := bucketPattern.FindStringSubmatch(path) + if ms == nil || len(ms) != 5 { + return nil, fmt.Errorf("parse bucket config failed: unrecognized pipeline root format: %q", path) + } + + // TODO: Verify/add support for file:///. + if ms[1] != "gs://" && ms[1] != "s3://" && ms[1] != "minio://" { + return nil, fmt.Errorf("parse bucket config failed: unsupported Cloud bucket: %q", path) + } + + prefix := strings.TrimPrefix(ms[3], "/") + if len(prefix) > 0 && !strings.HasSuffix(prefix, "/") { + prefix = prefix + "/" + } + + return &Config{ + Scheme: ms[1], + BucketName: ms[2], + Prefix: prefix, + QueryString: ms[4], + }, nil +} + +// TODO(neuromage): Move these helper functions to a storage package and add tests. +func uploadFile(ctx context.Context, bucket *blob.Bucket, localFilePath, blobFilePath string) error { + errorF := func(err error) error { + return fmt.Errorf("uploadFile(): unable to complete copying %q to remote storage %q: %w", localFilePath, blobFilePath, err) + } + + w, err := bucket.NewWriter(ctx, blobFilePath, nil) + if err != nil { + return errorF(fmt.Errorf("unable to open writer for bucket: %w", err)) + } + + r, err := os.Open(localFilePath) + if err != nil { + return errorF(fmt.Errorf("unable to open local file %q for reading: %w", localFilePath, err)) + } + defer r.Close() + + if _, err = io.Copy(w, r); err != nil { + return errorF(fmt.Errorf("unable to complete copying: %w", err)) + } + + if err = w.Close(); err != nil { + return errorF(fmt.Errorf("failed to close Writer for bucket: %w", err)) + } + + glog.Infof("uploadFile(localFilePath=%q, blobFilePath=%q)", localFilePath, blobFilePath) + return nil +} + +func downloadFile(ctx context.Context, bucket *blob.Bucket, blobFilePath, localFilePath string) (err error) { + errorF := func(err error) error { + return fmt.Errorf("downloadFile(): unable to complete copying %q to local storage %q: %w", blobFilePath, localFilePath, err) + } + + r, err := bucket.NewReader(ctx, blobFilePath, nil) + if err != nil { + return errorF(fmt.Errorf("unable to open reader for bucket: %w", err)) + } + defer r.Close() + + localDir := filepath.Dir(localFilePath) + if err := os.MkdirAll(localDir, 0644); err != nil { + return errorF(fmt.Errorf("failed to create local directory %q: %w", localDir, err)) + } + + w, err := os.Create(localFilePath) + if err != nil { + return errorF(fmt.Errorf("unable to open local file %q for writing: %w", localFilePath, err)) + } + defer func() { + errClose := w.Close() + if err == nil && errClose != nil { + // override named return value "err" when there's a close error + err = errorF(errClose) + } + }() + + if _, err = io.Copy(w, r); err != nil { + return errorF(fmt.Errorf("unable to complete copying: %w", err)) + } + + return nil +} + +// The endpoint uses Kubernetes service DNS name with namespace: +// https://kubernetes.io/docs/concepts/services-networking/service/#dns +const defaultMinioEndpointInMultiUserMode = "minio-service.kubeflow:9000" +const minioArtifactSecretName = "mlpipeline-minio-artifact" + +func MinioDefaultEndpoint() string { + // Discover minio-service in the same namespace by env var. + // https://kubernetes.io/docs/concepts/services-networking/service/#environment-variables + minioHost := os.Getenv("MINIO_SERVICE_SERVICE_HOST") + minioPort := os.Getenv("MINIO_SERVICE_SERVICE_PORT") + if minioHost != "" && minioPort != "" { + // If there is a minio-service Kubernetes service in the same namespace, + // MINIO_SERVICE_SERVICE_HOST and MINIO_SERVICE_SERVICE_PORT env vars should + // exist by default, so we use it as default. + return minioHost + ":" + minioPort + } + // If the env vars do not exist, we guess that we are running in KFP multi user mode, so default minio service should be `minio-service.kubeflow:9000`. + glog.Infof("Cannot detect minio-service in the same namespace, default to %s as MinIO endpoint.", defaultMinioEndpointInMultiUserMode) + return defaultMinioEndpointInMultiUserMode +} + +type minioCredential struct { + AccessKey string + SecretKey string +} + +func getMinioCredential(ctx context.Context, clientSet kubernetes.Interface, namespace string) (cred minioCredential, err error) { + defer func() { + if err != nil { + // wrap error before returning + err = fmt.Errorf("Failed to get MinIO credential from secret name=%q namespace=%q: %w", minioArtifactSecretName, namespace, err) + } + }() + secret, err := clientSet.CoreV1().Secrets(namespace).Get( + ctx, + minioArtifactSecretName, + metav1.GetOptions{}) + if err != nil { + return cred, err + } + cred.AccessKey = string(secret.Data["accesskey"]) + cred.SecretKey = string(secret.Data["secretkey"]) + if cred.AccessKey == "" { + return cred, fmt.Errorf("does not have 'accesskey' key") + } + if cred.SecretKey == "" { + return cred, fmt.Errorf("does not have 'secretkey' key") + } + return cred, nil +} diff --git a/v2/objectstore/object_store_test.go b/v2/objectstore/object_store_test.go new file mode 100644 index 0000000000..820688c8a5 --- /dev/null +++ b/v2/objectstore/object_store_test.go @@ -0,0 +1,227 @@ +// Copyright 2021 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package objectstore_test + +import ( + "os" + "reflect" + "testing" + + "github.com/kubeflow/pipelines/v2/objectstore" + _ "gocloud.dev/blob/gcsblob" +) + +func Test_parseCloudBucket(t *testing.T) { + tests := []struct { + name string + path string + want *objectstore.Config + wantErr bool + }{ + { + name: "Parses GCS - Just the bucket", + path: "gs://my-bucket", + want: &objectstore.Config{ + Scheme: "gs://", + BucketName: "my-bucket", + Prefix: "", + }, + wantErr: false, + }, + { + name: "Parses GCS - Just the bucket with trailing slash", + path: "gs://my-bucket/", + want: &objectstore.Config{ + Scheme: "gs://", + BucketName: "my-bucket", + Prefix: "", + }, + wantErr: false, + }, + { + name: "Parses GCS - Bucket with prefix", + path: "gs://my-bucket/my-path", + want: &objectstore.Config{ + Scheme: "gs://", + BucketName: "my-bucket", + Prefix: "my-path/", + }, + wantErr: false, + }, + { + name: "Parses GCS - Bucket with prefix and trailing slash", + path: "gs://my-bucket/my-path/", + want: &objectstore.Config{ + Scheme: "gs://", + BucketName: "my-bucket", + Prefix: "my-path/", + }, + wantErr: false, + }, + { + name: "Parses GCS - Bucket with multiple path components in prefix", + path: "gs://my-bucket/my-path/123", + want: &objectstore.Config{ + Scheme: "gs://", + BucketName: "my-bucket", + Prefix: "my-path/123/", + }, + wantErr: false, + }, + { + name: "Parses GCS - Bucket with multiple path components in prefix and trailing slash", + path: "gs://my-bucket/my-path/123/", + want: &objectstore.Config{ + Scheme: "gs://", + BucketName: "my-bucket", + Prefix: "my-path/123/", + }, + wantErr: false, + }, + { + name: "Parses Minio - Bucket with query string", + path: "minio://my-bucket", + want: &objectstore.Config{ + Scheme: "minio://", + BucketName: "my-bucket", + Prefix: "", + QueryString: "", + }, + wantErr: false, + }, { + name: "Parses Minio - Bucket with prefix", + path: "minio://my-bucket/my-path", + want: &objectstore.Config{ + Scheme: "minio://", + BucketName: "my-bucket", + Prefix: "my-path/", + QueryString: "", + }, + wantErr: false, + }, { + name: "Parses Minio - Bucket with multiple path components in prefix", + path: "minio://my-bucket/my-path/123", + want: &objectstore.Config{ + Scheme: "minio://", + BucketName: "my-bucket", + Prefix: "my-path/123/", + QueryString: "", + }, + wantErr: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := objectstore.ParseBucketConfig(tt.path) + if (err != nil) != tt.wantErr { + t.Errorf("%q: parseCloudBucket() error = %v, wantErr %v", tt.name, err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("%q: parseCloudBucket() = %v, want %v", tt.name, got, tt.want) + } + }) + } +} + +func Test_bucketConfig_KeyFromURI(t *testing.T) { + type fields struct { + scheme string + bucketName string + prefix string + } + + tests := []struct { + name string + bucketConfig *objectstore.Config + uri string + want string + wantErr bool + }{ + { + name: "Bucket with empty prefix", + bucketConfig: &objectstore.Config{Scheme: "gs://", BucketName: "my-bucket", Prefix: ""}, + uri: "gs://my-bucket/path1/path2", + want: "path1/path2", + wantErr: false, + }, + { + name: "Bucket with non-empty Prefix ", + bucketConfig: &objectstore.Config{Scheme: "gs://", BucketName: "my-bucket", Prefix: "path0/"}, + uri: "gs://my-bucket/path0/path1/path2", + want: "path1/path2", + wantErr: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := tt.bucketConfig.KeyFromURI(tt.uri) + if (err != nil) != tt.wantErr { + t.Errorf("%q: buckerConfig.keyFromURI() error = %v, wantErr %v", tt.name, err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("bucketConfig.keyFromURI() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_GetMinioDefaultEndpoint(t *testing.T) { + defer func() { + os.Unsetenv("MINIO_SERVICE_SERVICE_HOST") + os.Unsetenv("MINIO_SERVICE_SERVICE_PORT") + }() + tests := []struct { + name string + minioServiceHostEnv string + minioServicePortEnv string + want string + }{ + { + name: "In full Kubeflow, KFP multi-user mode on", + minioServiceHostEnv: "", + minioServicePortEnv: "", + want: "minio-service.kubeflow:9000", + }, + { + name: "In KFP standalone without multi-user mode", + minioServiceHostEnv: "1.2.3.4", + minioServicePortEnv: "4321", + want: "1.2.3.4:4321", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.minioServiceHostEnv != "" { + os.Setenv("MINIO_SERVICE_SERVICE_HOST", tt.minioServiceHostEnv) + } else { + os.Unsetenv("MINIO_SERVICE_SERVICE_HOST") + } + if tt.minioServicePortEnv != "" { + os.Setenv("MINIO_SERVICE_SERVICE_PORT", tt.minioServicePortEnv) + } else { + os.Unsetenv("MINIO_SERVICE_SERVICE_PORT") + } + got := objectstore.MinioDefaultEndpoint() + if got != tt.want { + t.Errorf( + "MinioDefaultEndpoint() = %q, want %q\nwhen MINIO_SERVICE_SERVICE_HOST=%q MINIO_SERVICE_SERVICE_PORT=%q", + got, tt.want, tt.minioServiceHostEnv, tt.minioServicePortEnv, + ) + } + }) + } +} diff --git a/v2/test/Dockerfile b/v2/test/Dockerfile index 395b5f28f0..a8db6b2478 100644 --- a/v2/test/Dockerfile +++ b/v2/test/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2021 Google LLC +# Copyright 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,5 +15,10 @@ FROM python:3.7-slim WORKDIR /workdir -COPY . /workdir -RUN pip3 install --no-cache-dir -e sdk/python +COPY v2/test/requirements.txt v2/test/ +COPY sdk/python sdk/python +# relative path in requirements.txt are relative to workdir, so we need to +# cd to that folder first +RUN cd v2/test && pip3 install --no-cache-dir -r requirements.txt +# copy all other code +COPY . . diff --git a/v2/test/Makefile b/v2/test/Makefile index 5a4130a378..fb739dc6cc 100644 --- a/v2/test/Makefile +++ b/v2/test/Makefile @@ -1,12 +1,12 @@ REPO_ROOT=../.. # These vars are expected in .env: -# PROJECT=gongyuan-pipeline-test # GCS_ROOT=gs://$(PROJECT)/v2-sample-test # GCR_ROOT=gcr.io/$(PROJECT)/v2-sample-test # HOST=https://71a74112589c16e8-dot-asia-east1.pipelines.googleusercontent.com ENV_PATH?=.env include $(ENV_PATH) +SHELL = /bin/bash .PHONY: all all: sample-test @@ -20,7 +20,8 @@ sample-test: context --context $(GCS_ROOT)/src/context.tar.gz \ --host $(HOST) \ --gcs_root $(GCS_ROOT)/data \ - --gcr_root $(GCR_ROOT) + --gcr_root $(GCR_ROOT) \ + --kfp_package_path $(KFP_PACKAGE_PATH) .PHONY: context context: @@ -43,3 +44,7 @@ context: cd $(REPO_ROOT); \ stash=$$(git stash create); \ git archive --format=tar "$${stash:-HEAD}" | gzip >v2/test/tmp/context.tar.gz + +.PHONY: mlmd-port-forward +mlmd-port-forward: + kubectl port-forward svc/metadata-grpc-service 8080:8080 diff --git a/v2/test/README.md b/v2/test/README.md index 5f776aa799..7eb4560bc3 100644 --- a/v2/test/README.md +++ b/v2/test/README.md @@ -64,11 +64,22 @@ For why the caveat exists, refer to context rule in [Makefile](./Makefile). ## How to develop one single sample? ```bash +# These env vars are loaded by default, recommend configuring them in your +# .bashrc or .zshrc +export KFP_HOST=https://your.KFP.host +export KFP_OUTPUT_DIRECTORY=gs://your-bucket/path/to/output/dir +export METADATA_GRPC_SERVICE_HOST=localhost +# optional, when you want to override launcher image to your dev project +# export KFP_LAUNCHER_IMAGE=gcr.io/your-project/dev/kfp-launcher + cd ${REPO_ROOT} # if you have a sample test at samples/path/to/your/sample_test.py -python -m samples.path.to.your.sample_test --host https://your.KFP.host --output_directory gs://your-bucket/path/to/output/dir +python -m samples.path.to.your.sample_test # or to look at command help python -m samples.path.to.your.sample_test --help + +# Note, for tests that use metadata grpc api, you should port-forward it locally in a separate terminal by: +make mlmd-port-forward ``` ## How to add a sample to this sample test? @@ -80,6 +91,16 @@ Your sample test needs to conform to the standard interface in [components/run_sample.yaml](components/run_sample.yaml). You can refer to existing [sample tests](../../samples/test) for how to implement the interface. +## How can a sample verify MLMD status of a run? + +Refer to [an existing test](../../samples/test/two_step_test.py). + +## FAQs + +1. Q: I'm getting error `main.go:56] Failed to execute component: unable to get pipeline with PipelineName "pipeline-with-lightweight-io" PipelineRunID "pipeline-with-lightweight-io-pmxzr": Failed PutParentContexts(parent_contexts:{child_id:174 parent_id:173}): rpc error: code = Unimplemented desc =`. + + A: You need to upgrade metadata-grpc-service deployment to 1.0.0+. KFP manifest master branch includes the upgrade, but it hasn't been released yet. Therefore, you need to install KFP standalone from master: `kubectl apply -k manifests/kustomize/env/dev`. + ## Implementation Details When kubeflow-pipelines-samples-v2 test is called from presubmit, it goes through diff --git a/v2/test/components/build_go.yaml b/v2/test/components/build_go.yaml new file mode 100644 index 0000000000..f935defe5f --- /dev/null +++ b/v2/test/components/build_go.yaml @@ -0,0 +1,75 @@ +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Build KFP v2 go images & binaries +inputs: +- name: context + type: Folder + description: | + Input context, it should be a folder. +- {name: destination, type: URI, description: destination should not contain tag} +outputs: +- {name: digest_launcher, type: URI, description: KFP launcher image digest} +- {name: digest_launcher_v2, type: URI, description: KFP launcher v2 image digest} +- {name: digest_driver, type: URI, description: KFP driver image digest} +- {name: backend_compiler, type: Binary, description: KFP v2 backend compiler} +metadata: + annotations: + author: Yuan Gong +implementation: + container: + image: golang:1.16-alpine + command: + - sh + - -exc + - | + context_path="$0" + destination="$1" + digest_launcher_output_path="$2" + digest_launcher_v2_output_path="$3" + digest_driver_output_path="$4" + backend_compiler_output_path="$5" + + cd "${context_path}/v2" + + # install dependencies + apk update + apk add make bash curl + ./test/scripts/install-docker-cred-gcr.sh + + # prepare parent folders + mkdir -p "$(dirname $digest_launcher_output_path)" + mkdir -p "$(dirname $digest_launcher_v2_output_path)" + mkdir -p "$(dirname $digest_driver_output_path)" + mkdir -p "$(dirname $backend_compiler_output_path)" + + # authenticate to gcr + docker-credential-gcr configure-docker + + # build images + go mod download || (sleep 10 && go mod download) # try download twice to avoid temporary network failure + make install-ko + export DEV_IMAGE_PREFIX="${destination}" + make image-launcher-dev > "${digest_launcher_output_path}" + make image-launcher-v2-dev > "${digest_launcher_v2_output_path}" + make image-driver-dev > "${digest_driver_output_path}" + # build backend compiler as a binary + make build/compiler + cp build/compiler "${backend_compiler_output_path}" + - inputPath: context + - inputValue: destination + - outputPath: digest_launcher + - outputPath: digest_launcher_v2 + - outputPath: digest_driver + - outputPath: backend_compiler diff --git a/v2/test/components/download_gcs_tgz.yaml b/v2/test/components/download_gcs_tgz.yaml index d7031c6acc..cdae99f101 100644 --- a/v2/test/components/download_gcs_tgz.yaml +++ b/v2/test/components/download_gcs_tgz.yaml @@ -1,4 +1,4 @@ -# Copyright 2021 Google LLC +# Copyright 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/v2/test/components/kaniko.yaml b/v2/test/components/kaniko.yaml index 0c86eac685..fa9cd5e779 100644 --- a/v2/test/components/kaniko.yaml +++ b/v2/test/components/kaniko.yaml @@ -1,4 +1,4 @@ -# Copyright 2021 Google LLC +# Copyright 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -28,7 +28,9 @@ inputs: Input context artifact, it should be a folder. At least one of context_uri and context_artifact should be specified. - {name: context_sub_path, type: Path, default: ""} -- {name: destination, type: URI, description: destination should not contain tag} +- {name: destination, type: String, description: destination should not contain tag} +- {name: cache, type: String, description: enable caching one of true/false, default: "true"} +- {name: cache_ttl, type: String, description: 'cache TTL, format like XXh', default: 24h} outputs: - {name: digest, type: URI, description: Image URI with full digest} metadata: @@ -37,7 +39,11 @@ metadata: implementation: container: # The debug image contains busybox, while the normal images do not. - image: gcr.io/kaniko-project/executor:debug + # Pinned to 1.3.0, because unusually high memory usage is observed in later + # versions, causing OOM. 1.6.0 is known to break, we may try later releases + # when they are released. + # https://github.com/GoogleContainerTools/kaniko/issues/1680 + image: gcr.io/kaniko-project/executor:v1.3.0-debug command: - sh - -exc @@ -48,24 +54,33 @@ implementation: context_sub_path="$3" destination="$4" digest_output_path="$5" + cache="$6" + cache_ttl="$7" context="" if [[ "${context_uri}" != "" ]]; then context="${context_uri}" else context="dir://${context_artifact_path}" fi + digest_file="$(mktemp)" # Reference: https://github.com/GoogleContainerTools/kaniko + # snapshotMode and use-new-run added because: https://github.com/GoogleContainerTools/kaniko/issues/1333 /kaniko/executor \ --dockerfile "${dockerfile}" \ --context "${context}" \ ${context_sub_path:+ --context-sub-path "${context_sub_path}"} \ --destination "${destination}" \ - --digest-file "digest" - mkdir -p "$(dirname "${digest_output_path}")"; - echo -n "${destination}@$(cat digest)" > "${digest_output_path}" + --digest-file "${digest_file}" \ + --cache="${cache}" \ + --cache-ttl="${cache_ttl}" + mkdir -p "$(dirname "${digest_output_path}")" + digest="$(cat $digest_file)" + echo "${destination}@${digest}" > "${digest_output_path}" - inputValue: dockerfile - inputValue: context_uri - inputPath: context_artifact - inputValue: context_sub_path - inputValue: destination - outputPath: digest + - inputValue: cache + - inputValue: cache_ttl diff --git a/v2/test/components/run_sample.yaml b/v2/test/components/run_sample.yaml index 492d0df558..b3abcd6038 100644 --- a/v2/test/components/run_sample.yaml +++ b/v2/test/components/run_sample.yaml @@ -1,4 +1,4 @@ -# Copyright 2021 Google LLC +# Copyright 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -20,18 +20,44 @@ inputs: - {name: Host, type: URI, default: "http://ml-pipeline:8888"} - {name: External Host, type: URI} - {name: Launcher Image, type: URI, default: "gcr.io/ml-pipeline/kfp-launcher:latest"} +- {name: Launcher v2 Image, type: URI, default: "gcr.io/ml-pipeline/kfp-launcher-v2:latest"} +- {name: Driver Image, type: URI, default: "gcr.io/ml-pipeline/kfp-driver:latest"} +- {name: backend_compiler, type: Binary} implementation: container: image: python:3.7-alpine command: - - python3 - - -m + - sh + - -exc + - | + backend_compiler_path="$0" + sample_path="$1" + output_dir="$2" + host="$3" + external_host="$4" + launcher_image="$5" + launcher_v2_image="$6" + driver_image="$7" + + # install kfp v2 backend compiler + chmod +x "$backend_compiler_path" + cp "$backend_compiler_path" /usr/local/bin/kfp-v2-compiler + # run test sample + python3 \ + -u \ + -m "$sample_path" \ + --output_directory "$output_dir" \ + --host "$host" \ + --external_host "$external_host" \ + --launcher_image "$launcher_image" \ + --launcher_v2_image "$launcher_v2_image" \ + --driver_image "$driver_image" + + - inputPath: backend_compiler - inputValue: Sample Path - - --output_directory - concat: [{inputValue: GCS Root}, '/', {inputValue: Name}] - - --host - inputValue: Host - - --external_host - inputValue: External Host - - --launcher_image - inputValue: Launcher Image + - inputValue: Launcher v2 Image + - inputValue: Driver Image diff --git a/v2/test/presubmit-v2-go-test.sh b/v2/test/presubmit-v2-go-test.sh new file mode 100755 index 0000000000..76f6b97b7e --- /dev/null +++ b/v2/test/presubmit-v2-go-test.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Fail the entire script when any command fails. +set -ex +NAMESPACE="${NAMESPACE:-kubeflow}" +TEST_CLUSTER="${TEST_CLUSTER:-kfp-standalone-1}" +REGION="${REGION:-us-central1}" +PROJECT="${PROJECT:-kfp-ci}" +# The current directory is /home/prow/go/src/github.com/kubeflow/pipelines +# 1. install go in /home/prow/go1.15.10 +cd /home/prow +mkdir go1.15.10 +cd go1.15.10 +curl -LO https://dl.google.com/go/go1.15.10.linux-amd64.tar.gz +tar -xf go1.15.10.linux-amd64.tar.gz +export PATH="/home/prow/go1.15.10/go/bin:${PATH}" +cd /home/prow/go/src/github.com/kubeflow/pipelines/v2 +# 2. Check go modules are tidy +# Reference: https://github.com/golang/go/issues/27005#issuecomment-564892876 +go mod download +go mod tidy +git diff --exit-code -- go.mod go.sum || (echo "go modules are not tidy, run 'go mod tidy'." && exit 1) + +# Note, for tests that use metadata grpc api, port-forward it locally in a separate terminal by: +if [[ ! -z "${GOOGLE_APPLICATION_CREDENTIALS}" ]]; then + gcloud auth activate-service-account --key-file="${GOOGLE_APPLICATION_CREDENTIALS}" +fi +gcloud container clusters get-credentials "$TEST_CLUSTER" --region "$REGION" --project "$PROJECT" + +function cleanup() { + echo "killing kubectl port forward before exit" + kill "$PORT_FORWARD_PID" +} +trap cleanup EXIT +kubectl port-forward svc/metadata-grpc-service 8080:8080 -n "$NAMESPACE" & PORT_FORWARD_PID=$! +# wait for kubectl port forward +sleep 10 +go test -v -cover ./... + +# verify licenses are up-to-date, because all license updates must be reviewed by a human. +../hack/install-go-licenses.sh +make license-launcher +git diff --exit-code -- third_party/licenses/launcher.csv || (echo "v2/third_party/licenses/launcher.csv is outdated, refer to https://github.com/kubeflow/pipelines/tree/master/v2#update-licenses for update instructions.") diff --git a/v2/test/presubmit.sh b/v2/test/presubmit.sh index 3d46e99c51..2a9db473a1 100755 --- a/v2/test/presubmit.sh +++ b/v2/test/presubmit.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2021 Google LLC +# Copyright 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -26,12 +26,19 @@ GCR_ROOT="gcr.io/${PROJECT}/${COMMIT_SHA}/v2-sample-test" # This is kfp-ci endpoint. HOST=${HOST:-"https://$(curl https://raw.githubusercontent.com/kubeflow/testing/master/test-infra/kfp/endpoint)"} +if [[ -z "${PULL_NUMBER}" ]]; then + KFP_PACKAGE_PATH='git+https://github.com/kubeflow/pipelines\#egg=kfp&subdirectory=sdk/python' +else + KFP_PACKAGE_PATH='git+https://github.com/kubeflow/pipelines@refs/pull/${PULL_NUMBER}/merge\#egg=kfp&subdirectory=sdk/python' +fi + pip3 install -r requirements.txt cat <kfp-ci.env PROJECT=${PROJECT} GCS_ROOT=${GCS_ROOT} GCR_ROOT=${GCR_ROOT} HOST=${HOST} +KFP_PACKAGE_PATH='${KFP_PACKAGE_PATH}' EOF # Run sample test diff --git a/v2/test/requirements.txt b/v2/test/requirements.txt index ee47120158..e627fd48e8 100644 --- a/v2/test/requirements.txt +++ b/v2/test/requirements.txt @@ -1,2 +1,5 @@ # install kfp sdk from local path -e ../../sdk/python +ml_metadata==1.0.0 +minio==7.0.4 +google-cloud-storage diff --git a/v2/test/sample_test.py b/v2/test/sample_test.py index e71187b949..78a28e39dc 100644 --- a/v2/test/sample_test.py +++ b/v2/test/sample_test.py @@ -1,4 +1,4 @@ -# Copyright 2021 Google LLC +# Copyright 2021 The Kubeflow Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,8 +13,13 @@ # limitations under the License. # %% -import yaml import os +from typing import Dict, List, Optional + +from kubernetes import client as k8s_client +import yaml + +import kfp REPO_ROOT = os.path.join('..', '..') SAMPLES_CONFIG_PATH = os.path.join(REPO_ROOT, 'samples', 'test', 'config.yaml') @@ -22,58 +27,88 @@ with open(SAMPLES_CONFIG_PATH, 'r') as stream: SAMPLES_CONFIG = yaml.safe_load(stream) -import kfp -import kfp.components as comp -import json -from typing import Optional - -MINUTE = 60 # seconds - download_gcs_tgz = kfp.components.load_component_from_file( - 'components/download_gcs_tgz.yaml' -) + 'components/download_gcs_tgz.yaml') run_sample = kfp.components.load_component_from_file( - 'components/run_sample.yaml' -) + 'components/run_sample.yaml') kaniko = kfp.components.load_component_from_file('components/kaniko.yaml') +build_go = kfp.components.load_component_from_file('components/build_go.yaml') + +PIPELINE_TIME_OUT = 40 * 60 # 40 minutes @kfp.dsl.pipeline(name='v2 sample test') def v2_sample_test( context: 'URI' = 'gs://your-bucket/path/to/context.tar.gz', - launcher_destination: 'URI' = 'gcr.io/gongyuan-pipeline-test/kfp-launcher', - gcs_root: 'URI' = 'gs://gongyuan-test/v2', - samples_destination: 'URI' = 'gcr.io/gongyuan-pipeline-test/v2-sample-test', + gcs_root: 'URI' = 'gs://ml-pipeline-test/v2', + image_registry: 'URI' = 'gcr.io/ml-pipeline-test', kfp_host: 'URI' = 'http://ml-pipeline:8888', - samples_config: list = SAMPLES_CONFIG, + samples_config: List[Dict] = SAMPLES_CONFIG, + kfp_package_path: + 'URI' = 'git+https://github.com/kubeflow/pipelines#egg=kfp&subdirectory=sdk/python' ): - download_src_op = download_gcs_tgz(gcs_path=context) - download_src_op.set_display_name('download_src') + # pipeline configs + conf = kfp.dsl.get_pipeline_conf() + conf.set_timeout( + PIPELINE_TIME_OUT + ) # add timeout to avoid pipelines stuck in running leak indefinetely + + download_src_op = download_gcs_tgz(gcs_path=context).set_cpu_limit( + '0.5').set_memory_limit('500Mi').set_display_name('download_src') download_src_op.execution_options.caching_strategy.max_cache_staleness = "P0D" - build_kfp_launcher_op = kaniko( - context_artifact=download_src_op.outputs['folder'], - context_sub_path='v2', - destination=launcher_destination, - dockerfile='launcher_container/Dockerfile', + + def build_image(name: str, dockerfile: str) -> kfp.dsl.ContainerOp: + task: kfp.dsl.ContainerOp = kaniko( + context_artifact=download_src_op.outputs['folder'], + destination=f'{image_registry}/{name}', + dockerfile=dockerfile, + ) + # CPU request/limit can be more flexible (request < limit), because being assigned to a node + # with insufficient CPU resource will only slow the task down, but not fail. + task.container.set_cpu_request('1').set_cpu_limit('2') + # Memory request/limit needs to be more rigid (request == limit), because in a node without + # enough memory, the task can hang indefinetely or OOM. + task.container.set_memory_request('4Gi').set_memory_limit('4Gi') + task.set_display_name(f'build-image-{name}') + task.set_retry( + 1, policy='Always' + ) # Always -> retry on both system error and user code failure. + return task + + # build v2 go images + build_go_op = build_go( + destination=f'{image_registry}/kfp-', + context=download_src_op.outputs['folder'], ) - build_kfp_launcher_op.set_display_name('build_kfp_launcher') - build_samples_image_op = kaniko( - context_artifact=download_src_op.outputs['folder'], - destination=samples_destination, + build_go_op.set_retry(1, policy='Always') + build_go_op.container.set_cpu_request('1').set_cpu_limit('2') + build_go_op.container.set_memory_request('4Gi').set_memory_limit('4Gi') + + # build sample test image + build_samples_image_op = build_image( + name='v2-sample-test', dockerfile='v2/test/Dockerfile', ) - build_samples_image_op.execution_options.caching_strategy.max_cache_staleness = "P0D" - build_samples_image_op.set_display_name('build_samples_image') + + # run test samples in parallel with kfp.dsl.ParallelFor(samples_config) as sample: - run_sample_op = run_sample( + run_sample_op: kfp.dsl.ContainerOp = run_sample( name=sample.name, sample_path=sample.path, gcs_root=gcs_root, external_host=kfp_host, - launcher_image=build_kfp_launcher_op.outputs['digest'] + launcher_image=build_go_op.outputs['digest_launcher'], + launcher_v2_image=build_go_op.outputs['digest_launcher_v2'], + driver_image=build_go_op.outputs['digest_driver'], + backend_compiler=build_go_op.outputs['backend_compiler'], ) run_sample_op.container.image = build_samples_image_op.outputs['digest'] run_sample_op.set_display_name(f'sample_{sample.name}') + run_sample_op.set_retry(1, policy='Always') + + run_sample_op.container.add_env_variable( + k8s_client.V1EnvVar(name='KFP_PACKAGE_PATH', + value=kfp_package_path)) def main( @@ -81,26 +116,31 @@ def main( host: str, gcr_root: str, gcs_root: str, - experiment: str = 'v2_sample_test' + experiment: str = 'v2_sample_test', + kfp_package_path: + str = 'git+https://github.com/kubeflow/pipelines#egg=kfp&subdirectory=sdk/python' ): client = kfp.Client(host=host) client.create_experiment( name=experiment, description='An experiment with Kubeflow Pipelines v2 sample test runs.' ) + + print('Using KFP package path: {}'.format(kfp_package_path)) run_result = client.create_run_from_pipeline_func( - v2_sample_test, { + v2_sample_test, + { 'context': context, - 'launcher_destination': f'{gcr_root}/kfp-launcher', + 'image_registry': f'{gcr_root}/test', 'gcs_root': gcs_root, - 'samples_destination': f'{gcr_root}/v2-sample-test', 'kfp_host': host, + 'kfp_package_path': kfp_package_path, }, - experiment_name=experiment + experiment_name=experiment, ) print("Run details page URL:") print(f"{host}/#/runs/details/{run_result.run_id}") - run_response = run_result.wait_for_run_completion(10 * MINUTE) + run_response = run_result.wait_for_run_completion(PIPELINE_TIME_OUT) run = run_response.run from pprint import pprint # Hide verbose content diff --git a/v2/test/scripts/install-docker-cred-gcr.sh b/v2/test/scripts/install-docker-cred-gcr.sh new file mode 100755 index 0000000000..3fa8150476 --- /dev/null +++ b/v2/test/scripts/install-docker-cred-gcr.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# +# Copyright 2021 The Kubeflow Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# doc: https://cloud.google.com/container-registry/docs/advanced-authentication#standalone-helper + +VERSION=2.0.0 +OS=linux # or "darwin" for OSX, "windows" for Windows. +ARCH=amd64 # or "386" for 32-bit OSs, "arm64" for ARM 64. + +curl -fsSL "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v${VERSION}/docker-credential-gcr_${OS}_${ARCH}-${VERSION}.tar.gz" \ + | tar xz --to-stdout ./docker-credential-gcr \ + > /usr/local/bin/docker-credential-gcr && chmod +x /usr/local/bin/docker-credential-gcr diff --git a/v2/test/scripts/upload_gcs_blob.py b/v2/test/scripts/upload_gcs_blob.py index f8f0209344..402168ea28 100644 --- a/v2/test/scripts/upload_gcs_blob.py +++ b/v2/test/scripts/upload_gcs_blob.py @@ -14,7 +14,7 @@ def upload_blob(source: str, destination: str): blob.upload_from_filename(source) - print(f"File {source} uploaded to destination.") + print(f"File {source} uploaded to destination {destination}") if __name__ == '__main__': diff --git a/v2/third_party/licenses/launcher.csv b/v2/third_party/licenses/launcher.csv new file mode 100644 index 0000000000..dc61884537 --- /dev/null +++ b/v2/third_party/licenses/launcher.csv @@ -0,0 +1,50 @@ +# Generated by https://github.com/google/go-licenses/v2. DO NOT EDIT. +cloud.google.com/go, https://github.com/googleapis/google-cloud-go/blob/v0.72.0/LICENSE, Apache-2.0 +cloud.google.com/go/cmd/go-cloud-debug-agent/internal/debug/elf, https://github.com/googleapis/google-cloud-go/blob/v0.72.0/cmd/go-cloud-debug-agent/internal/debug/elf/elf.go#L1-L43, BSD-2-Clause +cloud.google.com/go/third_party/pkgsite, https://github.com/googleapis/google-cloud-go/blob/v0.72.0/third_party/pkgsite/LICENSE, BSD-3-Clause +cloud.google.com/go/storage, https://github.com/googleapis/google-cloud-go/blob/storage/v1.12.0/LICENSE, Apache-2.0 +github.com/aws/aws-sdk-go, https://github.com/aws/aws-sdk-go/blob/v1.36.1/LICENSE.txt, Apache-2.0 +github.com/aws/aws-sdk-go/internal/sync/singleflight, https://github.com/aws/aws-sdk-go/blob/v1.36.1/internal/sync/singleflight/LICENSE, BSD-3-Clause +github.com/davecgh/go-spew, https://github.com/davecgh/go-spew/blob/v1.1.1/LICENSE, ISC +github.com/go-logr/logr, https://github.com/go-logr/logr/blob/v0.4.0/LICENSE, Apache-2.0 +github.com/gogo/protobuf, https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE, BSD-3-Clause / BSD-2-Clause +github.com/golang/glog, https://github.com/golang/glog/blob/23def4e6c14b/LICENSE, Apache-2.0 +github.com/golang/groupcache, https://github.com/golang/groupcache/blob/8c9f03a8e57e/LICENSE, Apache-2.0 +github.com/golang/protobuf, https://github.com/golang/protobuf/blob/v1.5.0/LICENSE, BSD-3-Clause +github.com/google/go-cmp, https://github.com/google/go-cmp/blob/v0.5.5/LICENSE, BSD-3-Clause +github.com/google/gofuzz, https://github.com/google/gofuzz/blob/v1.1.0/LICENSE, Apache-2.0 +github.com/google/wire, https://github.com/google/wire/blob/v0.4.0/LICENSE, Apache-2.0 +github.com/googleapis/gax-go/v2, https://github.com/googleapis/gax-go/blob/v2.0.5/LICENSE, BSD-3-Clause +github.com/googleapis/gnostic, https://github.com/googleapis/gnostic/blob/v0.5.1/LICENSE, Apache-2.0 +github.com/grpc-ecosystem/go-grpc-middleware, https://github.com/grpc-ecosystem/go-grpc-middleware/blob/v1.3.0/LICENSE, Apache-2.0 +github.com/jmespath/go-jmespath, https://github.com/jmespath/go-jmespath/blob/v0.4.0/LICENSE, Apache-2.0 +github.com/json-iterator/go, https://github.com/json-iterator/go/blob/v1.1.10/LICENSE, MIT +github.com/modern-go/concurrent, https://github.com/modern-go/concurrent/blob/bacd9c7ef1dd/LICENSE, Apache-2.0 +github.com/modern-go/reflect2, https://github.com/modern-go/reflect2/blob/v1.0.1/LICENSE, Apache-2.0 +go.opencensus.io, https://github.com/census-instrumentation/opencensus-go/blob/v0.22.5/LICENSE, Apache-2.0 +gocloud.dev, https://github.com/google/go-cloud/blob/v0.22.0/LICENSE, Apache-2.0 +golang.org/x/crypto, https://github.com/golang/crypto/blob/5ea612d1eb83/LICENSE, BSD-3-Clause +golang.org/x/net, https://github.com/golang/net/blob/e18ecbb05110/LICENSE, BSD-3-Clause +golang.org/x/oauth2, https://github.com/golang/oauth2/blob/0b49973bad19/LICENSE, BSD-3-Clause +golang.org/x/sys, https://github.com/golang/sys/blob/d19ff857e887/LICENSE, BSD-3-Clause +golang.org/x/term, https://github.com/golang/term/blob/7de9c90e9dd1/LICENSE, BSD-3-Clause +golang.org/x/text, https://github.com/golang/text/blob/v0.3.5/LICENSE, BSD-3-Clause +golang.org/x/time, https://github.com/golang/time/blob/3af7569d3a1e/LICENSE, BSD-3-Clause +golang.org/x/xerrors, https://github.com/golang/xerrors/blob/5ec99f83aff1/LICENSE, BSD-3-Clause +google.golang.org/api, https://github.com/googleapis/google-api-go-client/blob/v0.36.0/LICENSE, BSD-3-Clause +google.golang.org/api, https://github.com/googleapis/google-api-go-client/blob/v0.36.0/internal/third_party/uritemplates/LICENSE, BSD-3-Clause +google.golang.org/genproto, https://github.com/googleapis/go-genproto/blob/6486ece9c497/LICENSE, Apache-2.0 +google.golang.org/grpc, https://github.com/grpc/grpc-go/blob/v1.36.0/LICENSE, Apache-2.0 +google.golang.org/protobuf, https://github.com/protocolbuffers/protobuf-go/blob/v1.27.1/LICENSE, BSD-3-Clause +gopkg.in/inf.v0, https://github.com/go-inf/inf/blob/v0.9.1/LICENSE, BSD-3-Clause +gopkg.in/yaml.v2, https://github.com/go-yaml/yaml/blob/v2.4.0/LICENSE, Apache-2.0 / MIT +gopkg.in/yaml.v3, https://github.com/go-yaml/yaml/blob/496545a6307b/LICENSE, Apache-2.0 / MIT +k8s.io/api, https://github.com/kubernetes/api/blob/v0.20.4/LICENSE, Apache-2.0 +k8s.io/apimachinery, https://github.com/kubernetes/apimachinery/blob/v0.21.2/LICENSE, Apache-2.0 +k8s.io/client-go, https://github.com/kubernetes/client-go/blob/v0.20.4/LICENSE, Apache-2.0 +k8s.io/klog/v2, https://github.com/kubernetes/klog/blob/v2.8.0/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/67b214c5f920/LICENSE, Apache-2.0 +k8s.io/utils, https://github.com/kubernetes/utils/blob/67b214c5f920/inotify/LICENSE, BSD-3-Clause +k8s.io/utils, https://github.com/kubernetes/utils/blob/67b214c5f920/third_party/forked/golang/LICENSE, BSD-3-Clause +sigs.k8s.io/structured-merge-diff/v4, https://github.com/kubernetes-sigs/structured-merge-diff/blob/v4.1.0/LICENSE, Apache-2.0 +sigs.k8s.io/yaml, https://github.com/kubernetes-sigs/yaml/blob/v1.2.0/LICENSE, MIT / BSD-3-Clause